From 0e1603c07d33de6d09f4028c202d14ba24b8ea42 Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Mon, 20 Oct 2025 15:22:46 +0000 Subject: [PATCH 01/27] first change to libsql --- package-lock.json | 523 ++++++++---------- package.json | 3 +- server/db/sqlite/driver.ts | 6 +- server/db/sqlite/migrate.ts | 2 +- server/private/routers/auth/quickStart.ts | 4 +- .../remoteExitNode/createRemoteExitNode.ts | 4 +- .../quickStartRemoteExitNode.ts | 4 +- server/routers/auth/signup.ts | 4 +- server/routers/newt/createNewt.ts | 4 +- server/routers/olm/createOlm.ts | 4 +- server/setup/migrationsSqlite.ts | 6 +- 11 files changed, 255 insertions(+), 309 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8e829c956..44aa51046 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@asteasolutions/zod-to-openapi": "^7.3.4", "@aws-sdk/client-s3": "3.908.0", "@hookform/resolvers": "5.2.2", + "@libsql/client": "^0.15.15", "@node-rs/argon2": "^2.0.2", "@oslojs/crypto": "1.0.1", "@oslojs/encoding": "1.1.0", @@ -42,7 +43,6 @@ "@tanstack/react-table": "8.21.3", "arctic": "^3.7.0", "axios": "^1.12.2", - "better-sqlite3": "11.7.0", "canvas-confetti": "1.9.3", "class-variance-authority": "^0.7.1", "clsx": "2.1.1", @@ -107,7 +107,6 @@ "@esbuild-plugins/tsconfig-paths": "0.1.2", "@react-email/preview-server": "4.3.0", "@tailwindcss/postcss": "^4.1.14", - "@types/better-sqlite3": "7.6.12", "@types/cookie-parser": "1.4.9", "@types/cors": "2.8.19", "@types/crypto-js": "^4.2.2", @@ -3834,6 +3833,176 @@ "integrity": "sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==", "license": "MIT" }, + "node_modules/@libsql/client": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/@libsql/client/-/client-0.15.15.tgz", + "integrity": "sha512-twC0hQxPNHPKfeOv3sNT6u2pturQjLcI+CnpTM0SjRpocEGgfiZ7DWKXLNnsothjyJmDqEsBQJ5ztq9Wlu470w==", + "license": "MIT", + "dependencies": { + "@libsql/core": "^0.15.14", + "@libsql/hrana-client": "^0.7.0", + "js-base64": "^3.7.5", + "libsql": "^0.5.22", + "promise-limit": "^2.7.0" + } + }, + "node_modules/@libsql/core": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/@libsql/core/-/core-0.15.15.tgz", + "integrity": "sha512-C88Z6UKl+OyuKKPwz224riz02ih/zHYI3Ho/LAcVOgjsunIRZoBw7fjRfaH9oPMmSNeQfhGklSG2il1URoOIsA==", + "license": "MIT", + "dependencies": { + "js-base64": "^3.7.5" + } + }, + "node_modules/@libsql/darwin-arm64": { + "version": "0.5.22", + "resolved": "https://registry.npmjs.org/@libsql/darwin-arm64/-/darwin-arm64-0.5.22.tgz", + "integrity": "sha512-4B8ZlX3nIDPndfct7GNe0nI3Yw6ibocEicWdC4fvQbSs/jdq/RC2oCsoJxJ4NzXkvktX70C1J4FcmmoBy069UA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@libsql/darwin-x64": { + "version": "0.5.22", + "resolved": "https://registry.npmjs.org/@libsql/darwin-x64/-/darwin-x64-0.5.22.tgz", + "integrity": "sha512-ny2HYWt6lFSIdNFzUFIJ04uiW6finXfMNJ7wypkAD8Pqdm6nAByO+Fdqu8t7sD0sqJGeUCiOg480icjyQ2/8VA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@libsql/hrana-client": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@libsql/hrana-client/-/hrana-client-0.7.0.tgz", + "integrity": "sha512-OF8fFQSkbL7vJY9rfuegK1R7sPgQ6kFMkDamiEccNUvieQ+3urzfDFI616oPl8V7T9zRmnTkSjMOImYCAVRVuw==", + "license": "MIT", + "dependencies": { + "@libsql/isomorphic-fetch": "^0.3.1", + "@libsql/isomorphic-ws": "^0.1.5", + "js-base64": "^3.7.5", + "node-fetch": "^3.3.2" + } + }, + "node_modules/@libsql/isomorphic-fetch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@libsql/isomorphic-fetch/-/isomorphic-fetch-0.3.1.tgz", + "integrity": "sha512-6kK3SUK5Uu56zPq/Las620n5aS9xJq+jMBcNSOmjhNf/MUvdyji4vrMTqD7ptY7/4/CAVEAYDeotUz60LNQHtw==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@libsql/isomorphic-ws": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@libsql/isomorphic-ws/-/isomorphic-ws-0.1.5.tgz", + "integrity": "sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==", + "license": "MIT", + "dependencies": { + "@types/ws": "^8.5.4", + "ws": "^8.13.0" + } + }, + "node_modules/@libsql/linux-arm-gnueabihf": { + "version": "0.5.22", + "resolved": "https://registry.npmjs.org/@libsql/linux-arm-gnueabihf/-/linux-arm-gnueabihf-0.5.22.tgz", + "integrity": "sha512-3Uo3SoDPJe/zBnyZKosziRGtszXaEtv57raWrZIahtQDsjxBVjuzYQinCm9LRCJCUT5t2r5Z5nLDPJi2CwZVoA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-arm-musleabihf": { + "version": "0.5.22", + "resolved": "https://registry.npmjs.org/@libsql/linux-arm-musleabihf/-/linux-arm-musleabihf-0.5.22.tgz", + "integrity": "sha512-LCsXh07jvSojTNJptT9CowOzwITznD+YFGGW+1XxUr7fS+7/ydUrpDfsMX7UqTqjm7xG17eq86VkWJgHJfvpNg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-arm64-gnu": { + "version": "0.5.22", + "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-gnu/-/linux-arm64-gnu-0.5.22.tgz", + "integrity": "sha512-KSdnOMy88c9mpOFKUEzPskSaF3VLflfSUCBwas/pn1/sV3pEhtMF6H8VUCd2rsedwoukeeCSEONqX7LLnQwRMA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-arm64-musl": { + "version": "0.5.22", + "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-musl/-/linux-arm64-musl-0.5.22.tgz", + "integrity": "sha512-mCHSMAsDTLK5YH//lcV3eFEgiR23Ym0U9oEvgZA0667gqRZg/2px+7LshDvErEKv2XZ8ixzw3p1IrBzLQHGSsw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-x64-gnu": { + "version": "0.5.22", + "resolved": "https://registry.npmjs.org/@libsql/linux-x64-gnu/-/linux-x64-gnu-0.5.22.tgz", + "integrity": "sha512-kNBHaIkSg78Y4BqAdgjcR2mBilZXs4HYkAmi58J+4GRwDQZh5fIUWbnQvB9f95DkWUIGVeenqLRFY2pcTmlsew==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/linux-x64-musl": { + "version": "0.5.22", + "resolved": "https://registry.npmjs.org/@libsql/linux-x64-musl/-/linux-x64-musl-0.5.22.tgz", + "integrity": "sha512-UZ4Xdxm4pu3pQXjvfJiyCzZop/9j/eA2JjmhMaAhe3EVLH2g11Fy4fwyUp9sT1QJYR1kpc2JLuybPM0kuXv/Tg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@libsql/win32-x64-msvc": { + "version": "0.5.22", + "resolved": "https://registry.npmjs.org/@libsql/win32-x64-msvc/-/win32-x64-msvc-0.5.22.tgz", + "integrity": "sha512-Fj0j8RnBpo43tVZUVoNK6BV/9AtDUM5S7DF3LB4qTYg1LMSZqi3yeCneUTLJD6XomQJlZzbI4mst89yspVSAnA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@lottiefiles/dotlottie-react": { "version": "0.13.3", "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-react/-/dotlottie-react-0.13.3.tgz", @@ -3866,6 +4035,12 @@ "@tybys/wasm-util": "^0.10.0" } }, + "node_modules/@neon-rs/load": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@neon-rs/load/-/load-0.0.4.tgz", + "integrity": "sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==", + "license": "MIT" + }, "node_modules/@next/env": { "version": "15.5.6", "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.6.tgz", @@ -8484,16 +8659,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@types/better-sqlite3": { - "version": "7.6.12", - "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.12.tgz", - "integrity": "sha512-fnQmj8lELIj7BSrZQAdBMHEHX8OZLYIHXqAKT1O7tDfLxaINzf00PMjw22r3N/xXh0w/sGHlO6SVaCQ2mj78lg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/body-parser": { "version": "1.19.6", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", @@ -8667,7 +8832,6 @@ "version": "24.7.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.2.tgz", "integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==", - "devOptional": true, "license": "MIT", "dependencies": { "undici-types": "~7.14.0" @@ -8817,7 +8981,6 @@ "version": "8.18.1", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -10044,6 +10207,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "devOptional": true, "funding": [ { "type": "github", @@ -10080,17 +10244,6 @@ "baseline-browser-mapping": "dist/cli.js" } }, - "node_modules/better-sqlite3": { - "version": "11.7.0", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.7.0.tgz", - "integrity": "sha512-mXpa5jnIKKHeoGzBrUJrc65cXFKcILGZpU3FXR0pradUEm9MA7UZz02qfEejaMcm9iXrSOCenwwYMJ/tZ1y5Ig==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "bindings": "^1.5.0", - "prebuild-install": "^7.1.1" - } - }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -10104,19 +10257,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "license": "MIT", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "devOptional": true, "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -10217,6 +10362,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "devOptional": true, "funding": [ { "type": "github", @@ -10972,30 +11118,6 @@ "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "license": "MIT" }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -11099,6 +11221,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=8" @@ -11439,15 +11562,6 @@ "node": ">= 0.8" } }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/engine.io": { "version": "6.6.4", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", @@ -12377,15 +12491,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "license": "(MIT OR WTFPL)", - "engines": { - "node": ">=6" - } - }, "node_modules/express": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", @@ -12628,12 +12733,6 @@ "moment": "^2.29.1" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "license": "MIT" - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -12876,12 +12975,6 @@ "node": ">= 0.8" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "license": "MIT" - }, "node_modules/fs-monkey": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", @@ -13070,12 +13163,6 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "license": "MIT" - }, "node_modules/glob": { "version": "11.0.3", "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", @@ -13405,6 +13492,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "devOptional": true, "funding": [ { "type": "github", @@ -13461,12 +13549,6 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, "node_modules/input-otp": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.2.tgz", @@ -14082,6 +14164,12 @@ "node": ">= 0.6.0" } }, + "node_modules/js-base64": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", + "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", + "license": "BSD-3-Clause" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -14286,6 +14374,47 @@ "node": ">= 0.8.0" } }, + "node_modules/libsql": { + "version": "0.5.22", + "resolved": "https://registry.npmjs.org/libsql/-/libsql-0.5.22.tgz", + "integrity": "sha512-NscWthMQt7fpU8lqd7LXMvT9pi+KhhmTHAJWUB/Lj6MWa0MKFv0F2V4C6WKKpjCVZl0VwcDz4nOI3CyaT1DDiA==", + "cpu": [ + "x64", + "arm64", + "wasm32", + "arm" + ], + "license": "MIT", + "os": [ + "darwin", + "linux", + "win32" + ], + "dependencies": { + "@neon-rs/load": "^0.0.4", + "detect-libc": "2.0.2" + }, + "optionalDependencies": { + "@libsql/darwin-arm64": "0.5.22", + "@libsql/darwin-x64": "0.5.22", + "@libsql/linux-arm-gnueabihf": "0.5.22", + "@libsql/linux-arm-musleabihf": "0.5.22", + "@libsql/linux-arm64-gnu": "0.5.22", + "@libsql/linux-arm64-musl": "0.5.22", + "@libsql/linux-x64-gnu": "0.5.22", + "@libsql/linux-x64-musl": "0.5.22", + "@libsql/win32-x64-msvc": "0.5.22" + } + }, + "node_modules/libsql/node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/lightningcss": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", @@ -14870,18 +14999,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mini-svg-data-uri": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", @@ -14934,12 +15051,6 @@ "node": ">= 18" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "license": "MIT" - }, "node_modules/mmdb-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mmdb-lib/-/mmdb-lib-3.0.1.tgz", @@ -15037,12 +15148,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/napi-build-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", - "license": "MIT" - }, "node_modules/napi-postinstall": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", @@ -15197,18 +15302,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/node-abi": { - "version": "3.78.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.78.0.tgz", - "integrity": "sha512-E2wEyrgX/CqvicaQYU3Ze1PFGjc4QYPGsjUrlYkqAE0WjHEZwgOsGMPMzkMse4LjJbDmaEuDX3CM036j5K2DSQ==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-cache": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", @@ -18819,32 +18912,6 @@ "node": ">=20" } }, - "node_modules/prebuild-install": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", - "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^2.0.0", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -18905,6 +18972,12 @@ "node": ">=6" } }, + "node_modules/promise-limit": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/promise-limit/-/promise-limit-2.7.0.tgz", + "integrity": "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==", + "license": "ISC" + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -18949,16 +19022,6 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, - "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -19090,30 +19153,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react": { "version": "19.2.0", "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", @@ -20200,51 +20239,6 @@ "dev": true, "license": "ISC" }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -21101,40 +21095,6 @@ "node": ">=18" } }, - "node_modules/tar-fs": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", - "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "license": "ISC" - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/tar/node_modules/yallist": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", @@ -21489,18 +21449,6 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "license": "0BSD" }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, "node_modules/tw-animate-css": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", @@ -21679,7 +21627,6 @@ "version": "7.14.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz", "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==", - "devOptional": true, "license": "MIT" }, "node_modules/unpipe": { diff --git a/package.json b/package.json index 4660f6513..e73067ba5 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "@asteasolutions/zod-to-openapi": "^7.3.4", "@aws-sdk/client-s3": "3.908.0", "@hookform/resolvers": "5.2.2", + "@libsql/client": "^0.15.15", "@node-rs/argon2": "^2.0.2", "@oslojs/crypto": "1.0.1", "@oslojs/encoding": "1.1.0", @@ -65,7 +66,6 @@ "@tanstack/react-table": "8.21.3", "arctic": "^3.7.0", "axios": "^1.12.2", - "better-sqlite3": "11.7.0", "canvas-confetti": "1.9.3", "class-variance-authority": "^0.7.1", "clsx": "2.1.1", @@ -130,7 +130,6 @@ "@esbuild-plugins/tsconfig-paths": "0.1.2", "@react-email/preview-server": "4.3.0", "@tailwindcss/postcss": "^4.1.14", - "@types/better-sqlite3": "7.6.12", "@types/cookie-parser": "1.4.9", "@types/cors": "2.8.19", "@types/crypto-js": "^4.2.2", diff --git a/server/db/sqlite/driver.ts b/server/db/sqlite/driver.ts index 211ba8ead..3f8a7963a 100644 --- a/server/db/sqlite/driver.ts +++ b/server/db/sqlite/driver.ts @@ -1,5 +1,5 @@ -import { drizzle as DrizzleSqlite } from "drizzle-orm/better-sqlite3"; -import Database from "better-sqlite3"; +import { drizzle as DrizzleSqlite } from "drizzle-orm/libsql"; +import { createClient } from "@libsql/client"; import * as schema from "./schema/schema"; import path from "path"; import fs from "fs"; @@ -12,7 +12,7 @@ export const exists = checkFileExists(location); bootstrapVolume(); function createDb() { - const sqlite = new Database(location); + const sqlite = createClient({ url: "file:" + location }); return DrizzleSqlite(sqlite, { schema }); } diff --git a/server/db/sqlite/migrate.ts b/server/db/sqlite/migrate.ts index e4a730d0a..045e7353a 100644 --- a/server/db/sqlite/migrate.ts +++ b/server/db/sqlite/migrate.ts @@ -1,4 +1,4 @@ -import { migrate } from "drizzle-orm/better-sqlite3/migrator"; +import { migrate } from "drizzle-orm/libsql/migrator"; import { db } from "./driver"; import path from "path"; diff --git a/server/private/routers/auth/quickStart.ts b/server/private/routers/auth/quickStart.ts index 582ac4d58..fbad1fa9d 100644 --- a/server/private/routers/auth/quickStart.ts +++ b/server/private/routers/auth/quickStart.ts @@ -42,7 +42,7 @@ import { users } from "@server/db"; import { fromError } from "zod-validation-error"; import createHttpError from "http-errors"; import response from "@server/lib/response"; -import { SqliteError } from "better-sqlite3"; +import { LibsqlError } from "@libsql/client"; import { eq, and, sql } from "drizzle-orm"; import moment from "moment"; import { generateId } from "@server/auth/sessions/app"; @@ -484,7 +484,7 @@ export async function quickStart( status: HttpCode.OK }); } catch (e) { - if (e instanceof SqliteError && e.code === "SQLITE_CONSTRAINT_UNIQUE") { + if (e instanceof LibsqlError && e.code === "SQLITE_CONSTRAINT_UNIQUE") { if (config.getRawConfig().app.log_failed_attempts) { logger.info( `Account already exists with that email. Email: ${email}. IP: ${req.ip}.` diff --git a/server/private/routers/remoteExitNode/createRemoteExitNode.ts b/server/private/routers/remoteExitNode/createRemoteExitNode.ts index 63209ad97..05581b782 100644 --- a/server/private/routers/remoteExitNode/createRemoteExitNode.ts +++ b/server/private/routers/remoteExitNode/createRemoteExitNode.ts @@ -18,7 +18,7 @@ import { z } from "zod"; import { remoteExitNodes } from "@server/db"; import createHttpError from "http-errors"; import response from "@server/lib/response"; -import { SqliteError } from "better-sqlite3"; +import { LibsqlError } from "@libsql/client"; import moment from "moment"; import { generateSessionToken } from "@server/auth/sessions/app"; import { createRemoteExitNodeSession } from "#private/auth/sessions/remoteExitNode"; @@ -248,7 +248,7 @@ export async function createRemoteExitNode( status: HttpCode.OK }); } catch (e) { - if (e instanceof SqliteError && e.code === "SQLITE_CONSTRAINT_UNIQUE") { + if (e instanceof LibsqlError && e.code === "SQLITE_CONSTRAINT_UNIQUE") { return next( createHttpError( HttpCode.BAD_REQUEST, diff --git a/server/private/routers/remoteExitNode/quickStartRemoteExitNode.ts b/server/private/routers/remoteExitNode/quickStartRemoteExitNode.ts index 4d3681525..c655672a6 100644 --- a/server/private/routers/remoteExitNode/quickStartRemoteExitNode.ts +++ b/server/private/routers/remoteExitNode/quickStartRemoteExitNode.ts @@ -17,7 +17,7 @@ import HttpCode from "@server/types/HttpCode"; import { remoteExitNodes } from "@server/db"; import createHttpError from "http-errors"; import response from "@server/lib/response"; -import { SqliteError } from "better-sqlite3"; +import { LibsqlError } from "@libsql/client"; import moment from "moment"; import { generateId } from "@server/auth/sessions/app"; import { hashPassword } from "@server/auth/password"; @@ -82,7 +82,7 @@ export async function quickStartRemoteExitNode( status: HttpCode.OK }); } catch (e) { - if (e instanceof SqliteError && e.code === "SQLITE_CONSTRAINT_UNIQUE") { + if (e instanceof LibsqlError && e.code === "SQLITE_CONSTRAINT_UNIQUE") { return next( createHttpError( HttpCode.BAD_REQUEST, diff --git a/server/routers/auth/signup.ts b/server/routers/auth/signup.ts index 1f361b793..3ba26af1b 100644 --- a/server/routers/auth/signup.ts +++ b/server/routers/auth/signup.ts @@ -5,7 +5,7 @@ import { z } from "zod"; import { fromError } from "zod-validation-error"; import createHttpError from "http-errors"; import response from "@server/lib/response"; -import { SqliteError } from "better-sqlite3"; +import { LibsqlError } from "@libsql/client"; import { sendEmailVerificationCode } from "../../auth/sendEmailVerificationCode"; import { eq, and } from "drizzle-orm"; import moment from "moment"; @@ -249,7 +249,7 @@ export async function signup( status: HttpCode.OK }); } catch (e) { - if (e instanceof SqliteError && e.code === "SQLITE_CONSTRAINT_UNIQUE") { + if (e instanceof LibsqlError && e.code === "SQLITE_CONSTRAINT_UNIQUE") { if (config.getRawConfig().app.log_failed_attempts) { logger.info( `Account already exists with that email. Email: ${email}. IP: ${req.ip}.` diff --git a/server/routers/newt/createNewt.ts b/server/routers/newt/createNewt.ts index 3066e4eac..94f9842a5 100644 --- a/server/routers/newt/createNewt.ts +++ b/server/routers/newt/createNewt.ts @@ -6,7 +6,7 @@ import { z } from "zod"; import { newts } from "@server/db"; import createHttpError from "http-errors"; import response from "@server/lib/response"; -import { SqliteError } from "better-sqlite3"; +import { LibsqlError } from "@libsql/client"; import moment from "moment"; import { generateSessionToken } from "@server/auth/sessions/app"; import { createNewtSession } from "@server/auth/sessions/newt"; @@ -85,7 +85,7 @@ export async function createNewt( status: HttpCode.OK, }); } catch (e) { - if (e instanceof SqliteError && e.code === "SQLITE_CONSTRAINT_UNIQUE") { + if (e instanceof LibsqlError && e.code === "SQLITE_CONSTRAINT_UNIQUE") { return next( createHttpError( HttpCode.BAD_REQUEST, diff --git a/server/routers/olm/createOlm.ts b/server/routers/olm/createOlm.ts index 3066e4eac..94f9842a5 100644 --- a/server/routers/olm/createOlm.ts +++ b/server/routers/olm/createOlm.ts @@ -6,7 +6,7 @@ import { z } from "zod"; import { newts } from "@server/db"; import createHttpError from "http-errors"; import response from "@server/lib/response"; -import { SqliteError } from "better-sqlite3"; +import { LibsqlError } from "@libsql/client"; import moment from "moment"; import { generateSessionToken } from "@server/auth/sessions/app"; import { createNewtSession } from "@server/auth/sessions/newt"; @@ -85,7 +85,7 @@ export async function createNewt( status: HttpCode.OK, }); } catch (e) { - if (e instanceof SqliteError && e.code === "SQLITE_CONSTRAINT_UNIQUE") { + if (e instanceof LibsqlError && e.code === "SQLITE_CONSTRAINT_UNIQUE") { return next( createHttpError( HttpCode.BAD_REQUEST, diff --git a/server/setup/migrationsSqlite.ts b/server/setup/migrationsSqlite.ts index b987b8331..1611c4926 100644 --- a/server/setup/migrationsSqlite.ts +++ b/server/setup/migrationsSqlite.ts @@ -1,11 +1,11 @@ #! /usr/bin/env node -import { migrate } from "drizzle-orm/better-sqlite3/migrator"; +import { migrate } from "drizzle-orm/libsql/migrator"; import { db, exists } from "../db/sqlite"; import path from "path"; import semver from "semver"; import { versionMigrations } from "../db/sqlite"; import { __DIRNAME, APP_PATH, APP_VERSION } from "@server/lib/consts"; -import { SqliteError } from "better-sqlite3"; +import { LibsqlError } from "@libsql/client"; import fs from "fs"; import m1 from "./scriptsSqlite/1.0.0-beta1"; import m2 from "./scriptsSqlite/1.0.0-beta2"; @@ -174,7 +174,7 @@ async function executeScripts() { ); } catch (e) { if ( - e instanceof SqliteError && + e instanceof LibsqlError && e.code === "SQLITE_CONSTRAINT_UNIQUE" ) { console.error("Migration has already run! Skipping..."); From acf23cc0253f1c60aa8fa755318e91779ab7c03c Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Tue, 21 Oct 2025 06:06:56 +0000 Subject: [PATCH 02/27] merge upstream --- package-lock.json | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index fde648b23..dbcb4661f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8832,7 +8832,6 @@ "version": "24.8.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.8.1.tgz", "integrity": "sha512-alv65KGRadQVfVcG69MuB4IzdYVpRwMG/mq8KWOaoOdyY617P5ivaDiMCGOFDWD2sAn5Q0mR3mRtUOgm99hL9Q==", - "devOptional": true, "license": "MIT", "dependencies": { "undici-types": "~7.14.0" @@ -10208,7 +10207,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -10262,7 +10261,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -10363,7 +10362,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", @@ -13493,7 +13492,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "devOptional": true, + "dev": true, "funding": [ { "type": "github", From d20deadd1dc0714a04d215c17741240d57ef2189 Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Tue, 21 Oct 2025 06:07:26 +0000 Subject: [PATCH 03/27] add local test --- Makefile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Makefile b/Makefile index c90bd1809..aa3152c99 100644 --- a/Makefile +++ b/Makefile @@ -61,3 +61,10 @@ test: clean: docker rmi pangolin + +test-local: + npm run set:oss + npm run set:sqlite + npx tsc --noEmit -p tsconfig.oss.json + docker build --build-arg DATABASE=pg -t fosrl/pangolin:postgresql-latest . + docker build --build-arg DATABASE=sqlite -t fosrl/pangolin:latest . \ No newline at end of file From ac04eec1466efb70ec2527fc04938b706fb1180a Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Tue, 21 Oct 2025 07:51:24 +0000 Subject: [PATCH 04/27] migrations --- Makefile | 7 +- server/setup/migrationsSqlite.ts | 59 +--- server/setup/scriptsSqlite/1.0.0-beta1.ts | 5 - server/setup/scriptsSqlite/1.0.0-beta10.ts | 44 --- server/setup/scriptsSqlite/1.0.0-beta12.ts | 61 ---- server/setup/scriptsSqlite/1.0.0-beta13.ts | 33 -- server/setup/scriptsSqlite/1.0.0-beta15.ts | 128 -------- server/setup/scriptsSqlite/1.0.0-beta2.ts | 58 ---- server/setup/scriptsSqlite/1.0.0-beta3.ts | 41 --- server/setup/scriptsSqlite/1.0.0-beta5.ts | 100 ------ server/setup/scriptsSqlite/1.0.0-beta6.ts | 51 ---- server/setup/scriptsSqlite/1.0.0-beta9.ts | 290 ------------------ server/setup/scriptsSqlite/1.0.0.ts | 57 ---- server/setup/scriptsSqlite/1.1.0.ts | 28 -- server/setup/scriptsSqlite/1.10.0.ts | 136 --------- server/setup/scriptsSqlite/1.10.1.ts | 69 ----- server/setup/scriptsSqlite/1.10.2.ts | 54 ---- server/setup/scriptsSqlite/1.11.0.ts | 339 --------------------- server/setup/scriptsSqlite/1.11.1.ts | 37 --- server/setup/scriptsSqlite/1.2.0.ts | 114 ------- server/setup/scriptsSqlite/1.3.0.ts | 203 ------------ server/setup/scriptsSqlite/1.5.0.ts | 70 ----- server/setup/scriptsSqlite/1.6.0.ts | 65 ---- server/setup/scriptsSqlite/1.7.0.ts | 187 ------------ server/setup/scriptsSqlite/1.8.0.ts | 30 -- server/setup/scriptsSqlite/1.9.0.ts | 191 ------------ server/setup/scriptsSqlite/2.0.0.ts | 14 + 27 files changed, 31 insertions(+), 2440 deletions(-) delete mode 100644 server/setup/scriptsSqlite/1.0.0-beta1.ts delete mode 100644 server/setup/scriptsSqlite/1.0.0-beta10.ts delete mode 100644 server/setup/scriptsSqlite/1.0.0-beta12.ts delete mode 100644 server/setup/scriptsSqlite/1.0.0-beta13.ts delete mode 100644 server/setup/scriptsSqlite/1.0.0-beta15.ts delete mode 100644 server/setup/scriptsSqlite/1.0.0-beta2.ts delete mode 100644 server/setup/scriptsSqlite/1.0.0-beta3.ts delete mode 100644 server/setup/scriptsSqlite/1.0.0-beta5.ts delete mode 100644 server/setup/scriptsSqlite/1.0.0-beta6.ts delete mode 100644 server/setup/scriptsSqlite/1.0.0-beta9.ts delete mode 100644 server/setup/scriptsSqlite/1.0.0.ts delete mode 100644 server/setup/scriptsSqlite/1.1.0.ts delete mode 100644 server/setup/scriptsSqlite/1.10.0.ts delete mode 100644 server/setup/scriptsSqlite/1.10.1.ts delete mode 100644 server/setup/scriptsSqlite/1.10.2.ts delete mode 100644 server/setup/scriptsSqlite/1.11.0.ts delete mode 100644 server/setup/scriptsSqlite/1.11.1.ts delete mode 100644 server/setup/scriptsSqlite/1.2.0.ts delete mode 100644 server/setup/scriptsSqlite/1.3.0.ts delete mode 100644 server/setup/scriptsSqlite/1.5.0.ts delete mode 100644 server/setup/scriptsSqlite/1.6.0.ts delete mode 100644 server/setup/scriptsSqlite/1.7.0.ts delete mode 100644 server/setup/scriptsSqlite/1.8.0.ts delete mode 100644 server/setup/scriptsSqlite/1.9.0.ts create mode 100644 server/setup/scriptsSqlite/2.0.0.ts diff --git a/Makefile b/Makefile index aa3152c99..e92da3cdd 100644 --- a/Makefile +++ b/Makefile @@ -63,8 +63,9 @@ clean: docker rmi pangolin test-local: + cp config/config.example.yml config/config.yml npm run set:oss npm run set:sqlite - npx tsc --noEmit -p tsconfig.oss.json - docker build --build-arg DATABASE=pg -t fosrl/pangolin:postgresql-latest . - docker build --build-arg DATABASE=sqlite -t fosrl/pangolin:latest . \ No newline at end of file + - npx tsc --noEmit + - docker build --build-arg DATABASE=pg -t fosrl/pangolin:postgresql-latest . + - docker build --build-arg DATABASE=sqlite -t fosrl/pangolin:latest . diff --git a/server/setup/migrationsSqlite.ts b/server/setup/migrationsSqlite.ts index 1611c4926..f98215084 100644 --- a/server/setup/migrationsSqlite.ts +++ b/server/setup/migrationsSqlite.ts @@ -7,58 +7,14 @@ import { versionMigrations } from "../db/sqlite"; import { __DIRNAME, APP_PATH, APP_VERSION } from "@server/lib/consts"; import { LibsqlError } from "@libsql/client"; import fs from "fs"; -import m1 from "./scriptsSqlite/1.0.0-beta1"; -import m2 from "./scriptsSqlite/1.0.0-beta2"; -import m3 from "./scriptsSqlite/1.0.0-beta3"; -import m4 from "./scriptsSqlite/1.0.0-beta5"; -import m5 from "./scriptsSqlite/1.0.0-beta6"; -import m6 from "./scriptsSqlite/1.0.0-beta9"; -import m7 from "./scriptsSqlite/1.0.0-beta10"; -import m8 from "./scriptsSqlite/1.0.0-beta12"; -import m13 from "./scriptsSqlite/1.0.0-beta13"; -import m15 from "./scriptsSqlite/1.0.0-beta15"; -import m16 from "./scriptsSqlite/1.0.0"; -import m17 from "./scriptsSqlite/1.1.0"; -import m18 from "./scriptsSqlite/1.2.0"; -import m19 from "./scriptsSqlite/1.3.0"; -import m20 from "./scriptsSqlite/1.5.0"; -import m21 from "./scriptsSqlite/1.6.0"; -import m22 from "./scriptsSqlite/1.7.0"; -import m23 from "./scriptsSqlite/1.8.0"; -import m24 from "./scriptsSqlite/1.9.0"; -import m25 from "./scriptsSqlite/1.10.0"; -import m26 from "./scriptsSqlite/1.10.1"; -import m27 from "./scriptsSqlite/1.10.2"; -import m28 from "./scriptsSqlite/1.11.0"; +import m29 from "./scriptsSqlite/2.0.0"; // THIS CANNOT IMPORT ANYTHING FROM THE SERVER // EXCEPT FOR THE DATABASE AND THE SCHEMA // Define the migration list with versions and their corresponding functions const migrations = [ - { version: "1.0.0-beta.1", run: m1 }, - { version: "1.0.0-beta.2", run: m2 }, - { version: "1.0.0-beta.3", run: m3 }, - { version: "1.0.0-beta.5", run: m4 }, - { version: "1.0.0-beta.6", run: m5 }, - { version: "1.0.0-beta.9", run: m6 }, - { version: "1.0.0-beta.10", run: m7 }, - { version: "1.0.0-beta.12", run: m8 }, - { version: "1.0.0-beta.13", run: m13 }, - { version: "1.0.0-beta.15", run: m15 }, - { version: "1.0.0", run: m16 }, - { version: "1.1.0", run: m17 }, - { version: "1.2.0", run: m18 }, - { version: "1.3.0", run: m19 }, - { version: "1.5.0", run: m20 }, - { version: "1.6.0", run: m21 }, - { version: "1.7.0", run: m22 }, - { version: "1.8.0", run: m23 }, - { version: "1.9.0", run: m24 }, - { version: "1.10.0", run: m25 }, - { version: "1.10.1", run: m26 }, - { version: "1.10.2", run: m27 }, - { version: "1.11.0", run: m28 }, + { version: "2.0.0", run: m29 }, // Add new migrations here as they are created ] as const; @@ -129,6 +85,7 @@ export async function runMigrations() { async function executeScripts() { try { + const requriedPreviousVersion = "1.11.1"; // Get the last executed version from the database const lastExecuted = await db.select().from(versionMigrations); @@ -137,6 +94,16 @@ async function executeScripts() { .map((m) => m) .sort((a, b) => semver.compare(b.version, a.version)); const startVersion = pendingMigrations[0]?.version ?? APP_VERSION; + const lastVersion = pendingMigrations[pendingMigrations.length - 1].version; + + if (!semver.eq(lastVersion, requriedPreviousVersion)) { + console.error( + `Starting App not allowed. Your previous version is: ${lastVersion}. ` + + `Please update first to version ${requriedPreviousVersion} due to breaking changes in version 2.0.0.` + ); + process.exit(1); + } + console.log(`Starting migrations from version ${startVersion}`); const migrationsToRun = migrations.filter((migration) => diff --git a/server/setup/scriptsSqlite/1.0.0-beta1.ts b/server/setup/scriptsSqlite/1.0.0-beta1.ts deleted file mode 100644 index 65d9ad1b7..000000000 --- a/server/setup/scriptsSqlite/1.0.0-beta1.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default async function migration() { - console.log("Running setup script 1.0.0-beta.1..."); - // SQL operations would go here in ts format - console.log("Done."); -} diff --git a/server/setup/scriptsSqlite/1.0.0-beta10.ts b/server/setup/scriptsSqlite/1.0.0-beta10.ts deleted file mode 100644 index 400cbc318..000000000 --- a/server/setup/scriptsSqlite/1.0.0-beta10.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { configFilePath1, configFilePath2 } from "@server/lib/consts"; -import fs from "fs"; -import yaml from "js-yaml"; - -export default async function migration() { - console.log("Running setup script 1.0.0-beta.10..."); - - try { - // Determine which config file exists - const filePaths = [configFilePath1, configFilePath2]; - let filePath = ""; - for (const path of filePaths) { - if (fs.existsSync(path)) { - filePath = path; - break; - } - } - - if (!filePath) { - throw new Error( - `No config file found (expected config.yml or config.yaml).` - ); - } - - // Read and parse the YAML file - const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig = yaml.load(fileContents) as any; - - delete rawConfig.server.secure_cookies; - - // Write the updated YAML back to the file - const updatedYaml = yaml.dump(rawConfig); - fs.writeFileSync(filePath, updatedYaml, "utf8"); - - console.log(`Removed deprecated config option: secure_cookies.`); - } catch (e) { - console.log( - `Was unable to remove deprecated config option: secure_cookies. Error: ${e}` - ); - return; - } - - console.log("Done."); -} diff --git a/server/setup/scriptsSqlite/1.0.0-beta12.ts b/server/setup/scriptsSqlite/1.0.0-beta12.ts deleted file mode 100644 index 8c96e663c..000000000 --- a/server/setup/scriptsSqlite/1.0.0-beta12.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { db } from "../../db/sqlite"; -import { configFilePath1, configFilePath2 } from "@server/lib/consts"; -import { sql } from "drizzle-orm"; -import fs from "fs"; -import yaml from "js-yaml"; - -export default async function migration() { - console.log("Running setup script 1.0.0-beta.12..."); - - try { - // Determine which config file exists - const filePaths = [configFilePath1, configFilePath2]; - let filePath = ""; - for (const path of filePaths) { - if (fs.existsSync(path)) { - filePath = path; - break; - } - } - - if (!filePath) { - throw new Error( - `No config file found (expected config.yml or config.yaml).` - ); - } - - // Read and parse the YAML file - const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig = yaml.load(fileContents) as any; - - if (!rawConfig.flags) { - rawConfig.flags = {}; - } - - rawConfig.flags.allow_base_domain_resources = true; - - // Write the updated YAML back to the file - const updatedYaml = yaml.dump(rawConfig); - fs.writeFileSync(filePath, updatedYaml, "utf8"); - - console.log(`Added new config option: allow_base_domain_resources`); - } catch (e) { - console.log( - `Unable to add new config option: allow_base_domain_resources. This is not critical.` - ); - console.error(e); - } - - try { - db.transaction((trx) => { - trx.run(sql`ALTER TABLE 'resources' ADD 'isBaseDomain' integer;`); - }); - - console.log(`Added new column: isBaseDomain`); - } catch (e) { - console.log("Unable to add new column: isBaseDomain"); - throw e; - } - - console.log("Done."); -} diff --git a/server/setup/scriptsSqlite/1.0.0-beta13.ts b/server/setup/scriptsSqlite/1.0.0-beta13.ts deleted file mode 100644 index 9ced727f7..000000000 --- a/server/setup/scriptsSqlite/1.0.0-beta13.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { db } from "../../db/sqlite"; -import { sql } from "drizzle-orm"; - -const version = "1.0.0-beta.13"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - try { - db.transaction((trx) => { - trx.run(sql`CREATE TABLE resourceRules ( - ruleId integer PRIMARY KEY AUTOINCREMENT NOT NULL, - resourceId integer NOT NULL, - priority integer NOT NULL, - enabled integer DEFAULT true NOT NULL, - action text NOT NULL, - match text NOT NULL, - value text NOT NULL, - FOREIGN KEY (resourceId) REFERENCES resources(resourceId) ON UPDATE no action ON DELETE cascade - );`); - trx.run( - sql`ALTER TABLE resources ADD applyRules integer DEFAULT false NOT NULL;` - ); - }); - - console.log(`Added new table and column: resourceRules, applyRules`); - } catch (e) { - console.log("Unable to add new table and column: resourceRules, applyRules"); - throw e; - } - - console.log(`${version} migration complete`); -} diff --git a/server/setup/scriptsSqlite/1.0.0-beta15.ts b/server/setup/scriptsSqlite/1.0.0-beta15.ts deleted file mode 100644 index cf39fd8a3..000000000 --- a/server/setup/scriptsSqlite/1.0.0-beta15.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { db } from "../../db/sqlite"; -import { configFilePath1, configFilePath2 } from "@server/lib/consts"; -import fs from "fs"; -import yaml from "js-yaml"; -import { sql } from "drizzle-orm"; -import { domains, orgDomains, resources } from "@server/db"; - -const version = "1.0.0-beta.15"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - let domain = ""; - - try { - // Determine which config file exists - const filePaths = [configFilePath1, configFilePath2]; - let filePath = ""; - for (const path of filePaths) { - if (fs.existsSync(path)) { - filePath = path; - break; - } - } - - if (!filePath) { - throw new Error( - `No config file found (expected config.yml or config.yaml).` - ); - } - - // Read and parse the YAML file - const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig = yaml.load(fileContents) as any; - - const baseDomain = rawConfig.app.base_domain; - const certResolver = rawConfig.traefik.cert_resolver; - const preferWildcardCert = rawConfig.traefik.prefer_wildcard_cert; - - delete rawConfig.traefik.prefer_wildcard_cert; - delete rawConfig.traefik.cert_resolver; - delete rawConfig.app.base_domain; - - rawConfig.domains = { - domain1: { - base_domain: baseDomain - } - }; - - if (certResolver) { - rawConfig.domains.domain1.cert_resolver = certResolver; - } - - if (preferWildcardCert) { - rawConfig.domains.domain1.prefer_wildcard_cert = preferWildcardCert; - } - - // Write the updated YAML back to the file - const updatedYaml = yaml.dump(rawConfig); - fs.writeFileSync(filePath, updatedYaml, "utf8"); - - domain = baseDomain; - - console.log(`Moved base_domain to new domains section`); - } catch (e) { - console.log( - `Unable to migrate config file and move base_domain to domains. Error: ${e}` - ); - throw e; - } - - try { - db.transaction((trx) => { - trx.run(sql`CREATE TABLE 'domains' ( - 'domainId' text PRIMARY KEY NOT NULL, - 'baseDomain' text NOT NULL, - 'configManaged' integer DEFAULT false NOT NULL -);`); - - trx.run(sql`CREATE TABLE 'orgDomains' ( - 'orgId' text NOT NULL, - 'domainId' text NOT NULL, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade -);`); - - trx.run( - sql`ALTER TABLE 'resources' ADD 'domainId' text REFERENCES domains(domainId);` - ); - trx.run(sql`ALTER TABLE 'orgs' DROP COLUMN 'domain';`); - }); - - console.log(`Migrated database schema`); - } catch (e) { - console.log("Unable to migrate database schema"); - throw e; - } - - try { - await db.transaction(async (trx) => { - await trx - .insert(domains) - .values({ - domainId: "domain1", - baseDomain: domain, - configManaged: true - }) - .execute(); - await trx.update(resources).set({ domainId: "domain1" }); - const existingOrgDomains = await trx.select().from(orgDomains); - for (const orgDomain of existingOrgDomains) { - await trx - .insert(orgDomains) - .values({ orgId: orgDomain.orgId, domainId: "domain1" }) - .execute(); - } - }); - - console.log(`Updated resources table with new domainId`); - } catch (e) { - console.log( - `Unable to update resources table with new domainId. Error: ${e}` - ); - return; - } - - console.log(`${version} migration complete`); -} diff --git a/server/setup/scriptsSqlite/1.0.0-beta2.ts b/server/setup/scriptsSqlite/1.0.0-beta2.ts deleted file mode 100644 index 1241e9c51..000000000 --- a/server/setup/scriptsSqlite/1.0.0-beta2.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { configFilePath1, configFilePath2 } from "@server/lib/consts"; -import fs from "fs"; -import yaml from "js-yaml"; - -export default async function migration() { - console.log("Running setup script 1.0.0-beta.2..."); - - // Determine which config file exists - const filePaths = [configFilePath1, configFilePath2]; - let filePath = ""; - for (const path of filePaths) { - if (fs.existsSync(path)) { - filePath = path; - break; - } - } - - if (!filePath) { - throw new Error( - `No config file found (expected config.yml or config.yaml).` - ); - } - - // Read and parse the YAML file - const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig = yaml.load(fileContents) as any; - - // Validate the structure - if (!rawConfig.app || !rawConfig.app.base_url) { - throw new Error(`Invalid config file: app.base_url is missing.`); - } - - // Move base_url to dashboard_url and calculate base_domain - const baseUrl = rawConfig.app.base_url; - rawConfig.app.dashboard_url = baseUrl; - rawConfig.app.base_domain = getBaseDomain(baseUrl); - - // Remove the old base_url - delete rawConfig.app.base_url; - - // Write the updated YAML back to the file - const updatedYaml = yaml.dump(rawConfig); - fs.writeFileSync(filePath, updatedYaml, "utf8"); - - console.log("Done."); -} - -function getBaseDomain(url: string): string { - const newUrl = new URL(url); - const hostname = newUrl.hostname; - const parts = hostname.split("."); - - if (parts.length <= 2) { - return parts.join("."); - } - - return parts.slice(-2).join("."); -} diff --git a/server/setup/scriptsSqlite/1.0.0-beta3.ts b/server/setup/scriptsSqlite/1.0.0-beta3.ts deleted file mode 100644 index fccfeb887..000000000 --- a/server/setup/scriptsSqlite/1.0.0-beta3.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { configFilePath1, configFilePath2 } from "@server/lib/consts"; -import fs from "fs"; -import yaml from "js-yaml"; - -export default async function migration() { - console.log("Running setup script 1.0.0-beta.3..."); - - // Determine which config file exists - const filePaths = [configFilePath1, configFilePath2]; - let filePath = ""; - for (const path of filePaths) { - if (fs.existsSync(path)) { - filePath = path; - break; - } - } - - if (!filePath) { - throw new Error( - `No config file found (expected config.yml or config.yaml).` - ); - } - - // Read and parse the YAML file - const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig = yaml.load(fileContents) as any; - - // Validate the structure - if (!rawConfig.gerbil) { - throw new Error(`Invalid config file: gerbil is missing.`); - } - - // Update the config - rawConfig.gerbil.site_block_size = 29; - - // Write the updated YAML back to the file - const updatedYaml = yaml.dump(rawConfig); - fs.writeFileSync(filePath, updatedYaml, "utf8"); - - console.log("Done."); -} \ No newline at end of file diff --git a/server/setup/scriptsSqlite/1.0.0-beta5.ts b/server/setup/scriptsSqlite/1.0.0-beta5.ts deleted file mode 100644 index 1c49503cd..000000000 --- a/server/setup/scriptsSqlite/1.0.0-beta5.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; -import fs from "fs"; -import yaml from "js-yaml"; -import path from "path"; -import { z } from "zod"; -import { fromZodError } from "zod-validation-error"; - -export default async function migration() { - console.log("Running setup script 1.0.0-beta.5..."); - - // Determine which config file exists - const filePaths = [configFilePath1, configFilePath2]; - let filePath = ""; - for (const path of filePaths) { - if (fs.existsSync(path)) { - filePath = path; - break; - } - } - - if (!filePath) { - throw new Error( - `No config file found (expected config.yml or config.yaml).` - ); - } - - // Read and parse the YAML file - const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig = yaml.load(fileContents) as any; - - // Validate the structure - if (!rawConfig.server) { - throw new Error(`Invalid config file: server is missing.`); - } - - // Update the config - rawConfig.server.resource_access_token_param = "p_token"; - - // Write the updated YAML back to the file - const updatedYaml = yaml.dump(rawConfig); - fs.writeFileSync(filePath, updatedYaml, "utf8"); - - // then try to update badger in traefik config - - try { - const traefikPath = path.join( - APP_PATH, - "traefik", - "traefik_config.yml" - ); - - // read the traefik file - // look for the badger middleware - // set the version to v1.0.0-beta.2 - /* -experimental: - plugins: - badger: - moduleName: "github.com/fosrl/badger" - version: "v1.0.0-beta.2" - */ - - const schema = z.object({ - experimental: z.object({ - plugins: z.object({ - badger: z.object({ - moduleName: z.string(), - version: z.string() - }) - }) - }) - }); - - const traefikFileContents = fs.readFileSync(traefikPath, "utf8"); - const traefikConfig = yaml.load(traefikFileContents) as any; - - const parsedConfig = schema.safeParse(traefikConfig); - - if (!parsedConfig.success) { - throw new Error(fromZodError(parsedConfig.error).toString()); - } - - traefikConfig.experimental.plugins.badger.version = "v1.0.0-beta.2"; - - const updatedTraefikYaml = yaml.dump(traefikConfig); - - fs.writeFileSync(traefikPath, updatedTraefikYaml, "utf8"); - - console.log( - "Updated the version of Badger in your Traefik configuration to v1.0.0-beta.2." - ); - } catch (e) { - console.log( - "We were unable to update the version of Badger in your Traefik configuration. Please update it manually." - ); - console.error(e); - } - - console.log("Done."); -} diff --git a/server/setup/scriptsSqlite/1.0.0-beta6.ts b/server/setup/scriptsSqlite/1.0.0-beta6.ts deleted file mode 100644 index 891296781..000000000 --- a/server/setup/scriptsSqlite/1.0.0-beta6.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { configFilePath1, configFilePath2 } from "@server/lib/consts"; -import fs from "fs"; -import yaml from "js-yaml"; - -export default async function migration() { - console.log("Running setup script 1.0.0-beta.6..."); - - try { - // Determine which config file exists - const filePaths = [configFilePath1, configFilePath2]; - let filePath = ""; - for (const path of filePaths) { - if (fs.existsSync(path)) { - filePath = path; - break; - } - } - - if (!filePath) { - throw new Error( - `No config file found (expected config.yml or config.yaml).` - ); - } - - // Read and parse the YAML file - const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig = yaml.load(fileContents) as any; - - // Validate the structure - if (!rawConfig.server) { - throw new Error(`Invalid config file: server is missing.`); - } - - // Update the config - rawConfig.server.cors = { - origins: [rawConfig.app.dashboard_url], - methods: ["GET", "POST", "PUT", "DELETE", "PATCH"], - headers: ["X-CSRF-Token", "Content-Type"], - credentials: false - }; - - // Write the updated YAML back to the file - const updatedYaml = yaml.dump(rawConfig); - fs.writeFileSync(filePath, updatedYaml, "utf8"); - } catch (error) { - console.log("We were unable to add CORS to your config file. Please add it manually."); - console.error(error); - } - - console.log("Done."); -} diff --git a/server/setup/scriptsSqlite/1.0.0-beta9.ts b/server/setup/scriptsSqlite/1.0.0-beta9.ts deleted file mode 100644 index 7cce1c2dd..000000000 --- a/server/setup/scriptsSqlite/1.0.0-beta9.ts +++ /dev/null @@ -1,290 +0,0 @@ -import { db } from "../../db/sqlite"; -import { - emailVerificationCodes, - passwordResetTokens, - resourceOtp, - resources, - resourceWhitelist, - targets, - userInvites, - users -} from "../../db/sqlite"; -import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; -import { eq, sql } from "drizzle-orm"; -import fs from "fs"; -import yaml from "js-yaml"; -import path from "path"; -import { z } from "zod"; -import { fromZodError } from "zod-validation-error"; - -export default async function migration() { - console.log("Running setup script 1.0.0-beta.9..."); - - // make dir config/db/backups - const appPath = APP_PATH; - const dbDir = path.join(appPath, "db"); - - const backupsDir = path.join(dbDir, "backups"); - - // check if the backups directory exists and create it if it doesn't - if (!fs.existsSync(backupsDir)) { - fs.mkdirSync(backupsDir, { recursive: true }); - } - - // copy the db.sqlite file to backups - // add the date to the filename - const date = new Date(); - const dateString = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}_${date.getHours()}-${date.getMinutes()}-${date.getSeconds()}`; - const dbPath = path.join(dbDir, "db.sqlite"); - const backupPath = path.join(backupsDir, `db_${dateString}.sqlite`); - fs.copyFileSync(dbPath, backupPath); - - await db.transaction(async (trx) => { - try { - // Determine which config file exists - const filePaths = [configFilePath1, configFilePath2]; - let filePath = ""; - for (const path of filePaths) { - if (fs.existsSync(path)) { - filePath = path; - break; - } - } - - if (!filePath) { - throw new Error( - `No config file found (expected config.yml or config.yaml).` - ); - } - - // Read and parse the YAML file - const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig = yaml.load(fileContents) as any; - - rawConfig.server.resource_session_request_param = - "p_session_request"; - rawConfig.server.session_cookie_name = "p_session_token"; // rename to prevent conflicts - delete rawConfig.server.resource_session_cookie_name; - - if (!rawConfig.flags) { - rawConfig.flags = {}; - } - - rawConfig.flags.allow_raw_resources = true; - - // Write the updated YAML back to the file - const updatedYaml = yaml.dump(rawConfig); - fs.writeFileSync(filePath, updatedYaml, "utf8"); - } catch (e) { - console.log( - `Failed to add resource_session_request_param to config. Please add it manually. https://docs.pangolin.net/self-host/advanced/config-file` - ); - trx.rollback(); - return; - } - - try { - const traefikPath = path.join( - APP_PATH, - "traefik", - "traefik_config.yml" - ); - - // Define schema for traefik config validation - const schema = z.object({ - entryPoints: z - .object({ - websecure: z - .object({ - address: z.string(), - transport: z - .object({ - respondingTimeouts: z.object({ - readTimeout: z.string() - }) - }) - .optional() - }) - .optional() - }) - .optional(), - experimental: z.object({ - plugins: z.object({ - badger: z.object({ - moduleName: z.string(), - version: z.string() - }) - }) - }) - }); - - const traefikFileContents = fs.readFileSync(traefikPath, "utf8"); - const traefikConfig = yaml.load(traefikFileContents) as any; - - const parsedConfig: any = schema.safeParse(traefikConfig); - - if (parsedConfig.success) { - // Ensure websecure entrypoint exists - if (traefikConfig.entryPoints?.websecure) { - // Add transport configuration - traefikConfig.entryPoints.websecure.transport = { - respondingTimeouts: { - readTimeout: "30m" - } - }; - } - - traefikConfig.experimental.plugins.badger.version = - "v1.0.0-beta.3"; - - const updatedTraefikYaml = yaml.dump(traefikConfig); - fs.writeFileSync(traefikPath, updatedTraefikYaml, "utf8"); - - console.log("Updated Badger version in Traefik config."); - } else { - console.log(fromZodError(parsedConfig.error)); - console.log( - "We were unable to update the version of Badger in your Traefik configuration. Please update it manually to at least v1.0.0-beta.3. https://github.com/fosrl/badger" - ); - } - } catch (e) { - console.log( - "We were unable to update the version of Badger in your Traefik configuration. Please update it manually to at least v1.0.0-beta.3. https://github.com/fosrl/badger" - ); - trx.rollback(); - return; - } - - try { - const traefikPath = path.join( - APP_PATH, - "traefik", - "dynamic_config.yml" - ); - - const schema = z.object({ - http: z.object({ - middlewares: z.object({ - "redirect-to-https": z.object({ - redirectScheme: z.object({ - scheme: z.string(), - permanent: z.boolean() - }) - }) - }) - }) - }); - - const traefikFileContents = fs.readFileSync(traefikPath, "utf8"); - const traefikConfig = yaml.load(traefikFileContents) as any; - - const parsedConfig: any = schema.safeParse(traefikConfig); - - if (parsedConfig.success) { - // delete permanent from redirect-to-https middleware - delete traefikConfig.http.middlewares["redirect-to-https"].redirectScheme.permanent; - - const updatedTraefikYaml = yaml.dump(traefikConfig); - fs.writeFileSync(traefikPath, updatedTraefikYaml, "utf8"); - - console.log("Deleted permanent from redirect-to-https middleware."); - } else { - console.log(fromZodError(parsedConfig.error)); - console.log( - "We were unable to delete the permanent field from the redirect-to-https middleware in your Traefik configuration. Please delete it manually." - ); - } - } catch (e) { - console.log( - "We were unable to delete the permanent field from the redirect-to-https middleware in your Traefik configuration. Please delete it manually. Note that this is not a critical change but recommended." - ); - } - - trx.run(sql`UPDATE ${users} SET email = LOWER(email);`); - trx.run( - sql`UPDATE ${emailVerificationCodes} SET email = LOWER(email);` - ); - trx.run(sql`UPDATE ${passwordResetTokens} SET email = LOWER(email);`); - trx.run(sql`UPDATE ${userInvites} SET email = LOWER(email);`); - trx.run(sql`UPDATE ${resourceWhitelist} SET email = LOWER(email);`); - trx.run(sql`UPDATE ${resourceOtp} SET email = LOWER(email);`); - - const resourcesAll = await trx - .select({ - resourceId: resources.resourceId, - fullDomain: resources.fullDomain, - subdomain: resources.subdomain - }) - .from(resources); - - trx.run(`DROP INDEX resources_fullDomain_unique;`); - trx.run(`ALTER TABLE resources - DROP COLUMN fullDomain; - `); - trx.run(`ALTER TABLE resources - DROP COLUMN subdomain; - `); - trx.run(sql`ALTER TABLE resources - ADD COLUMN fullDomain TEXT; - `); - trx.run(sql`ALTER TABLE resources - ADD COLUMN subdomain TEXT; - `); - trx.run(sql`ALTER TABLE resources - ADD COLUMN http INTEGER DEFAULT true NOT NULL; - `); - trx.run(sql`ALTER TABLE resources - ADD COLUMN protocol TEXT DEFAULT 'tcp' NOT NULL; - `); - trx.run(sql`ALTER TABLE resources - ADD COLUMN proxyPort INTEGER; - `); - - // write the new fullDomain and subdomain values back to the database - for (const resource of resourcesAll) { - await trx - .update(resources) - .set({ - fullDomain: resource.fullDomain, - subdomain: resource.subdomain - }) - .where(eq(resources.resourceId, resource.resourceId)); - } - - const targetsAll = await trx - .select({ - targetId: targets.targetId, - method: targets.method - }) - .from(targets); - - trx.run(`ALTER TABLE targets - DROP COLUMN method; - `); - trx.run(`ALTER TABLE targets - DROP COLUMN protocol; - `); - trx.run(sql`ALTER TABLE targets - ADD COLUMN method TEXT; - `); - - // write the new method and protocol values back to the database - for (const target of targetsAll) { - await trx - .update(targets) - .set({ - method: target.method - }) - .where(eq(targets.targetId, target.targetId)); - } - - trx.run( - sql`ALTER TABLE 'resourceSessions' ADD 'isRequestToken' integer;` - ); - trx.run( - sql`ALTER TABLE 'resourceSessions' ADD 'userSessionId' text REFERENCES session(id);` - ); - }); - - console.log("Done."); -} diff --git a/server/setup/scriptsSqlite/1.0.0.ts b/server/setup/scriptsSqlite/1.0.0.ts deleted file mode 100644 index c82966dee..000000000 --- a/server/setup/scriptsSqlite/1.0.0.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { APP_PATH } from "@server/lib/consts"; -import fs from "fs"; -import yaml from "js-yaml"; -import path from "path"; -import { z } from "zod"; -import { fromZodError } from "zod-validation-error"; - -const version = "1.0.0"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - try { - const traefikPath = path.join( - APP_PATH, - "traefik", - "traefik_config.yml" - ); - - const schema = z.object({ - experimental: z.object({ - plugins: z.object({ - badger: z.object({ - moduleName: z.string(), - version: z.string() - }) - }) - }) - }); - - const traefikFileContents = fs.readFileSync(traefikPath, "utf8"); - const traefikConfig = yaml.load(traefikFileContents) as any; - - const parsedConfig = schema.safeParse(traefikConfig); - - if (!parsedConfig.success) { - throw new Error(fromZodError(parsedConfig.error).toString()); - } - - traefikConfig.experimental.plugins.badger.version = "v1.0.0"; - - const updatedTraefikYaml = yaml.dump(traefikConfig); - - fs.writeFileSync(traefikPath, updatedTraefikYaml, "utf8"); - - console.log( - "Updated the version of Badger in your Traefik configuration to 1.0.0" - ); - } catch (e) { - console.log( - "We were unable to update the version of Badger in your Traefik configuration. Please update it manually." - ); - console.error(e); - } - - console.log(`${version} migration complete`); -} diff --git a/server/setup/scriptsSqlite/1.1.0.ts b/server/setup/scriptsSqlite/1.1.0.ts deleted file mode 100644 index 4d1218522..000000000 --- a/server/setup/scriptsSqlite/1.1.0.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { db } from "../../db/sqlite"; -import { sql } from "drizzle-orm"; - -const version = "1.1.0"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - try { - db.transaction((trx) => { - trx.run(sql`CREATE TABLE 'supporterKey' ( - 'keyId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'key' text NOT NULL, - 'githubUsername' text NOT NULL, - 'phrase' text, - 'tier' text, - 'valid' integer DEFAULT false NOT NULL -);`); - }); - - console.log(`Migrated database schema`); - } catch (e) { - console.log("Unable to migrate database schema"); - throw e; - } - - console.log(`${version} migration complete`); -} diff --git a/server/setup/scriptsSqlite/1.10.0.ts b/server/setup/scriptsSqlite/1.10.0.ts deleted file mode 100644 index 3065a664d..000000000 --- a/server/setup/scriptsSqlite/1.10.0.ts +++ /dev/null @@ -1,136 +0,0 @@ -import { __DIRNAME, APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; -import { readFileSync } from "fs"; -import path, { join } from "path"; - -const version = "1.10.0"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); - - try { - const resources = db - .prepare( - "SELECT resourceId FROM resources" - ) - .all() as Array<{ resourceId: number }>; - - const siteResources = db - .prepare( - "SELECT siteResourceId FROM siteResources" - ) - .all() as Array<{ siteResourceId: number }>; - - db.transaction(() => { - db.exec(` - ALTER TABLE 'exitNodes' ADD 'region' text; - ALTER TABLE 'idpOidcConfig' ADD 'variant' text DEFAULT 'oidc' NOT NULL; - ALTER TABLE 'resources' ADD 'niceId' text DEFAULT '' NOT NULL; - ALTER TABLE 'siteResources' ADD 'niceId' text DEFAULT '' NOT NULL; - ALTER TABLE 'userOrgs' ADD 'autoProvisioned' integer DEFAULT false; - ALTER TABLE 'targets' ADD 'pathMatchType' text; - ALTER TABLE 'targets' ADD 'path' text; - ALTER TABLE 'resources' ADD 'headers' text; - `); // this diverges from the schema a bit because the schema does not have a default on niceId but was required for the migration and I dont think it will effect much down the line... - - const usedNiceIds: string[] = []; - - for (const resourceId of resources) { - // Generate a unique name and ensure it's unique - let niceId = ""; - let loops = 0; - while (true) { - if (loops > 100) { - throw new Error("Could not generate a unique name"); - } - - niceId = generateName(); - if (!usedNiceIds.includes(niceId)) { - usedNiceIds.push(niceId); - break; - } - loops++; - } - db.prepare( - `UPDATE resources SET niceId = ? WHERE resourceId = ?` - ).run(niceId, resourceId.resourceId); - } - - for (const resourceId of siteResources) { - // Generate a unique name and ensure it's unique - let niceId = ""; - let loops = 0; - while (true) { - if (loops > 100) { - throw new Error("Could not generate a unique name"); - } - - niceId = generateName(); - if (!usedNiceIds.includes(niceId)) { - usedNiceIds.push(niceId); - break; - } - loops++; - } - db.prepare( - `UPDATE siteResources SET niceId = ? WHERE siteResourceId = ?` - ).run(niceId, resourceId.siteResourceId); - } - - // Handle auto-provisioned users for identity providers - const autoProvisionIdps = db - .prepare( - "SELECT idpId FROM idp WHERE autoProvision = 1" - ) - .all() as Array<{ idpId: number }>; - - for (const idp of autoProvisionIdps) { - // Get all users with this identity provider - const usersWithIdp = db - .prepare( - "SELECT id FROM user WHERE idpId = ?" - ) - .all(idp.idpId) as Array<{ id: string }>; - - // Update userOrgs to set autoProvisioned to true for these users - for (const user of usersWithIdp) { - db.prepare( - "UPDATE userOrgs SET autoProvisioned = 1 WHERE userId = ?" - ).run(user.id); - } - } - })(); - - console.log(`Migrated database`); - } catch (e) { - console.log("Failed to migrate db:", e); - throw e; - } -} - -const dev = process.env.ENVIRONMENT !== "prod"; -let file; -if (!dev) { - file = join(__DIRNAME, "names.json"); -} else { - file = join("server/db/names.json"); -} -export const names = JSON.parse(readFileSync(file, "utf-8")); - -export function generateName(): string { - const name = ( - names.descriptors[ - Math.floor(Math.random() * names.descriptors.length) - ] + - "-" + - names.animals[Math.floor(Math.random() * names.animals.length)] - ) - .toLowerCase() - .replace(/\s/g, "-"); - - // clean out any non-alphanumeric characters except for dashes - return name.replace(/[^a-z0-9-]/g, ""); -} diff --git a/server/setup/scriptsSqlite/1.10.1.ts b/server/setup/scriptsSqlite/1.10.1.ts deleted file mode 100644 index f6f9894ed..000000000 --- a/server/setup/scriptsSqlite/1.10.1.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; -import path from "path"; - -const version = "1.10.1"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); - - try { - db.pragma("foreign_keys = OFF"); - - db.transaction(() => { - db.exec(`ALTER TABLE "targets" RENAME TO "targets_old"; ---> statement-breakpoint -CREATE TABLE "targets" ( - "targetId" INTEGER PRIMARY KEY AUTOINCREMENT, - "resourceId" INTEGER NOT NULL, - "siteId" INTEGER NOT NULL, - "ip" TEXT NOT NULL, - "method" TEXT, - "port" INTEGER NOT NULL, - "internalPort" INTEGER, - "enabled" INTEGER NOT NULL DEFAULT 1, - "path" TEXT, - "pathMatchType" TEXT, - FOREIGN KEY ("resourceId") REFERENCES "resources"("resourceId") ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ("siteId") REFERENCES "sites"("siteId") ON UPDATE no action ON DELETE cascade -); ---> statement-breakpoint -INSERT INTO "targets" ( - "targetId", - "resourceId", - "siteId", - "ip", - "method", - "port", - "internalPort", - "enabled", - "path", - "pathMatchType" -) -SELECT - targetId, - resourceId, - siteId, - ip, - method, - port, - internalPort, - enabled, - path, - pathMatchType -FROM "targets_old"; ---> statement-breakpoint -DROP TABLE "targets_old";`); - })(); - - db.pragma("foreign_keys = ON"); - - console.log(`Migrated database`); - } catch (e) { - console.log("Failed to migrate db:", e); - throw e; - } -} \ No newline at end of file diff --git a/server/setup/scriptsSqlite/1.10.2.ts b/server/setup/scriptsSqlite/1.10.2.ts deleted file mode 100644 index 7978e2621..000000000 --- a/server/setup/scriptsSqlite/1.10.2.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; -import path from "path"; - -const version = "1.10.2"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); - - const resources = db.prepare("SELECT * FROM resources").all() as Array<{ - resourceId: number; - headers: string | null; - }>; - - try { - db.pragma("foreign_keys = OFF"); - - db.transaction(() => { - for (const resource of resources) { - const headers = resource.headers; - if (headers && headers !== "") { - // lets convert it to json - // fist split at commas - const headersArray = headers - .split(",") - .map((header: string) => { - const [name, ...valueParts] = header.split(":"); - const value = valueParts.join(":").trim(); - return { name: name.trim(), value }; - }); - - db.prepare( - ` - UPDATE "resources" SET "headers" = ? WHERE "resourceId" = ?` - ).run(JSON.stringify(headersArray), resource.resourceId); - - console.log( - `Updated resource ${resource.resourceId} headers to JSON format` - ); - } - } - })(); - - db.pragma("foreign_keys = ON"); - - console.log(`Migrated database`); - } catch (e) { - console.log("Failed to migrate db:", e); - throw e; - } -} diff --git a/server/setup/scriptsSqlite/1.11.0.ts b/server/setup/scriptsSqlite/1.11.0.ts deleted file mode 100644 index c79cfdb46..000000000 --- a/server/setup/scriptsSqlite/1.11.0.ts +++ /dev/null @@ -1,339 +0,0 @@ -import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; -import path from "path"; -import { isoBase64URL } from "@simplewebauthn/server/helpers"; -import { randomUUID } from "crypto"; - -const version = "1.11.0"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); - - db.transaction(() => { - - db.prepare(` - CREATE TABLE 'account' ( - 'accountId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'userId' text NOT NULL, - FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'accountDomains' ( - 'accountId' integer NOT NULL, - 'domainId' text NOT NULL, - FOREIGN KEY ('accountId') REFERENCES 'account'('accountId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'certificates' ( - 'certId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'domain' text NOT NULL, - 'domainId' text, - 'wildcard' integer DEFAULT false, - 'status' text DEFAULT 'pending' NOT NULL, - 'expiresAt' integer, - 'lastRenewalAttempt' integer, - 'createdAt' integer NOT NULL, - 'updatedAt' integer NOT NULL, - 'orderId' text, - 'errorMessage' text, - 'renewalCount' integer DEFAULT 0, - 'certFile' text, - 'keyFile' text, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(`CREATE UNIQUE INDEX 'certificates_domain_unique' ON 'certificates' ('domain');`).run(); - - db.prepare(` - CREATE TABLE 'customers' ( - 'customerId' text PRIMARY KEY NOT NULL, - 'orgId' text NOT NULL, - 'email' text, - 'name' text, - 'phone' text, - 'address' text, - 'createdAt' integer NOT NULL, - 'updatedAt' integer NOT NULL, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'dnsChallenges' ( - 'dnsChallengeId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'domain' text NOT NULL, - 'token' text NOT NULL, - 'keyAuthorization' text NOT NULL, - 'createdAt' integer NOT NULL, - 'expiresAt' integer NOT NULL, - 'completed' integer DEFAULT false - ); - `).run(); - - db.prepare(` - CREATE TABLE 'domainNamespaces' ( - 'domainNamespaceId' text PRIMARY KEY NOT NULL, - 'domainId' text NOT NULL, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null - ); - `).run(); - - db.prepare(` - CREATE TABLE 'exitNodeOrgs' ( - 'exitNodeId' integer NOT NULL, - 'orgId' text NOT NULL, - FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'loginPage' ( - 'loginPageId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'subdomain' text, - 'fullDomain' text, - 'exitNodeId' integer, - 'domainId' text, - FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null - ); - `).run(); - - db.prepare(` - CREATE TABLE 'loginPageOrg' ( - 'loginPageId' integer NOT NULL, - 'orgId' text NOT NULL, - FOREIGN KEY ('loginPageId') REFERENCES 'loginPage'('loginPageId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'remoteExitNodeSession' ( - 'id' text PRIMARY KEY NOT NULL, - 'remoteExitNodeId' text NOT NULL, - 'expiresAt' integer NOT NULL, - FOREIGN KEY ('remoteExitNodeId') REFERENCES 'remoteExitNode'('id') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'remoteExitNode' ( - 'id' text PRIMARY KEY NOT NULL, - 'secretHash' text NOT NULL, - 'dateCreated' text NOT NULL, - 'version' text, - 'exitNodeId' integer, - FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'sessionTransferToken' ( - 'token' text PRIMARY KEY NOT NULL, - 'sessionId' text NOT NULL, - 'encryptedSession' text NOT NULL, - 'expiresAt' integer NOT NULL, - FOREIGN KEY ('sessionId') REFERENCES 'session'('id') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'subscriptionItems' ( - 'subscriptionItemId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'subscriptionId' text NOT NULL, - 'planId' text NOT NULL, - 'priceId' text, - 'meterId' text, - 'unitAmount' real, - 'tiers' text, - 'interval' text, - 'currentPeriodStart' integer, - 'currentPeriodEnd' integer, - 'name' text, - FOREIGN KEY ('subscriptionId') REFERENCES 'subscriptions'('subscriptionId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'subscriptions' ( - 'subscriptionId' text PRIMARY KEY NOT NULL, - 'customerId' text NOT NULL, - 'status' text DEFAULT 'active' NOT NULL, - 'canceledAt' integer, - 'createdAt' integer NOT NULL, - 'updatedAt' integer, - 'billingCycleAnchor' integer, - FOREIGN KEY ('customerId') REFERENCES 'customers'('customerId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'usage' ( - 'usageId' text PRIMARY KEY NOT NULL, - 'featureId' text NOT NULL, - 'orgId' text NOT NULL, - 'meterId' text, - 'instantaneousValue' real, - 'latestValue' real NOT NULL, - 'previousValue' real, - 'updatedAt' integer NOT NULL, - 'rolledOverAt' integer, - 'nextRolloverAt' integer, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'usageNotifications' ( - 'notificationId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'orgId' text NOT NULL, - 'featureId' text NOT NULL, - 'limitId' text NOT NULL, - 'notificationType' text NOT NULL, - 'sentAt' integer NOT NULL, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'resourceHeaderAuth' ( - 'headerAuthId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'resourceId' integer NOT NULL, - 'headerAuthHash' text NOT NULL, - FOREIGN KEY ('resourceId') REFERENCES 'resources'('resourceId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'targetHealthCheck' ( - 'targetHealthCheckId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'targetId' integer NOT NULL, - 'hcEnabled' integer DEFAULT false NOT NULL, - 'hcPath' text, - 'hcScheme' text, - 'hcMode' text DEFAULT 'http', - 'hcHostname' text, - 'hcPort' integer, - 'hcInterval' integer DEFAULT 30, - 'hcUnhealthyInterval' integer DEFAULT 30, - 'hcTimeout' integer DEFAULT 5, - 'hcHeaders' text, - 'hcFollowRedirects' integer DEFAULT true, - 'hcMethod' text DEFAULT 'GET', - 'hcStatus' integer, - 'hcHealth' text DEFAULT 'unknown', - FOREIGN KEY ('targetId') REFERENCES 'targets'('targetId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(`DROP TABLE 'limits';`).run(); - - db.prepare(` - CREATE TABLE 'limits' ( - 'limitId' text PRIMARY KEY NOT NULL, - 'featureId' text NOT NULL, - 'orgId' text NOT NULL, - 'value' real, - 'description' text, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(`ALTER TABLE 'orgs' ADD 'settings' text;`).run(); - db.prepare(`ALTER TABLE 'targets' ADD 'rewritePath' text;`).run(); - db.prepare(`ALTER TABLE 'targets' ADD 'rewritePathType' text;`).run(); - db.prepare(`ALTER TABLE 'targets' ADD 'priority' integer DEFAULT 100 NOT NULL;`).run(); - - const webauthnCredentials = db - .prepare( - `SELECT credentialId, publicKey, userId, signCount, transports, name, lastUsed, dateCreated FROM 'webauthnCredentials'` - ) - .all() as { - credentialId: string; - publicKey: string; - userId: string; - signCount: number; - transports: string | null; - name: string | null; - lastUsed: string; - dateCreated: string; - }[]; - - db.prepare(`DELETE FROM 'webauthnCredentials';`).run(); - - for (const webauthnCredential of webauthnCredentials) { - const newCredentialId = isoBase64URL.fromBuffer( - new Uint8Array( - Buffer.from(webauthnCredential.credentialId, "base64") - ) - ); - const newPublicKey = isoBase64URL.fromBuffer( - new Uint8Array( - Buffer.from(webauthnCredential.publicKey, "base64") - ) - ); - - // Insert the updated record with converted values - db.prepare( - `INSERT INTO 'webauthnCredentials' (credentialId, publicKey, userId, signCount, transports, name, lastUsed, dateCreated) VALUES (?, ?, ?, ?, ?, ?, ?, ?)` - ).run( - newCredentialId, - newPublicKey, - webauthnCredential.userId, - webauthnCredential.signCount, - webauthnCredential.transports, - webauthnCredential.name, - webauthnCredential.lastUsed, - webauthnCredential.dateCreated - ); - } - - // 1. Add the column (nullable or with placeholder) if it doesn’t exist yet - db.prepare( - `ALTER TABLE resources ADD COLUMN resourceGuid TEXT DEFAULT 'PLACEHOLDER';` - ).run(); - - // 2. Select all rows - const resources = db.prepare(`SELECT resourceId FROM resources`).all() as { - resourceId: number; - }[]; - - // 3. Prefill with random UUIDs - const updateStmt = db.prepare( - `UPDATE resources SET resourceGuid = ? WHERE resourceId = ?` - ); - - for (const row of resources) { - updateStmt.run(randomUUID(), row.resourceId); - } - - // get all of the targets - const targets = db.prepare(`SELECT targetId FROM targets`).all() as { - targetId: number; - }[]; - - const insertTargetHealthCheckStmt = db.prepare( - `INSERT INTO targetHealthCheck (targetId) VALUES (?)` - ); - - for (const target of targets) { - insertTargetHealthCheckStmt.run(target.targetId); - } - - db.prepare( - `CREATE UNIQUE INDEX resources_resourceGuid_unique ON resources ('resourceGuid');` - ).run(); - })(); - - console.log(`${version} migration complete`); -} diff --git a/server/setup/scriptsSqlite/1.11.1.ts b/server/setup/scriptsSqlite/1.11.1.ts deleted file mode 100644 index 7f9065b6e..000000000 --- a/server/setup/scriptsSqlite/1.11.1.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; -import path from "path"; - -const version = "1.11.1"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); - - db.transaction(() => { - const exitNodes = db.prepare(`SELECT * FROM exitNodes WHERE type = 'gerbil' LIMIT 1`).all() as { - exitNodeId: number; - name: string; - }[]; - - const exitNodeId = exitNodes.length > 0 ? exitNodes[0].exitNodeId : null; - - // get all of the targets - const sites = db.prepare(`SELECT * FROM sites WHERE type = 'local'`).all() as { - siteId: number; - exitNodeId: number | null; - }[]; - - const defineExitNodeOnSite = db.prepare( - `UPDATE sites SET exitNodeId = ? WHERE siteId = ?` - ); - - for (const site of sites) { - defineExitNodeOnSite.run(exitNodeId, site.siteId); - } - })(); - - console.log(`${version} migration complete`); -} \ No newline at end of file diff --git a/server/setup/scriptsSqlite/1.2.0.ts b/server/setup/scriptsSqlite/1.2.0.ts deleted file mode 100644 index e6ba029af..000000000 --- a/server/setup/scriptsSqlite/1.2.0.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { db } from "../../db/sqlite"; -import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; -import { sql } from "drizzle-orm"; -import fs from "fs"; -import yaml from "js-yaml"; -import path from "path"; -import { z } from "zod"; -import { fromZodError } from "zod-validation-error"; - -const version = "1.2.0"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - try { - db.transaction((trx) => { - trx.run( - sql`ALTER TABLE 'resources' ADD 'enabled' integer DEFAULT true NOT NULL;` - ); - }); - - console.log(`Migrated database schema`); - } catch (e) { - console.log("Unable to migrate database schema"); - throw e; - } - - try { - // Determine which config file exists - const filePaths = [configFilePath1, configFilePath2]; - let filePath = ""; - for (const path of filePaths) { - if (fs.existsSync(path)) { - filePath = path; - break; - } - } - - if (!filePath) { - throw new Error( - `No config file found (expected config.yml or config.yaml).` - ); - } - - // Read and parse the YAML file - const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig = yaml.load(fileContents) as any; - - if (!rawConfig.flags) { - rawConfig.flags = {}; - } - - rawConfig.server.resource_access_token_headers = { - id: "P-Access-Token-Id", - token: "P-Access-Token" - }; - - // Write the updated YAML back to the file - const updatedYaml = yaml.dump(rawConfig); - fs.writeFileSync(filePath, updatedYaml, "utf8"); - - console.log(`Added new config option: resource_access_token_headers`); - } catch (e) { - console.log( - `Unable to add new config option: resource_access_token_headers. Please add it manually. https://docs.pangolin.net/self-host/advanced/config-file` - ); - console.error(e); - } - - try { - const traefikPath = path.join( - APP_PATH, - "traefik", - "traefik_config.yml" - ); - - const schema = z.object({ - experimental: z.object({ - plugins: z.object({ - badger: z.object({ - moduleName: z.string(), - version: z.string() - }) - }) - }) - }); - - const traefikFileContents = fs.readFileSync(traefikPath, "utf8"); - const traefikConfig = yaml.load(traefikFileContents) as any; - - const parsedConfig = schema.safeParse(traefikConfig); - - if (!parsedConfig.success) { - throw new Error(fromZodError(parsedConfig.error).toString()); - } - - traefikConfig.experimental.plugins.badger.version = "v1.1.0"; - - const updatedTraefikYaml = yaml.dump(traefikConfig); - - fs.writeFileSync(traefikPath, updatedTraefikYaml, "utf8"); - - console.log( - "Updated the version of Badger in your Traefik configuration to v1.1.0" - ); - } catch (e) { - console.log( - "We were unable to update the version of Badger in your Traefik configuration. Please update it manually. Check the release notes for this version for more information." - ); - console.error(e); - } - - console.log(`${version} migration complete`); -} diff --git a/server/setup/scriptsSqlite/1.3.0.ts b/server/setup/scriptsSqlite/1.3.0.ts deleted file mode 100644 index a084d59ff..000000000 --- a/server/setup/scriptsSqlite/1.3.0.ts +++ /dev/null @@ -1,203 +0,0 @@ -import Database from "better-sqlite3"; -import path from "path"; -import fs from "fs"; -import yaml from "js-yaml"; -import { encodeBase32LowerCaseNoPadding } from "@oslojs/encoding"; -import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; - -const version = "1.3.0"; -const location = path.join(APP_PATH, "db", "db.sqlite"); - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - const db = new Database(location); - - try { - db.pragma("foreign_keys = OFF"); - db.transaction(() => { - db.exec(` - CREATE TABLE 'apiKeyActions' ( - 'apiKeyId' text NOT NULL, - 'actionId' text NOT NULL, - FOREIGN KEY ('apiKeyId') REFERENCES 'apiKeys'('apiKeyId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('actionId') REFERENCES 'actions'('actionId') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'apiKeyOrg' ( - 'apiKeyId' text NOT NULL, - 'orgId' text NOT NULL, - FOREIGN KEY ('apiKeyId') REFERENCES 'apiKeys'('apiKeyId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'apiKeys' ( - 'apiKeyId' text PRIMARY KEY NOT NULL, - 'name' text NOT NULL, - 'apiKeyHash' text NOT NULL, - 'lastChars' text NOT NULL, - 'dateCreated' text NOT NULL, - 'isRoot' integer DEFAULT false NOT NULL - ); - - CREATE TABLE 'hostMeta' ( - 'hostMetaId' text PRIMARY KEY NOT NULL, - 'createdAt' integer NOT NULL - ); - - CREATE TABLE 'idp' ( - 'idpId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'name' text NOT NULL, - 'type' text NOT NULL, - 'defaultRoleMapping' text, - 'defaultOrgMapping' text, - 'autoProvision' integer DEFAULT false NOT NULL - ); - - CREATE TABLE 'idpOidcConfig' ( - 'idpOauthConfigId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'idpId' integer NOT NULL, - 'clientId' text NOT NULL, - 'clientSecret' text NOT NULL, - 'authUrl' text NOT NULL, - 'tokenUrl' text NOT NULL, - 'identifierPath' text NOT NULL, - 'emailPath' text, - 'namePath' text, - 'scopes' text NOT NULL, - FOREIGN KEY ('idpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'idpOrg' ( - 'idpId' integer NOT NULL, - 'orgId' text NOT NULL, - 'roleMapping' text, - 'orgMapping' text, - FOREIGN KEY ('idpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'licenseKey' ( - 'licenseKeyId' text PRIMARY KEY NOT NULL, - 'instanceId' text NOT NULL, - 'token' text NOT NULL - ); - - CREATE TABLE '__new_user' ( - 'id' text PRIMARY KEY NOT NULL, - 'email' text, - 'username' text NOT NULL, - 'name' text, - 'type' text NOT NULL, - 'idpId' integer, - 'passwordHash' text, - 'twoFactorEnabled' integer DEFAULT false NOT NULL, - 'twoFactorSecret' text, - 'emailVerified' integer DEFAULT false NOT NULL, - 'dateCreated' text NOT NULL, - 'serverAdmin' integer DEFAULT false NOT NULL, - FOREIGN KEY ('idpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE cascade - ); - - INSERT INTO '__new_user'( - "id", "email", "username", "name", "type", "idpId", "passwordHash", - "twoFactorEnabled", "twoFactorSecret", "emailVerified", "dateCreated", "serverAdmin" - ) - SELECT - "id", - "email", - COALESCE("email", 'unknown'), - NULL, - 'internal', - NULL, - "passwordHash", - "twoFactorEnabled", - "twoFactorSecret", - "emailVerified", - "dateCreated", - "serverAdmin" - FROM 'user'; - - DROP TABLE 'user'; - ALTER TABLE '__new_user' RENAME TO 'user'; - - ALTER TABLE 'resources' ADD 'stickySession' integer DEFAULT false NOT NULL; - ALTER TABLE 'resources' ADD 'tlsServerName' text; - ALTER TABLE 'resources' ADD 'setHostHeader' text; - - CREATE TABLE 'exitNodes_new' ( - 'exitNodeId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'name' text NOT NULL, - 'address' text NOT NULL, - 'endpoint' text NOT NULL, - 'publicKey' text NOT NULL, - 'listenPort' integer NOT NULL, - 'reachableAt' text - ); - - INSERT INTO 'exitNodes_new' ( - 'exitNodeId', 'name', 'address', 'endpoint', 'publicKey', 'listenPort', 'reachableAt' - ) - SELECT - exitNodeId, - name, - address, - endpoint, - pubicKey, - listenPort, - reachableAt - FROM exitNodes; - - DROP TABLE 'exitNodes'; - ALTER TABLE 'exitNodes_new' RENAME TO 'exitNodes'; - `); - })(); // <-- executes the transaction immediately - db.pragma("foreign_keys = ON"); - console.log(`Migrated database schema`); - } catch (e) { - console.log("Unable to migrate database schema"); - throw e; - } - - // Update config file - try { - const filePaths = [configFilePath1, configFilePath2]; - let filePath = ""; - for (const path of filePaths) { - if (fs.existsSync(path)) { - filePath = path; - break; - } - } - - if (!filePath) { - throw new Error( - `No config file found (expected config.yml or config.yaml).` - ); - } - - const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig = yaml.load(fileContents) as any; - - if (!rawConfig.server.secret) { - rawConfig.server.secret = generateIdFromEntropySize(32); - } - - const updatedYaml = yaml.dump(rawConfig); - fs.writeFileSync(filePath, updatedYaml, "utf8"); - - console.log(`Added new config option: server.secret`); - } catch (e) { - console.log( - `Unable to add new config option: server.secret. Please add it manually.` - ); - console.error(e); - } - - console.log(`${version} migration complete`); -} - -function generateIdFromEntropySize(size: number): string { - const buffer = crypto.getRandomValues(new Uint8Array(size)); - return encodeBase32LowerCaseNoPadding(buffer); -} diff --git a/server/setup/scriptsSqlite/1.5.0.ts b/server/setup/scriptsSqlite/1.5.0.ts deleted file mode 100644 index 46e9cccaa..000000000 --- a/server/setup/scriptsSqlite/1.5.0.ts +++ /dev/null @@ -1,70 +0,0 @@ -import Database from "better-sqlite3"; -import path from "path"; -import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; -import fs from "fs"; -import yaml from "js-yaml"; - -const version = "1.5.0"; -const location = path.join(APP_PATH, "db", "db.sqlite"); - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - const db = new Database(location); - - try { - db.pragma("foreign_keys = OFF"); - db.transaction(() => { - db.exec(` - ALTER TABLE 'sites' ADD 'dockerSocketEnabled' integer DEFAULT true NOT NULL; - `); - })(); // <-- executes the transaction immediately - db.pragma("foreign_keys = ON"); - console.log(`Migrated database schema`); - } catch (e) { - console.log("Unable to migrate database schema"); - throw e; - } - - try { - // Determine which config file exists - const filePaths = [configFilePath1, configFilePath2]; - let filePath = ""; - for (const path of filePaths) { - if (fs.existsSync(path)) { - filePath = path; - break; - } - } - - if (!filePath) { - throw new Error( - `No config file found (expected config.yml or config.yaml).` - ); - } - - // Read and parse the YAML file - const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig = yaml.load(fileContents) as any; - - if (rawConfig.cors?.headers) { - const headers = JSON.parse( - JSON.stringify(rawConfig.cors.headers) - ); - rawConfig.cors.allowed_headers = headers; - delete rawConfig.cors.headers; - } - - // Write the updated YAML back to the file - const updatedYaml = yaml.dump(rawConfig); - fs.writeFileSync(filePath, updatedYaml, "utf8"); - - console.log(`Migrated CORS headers to allowed_headers`); - } catch (e) { - console.log( - `Unable to migrate config file. Error: ${e}` - ); - } - - console.log(`${version} migration complete`); -} diff --git a/server/setup/scriptsSqlite/1.6.0.ts b/server/setup/scriptsSqlite/1.6.0.ts deleted file mode 100644 index adab26977..000000000 --- a/server/setup/scriptsSqlite/1.6.0.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; -import Database from "better-sqlite3"; -import fs from "fs"; -import yaml from "js-yaml"; -import path from "path"; - -const version = "1.6.0"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); - - try { - db.pragma("foreign_keys = OFF"); - db.transaction(() => { - db.exec(` - UPDATE 'user' SET email = LOWER(email); - UPDATE 'user' SET username = LOWER(username); - `); - })(); // <-- executes the transaction immediately - db.pragma("foreign_keys = ON"); - console.log(`Migrated database schema`); - } catch (e) { - console.log("Unable to make all usernames and emails lowercase"); - console.log(e); - } - - try { - // Determine which config file exists - const filePaths = [configFilePath1, configFilePath2]; - let filePath = ""; - for (const path of filePaths) { - if (fs.existsSync(path)) { - filePath = path; - break; - } - } - - if (!filePath) { - throw new Error( - `No config file found (expected config.yml or config.yaml).` - ); - } - - // Read and parse the YAML file - const fileContents = fs.readFileSync(filePath, "utf8"); - const rawConfig = yaml.load(fileContents) as any; - - if (rawConfig.server?.trust_proxy) { - rawConfig.server.trust_proxy = 1; - } - - // Write the updated YAML back to the file - const updatedYaml = yaml.dump(rawConfig); - fs.writeFileSync(filePath, updatedYaml, "utf8"); - - console.log(`Set trust_proxy to 1 in config file`); - } catch (e) { - console.log(`Unable to migrate config file. Please do it manually. Error: ${e}`); - } - - console.log(`${version} migration complete`); -} diff --git a/server/setup/scriptsSqlite/1.7.0.ts b/server/setup/scriptsSqlite/1.7.0.ts deleted file mode 100644 index f173d12e9..000000000 --- a/server/setup/scriptsSqlite/1.7.0.ts +++ /dev/null @@ -1,187 +0,0 @@ -import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; -import path from "path"; - -const version = "1.7.0"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); - - try { - db.pragma("foreign_keys = OFF"); - - db.transaction(() => { - db.exec(` - CREATE TABLE 'clientSites' ( - 'clientId' integer NOT NULL, - 'siteId' integer NOT NULL, - 'isRelayed' integer DEFAULT 0 NOT NULL, - FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('siteId') REFERENCES 'sites'('siteId') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'clients' ( - 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'orgId' text NOT NULL, - 'exitNode' integer, - 'name' text NOT NULL, - 'pubKey' text, - 'subnet' text NOT NULL, - 'bytesIn' integer, - 'bytesOut' integer, - 'lastBandwidthUpdate' text, - 'lastPing' text, - 'type' text NOT NULL, - 'online' integer DEFAULT 0 NOT NULL, - 'endpoint' text, - 'lastHolePunch' integer, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('exitNode') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null - ); - - CREATE TABLE 'clientSession' ( - 'id' text PRIMARY KEY NOT NULL, - 'olmId' text NOT NULL, - 'expiresAt' integer NOT NULL, - FOREIGN KEY ('olmId') REFERENCES 'olms'('id') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'olms' ( - 'id' text PRIMARY KEY NOT NULL, - 'secretHash' text NOT NULL, - 'dateCreated' text NOT NULL, - 'clientId' integer, - FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'roleClients' ( - 'roleId' integer NOT NULL, - 'clientId' integer NOT NULL, - FOREIGN KEY ('roleId') REFERENCES 'roles'('roleId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'webauthnCredentials' ( - 'credentialId' text PRIMARY KEY NOT NULL, - 'userId' text NOT NULL, - 'publicKey' text NOT NULL, - 'signCount' integer NOT NULL, - 'transports' text, - 'name' text, - 'lastUsed' text NOT NULL, - 'dateCreated' text NOT NULL, - FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'userClients' ( - 'userId' text NOT NULL, - 'clientId' integer NOT NULL, - FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'userDomains' ( - 'userId' text NOT NULL, - 'domainId' text NOT NULL, - FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'webauthnChallenge' ( - 'sessionId' text PRIMARY KEY NOT NULL, - 'challenge' text NOT NULL, - 'securityKeyName' text, - 'userId' text, - 'expiresAt' integer NOT NULL, - FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade - ); - - `); - - db.exec(` - CREATE TABLE '__new_sites' ( - 'siteId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'orgId' text NOT NULL, - 'niceId' text NOT NULL, - 'exitNode' integer, - 'name' text NOT NULL, - 'pubKey' text, - 'subnet' text, - 'bytesIn' integer DEFAULT 0, - 'bytesOut' integer DEFAULT 0, - 'lastBandwidthUpdate' text, - 'type' text NOT NULL, - 'online' integer DEFAULT 0 NOT NULL, - 'address' text, - 'endpoint' text, - 'publicKey' text, - 'lastHolePunch' integer, - 'listenPort' integer, - 'dockerSocketEnabled' integer DEFAULT 1 NOT NULL, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('exitNode') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null - ); - - INSERT INTO '__new_sites' ( - 'siteId', 'orgId', 'niceId', 'exitNode', 'name', 'pubKey', 'subnet', 'bytesIn', 'bytesOut', 'lastBandwidthUpdate', 'type', 'online', 'address', 'endpoint', 'publicKey', 'lastHolePunch', 'listenPort', 'dockerSocketEnabled' - ) - SELECT siteId, orgId, niceId, exitNode, name, pubKey, subnet, bytesIn, bytesOut, lastBandwidthUpdate, type, online, NULL, NULL, NULL, NULL, NULL, dockerSocketEnabled - FROM sites; - - DROP TABLE 'sites'; - ALTER TABLE '__new_sites' RENAME TO 'sites'; - `); - - db.exec(` - ALTER TABLE 'domains' ADD 'type' text; - ALTER TABLE 'domains' ADD 'verified' integer DEFAULT 0 NOT NULL; - ALTER TABLE 'domains' ADD 'failed' integer DEFAULT 0 NOT NULL; - ALTER TABLE 'domains' ADD 'tries' integer DEFAULT 0 NOT NULL; - ALTER TABLE 'exitNodes' ADD 'maxConnections' integer; - ALTER TABLE 'newt' ADD 'version' text; - ALTER TABLE 'orgs' ADD 'subnet' text; - ALTER TABLE 'user' ADD 'twoFactorSetupRequested' integer DEFAULT 0; - ALTER TABLE 'resources' DROP COLUMN 'isBaseDomain'; - `); - })(); - - db.pragma("foreign_keys = ON"); - - console.log(`Migrated database schema`); - } catch (e) { - console.log("Unable to migrate database schema"); - throw e; - } - - db.transaction(() => { - // Update all existing orgs to have the default subnet - db.exec(`UPDATE 'orgs' SET 'subnet' = '100.90.128.0/24'`); - - // Get all orgs and their sites to assign sequential IP addresses - const orgs = db.prepare(`SELECT orgId FROM 'orgs'`).all() as { - orgId: string; - }[]; - - for (const org of orgs) { - const sites = db - .prepare( - `SELECT siteId FROM 'sites' WHERE orgId = ? ORDER BY siteId` - ) - .all(org.orgId) as { siteId: number }[]; - - let ipIndex = 1; - for (const site of sites) { - const address = `100.90.128.${ipIndex}/24`; - db.prepare( - `UPDATE 'sites' SET 'address' = ? WHERE siteId = ?` - ).run(address, site.siteId); - ipIndex++; - } - } - })(); - - console.log(`${version} migration complete`); -} diff --git a/server/setup/scriptsSqlite/1.8.0.ts b/server/setup/scriptsSqlite/1.8.0.ts deleted file mode 100644 index f8ac7c951..000000000 --- a/server/setup/scriptsSqlite/1.8.0.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; -import path from "path"; - -const version = "1.8.0"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); - - try { - db.transaction(() => { - db.exec(` - ALTER TABLE 'resources' ADD 'enableProxy' integer DEFAULT 1; - ALTER TABLE 'sites' ADD 'remoteSubnets' text; - ALTER TABLE 'user' ADD 'termsAcceptedTimestamp' text; - ALTER TABLE 'user' ADD 'termsVersion' text; - `); - })(); - - console.log("Migrated database schema"); - } catch (e) { - console.log("Unable to migrate database schema"); - throw e; - } - - console.log(`${version} migration complete`); -} diff --git a/server/setup/scriptsSqlite/1.9.0.ts b/server/setup/scriptsSqlite/1.9.0.ts deleted file mode 100644 index 5f247ea50..000000000 --- a/server/setup/scriptsSqlite/1.9.0.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; -import path from "path"; - -const version = "1.9.0"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); - - const resourceSiteMap = new Map(); - let firstSiteId: number = 1; - - try { - // Get the first siteId to use as default - const firstSite = db.prepare("SELECT siteId FROM sites LIMIT 1").get() as { siteId: number } | undefined; - if (firstSite) { - firstSiteId = firstSite.siteId; - } - - const resources = db - .prepare( - "SELECT resourceId, siteId FROM resources WHERE siteId IS NOT NULL" - ) - .all() as Array<{ resourceId: number; siteId: number }>; - for (const resource of resources) { - resourceSiteMap.set(resource.resourceId, resource.siteId); - } - } catch (e) { - console.log("Error getting resources:", e); - } - - try { - db.pragma("foreign_keys = OFF"); - - db.transaction(() => { - db.exec(`CREATE TABLE 'setupTokens' ( - 'tokenId' text PRIMARY KEY NOT NULL, - 'token' text NOT NULL, - 'used' integer DEFAULT false NOT NULL, - 'dateCreated' text NOT NULL, - 'dateUsed' text -); ---> statement-breakpoint -CREATE TABLE 'siteResources' ( - 'siteResourceId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'siteId' integer NOT NULL, - 'orgId' text NOT NULL, - 'name' text NOT NULL, - 'protocol' text NOT NULL, - 'proxyPort' integer NOT NULL, - 'destinationPort' integer NOT NULL, - 'destinationIp' text NOT NULL, - 'enabled' integer DEFAULT true NOT NULL, - FOREIGN KEY ('siteId') REFERENCES 'sites'('siteId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade -); ---> statement-breakpoint -PRAGMA foreign_keys=OFF;--> statement-breakpoint -CREATE TABLE '__new_resources' ( - 'resourceId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'orgId' text NOT NULL, - 'name' text NOT NULL, - 'subdomain' text, - 'fullDomain' text, - 'domainId' text, - 'ssl' integer DEFAULT false NOT NULL, - 'blockAccess' integer DEFAULT false NOT NULL, - 'sso' integer DEFAULT true NOT NULL, - 'http' integer DEFAULT true NOT NULL, - 'protocol' text NOT NULL, - 'proxyPort' integer, - 'emailWhitelistEnabled' integer DEFAULT false NOT NULL, - 'applyRules' integer DEFAULT false NOT NULL, - 'enabled' integer DEFAULT true NOT NULL, - 'stickySession' integer DEFAULT false NOT NULL, - 'tlsServerName' text, - 'setHostHeader' text, - 'enableProxy' integer DEFAULT true, - 'skipToIdpId' integer, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null, - FOREIGN KEY ('skipToIdpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE cascade -); ---> statement-breakpoint -INSERT INTO '__new_resources'("resourceId", "orgId", "name", "subdomain", "fullDomain", "domainId", "ssl", "blockAccess", "sso", "http", "protocol", "proxyPort", "emailWhitelistEnabled", "applyRules", "enabled", "stickySession", "tlsServerName", "setHostHeader", "enableProxy", "skipToIdpId") SELECT "resourceId", "orgId", "name", "subdomain", "fullDomain", "domainId", "ssl", "blockAccess", "sso", "http", "protocol", "proxyPort", "emailWhitelistEnabled", "applyRules", "enabled", "stickySession", "tlsServerName", "setHostHeader", "enableProxy", null FROM 'resources';--> statement-breakpoint -DROP TABLE 'resources';--> statement-breakpoint -ALTER TABLE '__new_resources' RENAME TO 'resources';--> statement-breakpoint -PRAGMA foreign_keys=ON;--> statement-breakpoint -CREATE TABLE '__new_clients' ( - 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'orgId' text NOT NULL, - 'exitNode' integer, - 'name' text NOT NULL, - 'pubKey' text, - 'subnet' text NOT NULL, - 'bytesIn' integer, - 'bytesOut' integer, - 'lastBandwidthUpdate' text, - 'lastPing' integer, - 'type' text NOT NULL, - 'online' integer DEFAULT false NOT NULL, - 'lastHolePunch' integer, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('exitNode') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null -); ---> statement-breakpoint -INSERT INTO '__new_clients'("id", "orgId", "exitNode", "name", "pubKey", "subnet", "bytesIn", "bytesOut", "lastBandwidthUpdate", "lastPing", "type", "online", "lastHolePunch") SELECT "id", "orgId", "exitNode", "name", "pubKey", "subnet", "bytesIn", "bytesOut", "lastBandwidthUpdate", NULL, "type", "online", "lastHolePunch" FROM 'clients';--> statement-breakpoint -DROP TABLE 'clients';--> statement-breakpoint -ALTER TABLE '__new_clients' RENAME TO 'clients';--> statement-breakpoint -ALTER TABLE 'clientSites' ADD 'endpoint' text;--> statement-breakpoint -ALTER TABLE 'exitNodes' ADD 'online' integer DEFAULT false NOT NULL;--> statement-breakpoint -ALTER TABLE 'exitNodes' ADD 'lastPing' integer;--> statement-breakpoint -ALTER TABLE 'exitNodes' ADD 'type' text DEFAULT 'gerbil';--> statement-breakpoint -ALTER TABLE 'olms' ADD 'version' text;--> statement-breakpoint -ALTER TABLE 'orgs' ADD 'createdAt' text;--> statement-breakpoint -ALTER TABLE 'targets' ADD 'siteId' integer NOT NULL DEFAULT ${firstSiteId || 1} REFERENCES sites(siteId);`); - - // for each resource, get all of its targets, and update the siteId to be the previously stored siteId - for (const [resourceId, siteId] of resourceSiteMap) { - const targets = db - .prepare( - "SELECT targetId FROM targets WHERE resourceId = ?" - ) - .all(resourceId) as Array<{ targetId: number }>; - for (const target of targets) { - db.prepare( - "UPDATE targets SET siteId = ? WHERE targetId = ?" - ).run(siteId, target.targetId); - } - } - - // list resources that have enableProxy false - // move them to the siteResources table - // remove them from the resources table - const proxyFalseResources = db - .prepare("SELECT * FROM resources WHERE enableProxy = 0") - .all() as Array; - - for (const resource of proxyFalseResources) { - // Get the first target to derive destination IP and port - const firstTarget = db - .prepare( - "SELECT ip, port FROM targets WHERE resourceId = ? LIMIT 1" - ) - .get(resource.resourceId) as - | { ip: string; port: number } - | undefined; - - if (!firstTarget) { - continue; - } - - // Insert into siteResources table - const stmt = db.prepare(` - INSERT INTO siteResources (siteId, orgId, name, protocol, proxyPort, destinationPort, destinationIp, enabled) - VALUES (?, ?, ?, ?, ?, ?, ?, ?) - `); - stmt.run( - resourceSiteMap.get(resource.resourceId), - resource.orgId, - resource.name, - resource.protocol, - resource.proxyPort, - firstTarget.port, - firstTarget.ip, - resource.enabled - ); - - // Delete from resources table - db.prepare("DELETE FROM resources WHERE resourceId = ?").run( - resource.resourceId - ); - - // Delete the targets for this resource - db.prepare("DELETE FROM targets WHERE resourceId = ?").run( - resource.resourceId - ); - } - })(); - - db.pragma("foreign_keys = ON"); - - console.log(`Migrated database`); - } catch (e) { - console.log("Failed to migrate db:", e); - throw e; - } -} diff --git a/server/setup/scriptsSqlite/2.0.0.ts b/server/setup/scriptsSqlite/2.0.0.ts new file mode 100644 index 000000000..2380b6458 --- /dev/null +++ b/server/setup/scriptsSqlite/2.0.0.ts @@ -0,0 +1,14 @@ +import { APP_PATH } from "@server/lib/consts"; +import { createClient } from "@libsql/client"; +import path from "path"; + +const version = "2.0.0"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = createClient({ url: "file:" + location }); + + console.log(`${version} migration complete`); +} \ No newline at end of file From fcad3a185506e250c3e35df7432a8d9ca558102a Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Tue, 21 Oct 2025 08:00:03 +0000 Subject: [PATCH 05/27] set min version to 1.11.2 --- server/setup/migrationsSqlite.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/setup/migrationsSqlite.ts b/server/setup/migrationsSqlite.ts index f98215084..197ef25ae 100644 --- a/server/setup/migrationsSqlite.ts +++ b/server/setup/migrationsSqlite.ts @@ -85,7 +85,7 @@ export async function runMigrations() { async function executeScripts() { try { - const requriedPreviousVersion = "1.11.1"; + const requriedPreviousVersion = "1.11.2"; // Get the last executed version from the database const lastExecuted = await db.select().from(versionMigrations); From 80be0da6902402c428e735718c3d2b2268337bc7 Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Tue, 21 Oct 2025 08:22:24 +0000 Subject: [PATCH 06/27] test --- server/lib/consts.ts | 2 +- server/setup/migrationsSqlite.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/server/lib/consts.ts b/server/lib/consts.ts index 8ad98167e..f8d2855a3 100644 --- a/server/lib/consts.ts +++ b/server/lib/consts.ts @@ -2,7 +2,7 @@ import path from "path"; import { fileURLToPath } from "url"; // This is a placeholder value replaced by the build process -export const APP_VERSION = "1.11.0"; +export const APP_VERSION = "2.0.0"; export const __FILENAME = fileURLToPath(import.meta.url); export const __DIRNAME = path.dirname(__FILENAME); diff --git a/server/setup/migrationsSqlite.ts b/server/setup/migrationsSqlite.ts index 197ef25ae..b2c10294b 100644 --- a/server/setup/migrationsSqlite.ts +++ b/server/setup/migrationsSqlite.ts @@ -98,10 +98,10 @@ async function executeScripts() { if (!semver.eq(lastVersion, requriedPreviousVersion)) { console.error( - `Starting App not allowed. Your previous version is: ${lastVersion}. ` + - `Please update first to version ${requriedPreviousVersion} due to breaking changes in version 2.0.0.` - ); - process.exit(1); + `Starting App not allowed. Your previous version is: ${lastVersion}. ` + + `Please update first to version ${requriedPreviousVersion} due to breaking changes in version 2.0.0.` + ); + process.exit(1); } console.log(`Starting migrations from version ${startVersion}`); From 3555a204d6fc462bc1be1f2bbb0b516835a24563 Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Tue, 21 Oct 2025 08:26:48 +0000 Subject: [PATCH 07/27] merge main --- server/setup/migrationsSqlite.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/setup/migrationsSqlite.ts b/server/setup/migrationsSqlite.ts index b2c10294b..5abeb9468 100644 --- a/server/setup/migrationsSqlite.ts +++ b/server/setup/migrationsSqlite.ts @@ -7,14 +7,14 @@ import { versionMigrations } from "../db/sqlite"; import { __DIRNAME, APP_PATH, APP_VERSION } from "@server/lib/consts"; import { LibsqlError } from "@libsql/client"; import fs from "fs"; -import m29 from "./scriptsSqlite/2.0.0"; +import m30 from "./scriptsSqlite/2.0.0"; // THIS CANNOT IMPORT ANYTHING FROM THE SERVER // EXCEPT FOR THE DATABASE AND THE SCHEMA // Define the migration list with versions and their corresponding functions const migrations = [ - { version: "2.0.0", run: m29 }, + { version: "2.0.0", run: m30 }, // Add new migrations here as they are created ] as const; From c751929545d415067ab6afc89ce647cc65b5b165 Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Tue, 21 Oct 2025 08:41:22 +0000 Subject: [PATCH 08/27] more logs in migration --- server/setup/migrationsSqlite.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/setup/migrationsSqlite.ts b/server/setup/migrationsSqlite.ts index 5abeb9468..e4a860861 100644 --- a/server/setup/migrationsSqlite.ts +++ b/server/setup/migrationsSqlite.ts @@ -96,6 +96,11 @@ async function executeScripts() { const startVersion = pendingMigrations[0]?.version ?? APP_VERSION; const lastVersion = pendingMigrations[pendingMigrations.length - 1].version; + console.log(`Current App Version ${APP_VERSION}`); + console.log(`Latest migration version ${lastVersion}`); + console.log(`Starting migrations from version ${startVersion}`); + console.log(`Required version ${requriedPreviousVersion}`); + if (!semver.eq(lastVersion, requriedPreviousVersion)) { console.error( `Starting App not allowed. Your previous version is: ${lastVersion}. ` + From 6fe59169da375e05fc5ec83b881492fcea05423b Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Tue, 21 Oct 2025 09:50:04 +0000 Subject: [PATCH 09/27] update version --- server/lib/consts.ts | 2 +- server/setup/migrationsSqlite.ts | 16 ++++------------ 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/server/lib/consts.ts b/server/lib/consts.ts index f8d2855a3..8ad98167e 100644 --- a/server/lib/consts.ts +++ b/server/lib/consts.ts @@ -2,7 +2,7 @@ import path from "path"; import { fileURLToPath } from "url"; // This is a placeholder value replaced by the build process -export const APP_VERSION = "2.0.0"; +export const APP_VERSION = "1.11.0"; export const __FILENAME = fileURLToPath(import.meta.url); export const __DIRNAME = path.dirname(__FILENAME); diff --git a/server/setup/migrationsSqlite.ts b/server/setup/migrationsSqlite.ts index e4a860861..c14ccd4f5 100644 --- a/server/setup/migrationsSqlite.ts +++ b/server/setup/migrationsSqlite.ts @@ -85,7 +85,7 @@ export async function runMigrations() { async function executeScripts() { try { - const requriedPreviousVersion = "1.11.2"; + const requriedPreviousVersion = "1.11.1"; // Get the last executed version from the database const lastExecuted = await db.select().from(versionMigrations); @@ -94,18 +94,10 @@ async function executeScripts() { .map((m) => m) .sort((a, b) => semver.compare(b.version, a.version)); const startVersion = pendingMigrations[0]?.version ?? APP_VERSION; - const lastVersion = pendingMigrations[pendingMigrations.length - 1].version; - console.log(`Current App Version ${APP_VERSION}`); - console.log(`Latest migration version ${lastVersion}`); - console.log(`Starting migrations from version ${startVersion}`); - console.log(`Required version ${requriedPreviousVersion}`); - - if (!semver.eq(lastVersion, requriedPreviousVersion)) { - console.error( - `Starting App not allowed. Your previous version is: ${lastVersion}. ` + - `Please update first to version ${requriedPreviousVersion} due to breaking changes in version 2.0.0.` - ); + if (!semver.eq(startVersion, requriedPreviousVersion)) { + console.error(`Starting App not allowed. Your previous version is: ${startVersion}.`); + console.error(`Please update first to version ${requriedPreviousVersion} due to breaking changes in version 2.0.0.`); process.exit(1); } From 1d25812c129c2aa5b3dab69e3d2948315cbbbb1b Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Tue, 21 Oct 2025 09:59:34 +0000 Subject: [PATCH 10/27] updatre const --- server/lib/consts.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/lib/consts.ts b/server/lib/consts.ts index 8ad98167e..f8d2855a3 100644 --- a/server/lib/consts.ts +++ b/server/lib/consts.ts @@ -2,7 +2,7 @@ import path from "path"; import { fileURLToPath } from "url"; // This is a placeholder value replaced by the build process -export const APP_VERSION = "1.11.0"; +export const APP_VERSION = "2.0.0"; export const __FILENAME = fileURLToPath(import.meta.url); export const __DIRNAME = path.dirname(__FILENAME); From 779f0d3f45425a5274c374025dc061d780d3dfa3 Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Tue, 21 Oct 2025 10:23:40 +0000 Subject: [PATCH 11/27] fix typo --- server/setup/migrationsSqlite.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/setup/migrationsSqlite.ts b/server/setup/migrationsSqlite.ts index c14ccd4f5..17fd83763 100644 --- a/server/setup/migrationsSqlite.ts +++ b/server/setup/migrationsSqlite.ts @@ -85,7 +85,7 @@ export async function runMigrations() { async function executeScripts() { try { - const requriedPreviousVersion = "1.11.1"; + const requiredPreviousVersion = "1.11.1"; // Get the last executed version from the database const lastExecuted = await db.select().from(versionMigrations); @@ -95,9 +95,9 @@ async function executeScripts() { .sort((a, b) => semver.compare(b.version, a.version)); const startVersion = pendingMigrations[0]?.version ?? APP_VERSION; - if (!semver.eq(startVersion, requriedPreviousVersion)) { + if (!semver.eq(startVersion, requiredPreviousVersion)) { console.error(`Starting App not allowed. Your previous version is: ${startVersion}.`); - console.error(`Please update first to version ${requriedPreviousVersion} due to breaking changes in version 2.0.0.`); + console.error(`Please update first to version ${requiredPreviousVersion} due to breaking changes in version 2.0.0.`); process.exit(1); } From ab989442cae04cca550474722bb1e5dfb7585aa5 Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Tue, 21 Oct 2025 11:50:44 +0000 Subject: [PATCH 12/27] fix migration check --- server/setup/migrationsSqlite.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/setup/migrationsSqlite.ts b/server/setup/migrationsSqlite.ts index 17fd83763..e6cbf0bfc 100644 --- a/server/setup/migrationsSqlite.ts +++ b/server/setup/migrationsSqlite.ts @@ -85,7 +85,7 @@ export async function runMigrations() { async function executeScripts() { try { - const requiredPreviousVersion = "1.11.1"; + const requiredMinimumVersion = "1.11.1"; // Get the last executed version from the database const lastExecuted = await db.select().from(versionMigrations); @@ -95,9 +95,9 @@ async function executeScripts() { .sort((a, b) => semver.compare(b.version, a.version)); const startVersion = pendingMigrations[0]?.version ?? APP_VERSION; - if (!semver.eq(startVersion, requiredPreviousVersion)) { + if (semver.lt(startVersion, requiredMinimumVersion)) { console.error(`Starting App not allowed. Your previous version is: ${startVersion}.`); - console.error(`Please update first to version ${requiredPreviousVersion} due to breaking changes in version 2.0.0.`); + console.error(`Please update first to version ${requiredMinimumVersion} due to breaking changes in version 2.0.0.`); process.exit(1); } From 5209f2dd99f0ef70724822303e8dc911658dd65e Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Sun, 16 Nov 2025 09:59:07 +0000 Subject: [PATCH 13/27] update migration --- package-lock.json | 52 ++++-- server/setup/migrationsSqlite.ts | 8 +- server/setup/scriptsSqlite/1.12.0.ts | 250 --------------------------- 3 files changed, 38 insertions(+), 272 deletions(-) delete mode 100644 server/setup/scriptsSqlite/1.12.0.ts diff --git a/package-lock.json b/package-lock.json index 23a8953b7..bbf519ca3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -115,8 +115,8 @@ "@dotenvx/dotenvx": "1.51.1", "@esbuild-plugins/tsconfig-paths": "0.1.2", "@react-email/preview-server": "4.3.2", - "@tanstack/react-query-devtools": "^5.90.2", "@tailwindcss/postcss": "^4.1.17", + "@tanstack/react-query-devtools": "^5.90.2", "@types/cookie-parser": "1.4.10", "@types/cors": "2.8.19", "@types/crypto-js": "^4.2.2", @@ -1643,6 +1643,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", @@ -3873,6 +3874,7 @@ "resolved": "https://registry.npmjs.org/@libsql/client/-/client-0.15.15.tgz", "integrity": "sha512-twC0hQxPNHPKfeOv3sNT6u2pturQjLcI+CnpTM0SjRpocEGgfiZ7DWKXLNnsothjyJmDqEsBQJ5ztq9Wlu470w==", "license": "MIT", + "peer": true, "dependencies": { "@libsql/core": "^0.15.14", "@libsql/hrana-client": "^0.7.0", @@ -4248,6 +4250,7 @@ "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^14.21.3 || >=16" }, @@ -7144,6 +7147,7 @@ "integrity": "sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -7349,6 +7353,7 @@ "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -7359,6 +7364,7 @@ "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.25.0" }, @@ -8793,6 +8799,7 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.6.tgz", "integrity": "sha512-gB1sljYjcobZKxjPbKSa31FUTyr+ROaBdoH+wSSs9Dk+yDCmMs+TkTV3PybRRVLC7ax7q0erJ9LvRWnMktnRAw==", "license": "MIT", + "peer": true, "dependencies": { "@tanstack/query-core": "5.90.6" }, @@ -8974,6 +8981,7 @@ "integrity": "sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", @@ -9066,6 +9074,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -9101,6 +9110,7 @@ "integrity": "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "@types/node": "*", "pg-protocol": "*", @@ -9134,6 +9144,7 @@ "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.0.2" } @@ -9144,6 +9155,7 @@ "integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==", "devOptional": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -9286,6 +9298,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.3.tgz", "integrity": "sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==", "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.3", "@typescript-eslint/types": "8.46.3", @@ -9959,6 +9972,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -10582,6 +10596,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.9", "caniuse-lite": "^1.0.30001746", @@ -11560,8 +11575,7 @@ "version": "3.1.7", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz", "integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==", - "license": "(MPL-2.0 OR Apache-2.0)", - "peer": true + "license": "(MPL-2.0 OR Apache-2.0)" }, "node_modules/domutils": { "version": "3.2.2", @@ -12208,6 +12222,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -12304,6 +12319,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.0.tgz", "integrity": "sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg==", "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -12481,6 +12497,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -12768,6 +12785,7 @@ "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "license": "MIT", + "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.0", @@ -15383,7 +15401,6 @@ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.54.0.tgz", "integrity": "sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==", "license": "MIT", - "peer": true, "dependencies": { "dompurify": "3.1.7", "marked": "14.0.0" @@ -15394,7 +15411,6 @@ "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", "license": "MIT", - "peer": true, "bin": { "marked": "bin/marked.js" }, @@ -15511,6 +15527,7 @@ "resolved": "https://registry.npmjs.org/next/-/next-15.5.6.tgz", "integrity": "sha512-zTxsnI3LQo3c9HSdSf91O1jMNsEzIXDShXd4wVdg9y5shwLqBXi4ZtUUJyB86KGVSJLZx0PFONvO54aheGX8QQ==", "license": "MIT", + "peer": true, "dependencies": { "@next/env": "15.5.6", "@swc/helpers": "0.5.15", @@ -15641,18 +15658,6 @@ "react-dom": ">= 16.0.0" } }, - "node_modules/node-abi": { - "version": "3.78.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.78.0.tgz", - "integrity": "sha512-E2wEyrgX/CqvicaQYU3Ze1PFGjc4QYPGsjUrlYkqAE0WjHEZwgOsGMPMzkMse4LjJbDmaEuDX3CM036j5K2DSQ==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-cache": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", @@ -17957,6 +17962,7 @@ "version": "4.0.3", "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -18941,6 +18947,7 @@ "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", "license": "MIT", + "peer": true, "dependencies": { "pg-connection-string": "^2.9.1", "pg-pool": "^3.10.1", @@ -19117,6 +19124,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -19520,6 +19528,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -19550,6 +19559,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -19841,6 +19851,7 @@ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.66.0.tgz", "integrity": "sha512-xXBqsWGKrY46ZqaHDo+ZUYiMUgi8suYu5kdrS20EG8KiL7VRQitEbNjm+UcrDYrNi1YLyfpmAeGjCZYXLT9YBw==", "license": "MIT", + "peer": true, "engines": { "node": ">=18.0.0" }, @@ -20334,6 +20345,7 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -21508,7 +21520,8 @@ "version": "4.1.17", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.17.tgz", "integrity": "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/tapable": { "version": "2.3.0", @@ -21992,6 +22005,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -22504,6 +22518,7 @@ "resolved": "https://registry.npmjs.org/winston/-/winston-3.18.3.tgz", "integrity": "sha512-NoBZauFNNWENgsnC9YpgyYwOVrl2m58PpQ8lNHjV3kosGs7KJ7Npk9pCUE+WJlawVSe8mykWDKWFSVfs3QO9ww==", "license": "MIT", + "peer": true, "dependencies": { "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.8", @@ -22810,6 +22825,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/server/setup/migrationsSqlite.ts b/server/setup/migrationsSqlite.ts index e6cbf0bfc..9a7c3dec6 100644 --- a/server/setup/migrationsSqlite.ts +++ b/server/setup/migrationsSqlite.ts @@ -7,14 +7,14 @@ import { versionMigrations } from "../db/sqlite"; import { __DIRNAME, APP_PATH, APP_VERSION } from "@server/lib/consts"; import { LibsqlError } from "@libsql/client"; import fs from "fs"; -import m30 from "./scriptsSqlite/2.0.0"; +import m31 from "./scriptsSqlite/1.13.0"; // THIS CANNOT IMPORT ANYTHING FROM THE SERVER // EXCEPT FOR THE DATABASE AND THE SCHEMA // Define the migration list with versions and their corresponding functions const migrations = [ - { version: "2.0.0", run: m30 }, + { version: "1.13.0", run: m31 }, // Add new migrations here as they are created ] as const; @@ -85,7 +85,7 @@ export async function runMigrations() { async function executeScripts() { try { - const requiredMinimumVersion = "1.11.1"; + const requiredMinimumVersion = "1.12.2"; // Get the last executed version from the database const lastExecuted = await db.select().from(versionMigrations); @@ -97,7 +97,7 @@ async function executeScripts() { if (semver.lt(startVersion, requiredMinimumVersion)) { console.error(`Starting App not allowed. Your previous version is: ${startVersion}.`); - console.error(`Please update first to version ${requiredMinimumVersion} due to breaking changes in version 2.0.0.`); + console.error(`Please update first to version ${requiredMinimumVersion} due to breaking changes in version 1.13.0.`); process.exit(1); } diff --git a/server/setup/scriptsSqlite/1.12.0.ts b/server/setup/scriptsSqlite/1.12.0.ts deleted file mode 100644 index bb357c81f..000000000 --- a/server/setup/scriptsSqlite/1.12.0.ts +++ /dev/null @@ -1,250 +0,0 @@ -import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; -import path from "path"; - -const version = "1.12.0"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); - - try { - db.pragma("foreign_keys = OFF"); - - db.transaction(() => { - db.prepare( - `UPDATE 'resourceRules' SET match = 'COUNTRY' WHERE match = 'GEOIP'` - ).run(); - - db.prepare( - ` - CREATE TABLE 'accessAuditLog' ( - 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'timestamp' integer NOT NULL, - 'orgId' text NOT NULL, - 'actorType' text, - 'actor' text, - 'actorId' text, - 'resourceId' integer, - 'ip' text, - 'location' text, - 'type' text NOT NULL, - 'action' integer NOT NULL, - 'userAgent' text, - 'metadata' text, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - ` - ).run(); - - db.prepare( - `CREATE INDEX 'idx_identityAuditLog_timestamp' ON 'accessAuditLog' ('timestamp');` - ).run(); - db.prepare( - `CREATE INDEX 'idx_identityAuditLog_org_timestamp' ON 'accessAuditLog' ('orgId','timestamp');` - ).run(); - - db.prepare( - ` - CREATE TABLE 'actionAuditLog' ( - 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'timestamp' integer NOT NULL, - 'orgId' text NOT NULL, - 'actorType' text NOT NULL, - 'actor' text NOT NULL, - 'actorId' text NOT NULL, - 'action' text NOT NULL, - 'metadata' text, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - ` - ).run(); - - db.prepare( - `CREATE INDEX 'idx_actionAuditLog_timestamp' ON 'actionAuditLog' ('timestamp');` - ).run(); - db.prepare( - `CREATE INDEX 'idx_actionAuditLog_org_timestamp' ON 'actionAuditLog' ('orgId','timestamp');` - ).run(); - - db.prepare( - ` - CREATE TABLE 'dnsRecords' ( - 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'domainId' text NOT NULL, - 'recordType' text NOT NULL, - 'baseDomain' text, - 'value' text NOT NULL, - 'verified' integer DEFAULT false NOT NULL, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade - ); - ` - ).run(); - - db.prepare( - ` - CREATE TABLE 'requestAuditLog' ( - 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'timestamp' integer NOT NULL, - 'orgId' text, - 'action' integer NOT NULL, - 'reason' integer NOT NULL, - 'actorType' text, - 'actor' text, - 'actorId' text, - 'resourceId' integer, - 'ip' text, - 'location' text, - 'userAgent' text, - 'metadata' text, - 'headers' text, - 'query' text, - 'originalRequestURL' text, - 'scheme' text, - 'host' text, - 'path' text, - 'method' text, - 'tls' integer, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - ` - ).run(); - - - db.prepare( - ` - CREATE TABLE 'blueprints' ( - 'blueprintId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'orgId' text NOT NULL, - 'name' text NOT NULL, - 'source' text NOT NULL, - 'createdAt' integer NOT NULL, - 'succeeded' integer NOT NULL, - 'contents' text NOT NULL, - 'message' text, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - ` - ).run(); - - db.prepare( - `CREATE INDEX 'idx_requestAuditLog_timestamp' ON 'requestAuditLog' ('timestamp');` - ).run(); - db.prepare( - `CREATE INDEX 'idx_requestAuditLog_org_timestamp' ON 'requestAuditLog' ('orgId','timestamp');` - ).run(); - - db.prepare( - ` - CREATE TABLE '__new_resources' ( - 'resourceId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'resourceGuid' text(36) NOT NULL, - 'orgId' text NOT NULL, - 'niceId' text NOT NULL, - 'name' text NOT NULL, - 'subdomain' text, - 'fullDomain' text, - 'domainId' text, - 'ssl' integer DEFAULT false NOT NULL, - 'blockAccess' integer DEFAULT false NOT NULL, - 'sso' integer DEFAULT true NOT NULL, - 'http' integer DEFAULT true NOT NULL, - 'protocol' text NOT NULL, - 'proxyPort' integer, - 'emailWhitelistEnabled' integer DEFAULT false NOT NULL, - 'applyRules' integer DEFAULT false NOT NULL, - 'enabled' integer DEFAULT true NOT NULL, - 'stickySession' integer DEFAULT false NOT NULL, - 'tlsServerName' text, - 'setHostHeader' text, - 'enableProxy' integer DEFAULT true, - 'skipToIdpId' integer, - 'headers' text, - 'proxyProtocol' integer DEFAULT false NOT NULL, - 'proxyProtocolVersion' integer DEFAULT 1, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null, - FOREIGN KEY ('skipToIdpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE set null - ); - ` - ).run(); - - db.prepare( - `INSERT INTO '__new_resources'("resourceId", "resourceGuid", "orgId", "niceId", "name", "subdomain", "fullDomain", "domainId", "ssl", "blockAccess", "sso", "http", "protocol", "proxyPort", "emailWhitelistEnabled", "applyRules", "enabled", "stickySession", "tlsServerName", "setHostHeader", "enableProxy", "skipToIdpId", "headers") SELECT "resourceId", "resourceGuid", "orgId", "niceId", "name", "subdomain", "fullDomain", "domainId", "ssl", "blockAccess", "sso", "http", "protocol", "proxyPort", "emailWhitelistEnabled", "applyRules", "enabled", "stickySession", "tlsServerName", "setHostHeader", "enableProxy", "skipToIdpId", "headers" FROM 'resources';` - ).run(); - db.prepare(`DROP TABLE 'resources';`).run(); - db.prepare( - `ALTER TABLE '__new_resources' RENAME TO 'resources';` - ).run(); - - db.prepare( - `CREATE UNIQUE INDEX 'resources_resourceGuid_unique' ON 'resources' ('resourceGuid');` - ).run(); - db.prepare(`ALTER TABLE 'domains' ADD 'certResolver' text;`).run(); - db.prepare( - `ALTER TABLE 'domains' ADD 'preferWildcardCert' integer;` - ).run(); - db.prepare( - `ALTER TABLE 'orgs' ADD 'requireTwoFactor' integer;` - ).run(); - db.prepare( - `ALTER TABLE 'orgs' ADD 'maxSessionLengthHours' integer;` - ).run(); - db.prepare( - `ALTER TABLE 'orgs' ADD 'passwordExpiryDays' integer;` - ).run(); - db.prepare( - `ALTER TABLE 'orgs' ADD 'settingsLogRetentionDaysRequest' integer DEFAULT 7 NOT NULL;` - ).run(); - db.prepare( - `ALTER TABLE 'orgs' ADD 'settingsLogRetentionDaysAccess' integer DEFAULT 0 NOT NULL;` - ).run(); - db.prepare( - `ALTER TABLE 'orgs' ADD 'settingsLogRetentionDaysAction' integer DEFAULT 0 NOT NULL;` - ).run(); - db.prepare(`ALTER TABLE 'orgs' DROP COLUMN 'settings';`).run(); - db.prepare( - `ALTER TABLE 'resourceSessions' ADD 'issuedAt' integer;` - ).run(); - db.prepare(`ALTER TABLE 'session' ADD 'issuedAt' integer;`).run(); - db.prepare( - `ALTER TABLE 'user' ADD 'lastPasswordChange' integer;` - ).run(); - db.prepare(`ALTER TABLE 'remoteExitNode' ADD 'secondaryVersion' text;`).run(); - - // get all of the domains - const domains = db.prepare(`SELECT domainId, baseDomain from domains`).all() as { - domainId: number; - baseDomain: string; - }[]; - - for (const domain of domains) { - // insert two records into the dnsRecords table for each domain - const insert = db.prepare( - `INSERT INTO 'dnsRecords' (domainId, recordType, baseDomain, value, verified) VALUES (?, 'A', ?, ?, 1)` - ); - insert.run( - domain.domainId, - `*.${domain.baseDomain}`, - `Server IP Address` - ); - insert.run( - domain.domainId, - `${domain.baseDomain}`, - `Server IP Address` - ); - } - })(); - - db.pragma("foreign_keys = ON"); - - console.log(`Migrated database`); - } catch (e) { - console.log("Failed to migrate db:", e); - throw e; - } - - console.log(`${version} migration complete`); -} From b8a2aef0232b53c0f96a713615224b8a2189f32e Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Sun, 16 Nov 2025 10:02:08 +0000 Subject: [PATCH 14/27] change migration version --- server/setup/scriptsSqlite/{2.0.0.ts => 1.13.0.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename server/setup/scriptsSqlite/{2.0.0.ts => 1.13.0.ts} (100%) diff --git a/server/setup/scriptsSqlite/2.0.0.ts b/server/setup/scriptsSqlite/1.13.0.ts similarity index 100% rename from server/setup/scriptsSqlite/2.0.0.ts rename to server/setup/scriptsSqlite/1.13.0.ts From 40c0d118ad4ca0d096b3419f1a65f0db56b5f348 Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Sun, 16 Nov 2025 10:03:48 +0000 Subject: [PATCH 15/27] remove temp test --- Makefile | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Makefile b/Makefile index 4c52e7776..6c538a477 100644 --- a/Makefile +++ b/Makefile @@ -91,11 +91,3 @@ test: clean: docker rmi pangolin - -test-local: - cp config/config.example.yml config/config.yml - npm run set:oss - npm run set:sqlite - - npx tsc --noEmit - - docker build --build-arg DATABASE=pg -t fosrl/pangolin:postgresql-latest . - - docker build --build-arg DATABASE=sqlite -t fosrl/pangolin:latest . From 951260405d91c572917d3032e1311d4d2e554c9e Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Sun, 16 Nov 2025 14:01:06 +0000 Subject: [PATCH 16/27] change version --- server/lib/consts.ts | 2 +- server/setup/scriptsSqlite/1.13.0.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/lib/consts.ts b/server/lib/consts.ts index c2cf6698a..d93cf2249 100644 --- a/server/lib/consts.ts +++ b/server/lib/consts.ts @@ -2,7 +2,7 @@ import path from "path"; import { fileURLToPath } from "url"; // This is a placeholder value replaced by the build process -export const APP_VERSION = "1.12.1"; +export const APP_VERSION = "1.13.0"; export const __FILENAME = fileURLToPath(import.meta.url); export const __DIRNAME = path.dirname(__FILENAME); diff --git a/server/setup/scriptsSqlite/1.13.0.ts b/server/setup/scriptsSqlite/1.13.0.ts index 2380b6458..ad6e97550 100644 --- a/server/setup/scriptsSqlite/1.13.0.ts +++ b/server/setup/scriptsSqlite/1.13.0.ts @@ -2,7 +2,7 @@ import { APP_PATH } from "@server/lib/consts"; import { createClient } from "@libsql/client"; import path from "path"; -const version = "2.0.0"; +const version = "1.13.0"; export default async function migration() { console.log(`Running setup script ${version}...`); From 7335c20a2c620cfb4ca8577cfee8b22c390298b7 Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Thu, 20 Nov 2025 13:45:45 +0000 Subject: [PATCH 17/27] Revert "migrations" This reverts commit ac04eec1466efb70ec2527fc04938b706fb1180a. --- server/setup/migrationsSqlite.ts | 56 +++- server/setup/scriptsSqlite/1.0.0-beta1.ts | 5 + server/setup/scriptsSqlite/1.0.0-beta10.ts | 44 +++ server/setup/scriptsSqlite/1.0.0-beta12.ts | 61 ++++ server/setup/scriptsSqlite/1.0.0-beta13.ts | 33 ++ server/setup/scriptsSqlite/1.0.0-beta15.ts | 128 ++++++++ server/setup/scriptsSqlite/1.0.0-beta2.ts | 58 ++++ server/setup/scriptsSqlite/1.0.0-beta3.ts | 41 +++ server/setup/scriptsSqlite/1.0.0-beta5.ts | 100 ++++++ server/setup/scriptsSqlite/1.0.0-beta6.ts | 51 ++++ server/setup/scriptsSqlite/1.0.0-beta9.ts | 290 ++++++++++++++++++ server/setup/scriptsSqlite/1.0.0.ts | 57 ++++ server/setup/scriptsSqlite/1.1.0.ts | 28 ++ server/setup/scriptsSqlite/1.10.0.ts | 136 +++++++++ server/setup/scriptsSqlite/1.10.1.ts | 69 +++++ server/setup/scriptsSqlite/1.10.2.ts | 54 ++++ server/setup/scriptsSqlite/1.11.0.ts | 339 +++++++++++++++++++++ server/setup/scriptsSqlite/1.11.1.ts | 37 +++ server/setup/scriptsSqlite/1.13.0.ts | 14 - server/setup/scriptsSqlite/1.2.0.ts | 114 +++++++ server/setup/scriptsSqlite/1.3.0.ts | 203 ++++++++++++ server/setup/scriptsSqlite/1.5.0.ts | 70 +++++ server/setup/scriptsSqlite/1.6.0.ts | 65 ++++ server/setup/scriptsSqlite/1.7.0.ts | 187 ++++++++++++ server/setup/scriptsSqlite/1.8.0.ts | 30 ++ server/setup/scriptsSqlite/1.9.0.ts | 191 ++++++++++++ 26 files changed, 2437 insertions(+), 24 deletions(-) create mode 100644 server/setup/scriptsSqlite/1.0.0-beta1.ts create mode 100644 server/setup/scriptsSqlite/1.0.0-beta10.ts create mode 100644 server/setup/scriptsSqlite/1.0.0-beta12.ts create mode 100644 server/setup/scriptsSqlite/1.0.0-beta13.ts create mode 100644 server/setup/scriptsSqlite/1.0.0-beta15.ts create mode 100644 server/setup/scriptsSqlite/1.0.0-beta2.ts create mode 100644 server/setup/scriptsSqlite/1.0.0-beta3.ts create mode 100644 server/setup/scriptsSqlite/1.0.0-beta5.ts create mode 100644 server/setup/scriptsSqlite/1.0.0-beta6.ts create mode 100644 server/setup/scriptsSqlite/1.0.0-beta9.ts create mode 100644 server/setup/scriptsSqlite/1.0.0.ts create mode 100644 server/setup/scriptsSqlite/1.1.0.ts create mode 100644 server/setup/scriptsSqlite/1.10.0.ts create mode 100644 server/setup/scriptsSqlite/1.10.1.ts create mode 100644 server/setup/scriptsSqlite/1.10.2.ts create mode 100644 server/setup/scriptsSqlite/1.11.0.ts create mode 100644 server/setup/scriptsSqlite/1.11.1.ts delete mode 100644 server/setup/scriptsSqlite/1.13.0.ts create mode 100644 server/setup/scriptsSqlite/1.2.0.ts create mode 100644 server/setup/scriptsSqlite/1.3.0.ts create mode 100644 server/setup/scriptsSqlite/1.5.0.ts create mode 100644 server/setup/scriptsSqlite/1.6.0.ts create mode 100644 server/setup/scriptsSqlite/1.7.0.ts create mode 100644 server/setup/scriptsSqlite/1.8.0.ts create mode 100644 server/setup/scriptsSqlite/1.9.0.ts diff --git a/server/setup/migrationsSqlite.ts b/server/setup/migrationsSqlite.ts index 9a7c3dec6..1611c4926 100644 --- a/server/setup/migrationsSqlite.ts +++ b/server/setup/migrationsSqlite.ts @@ -7,14 +7,58 @@ import { versionMigrations } from "../db/sqlite"; import { __DIRNAME, APP_PATH, APP_VERSION } from "@server/lib/consts"; import { LibsqlError } from "@libsql/client"; import fs from "fs"; -import m31 from "./scriptsSqlite/1.13.0"; +import m1 from "./scriptsSqlite/1.0.0-beta1"; +import m2 from "./scriptsSqlite/1.0.0-beta2"; +import m3 from "./scriptsSqlite/1.0.0-beta3"; +import m4 from "./scriptsSqlite/1.0.0-beta5"; +import m5 from "./scriptsSqlite/1.0.0-beta6"; +import m6 from "./scriptsSqlite/1.0.0-beta9"; +import m7 from "./scriptsSqlite/1.0.0-beta10"; +import m8 from "./scriptsSqlite/1.0.0-beta12"; +import m13 from "./scriptsSqlite/1.0.0-beta13"; +import m15 from "./scriptsSqlite/1.0.0-beta15"; +import m16 from "./scriptsSqlite/1.0.0"; +import m17 from "./scriptsSqlite/1.1.0"; +import m18 from "./scriptsSqlite/1.2.0"; +import m19 from "./scriptsSqlite/1.3.0"; +import m20 from "./scriptsSqlite/1.5.0"; +import m21 from "./scriptsSqlite/1.6.0"; +import m22 from "./scriptsSqlite/1.7.0"; +import m23 from "./scriptsSqlite/1.8.0"; +import m24 from "./scriptsSqlite/1.9.0"; +import m25 from "./scriptsSqlite/1.10.0"; +import m26 from "./scriptsSqlite/1.10.1"; +import m27 from "./scriptsSqlite/1.10.2"; +import m28 from "./scriptsSqlite/1.11.0"; // THIS CANNOT IMPORT ANYTHING FROM THE SERVER // EXCEPT FOR THE DATABASE AND THE SCHEMA // Define the migration list with versions and their corresponding functions const migrations = [ - { version: "1.13.0", run: m31 }, + { version: "1.0.0-beta.1", run: m1 }, + { version: "1.0.0-beta.2", run: m2 }, + { version: "1.0.0-beta.3", run: m3 }, + { version: "1.0.0-beta.5", run: m4 }, + { version: "1.0.0-beta.6", run: m5 }, + { version: "1.0.0-beta.9", run: m6 }, + { version: "1.0.0-beta.10", run: m7 }, + { version: "1.0.0-beta.12", run: m8 }, + { version: "1.0.0-beta.13", run: m13 }, + { version: "1.0.0-beta.15", run: m15 }, + { version: "1.0.0", run: m16 }, + { version: "1.1.0", run: m17 }, + { version: "1.2.0", run: m18 }, + { version: "1.3.0", run: m19 }, + { version: "1.5.0", run: m20 }, + { version: "1.6.0", run: m21 }, + { version: "1.7.0", run: m22 }, + { version: "1.8.0", run: m23 }, + { version: "1.9.0", run: m24 }, + { version: "1.10.0", run: m25 }, + { version: "1.10.1", run: m26 }, + { version: "1.10.2", run: m27 }, + { version: "1.11.0", run: m28 }, // Add new migrations here as they are created ] as const; @@ -85,7 +129,6 @@ export async function runMigrations() { async function executeScripts() { try { - const requiredMinimumVersion = "1.12.2"; // Get the last executed version from the database const lastExecuted = await db.select().from(versionMigrations); @@ -94,13 +137,6 @@ async function executeScripts() { .map((m) => m) .sort((a, b) => semver.compare(b.version, a.version)); const startVersion = pendingMigrations[0]?.version ?? APP_VERSION; - - if (semver.lt(startVersion, requiredMinimumVersion)) { - console.error(`Starting App not allowed. Your previous version is: ${startVersion}.`); - console.error(`Please update first to version ${requiredMinimumVersion} due to breaking changes in version 1.13.0.`); - process.exit(1); - } - console.log(`Starting migrations from version ${startVersion}`); const migrationsToRun = migrations.filter((migration) => diff --git a/server/setup/scriptsSqlite/1.0.0-beta1.ts b/server/setup/scriptsSqlite/1.0.0-beta1.ts new file mode 100644 index 000000000..65d9ad1b7 --- /dev/null +++ b/server/setup/scriptsSqlite/1.0.0-beta1.ts @@ -0,0 +1,5 @@ +export default async function migration() { + console.log("Running setup script 1.0.0-beta.1..."); + // SQL operations would go here in ts format + console.log("Done."); +} diff --git a/server/setup/scriptsSqlite/1.0.0-beta10.ts b/server/setup/scriptsSqlite/1.0.0-beta10.ts new file mode 100644 index 000000000..400cbc318 --- /dev/null +++ b/server/setup/scriptsSqlite/1.0.0-beta10.ts @@ -0,0 +1,44 @@ +import { configFilePath1, configFilePath2 } from "@server/lib/consts"; +import fs from "fs"; +import yaml from "js-yaml"; + +export default async function migration() { + console.log("Running setup script 1.0.0-beta.10..."); + + try { + // Determine which config file exists + const filePaths = [configFilePath1, configFilePath2]; + let filePath = ""; + for (const path of filePaths) { + if (fs.existsSync(path)) { + filePath = path; + break; + } + } + + if (!filePath) { + throw new Error( + `No config file found (expected config.yml or config.yaml).` + ); + } + + // Read and parse the YAML file + const fileContents = fs.readFileSync(filePath, "utf8"); + const rawConfig = yaml.load(fileContents) as any; + + delete rawConfig.server.secure_cookies; + + // Write the updated YAML back to the file + const updatedYaml = yaml.dump(rawConfig); + fs.writeFileSync(filePath, updatedYaml, "utf8"); + + console.log(`Removed deprecated config option: secure_cookies.`); + } catch (e) { + console.log( + `Was unable to remove deprecated config option: secure_cookies. Error: ${e}` + ); + return; + } + + console.log("Done."); +} diff --git a/server/setup/scriptsSqlite/1.0.0-beta12.ts b/server/setup/scriptsSqlite/1.0.0-beta12.ts new file mode 100644 index 000000000..8c96e663c --- /dev/null +++ b/server/setup/scriptsSqlite/1.0.0-beta12.ts @@ -0,0 +1,61 @@ +import { db } from "../../db/sqlite"; +import { configFilePath1, configFilePath2 } from "@server/lib/consts"; +import { sql } from "drizzle-orm"; +import fs from "fs"; +import yaml from "js-yaml"; + +export default async function migration() { + console.log("Running setup script 1.0.0-beta.12..."); + + try { + // Determine which config file exists + const filePaths = [configFilePath1, configFilePath2]; + let filePath = ""; + for (const path of filePaths) { + if (fs.existsSync(path)) { + filePath = path; + break; + } + } + + if (!filePath) { + throw new Error( + `No config file found (expected config.yml or config.yaml).` + ); + } + + // Read and parse the YAML file + const fileContents = fs.readFileSync(filePath, "utf8"); + const rawConfig = yaml.load(fileContents) as any; + + if (!rawConfig.flags) { + rawConfig.flags = {}; + } + + rawConfig.flags.allow_base_domain_resources = true; + + // Write the updated YAML back to the file + const updatedYaml = yaml.dump(rawConfig); + fs.writeFileSync(filePath, updatedYaml, "utf8"); + + console.log(`Added new config option: allow_base_domain_resources`); + } catch (e) { + console.log( + `Unable to add new config option: allow_base_domain_resources. This is not critical.` + ); + console.error(e); + } + + try { + db.transaction((trx) => { + trx.run(sql`ALTER TABLE 'resources' ADD 'isBaseDomain' integer;`); + }); + + console.log(`Added new column: isBaseDomain`); + } catch (e) { + console.log("Unable to add new column: isBaseDomain"); + throw e; + } + + console.log("Done."); +} diff --git a/server/setup/scriptsSqlite/1.0.0-beta13.ts b/server/setup/scriptsSqlite/1.0.0-beta13.ts new file mode 100644 index 000000000..9ced727f7 --- /dev/null +++ b/server/setup/scriptsSqlite/1.0.0-beta13.ts @@ -0,0 +1,33 @@ +import { db } from "../../db/sqlite"; +import { sql } from "drizzle-orm"; + +const version = "1.0.0-beta.13"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + try { + db.transaction((trx) => { + trx.run(sql`CREATE TABLE resourceRules ( + ruleId integer PRIMARY KEY AUTOINCREMENT NOT NULL, + resourceId integer NOT NULL, + priority integer NOT NULL, + enabled integer DEFAULT true NOT NULL, + action text NOT NULL, + match text NOT NULL, + value text NOT NULL, + FOREIGN KEY (resourceId) REFERENCES resources(resourceId) ON UPDATE no action ON DELETE cascade + );`); + trx.run( + sql`ALTER TABLE resources ADD applyRules integer DEFAULT false NOT NULL;` + ); + }); + + console.log(`Added new table and column: resourceRules, applyRules`); + } catch (e) { + console.log("Unable to add new table and column: resourceRules, applyRules"); + throw e; + } + + console.log(`${version} migration complete`); +} diff --git a/server/setup/scriptsSqlite/1.0.0-beta15.ts b/server/setup/scriptsSqlite/1.0.0-beta15.ts new file mode 100644 index 000000000..cf39fd8a3 --- /dev/null +++ b/server/setup/scriptsSqlite/1.0.0-beta15.ts @@ -0,0 +1,128 @@ +import { db } from "../../db/sqlite"; +import { configFilePath1, configFilePath2 } from "@server/lib/consts"; +import fs from "fs"; +import yaml from "js-yaml"; +import { sql } from "drizzle-orm"; +import { domains, orgDomains, resources } from "@server/db"; + +const version = "1.0.0-beta.15"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + let domain = ""; + + try { + // Determine which config file exists + const filePaths = [configFilePath1, configFilePath2]; + let filePath = ""; + for (const path of filePaths) { + if (fs.existsSync(path)) { + filePath = path; + break; + } + } + + if (!filePath) { + throw new Error( + `No config file found (expected config.yml or config.yaml).` + ); + } + + // Read and parse the YAML file + const fileContents = fs.readFileSync(filePath, "utf8"); + const rawConfig = yaml.load(fileContents) as any; + + const baseDomain = rawConfig.app.base_domain; + const certResolver = rawConfig.traefik.cert_resolver; + const preferWildcardCert = rawConfig.traefik.prefer_wildcard_cert; + + delete rawConfig.traefik.prefer_wildcard_cert; + delete rawConfig.traefik.cert_resolver; + delete rawConfig.app.base_domain; + + rawConfig.domains = { + domain1: { + base_domain: baseDomain + } + }; + + if (certResolver) { + rawConfig.domains.domain1.cert_resolver = certResolver; + } + + if (preferWildcardCert) { + rawConfig.domains.domain1.prefer_wildcard_cert = preferWildcardCert; + } + + // Write the updated YAML back to the file + const updatedYaml = yaml.dump(rawConfig); + fs.writeFileSync(filePath, updatedYaml, "utf8"); + + domain = baseDomain; + + console.log(`Moved base_domain to new domains section`); + } catch (e) { + console.log( + `Unable to migrate config file and move base_domain to domains. Error: ${e}` + ); + throw e; + } + + try { + db.transaction((trx) => { + trx.run(sql`CREATE TABLE 'domains' ( + 'domainId' text PRIMARY KEY NOT NULL, + 'baseDomain' text NOT NULL, + 'configManaged' integer DEFAULT false NOT NULL +);`); + + trx.run(sql`CREATE TABLE 'orgDomains' ( + 'orgId' text NOT NULL, + 'domainId' text NOT NULL, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade +);`); + + trx.run( + sql`ALTER TABLE 'resources' ADD 'domainId' text REFERENCES domains(domainId);` + ); + trx.run(sql`ALTER TABLE 'orgs' DROP COLUMN 'domain';`); + }); + + console.log(`Migrated database schema`); + } catch (e) { + console.log("Unable to migrate database schema"); + throw e; + } + + try { + await db.transaction(async (trx) => { + await trx + .insert(domains) + .values({ + domainId: "domain1", + baseDomain: domain, + configManaged: true + }) + .execute(); + await trx.update(resources).set({ domainId: "domain1" }); + const existingOrgDomains = await trx.select().from(orgDomains); + for (const orgDomain of existingOrgDomains) { + await trx + .insert(orgDomains) + .values({ orgId: orgDomain.orgId, domainId: "domain1" }) + .execute(); + } + }); + + console.log(`Updated resources table with new domainId`); + } catch (e) { + console.log( + `Unable to update resources table with new domainId. Error: ${e}` + ); + return; + } + + console.log(`${version} migration complete`); +} diff --git a/server/setup/scriptsSqlite/1.0.0-beta2.ts b/server/setup/scriptsSqlite/1.0.0-beta2.ts new file mode 100644 index 000000000..1241e9c51 --- /dev/null +++ b/server/setup/scriptsSqlite/1.0.0-beta2.ts @@ -0,0 +1,58 @@ +import { configFilePath1, configFilePath2 } from "@server/lib/consts"; +import fs from "fs"; +import yaml from "js-yaml"; + +export default async function migration() { + console.log("Running setup script 1.0.0-beta.2..."); + + // Determine which config file exists + const filePaths = [configFilePath1, configFilePath2]; + let filePath = ""; + for (const path of filePaths) { + if (fs.existsSync(path)) { + filePath = path; + break; + } + } + + if (!filePath) { + throw new Error( + `No config file found (expected config.yml or config.yaml).` + ); + } + + // Read and parse the YAML file + const fileContents = fs.readFileSync(filePath, "utf8"); + const rawConfig = yaml.load(fileContents) as any; + + // Validate the structure + if (!rawConfig.app || !rawConfig.app.base_url) { + throw new Error(`Invalid config file: app.base_url is missing.`); + } + + // Move base_url to dashboard_url and calculate base_domain + const baseUrl = rawConfig.app.base_url; + rawConfig.app.dashboard_url = baseUrl; + rawConfig.app.base_domain = getBaseDomain(baseUrl); + + // Remove the old base_url + delete rawConfig.app.base_url; + + // Write the updated YAML back to the file + const updatedYaml = yaml.dump(rawConfig); + fs.writeFileSync(filePath, updatedYaml, "utf8"); + + console.log("Done."); +} + +function getBaseDomain(url: string): string { + const newUrl = new URL(url); + const hostname = newUrl.hostname; + const parts = hostname.split("."); + + if (parts.length <= 2) { + return parts.join("."); + } + + return parts.slice(-2).join("."); +} diff --git a/server/setup/scriptsSqlite/1.0.0-beta3.ts b/server/setup/scriptsSqlite/1.0.0-beta3.ts new file mode 100644 index 000000000..fccfeb887 --- /dev/null +++ b/server/setup/scriptsSqlite/1.0.0-beta3.ts @@ -0,0 +1,41 @@ +import { configFilePath1, configFilePath2 } from "@server/lib/consts"; +import fs from "fs"; +import yaml from "js-yaml"; + +export default async function migration() { + console.log("Running setup script 1.0.0-beta.3..."); + + // Determine which config file exists + const filePaths = [configFilePath1, configFilePath2]; + let filePath = ""; + for (const path of filePaths) { + if (fs.existsSync(path)) { + filePath = path; + break; + } + } + + if (!filePath) { + throw new Error( + `No config file found (expected config.yml or config.yaml).` + ); + } + + // Read and parse the YAML file + const fileContents = fs.readFileSync(filePath, "utf8"); + const rawConfig = yaml.load(fileContents) as any; + + // Validate the structure + if (!rawConfig.gerbil) { + throw new Error(`Invalid config file: gerbil is missing.`); + } + + // Update the config + rawConfig.gerbil.site_block_size = 29; + + // Write the updated YAML back to the file + const updatedYaml = yaml.dump(rawConfig); + fs.writeFileSync(filePath, updatedYaml, "utf8"); + + console.log("Done."); +} \ No newline at end of file diff --git a/server/setup/scriptsSqlite/1.0.0-beta5.ts b/server/setup/scriptsSqlite/1.0.0-beta5.ts new file mode 100644 index 000000000..1c49503cd --- /dev/null +++ b/server/setup/scriptsSqlite/1.0.0-beta5.ts @@ -0,0 +1,100 @@ +import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; +import fs from "fs"; +import yaml from "js-yaml"; +import path from "path"; +import { z } from "zod"; +import { fromZodError } from "zod-validation-error"; + +export default async function migration() { + console.log("Running setup script 1.0.0-beta.5..."); + + // Determine which config file exists + const filePaths = [configFilePath1, configFilePath2]; + let filePath = ""; + for (const path of filePaths) { + if (fs.existsSync(path)) { + filePath = path; + break; + } + } + + if (!filePath) { + throw new Error( + `No config file found (expected config.yml or config.yaml).` + ); + } + + // Read and parse the YAML file + const fileContents = fs.readFileSync(filePath, "utf8"); + const rawConfig = yaml.load(fileContents) as any; + + // Validate the structure + if (!rawConfig.server) { + throw new Error(`Invalid config file: server is missing.`); + } + + // Update the config + rawConfig.server.resource_access_token_param = "p_token"; + + // Write the updated YAML back to the file + const updatedYaml = yaml.dump(rawConfig); + fs.writeFileSync(filePath, updatedYaml, "utf8"); + + // then try to update badger in traefik config + + try { + const traefikPath = path.join( + APP_PATH, + "traefik", + "traefik_config.yml" + ); + + // read the traefik file + // look for the badger middleware + // set the version to v1.0.0-beta.2 + /* +experimental: + plugins: + badger: + moduleName: "github.com/fosrl/badger" + version: "v1.0.0-beta.2" + */ + + const schema = z.object({ + experimental: z.object({ + plugins: z.object({ + badger: z.object({ + moduleName: z.string(), + version: z.string() + }) + }) + }) + }); + + const traefikFileContents = fs.readFileSync(traefikPath, "utf8"); + const traefikConfig = yaml.load(traefikFileContents) as any; + + const parsedConfig = schema.safeParse(traefikConfig); + + if (!parsedConfig.success) { + throw new Error(fromZodError(parsedConfig.error).toString()); + } + + traefikConfig.experimental.plugins.badger.version = "v1.0.0-beta.2"; + + const updatedTraefikYaml = yaml.dump(traefikConfig); + + fs.writeFileSync(traefikPath, updatedTraefikYaml, "utf8"); + + console.log( + "Updated the version of Badger in your Traefik configuration to v1.0.0-beta.2." + ); + } catch (e) { + console.log( + "We were unable to update the version of Badger in your Traefik configuration. Please update it manually." + ); + console.error(e); + } + + console.log("Done."); +} diff --git a/server/setup/scriptsSqlite/1.0.0-beta6.ts b/server/setup/scriptsSqlite/1.0.0-beta6.ts new file mode 100644 index 000000000..891296781 --- /dev/null +++ b/server/setup/scriptsSqlite/1.0.0-beta6.ts @@ -0,0 +1,51 @@ +import { configFilePath1, configFilePath2 } from "@server/lib/consts"; +import fs from "fs"; +import yaml from "js-yaml"; + +export default async function migration() { + console.log("Running setup script 1.0.0-beta.6..."); + + try { + // Determine which config file exists + const filePaths = [configFilePath1, configFilePath2]; + let filePath = ""; + for (const path of filePaths) { + if (fs.existsSync(path)) { + filePath = path; + break; + } + } + + if (!filePath) { + throw new Error( + `No config file found (expected config.yml or config.yaml).` + ); + } + + // Read and parse the YAML file + const fileContents = fs.readFileSync(filePath, "utf8"); + const rawConfig = yaml.load(fileContents) as any; + + // Validate the structure + if (!rawConfig.server) { + throw new Error(`Invalid config file: server is missing.`); + } + + // Update the config + rawConfig.server.cors = { + origins: [rawConfig.app.dashboard_url], + methods: ["GET", "POST", "PUT", "DELETE", "PATCH"], + headers: ["X-CSRF-Token", "Content-Type"], + credentials: false + }; + + // Write the updated YAML back to the file + const updatedYaml = yaml.dump(rawConfig); + fs.writeFileSync(filePath, updatedYaml, "utf8"); + } catch (error) { + console.log("We were unable to add CORS to your config file. Please add it manually."); + console.error(error); + } + + console.log("Done."); +} diff --git a/server/setup/scriptsSqlite/1.0.0-beta9.ts b/server/setup/scriptsSqlite/1.0.0-beta9.ts new file mode 100644 index 000000000..7cce1c2dd --- /dev/null +++ b/server/setup/scriptsSqlite/1.0.0-beta9.ts @@ -0,0 +1,290 @@ +import { db } from "../../db/sqlite"; +import { + emailVerificationCodes, + passwordResetTokens, + resourceOtp, + resources, + resourceWhitelist, + targets, + userInvites, + users +} from "../../db/sqlite"; +import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; +import { eq, sql } from "drizzle-orm"; +import fs from "fs"; +import yaml from "js-yaml"; +import path from "path"; +import { z } from "zod"; +import { fromZodError } from "zod-validation-error"; + +export default async function migration() { + console.log("Running setup script 1.0.0-beta.9..."); + + // make dir config/db/backups + const appPath = APP_PATH; + const dbDir = path.join(appPath, "db"); + + const backupsDir = path.join(dbDir, "backups"); + + // check if the backups directory exists and create it if it doesn't + if (!fs.existsSync(backupsDir)) { + fs.mkdirSync(backupsDir, { recursive: true }); + } + + // copy the db.sqlite file to backups + // add the date to the filename + const date = new Date(); + const dateString = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}_${date.getHours()}-${date.getMinutes()}-${date.getSeconds()}`; + const dbPath = path.join(dbDir, "db.sqlite"); + const backupPath = path.join(backupsDir, `db_${dateString}.sqlite`); + fs.copyFileSync(dbPath, backupPath); + + await db.transaction(async (trx) => { + try { + // Determine which config file exists + const filePaths = [configFilePath1, configFilePath2]; + let filePath = ""; + for (const path of filePaths) { + if (fs.existsSync(path)) { + filePath = path; + break; + } + } + + if (!filePath) { + throw new Error( + `No config file found (expected config.yml or config.yaml).` + ); + } + + // Read and parse the YAML file + const fileContents = fs.readFileSync(filePath, "utf8"); + const rawConfig = yaml.load(fileContents) as any; + + rawConfig.server.resource_session_request_param = + "p_session_request"; + rawConfig.server.session_cookie_name = "p_session_token"; // rename to prevent conflicts + delete rawConfig.server.resource_session_cookie_name; + + if (!rawConfig.flags) { + rawConfig.flags = {}; + } + + rawConfig.flags.allow_raw_resources = true; + + // Write the updated YAML back to the file + const updatedYaml = yaml.dump(rawConfig); + fs.writeFileSync(filePath, updatedYaml, "utf8"); + } catch (e) { + console.log( + `Failed to add resource_session_request_param to config. Please add it manually. https://docs.pangolin.net/self-host/advanced/config-file` + ); + trx.rollback(); + return; + } + + try { + const traefikPath = path.join( + APP_PATH, + "traefik", + "traefik_config.yml" + ); + + // Define schema for traefik config validation + const schema = z.object({ + entryPoints: z + .object({ + websecure: z + .object({ + address: z.string(), + transport: z + .object({ + respondingTimeouts: z.object({ + readTimeout: z.string() + }) + }) + .optional() + }) + .optional() + }) + .optional(), + experimental: z.object({ + plugins: z.object({ + badger: z.object({ + moduleName: z.string(), + version: z.string() + }) + }) + }) + }); + + const traefikFileContents = fs.readFileSync(traefikPath, "utf8"); + const traefikConfig = yaml.load(traefikFileContents) as any; + + const parsedConfig: any = schema.safeParse(traefikConfig); + + if (parsedConfig.success) { + // Ensure websecure entrypoint exists + if (traefikConfig.entryPoints?.websecure) { + // Add transport configuration + traefikConfig.entryPoints.websecure.transport = { + respondingTimeouts: { + readTimeout: "30m" + } + }; + } + + traefikConfig.experimental.plugins.badger.version = + "v1.0.0-beta.3"; + + const updatedTraefikYaml = yaml.dump(traefikConfig); + fs.writeFileSync(traefikPath, updatedTraefikYaml, "utf8"); + + console.log("Updated Badger version in Traefik config."); + } else { + console.log(fromZodError(parsedConfig.error)); + console.log( + "We were unable to update the version of Badger in your Traefik configuration. Please update it manually to at least v1.0.0-beta.3. https://github.com/fosrl/badger" + ); + } + } catch (e) { + console.log( + "We were unable to update the version of Badger in your Traefik configuration. Please update it manually to at least v1.0.0-beta.3. https://github.com/fosrl/badger" + ); + trx.rollback(); + return; + } + + try { + const traefikPath = path.join( + APP_PATH, + "traefik", + "dynamic_config.yml" + ); + + const schema = z.object({ + http: z.object({ + middlewares: z.object({ + "redirect-to-https": z.object({ + redirectScheme: z.object({ + scheme: z.string(), + permanent: z.boolean() + }) + }) + }) + }) + }); + + const traefikFileContents = fs.readFileSync(traefikPath, "utf8"); + const traefikConfig = yaml.load(traefikFileContents) as any; + + const parsedConfig: any = schema.safeParse(traefikConfig); + + if (parsedConfig.success) { + // delete permanent from redirect-to-https middleware + delete traefikConfig.http.middlewares["redirect-to-https"].redirectScheme.permanent; + + const updatedTraefikYaml = yaml.dump(traefikConfig); + fs.writeFileSync(traefikPath, updatedTraefikYaml, "utf8"); + + console.log("Deleted permanent from redirect-to-https middleware."); + } else { + console.log(fromZodError(parsedConfig.error)); + console.log( + "We were unable to delete the permanent field from the redirect-to-https middleware in your Traefik configuration. Please delete it manually." + ); + } + } catch (e) { + console.log( + "We were unable to delete the permanent field from the redirect-to-https middleware in your Traefik configuration. Please delete it manually. Note that this is not a critical change but recommended." + ); + } + + trx.run(sql`UPDATE ${users} SET email = LOWER(email);`); + trx.run( + sql`UPDATE ${emailVerificationCodes} SET email = LOWER(email);` + ); + trx.run(sql`UPDATE ${passwordResetTokens} SET email = LOWER(email);`); + trx.run(sql`UPDATE ${userInvites} SET email = LOWER(email);`); + trx.run(sql`UPDATE ${resourceWhitelist} SET email = LOWER(email);`); + trx.run(sql`UPDATE ${resourceOtp} SET email = LOWER(email);`); + + const resourcesAll = await trx + .select({ + resourceId: resources.resourceId, + fullDomain: resources.fullDomain, + subdomain: resources.subdomain + }) + .from(resources); + + trx.run(`DROP INDEX resources_fullDomain_unique;`); + trx.run(`ALTER TABLE resources + DROP COLUMN fullDomain; + `); + trx.run(`ALTER TABLE resources + DROP COLUMN subdomain; + `); + trx.run(sql`ALTER TABLE resources + ADD COLUMN fullDomain TEXT; + `); + trx.run(sql`ALTER TABLE resources + ADD COLUMN subdomain TEXT; + `); + trx.run(sql`ALTER TABLE resources + ADD COLUMN http INTEGER DEFAULT true NOT NULL; + `); + trx.run(sql`ALTER TABLE resources + ADD COLUMN protocol TEXT DEFAULT 'tcp' NOT NULL; + `); + trx.run(sql`ALTER TABLE resources + ADD COLUMN proxyPort INTEGER; + `); + + // write the new fullDomain and subdomain values back to the database + for (const resource of resourcesAll) { + await trx + .update(resources) + .set({ + fullDomain: resource.fullDomain, + subdomain: resource.subdomain + }) + .where(eq(resources.resourceId, resource.resourceId)); + } + + const targetsAll = await trx + .select({ + targetId: targets.targetId, + method: targets.method + }) + .from(targets); + + trx.run(`ALTER TABLE targets + DROP COLUMN method; + `); + trx.run(`ALTER TABLE targets + DROP COLUMN protocol; + `); + trx.run(sql`ALTER TABLE targets + ADD COLUMN method TEXT; + `); + + // write the new method and protocol values back to the database + for (const target of targetsAll) { + await trx + .update(targets) + .set({ + method: target.method + }) + .where(eq(targets.targetId, target.targetId)); + } + + trx.run( + sql`ALTER TABLE 'resourceSessions' ADD 'isRequestToken' integer;` + ); + trx.run( + sql`ALTER TABLE 'resourceSessions' ADD 'userSessionId' text REFERENCES session(id);` + ); + }); + + console.log("Done."); +} diff --git a/server/setup/scriptsSqlite/1.0.0.ts b/server/setup/scriptsSqlite/1.0.0.ts new file mode 100644 index 000000000..c82966dee --- /dev/null +++ b/server/setup/scriptsSqlite/1.0.0.ts @@ -0,0 +1,57 @@ +import { APP_PATH } from "@server/lib/consts"; +import fs from "fs"; +import yaml from "js-yaml"; +import path from "path"; +import { z } from "zod"; +import { fromZodError } from "zod-validation-error"; + +const version = "1.0.0"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + try { + const traefikPath = path.join( + APP_PATH, + "traefik", + "traefik_config.yml" + ); + + const schema = z.object({ + experimental: z.object({ + plugins: z.object({ + badger: z.object({ + moduleName: z.string(), + version: z.string() + }) + }) + }) + }); + + const traefikFileContents = fs.readFileSync(traefikPath, "utf8"); + const traefikConfig = yaml.load(traefikFileContents) as any; + + const parsedConfig = schema.safeParse(traefikConfig); + + if (!parsedConfig.success) { + throw new Error(fromZodError(parsedConfig.error).toString()); + } + + traefikConfig.experimental.plugins.badger.version = "v1.0.0"; + + const updatedTraefikYaml = yaml.dump(traefikConfig); + + fs.writeFileSync(traefikPath, updatedTraefikYaml, "utf8"); + + console.log( + "Updated the version of Badger in your Traefik configuration to 1.0.0" + ); + } catch (e) { + console.log( + "We were unable to update the version of Badger in your Traefik configuration. Please update it manually." + ); + console.error(e); + } + + console.log(`${version} migration complete`); +} diff --git a/server/setup/scriptsSqlite/1.1.0.ts b/server/setup/scriptsSqlite/1.1.0.ts new file mode 100644 index 000000000..4d1218522 --- /dev/null +++ b/server/setup/scriptsSqlite/1.1.0.ts @@ -0,0 +1,28 @@ +import { db } from "../../db/sqlite"; +import { sql } from "drizzle-orm"; + +const version = "1.1.0"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + try { + db.transaction((trx) => { + trx.run(sql`CREATE TABLE 'supporterKey' ( + 'keyId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'key' text NOT NULL, + 'githubUsername' text NOT NULL, + 'phrase' text, + 'tier' text, + 'valid' integer DEFAULT false NOT NULL +);`); + }); + + console.log(`Migrated database schema`); + } catch (e) { + console.log("Unable to migrate database schema"); + throw e; + } + + console.log(`${version} migration complete`); +} diff --git a/server/setup/scriptsSqlite/1.10.0.ts b/server/setup/scriptsSqlite/1.10.0.ts new file mode 100644 index 000000000..3065a664d --- /dev/null +++ b/server/setup/scriptsSqlite/1.10.0.ts @@ -0,0 +1,136 @@ +import { __DIRNAME, APP_PATH } from "@server/lib/consts"; +import Database from "better-sqlite3"; +import { readFileSync } from "fs"; +import path, { join } from "path"; + +const version = "1.10.0"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = new Database(location); + + try { + const resources = db + .prepare( + "SELECT resourceId FROM resources" + ) + .all() as Array<{ resourceId: number }>; + + const siteResources = db + .prepare( + "SELECT siteResourceId FROM siteResources" + ) + .all() as Array<{ siteResourceId: number }>; + + db.transaction(() => { + db.exec(` + ALTER TABLE 'exitNodes' ADD 'region' text; + ALTER TABLE 'idpOidcConfig' ADD 'variant' text DEFAULT 'oidc' NOT NULL; + ALTER TABLE 'resources' ADD 'niceId' text DEFAULT '' NOT NULL; + ALTER TABLE 'siteResources' ADD 'niceId' text DEFAULT '' NOT NULL; + ALTER TABLE 'userOrgs' ADD 'autoProvisioned' integer DEFAULT false; + ALTER TABLE 'targets' ADD 'pathMatchType' text; + ALTER TABLE 'targets' ADD 'path' text; + ALTER TABLE 'resources' ADD 'headers' text; + `); // this diverges from the schema a bit because the schema does not have a default on niceId but was required for the migration and I dont think it will effect much down the line... + + const usedNiceIds: string[] = []; + + for (const resourceId of resources) { + // Generate a unique name and ensure it's unique + let niceId = ""; + let loops = 0; + while (true) { + if (loops > 100) { + throw new Error("Could not generate a unique name"); + } + + niceId = generateName(); + if (!usedNiceIds.includes(niceId)) { + usedNiceIds.push(niceId); + break; + } + loops++; + } + db.prepare( + `UPDATE resources SET niceId = ? WHERE resourceId = ?` + ).run(niceId, resourceId.resourceId); + } + + for (const resourceId of siteResources) { + // Generate a unique name and ensure it's unique + let niceId = ""; + let loops = 0; + while (true) { + if (loops > 100) { + throw new Error("Could not generate a unique name"); + } + + niceId = generateName(); + if (!usedNiceIds.includes(niceId)) { + usedNiceIds.push(niceId); + break; + } + loops++; + } + db.prepare( + `UPDATE siteResources SET niceId = ? WHERE siteResourceId = ?` + ).run(niceId, resourceId.siteResourceId); + } + + // Handle auto-provisioned users for identity providers + const autoProvisionIdps = db + .prepare( + "SELECT idpId FROM idp WHERE autoProvision = 1" + ) + .all() as Array<{ idpId: number }>; + + for (const idp of autoProvisionIdps) { + // Get all users with this identity provider + const usersWithIdp = db + .prepare( + "SELECT id FROM user WHERE idpId = ?" + ) + .all(idp.idpId) as Array<{ id: string }>; + + // Update userOrgs to set autoProvisioned to true for these users + for (const user of usersWithIdp) { + db.prepare( + "UPDATE userOrgs SET autoProvisioned = 1 WHERE userId = ?" + ).run(user.id); + } + } + })(); + + console.log(`Migrated database`); + } catch (e) { + console.log("Failed to migrate db:", e); + throw e; + } +} + +const dev = process.env.ENVIRONMENT !== "prod"; +let file; +if (!dev) { + file = join(__DIRNAME, "names.json"); +} else { + file = join("server/db/names.json"); +} +export const names = JSON.parse(readFileSync(file, "utf-8")); + +export function generateName(): string { + const name = ( + names.descriptors[ + Math.floor(Math.random() * names.descriptors.length) + ] + + "-" + + names.animals[Math.floor(Math.random() * names.animals.length)] + ) + .toLowerCase() + .replace(/\s/g, "-"); + + // clean out any non-alphanumeric characters except for dashes + return name.replace(/[^a-z0-9-]/g, ""); +} diff --git a/server/setup/scriptsSqlite/1.10.1.ts b/server/setup/scriptsSqlite/1.10.1.ts new file mode 100644 index 000000000..f6f9894ed --- /dev/null +++ b/server/setup/scriptsSqlite/1.10.1.ts @@ -0,0 +1,69 @@ +import { APP_PATH } from "@server/lib/consts"; +import Database from "better-sqlite3"; +import path from "path"; + +const version = "1.10.1"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = new Database(location); + + try { + db.pragma("foreign_keys = OFF"); + + db.transaction(() => { + db.exec(`ALTER TABLE "targets" RENAME TO "targets_old"; +--> statement-breakpoint +CREATE TABLE "targets" ( + "targetId" INTEGER PRIMARY KEY AUTOINCREMENT, + "resourceId" INTEGER NOT NULL, + "siteId" INTEGER NOT NULL, + "ip" TEXT NOT NULL, + "method" TEXT, + "port" INTEGER NOT NULL, + "internalPort" INTEGER, + "enabled" INTEGER NOT NULL DEFAULT 1, + "path" TEXT, + "pathMatchType" TEXT, + FOREIGN KEY ("resourceId") REFERENCES "resources"("resourceId") ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ("siteId") REFERENCES "sites"("siteId") ON UPDATE no action ON DELETE cascade +); +--> statement-breakpoint +INSERT INTO "targets" ( + "targetId", + "resourceId", + "siteId", + "ip", + "method", + "port", + "internalPort", + "enabled", + "path", + "pathMatchType" +) +SELECT + targetId, + resourceId, + siteId, + ip, + method, + port, + internalPort, + enabled, + path, + pathMatchType +FROM "targets_old"; +--> statement-breakpoint +DROP TABLE "targets_old";`); + })(); + + db.pragma("foreign_keys = ON"); + + console.log(`Migrated database`); + } catch (e) { + console.log("Failed to migrate db:", e); + throw e; + } +} \ No newline at end of file diff --git a/server/setup/scriptsSqlite/1.10.2.ts b/server/setup/scriptsSqlite/1.10.2.ts new file mode 100644 index 000000000..7978e2621 --- /dev/null +++ b/server/setup/scriptsSqlite/1.10.2.ts @@ -0,0 +1,54 @@ +import { APP_PATH } from "@server/lib/consts"; +import Database from "better-sqlite3"; +import path from "path"; + +const version = "1.10.2"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = new Database(location); + + const resources = db.prepare("SELECT * FROM resources").all() as Array<{ + resourceId: number; + headers: string | null; + }>; + + try { + db.pragma("foreign_keys = OFF"); + + db.transaction(() => { + for (const resource of resources) { + const headers = resource.headers; + if (headers && headers !== "") { + // lets convert it to json + // fist split at commas + const headersArray = headers + .split(",") + .map((header: string) => { + const [name, ...valueParts] = header.split(":"); + const value = valueParts.join(":").trim(); + return { name: name.trim(), value }; + }); + + db.prepare( + ` + UPDATE "resources" SET "headers" = ? WHERE "resourceId" = ?` + ).run(JSON.stringify(headersArray), resource.resourceId); + + console.log( + `Updated resource ${resource.resourceId} headers to JSON format` + ); + } + } + })(); + + db.pragma("foreign_keys = ON"); + + console.log(`Migrated database`); + } catch (e) { + console.log("Failed to migrate db:", e); + throw e; + } +} diff --git a/server/setup/scriptsSqlite/1.11.0.ts b/server/setup/scriptsSqlite/1.11.0.ts new file mode 100644 index 000000000..c79cfdb46 --- /dev/null +++ b/server/setup/scriptsSqlite/1.11.0.ts @@ -0,0 +1,339 @@ +import { APP_PATH } from "@server/lib/consts"; +import Database from "better-sqlite3"; +import path from "path"; +import { isoBase64URL } from "@simplewebauthn/server/helpers"; +import { randomUUID } from "crypto"; + +const version = "1.11.0"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = new Database(location); + + db.transaction(() => { + + db.prepare(` + CREATE TABLE 'account' ( + 'accountId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'userId' text NOT NULL, + FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(` + CREATE TABLE 'accountDomains' ( + 'accountId' integer NOT NULL, + 'domainId' text NOT NULL, + FOREIGN KEY ('accountId') REFERENCES 'account'('accountId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(` + CREATE TABLE 'certificates' ( + 'certId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'domain' text NOT NULL, + 'domainId' text, + 'wildcard' integer DEFAULT false, + 'status' text DEFAULT 'pending' NOT NULL, + 'expiresAt' integer, + 'lastRenewalAttempt' integer, + 'createdAt' integer NOT NULL, + 'updatedAt' integer NOT NULL, + 'orderId' text, + 'errorMessage' text, + 'renewalCount' integer DEFAULT 0, + 'certFile' text, + 'keyFile' text, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(`CREATE UNIQUE INDEX 'certificates_domain_unique' ON 'certificates' ('domain');`).run(); + + db.prepare(` + CREATE TABLE 'customers' ( + 'customerId' text PRIMARY KEY NOT NULL, + 'orgId' text NOT NULL, + 'email' text, + 'name' text, + 'phone' text, + 'address' text, + 'createdAt' integer NOT NULL, + 'updatedAt' integer NOT NULL, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(` + CREATE TABLE 'dnsChallenges' ( + 'dnsChallengeId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'domain' text NOT NULL, + 'token' text NOT NULL, + 'keyAuthorization' text NOT NULL, + 'createdAt' integer NOT NULL, + 'expiresAt' integer NOT NULL, + 'completed' integer DEFAULT false + ); + `).run(); + + db.prepare(` + CREATE TABLE 'domainNamespaces' ( + 'domainNamespaceId' text PRIMARY KEY NOT NULL, + 'domainId' text NOT NULL, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null + ); + `).run(); + + db.prepare(` + CREATE TABLE 'exitNodeOrgs' ( + 'exitNodeId' integer NOT NULL, + 'orgId' text NOT NULL, + FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(` + CREATE TABLE 'loginPage' ( + 'loginPageId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'subdomain' text, + 'fullDomain' text, + 'exitNodeId' integer, + 'domainId' text, + FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null + ); + `).run(); + + db.prepare(` + CREATE TABLE 'loginPageOrg' ( + 'loginPageId' integer NOT NULL, + 'orgId' text NOT NULL, + FOREIGN KEY ('loginPageId') REFERENCES 'loginPage'('loginPageId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(` + CREATE TABLE 'remoteExitNodeSession' ( + 'id' text PRIMARY KEY NOT NULL, + 'remoteExitNodeId' text NOT NULL, + 'expiresAt' integer NOT NULL, + FOREIGN KEY ('remoteExitNodeId') REFERENCES 'remoteExitNode'('id') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(` + CREATE TABLE 'remoteExitNode' ( + 'id' text PRIMARY KEY NOT NULL, + 'secretHash' text NOT NULL, + 'dateCreated' text NOT NULL, + 'version' text, + 'exitNodeId' integer, + FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(` + CREATE TABLE 'sessionTransferToken' ( + 'token' text PRIMARY KEY NOT NULL, + 'sessionId' text NOT NULL, + 'encryptedSession' text NOT NULL, + 'expiresAt' integer NOT NULL, + FOREIGN KEY ('sessionId') REFERENCES 'session'('id') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(` + CREATE TABLE 'subscriptionItems' ( + 'subscriptionItemId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'subscriptionId' text NOT NULL, + 'planId' text NOT NULL, + 'priceId' text, + 'meterId' text, + 'unitAmount' real, + 'tiers' text, + 'interval' text, + 'currentPeriodStart' integer, + 'currentPeriodEnd' integer, + 'name' text, + FOREIGN KEY ('subscriptionId') REFERENCES 'subscriptions'('subscriptionId') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(` + CREATE TABLE 'subscriptions' ( + 'subscriptionId' text PRIMARY KEY NOT NULL, + 'customerId' text NOT NULL, + 'status' text DEFAULT 'active' NOT NULL, + 'canceledAt' integer, + 'createdAt' integer NOT NULL, + 'updatedAt' integer, + 'billingCycleAnchor' integer, + FOREIGN KEY ('customerId') REFERENCES 'customers'('customerId') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(` + CREATE TABLE 'usage' ( + 'usageId' text PRIMARY KEY NOT NULL, + 'featureId' text NOT NULL, + 'orgId' text NOT NULL, + 'meterId' text, + 'instantaneousValue' real, + 'latestValue' real NOT NULL, + 'previousValue' real, + 'updatedAt' integer NOT NULL, + 'rolledOverAt' integer, + 'nextRolloverAt' integer, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(` + CREATE TABLE 'usageNotifications' ( + 'notificationId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'orgId' text NOT NULL, + 'featureId' text NOT NULL, + 'limitId' text NOT NULL, + 'notificationType' text NOT NULL, + 'sentAt' integer NOT NULL, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(` + CREATE TABLE 'resourceHeaderAuth' ( + 'headerAuthId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'resourceId' integer NOT NULL, + 'headerAuthHash' text NOT NULL, + FOREIGN KEY ('resourceId') REFERENCES 'resources'('resourceId') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(` + CREATE TABLE 'targetHealthCheck' ( + 'targetHealthCheckId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'targetId' integer NOT NULL, + 'hcEnabled' integer DEFAULT false NOT NULL, + 'hcPath' text, + 'hcScheme' text, + 'hcMode' text DEFAULT 'http', + 'hcHostname' text, + 'hcPort' integer, + 'hcInterval' integer DEFAULT 30, + 'hcUnhealthyInterval' integer DEFAULT 30, + 'hcTimeout' integer DEFAULT 5, + 'hcHeaders' text, + 'hcFollowRedirects' integer DEFAULT true, + 'hcMethod' text DEFAULT 'GET', + 'hcStatus' integer, + 'hcHealth' text DEFAULT 'unknown', + FOREIGN KEY ('targetId') REFERENCES 'targets'('targetId') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(`DROP TABLE 'limits';`).run(); + + db.prepare(` + CREATE TABLE 'limits' ( + 'limitId' text PRIMARY KEY NOT NULL, + 'featureId' text NOT NULL, + 'orgId' text NOT NULL, + 'value' real, + 'description' text, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + `).run(); + + db.prepare(`ALTER TABLE 'orgs' ADD 'settings' text;`).run(); + db.prepare(`ALTER TABLE 'targets' ADD 'rewritePath' text;`).run(); + db.prepare(`ALTER TABLE 'targets' ADD 'rewritePathType' text;`).run(); + db.prepare(`ALTER TABLE 'targets' ADD 'priority' integer DEFAULT 100 NOT NULL;`).run(); + + const webauthnCredentials = db + .prepare( + `SELECT credentialId, publicKey, userId, signCount, transports, name, lastUsed, dateCreated FROM 'webauthnCredentials'` + ) + .all() as { + credentialId: string; + publicKey: string; + userId: string; + signCount: number; + transports: string | null; + name: string | null; + lastUsed: string; + dateCreated: string; + }[]; + + db.prepare(`DELETE FROM 'webauthnCredentials';`).run(); + + for (const webauthnCredential of webauthnCredentials) { + const newCredentialId = isoBase64URL.fromBuffer( + new Uint8Array( + Buffer.from(webauthnCredential.credentialId, "base64") + ) + ); + const newPublicKey = isoBase64URL.fromBuffer( + new Uint8Array( + Buffer.from(webauthnCredential.publicKey, "base64") + ) + ); + + // Insert the updated record with converted values + db.prepare( + `INSERT INTO 'webauthnCredentials' (credentialId, publicKey, userId, signCount, transports, name, lastUsed, dateCreated) VALUES (?, ?, ?, ?, ?, ?, ?, ?)` + ).run( + newCredentialId, + newPublicKey, + webauthnCredential.userId, + webauthnCredential.signCount, + webauthnCredential.transports, + webauthnCredential.name, + webauthnCredential.lastUsed, + webauthnCredential.dateCreated + ); + } + + // 1. Add the column (nullable or with placeholder) if it doesn’t exist yet + db.prepare( + `ALTER TABLE resources ADD COLUMN resourceGuid TEXT DEFAULT 'PLACEHOLDER';` + ).run(); + + // 2. Select all rows + const resources = db.prepare(`SELECT resourceId FROM resources`).all() as { + resourceId: number; + }[]; + + // 3. Prefill with random UUIDs + const updateStmt = db.prepare( + `UPDATE resources SET resourceGuid = ? WHERE resourceId = ?` + ); + + for (const row of resources) { + updateStmt.run(randomUUID(), row.resourceId); + } + + // get all of the targets + const targets = db.prepare(`SELECT targetId FROM targets`).all() as { + targetId: number; + }[]; + + const insertTargetHealthCheckStmt = db.prepare( + `INSERT INTO targetHealthCheck (targetId) VALUES (?)` + ); + + for (const target of targets) { + insertTargetHealthCheckStmt.run(target.targetId); + } + + db.prepare( + `CREATE UNIQUE INDEX resources_resourceGuid_unique ON resources ('resourceGuid');` + ).run(); + })(); + + console.log(`${version} migration complete`); +} diff --git a/server/setup/scriptsSqlite/1.11.1.ts b/server/setup/scriptsSqlite/1.11.1.ts new file mode 100644 index 000000000..7f9065b6e --- /dev/null +++ b/server/setup/scriptsSqlite/1.11.1.ts @@ -0,0 +1,37 @@ +import { APP_PATH } from "@server/lib/consts"; +import Database from "better-sqlite3"; +import path from "path"; + +const version = "1.11.1"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = new Database(location); + + db.transaction(() => { + const exitNodes = db.prepare(`SELECT * FROM exitNodes WHERE type = 'gerbil' LIMIT 1`).all() as { + exitNodeId: number; + name: string; + }[]; + + const exitNodeId = exitNodes.length > 0 ? exitNodes[0].exitNodeId : null; + + // get all of the targets + const sites = db.prepare(`SELECT * FROM sites WHERE type = 'local'`).all() as { + siteId: number; + exitNodeId: number | null; + }[]; + + const defineExitNodeOnSite = db.prepare( + `UPDATE sites SET exitNodeId = ? WHERE siteId = ?` + ); + + for (const site of sites) { + defineExitNodeOnSite.run(exitNodeId, site.siteId); + } + })(); + + console.log(`${version} migration complete`); +} \ No newline at end of file diff --git a/server/setup/scriptsSqlite/1.13.0.ts b/server/setup/scriptsSqlite/1.13.0.ts deleted file mode 100644 index ad6e97550..000000000 --- a/server/setup/scriptsSqlite/1.13.0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { APP_PATH } from "@server/lib/consts"; -import { createClient } from "@libsql/client"; -import path from "path"; - -const version = "1.13.0"; - -export default async function migration() { - console.log(`Running setup script ${version}...`); - - const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = createClient({ url: "file:" + location }); - - console.log(`${version} migration complete`); -} \ No newline at end of file diff --git a/server/setup/scriptsSqlite/1.2.0.ts b/server/setup/scriptsSqlite/1.2.0.ts new file mode 100644 index 000000000..e6ba029af --- /dev/null +++ b/server/setup/scriptsSqlite/1.2.0.ts @@ -0,0 +1,114 @@ +import { db } from "../../db/sqlite"; +import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; +import { sql } from "drizzle-orm"; +import fs from "fs"; +import yaml from "js-yaml"; +import path from "path"; +import { z } from "zod"; +import { fromZodError } from "zod-validation-error"; + +const version = "1.2.0"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + try { + db.transaction((trx) => { + trx.run( + sql`ALTER TABLE 'resources' ADD 'enabled' integer DEFAULT true NOT NULL;` + ); + }); + + console.log(`Migrated database schema`); + } catch (e) { + console.log("Unable to migrate database schema"); + throw e; + } + + try { + // Determine which config file exists + const filePaths = [configFilePath1, configFilePath2]; + let filePath = ""; + for (const path of filePaths) { + if (fs.existsSync(path)) { + filePath = path; + break; + } + } + + if (!filePath) { + throw new Error( + `No config file found (expected config.yml or config.yaml).` + ); + } + + // Read and parse the YAML file + const fileContents = fs.readFileSync(filePath, "utf8"); + const rawConfig = yaml.load(fileContents) as any; + + if (!rawConfig.flags) { + rawConfig.flags = {}; + } + + rawConfig.server.resource_access_token_headers = { + id: "P-Access-Token-Id", + token: "P-Access-Token" + }; + + // Write the updated YAML back to the file + const updatedYaml = yaml.dump(rawConfig); + fs.writeFileSync(filePath, updatedYaml, "utf8"); + + console.log(`Added new config option: resource_access_token_headers`); + } catch (e) { + console.log( + `Unable to add new config option: resource_access_token_headers. Please add it manually. https://docs.pangolin.net/self-host/advanced/config-file` + ); + console.error(e); + } + + try { + const traefikPath = path.join( + APP_PATH, + "traefik", + "traefik_config.yml" + ); + + const schema = z.object({ + experimental: z.object({ + plugins: z.object({ + badger: z.object({ + moduleName: z.string(), + version: z.string() + }) + }) + }) + }); + + const traefikFileContents = fs.readFileSync(traefikPath, "utf8"); + const traefikConfig = yaml.load(traefikFileContents) as any; + + const parsedConfig = schema.safeParse(traefikConfig); + + if (!parsedConfig.success) { + throw new Error(fromZodError(parsedConfig.error).toString()); + } + + traefikConfig.experimental.plugins.badger.version = "v1.1.0"; + + const updatedTraefikYaml = yaml.dump(traefikConfig); + + fs.writeFileSync(traefikPath, updatedTraefikYaml, "utf8"); + + console.log( + "Updated the version of Badger in your Traefik configuration to v1.1.0" + ); + } catch (e) { + console.log( + "We were unable to update the version of Badger in your Traefik configuration. Please update it manually. Check the release notes for this version for more information." + ); + console.error(e); + } + + console.log(`${version} migration complete`); +} diff --git a/server/setup/scriptsSqlite/1.3.0.ts b/server/setup/scriptsSqlite/1.3.0.ts new file mode 100644 index 000000000..a084d59ff --- /dev/null +++ b/server/setup/scriptsSqlite/1.3.0.ts @@ -0,0 +1,203 @@ +import Database from "better-sqlite3"; +import path from "path"; +import fs from "fs"; +import yaml from "js-yaml"; +import { encodeBase32LowerCaseNoPadding } from "@oslojs/encoding"; +import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; + +const version = "1.3.0"; +const location = path.join(APP_PATH, "db", "db.sqlite"); + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + const db = new Database(location); + + try { + db.pragma("foreign_keys = OFF"); + db.transaction(() => { + db.exec(` + CREATE TABLE 'apiKeyActions' ( + 'apiKeyId' text NOT NULL, + 'actionId' text NOT NULL, + FOREIGN KEY ('apiKeyId') REFERENCES 'apiKeys'('apiKeyId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('actionId') REFERENCES 'actions'('actionId') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'apiKeyOrg' ( + 'apiKeyId' text NOT NULL, + 'orgId' text NOT NULL, + FOREIGN KEY ('apiKeyId') REFERENCES 'apiKeys'('apiKeyId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'apiKeys' ( + 'apiKeyId' text PRIMARY KEY NOT NULL, + 'name' text NOT NULL, + 'apiKeyHash' text NOT NULL, + 'lastChars' text NOT NULL, + 'dateCreated' text NOT NULL, + 'isRoot' integer DEFAULT false NOT NULL + ); + + CREATE TABLE 'hostMeta' ( + 'hostMetaId' text PRIMARY KEY NOT NULL, + 'createdAt' integer NOT NULL + ); + + CREATE TABLE 'idp' ( + 'idpId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'name' text NOT NULL, + 'type' text NOT NULL, + 'defaultRoleMapping' text, + 'defaultOrgMapping' text, + 'autoProvision' integer DEFAULT false NOT NULL + ); + + CREATE TABLE 'idpOidcConfig' ( + 'idpOauthConfigId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'idpId' integer NOT NULL, + 'clientId' text NOT NULL, + 'clientSecret' text NOT NULL, + 'authUrl' text NOT NULL, + 'tokenUrl' text NOT NULL, + 'identifierPath' text NOT NULL, + 'emailPath' text, + 'namePath' text, + 'scopes' text NOT NULL, + FOREIGN KEY ('idpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'idpOrg' ( + 'idpId' integer NOT NULL, + 'orgId' text NOT NULL, + 'roleMapping' text, + 'orgMapping' text, + FOREIGN KEY ('idpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'licenseKey' ( + 'licenseKeyId' text PRIMARY KEY NOT NULL, + 'instanceId' text NOT NULL, + 'token' text NOT NULL + ); + + CREATE TABLE '__new_user' ( + 'id' text PRIMARY KEY NOT NULL, + 'email' text, + 'username' text NOT NULL, + 'name' text, + 'type' text NOT NULL, + 'idpId' integer, + 'passwordHash' text, + 'twoFactorEnabled' integer DEFAULT false NOT NULL, + 'twoFactorSecret' text, + 'emailVerified' integer DEFAULT false NOT NULL, + 'dateCreated' text NOT NULL, + 'serverAdmin' integer DEFAULT false NOT NULL, + FOREIGN KEY ('idpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE cascade + ); + + INSERT INTO '__new_user'( + "id", "email", "username", "name", "type", "idpId", "passwordHash", + "twoFactorEnabled", "twoFactorSecret", "emailVerified", "dateCreated", "serverAdmin" + ) + SELECT + "id", + "email", + COALESCE("email", 'unknown'), + NULL, + 'internal', + NULL, + "passwordHash", + "twoFactorEnabled", + "twoFactorSecret", + "emailVerified", + "dateCreated", + "serverAdmin" + FROM 'user'; + + DROP TABLE 'user'; + ALTER TABLE '__new_user' RENAME TO 'user'; + + ALTER TABLE 'resources' ADD 'stickySession' integer DEFAULT false NOT NULL; + ALTER TABLE 'resources' ADD 'tlsServerName' text; + ALTER TABLE 'resources' ADD 'setHostHeader' text; + + CREATE TABLE 'exitNodes_new' ( + 'exitNodeId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'name' text NOT NULL, + 'address' text NOT NULL, + 'endpoint' text NOT NULL, + 'publicKey' text NOT NULL, + 'listenPort' integer NOT NULL, + 'reachableAt' text + ); + + INSERT INTO 'exitNodes_new' ( + 'exitNodeId', 'name', 'address', 'endpoint', 'publicKey', 'listenPort', 'reachableAt' + ) + SELECT + exitNodeId, + name, + address, + endpoint, + pubicKey, + listenPort, + reachableAt + FROM exitNodes; + + DROP TABLE 'exitNodes'; + ALTER TABLE 'exitNodes_new' RENAME TO 'exitNodes'; + `); + })(); // <-- executes the transaction immediately + db.pragma("foreign_keys = ON"); + console.log(`Migrated database schema`); + } catch (e) { + console.log("Unable to migrate database schema"); + throw e; + } + + // Update config file + try { + const filePaths = [configFilePath1, configFilePath2]; + let filePath = ""; + for (const path of filePaths) { + if (fs.existsSync(path)) { + filePath = path; + break; + } + } + + if (!filePath) { + throw new Error( + `No config file found (expected config.yml or config.yaml).` + ); + } + + const fileContents = fs.readFileSync(filePath, "utf8"); + const rawConfig = yaml.load(fileContents) as any; + + if (!rawConfig.server.secret) { + rawConfig.server.secret = generateIdFromEntropySize(32); + } + + const updatedYaml = yaml.dump(rawConfig); + fs.writeFileSync(filePath, updatedYaml, "utf8"); + + console.log(`Added new config option: server.secret`); + } catch (e) { + console.log( + `Unable to add new config option: server.secret. Please add it manually.` + ); + console.error(e); + } + + console.log(`${version} migration complete`); +} + +function generateIdFromEntropySize(size: number): string { + const buffer = crypto.getRandomValues(new Uint8Array(size)); + return encodeBase32LowerCaseNoPadding(buffer); +} diff --git a/server/setup/scriptsSqlite/1.5.0.ts b/server/setup/scriptsSqlite/1.5.0.ts new file mode 100644 index 000000000..46e9cccaa --- /dev/null +++ b/server/setup/scriptsSqlite/1.5.0.ts @@ -0,0 +1,70 @@ +import Database from "better-sqlite3"; +import path from "path"; +import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; +import fs from "fs"; +import yaml from "js-yaml"; + +const version = "1.5.0"; +const location = path.join(APP_PATH, "db", "db.sqlite"); + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + const db = new Database(location); + + try { + db.pragma("foreign_keys = OFF"); + db.transaction(() => { + db.exec(` + ALTER TABLE 'sites' ADD 'dockerSocketEnabled' integer DEFAULT true NOT NULL; + `); + })(); // <-- executes the transaction immediately + db.pragma("foreign_keys = ON"); + console.log(`Migrated database schema`); + } catch (e) { + console.log("Unable to migrate database schema"); + throw e; + } + + try { + // Determine which config file exists + const filePaths = [configFilePath1, configFilePath2]; + let filePath = ""; + for (const path of filePaths) { + if (fs.existsSync(path)) { + filePath = path; + break; + } + } + + if (!filePath) { + throw new Error( + `No config file found (expected config.yml or config.yaml).` + ); + } + + // Read and parse the YAML file + const fileContents = fs.readFileSync(filePath, "utf8"); + const rawConfig = yaml.load(fileContents) as any; + + if (rawConfig.cors?.headers) { + const headers = JSON.parse( + JSON.stringify(rawConfig.cors.headers) + ); + rawConfig.cors.allowed_headers = headers; + delete rawConfig.cors.headers; + } + + // Write the updated YAML back to the file + const updatedYaml = yaml.dump(rawConfig); + fs.writeFileSync(filePath, updatedYaml, "utf8"); + + console.log(`Migrated CORS headers to allowed_headers`); + } catch (e) { + console.log( + `Unable to migrate config file. Error: ${e}` + ); + } + + console.log(`${version} migration complete`); +} diff --git a/server/setup/scriptsSqlite/1.6.0.ts b/server/setup/scriptsSqlite/1.6.0.ts new file mode 100644 index 000000000..adab26977 --- /dev/null +++ b/server/setup/scriptsSqlite/1.6.0.ts @@ -0,0 +1,65 @@ +import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; +import Database from "better-sqlite3"; +import fs from "fs"; +import yaml from "js-yaml"; +import path from "path"; + +const version = "1.6.0"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = new Database(location); + + try { + db.pragma("foreign_keys = OFF"); + db.transaction(() => { + db.exec(` + UPDATE 'user' SET email = LOWER(email); + UPDATE 'user' SET username = LOWER(username); + `); + })(); // <-- executes the transaction immediately + db.pragma("foreign_keys = ON"); + console.log(`Migrated database schema`); + } catch (e) { + console.log("Unable to make all usernames and emails lowercase"); + console.log(e); + } + + try { + // Determine which config file exists + const filePaths = [configFilePath1, configFilePath2]; + let filePath = ""; + for (const path of filePaths) { + if (fs.existsSync(path)) { + filePath = path; + break; + } + } + + if (!filePath) { + throw new Error( + `No config file found (expected config.yml or config.yaml).` + ); + } + + // Read and parse the YAML file + const fileContents = fs.readFileSync(filePath, "utf8"); + const rawConfig = yaml.load(fileContents) as any; + + if (rawConfig.server?.trust_proxy) { + rawConfig.server.trust_proxy = 1; + } + + // Write the updated YAML back to the file + const updatedYaml = yaml.dump(rawConfig); + fs.writeFileSync(filePath, updatedYaml, "utf8"); + + console.log(`Set trust_proxy to 1 in config file`); + } catch (e) { + console.log(`Unable to migrate config file. Please do it manually. Error: ${e}`); + } + + console.log(`${version} migration complete`); +} diff --git a/server/setup/scriptsSqlite/1.7.0.ts b/server/setup/scriptsSqlite/1.7.0.ts new file mode 100644 index 000000000..f173d12e9 --- /dev/null +++ b/server/setup/scriptsSqlite/1.7.0.ts @@ -0,0 +1,187 @@ +import { APP_PATH } from "@server/lib/consts"; +import Database from "better-sqlite3"; +import path from "path"; + +const version = "1.7.0"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = new Database(location); + + try { + db.pragma("foreign_keys = OFF"); + + db.transaction(() => { + db.exec(` + CREATE TABLE 'clientSites' ( + 'clientId' integer NOT NULL, + 'siteId' integer NOT NULL, + 'isRelayed' integer DEFAULT 0 NOT NULL, + FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('siteId') REFERENCES 'sites'('siteId') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'clients' ( + 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'orgId' text NOT NULL, + 'exitNode' integer, + 'name' text NOT NULL, + 'pubKey' text, + 'subnet' text NOT NULL, + 'bytesIn' integer, + 'bytesOut' integer, + 'lastBandwidthUpdate' text, + 'lastPing' text, + 'type' text NOT NULL, + 'online' integer DEFAULT 0 NOT NULL, + 'endpoint' text, + 'lastHolePunch' integer, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('exitNode') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null + ); + + CREATE TABLE 'clientSession' ( + 'id' text PRIMARY KEY NOT NULL, + 'olmId' text NOT NULL, + 'expiresAt' integer NOT NULL, + FOREIGN KEY ('olmId') REFERENCES 'olms'('id') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'olms' ( + 'id' text PRIMARY KEY NOT NULL, + 'secretHash' text NOT NULL, + 'dateCreated' text NOT NULL, + 'clientId' integer, + FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'roleClients' ( + 'roleId' integer NOT NULL, + 'clientId' integer NOT NULL, + FOREIGN KEY ('roleId') REFERENCES 'roles'('roleId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'webauthnCredentials' ( + 'credentialId' text PRIMARY KEY NOT NULL, + 'userId' text NOT NULL, + 'publicKey' text NOT NULL, + 'signCount' integer NOT NULL, + 'transports' text, + 'name' text, + 'lastUsed' text NOT NULL, + 'dateCreated' text NOT NULL, + FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'userClients' ( + 'userId' text NOT NULL, + 'clientId' integer NOT NULL, + FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'userDomains' ( + 'userId' text NOT NULL, + 'domainId' text NOT NULL, + FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'webauthnChallenge' ( + 'sessionId' text PRIMARY KEY NOT NULL, + 'challenge' text NOT NULL, + 'securityKeyName' text, + 'userId' text, + 'expiresAt' integer NOT NULL, + FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade + ); + + `); + + db.exec(` + CREATE TABLE '__new_sites' ( + 'siteId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'orgId' text NOT NULL, + 'niceId' text NOT NULL, + 'exitNode' integer, + 'name' text NOT NULL, + 'pubKey' text, + 'subnet' text, + 'bytesIn' integer DEFAULT 0, + 'bytesOut' integer DEFAULT 0, + 'lastBandwidthUpdate' text, + 'type' text NOT NULL, + 'online' integer DEFAULT 0 NOT NULL, + 'address' text, + 'endpoint' text, + 'publicKey' text, + 'lastHolePunch' integer, + 'listenPort' integer, + 'dockerSocketEnabled' integer DEFAULT 1 NOT NULL, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('exitNode') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null + ); + + INSERT INTO '__new_sites' ( + 'siteId', 'orgId', 'niceId', 'exitNode', 'name', 'pubKey', 'subnet', 'bytesIn', 'bytesOut', 'lastBandwidthUpdate', 'type', 'online', 'address', 'endpoint', 'publicKey', 'lastHolePunch', 'listenPort', 'dockerSocketEnabled' + ) + SELECT siteId, orgId, niceId, exitNode, name, pubKey, subnet, bytesIn, bytesOut, lastBandwidthUpdate, type, online, NULL, NULL, NULL, NULL, NULL, dockerSocketEnabled + FROM sites; + + DROP TABLE 'sites'; + ALTER TABLE '__new_sites' RENAME TO 'sites'; + `); + + db.exec(` + ALTER TABLE 'domains' ADD 'type' text; + ALTER TABLE 'domains' ADD 'verified' integer DEFAULT 0 NOT NULL; + ALTER TABLE 'domains' ADD 'failed' integer DEFAULT 0 NOT NULL; + ALTER TABLE 'domains' ADD 'tries' integer DEFAULT 0 NOT NULL; + ALTER TABLE 'exitNodes' ADD 'maxConnections' integer; + ALTER TABLE 'newt' ADD 'version' text; + ALTER TABLE 'orgs' ADD 'subnet' text; + ALTER TABLE 'user' ADD 'twoFactorSetupRequested' integer DEFAULT 0; + ALTER TABLE 'resources' DROP COLUMN 'isBaseDomain'; + `); + })(); + + db.pragma("foreign_keys = ON"); + + console.log(`Migrated database schema`); + } catch (e) { + console.log("Unable to migrate database schema"); + throw e; + } + + db.transaction(() => { + // Update all existing orgs to have the default subnet + db.exec(`UPDATE 'orgs' SET 'subnet' = '100.90.128.0/24'`); + + // Get all orgs and their sites to assign sequential IP addresses + const orgs = db.prepare(`SELECT orgId FROM 'orgs'`).all() as { + orgId: string; + }[]; + + for (const org of orgs) { + const sites = db + .prepare( + `SELECT siteId FROM 'sites' WHERE orgId = ? ORDER BY siteId` + ) + .all(org.orgId) as { siteId: number }[]; + + let ipIndex = 1; + for (const site of sites) { + const address = `100.90.128.${ipIndex}/24`; + db.prepare( + `UPDATE 'sites' SET 'address' = ? WHERE siteId = ?` + ).run(address, site.siteId); + ipIndex++; + } + } + })(); + + console.log(`${version} migration complete`); +} diff --git a/server/setup/scriptsSqlite/1.8.0.ts b/server/setup/scriptsSqlite/1.8.0.ts new file mode 100644 index 000000000..f8ac7c951 --- /dev/null +++ b/server/setup/scriptsSqlite/1.8.0.ts @@ -0,0 +1,30 @@ +import { APP_PATH } from "@server/lib/consts"; +import Database from "better-sqlite3"; +import path from "path"; + +const version = "1.8.0"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = new Database(location); + + try { + db.transaction(() => { + db.exec(` + ALTER TABLE 'resources' ADD 'enableProxy' integer DEFAULT 1; + ALTER TABLE 'sites' ADD 'remoteSubnets' text; + ALTER TABLE 'user' ADD 'termsAcceptedTimestamp' text; + ALTER TABLE 'user' ADD 'termsVersion' text; + `); + })(); + + console.log("Migrated database schema"); + } catch (e) { + console.log("Unable to migrate database schema"); + throw e; + } + + console.log(`${version} migration complete`); +} diff --git a/server/setup/scriptsSqlite/1.9.0.ts b/server/setup/scriptsSqlite/1.9.0.ts new file mode 100644 index 000000000..5f247ea50 --- /dev/null +++ b/server/setup/scriptsSqlite/1.9.0.ts @@ -0,0 +1,191 @@ +import { APP_PATH } from "@server/lib/consts"; +import Database from "better-sqlite3"; +import path from "path"; + +const version = "1.9.0"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = new Database(location); + + const resourceSiteMap = new Map(); + let firstSiteId: number = 1; + + try { + // Get the first siteId to use as default + const firstSite = db.prepare("SELECT siteId FROM sites LIMIT 1").get() as { siteId: number } | undefined; + if (firstSite) { + firstSiteId = firstSite.siteId; + } + + const resources = db + .prepare( + "SELECT resourceId, siteId FROM resources WHERE siteId IS NOT NULL" + ) + .all() as Array<{ resourceId: number; siteId: number }>; + for (const resource of resources) { + resourceSiteMap.set(resource.resourceId, resource.siteId); + } + } catch (e) { + console.log("Error getting resources:", e); + } + + try { + db.pragma("foreign_keys = OFF"); + + db.transaction(() => { + db.exec(`CREATE TABLE 'setupTokens' ( + 'tokenId' text PRIMARY KEY NOT NULL, + 'token' text NOT NULL, + 'used' integer DEFAULT false NOT NULL, + 'dateCreated' text NOT NULL, + 'dateUsed' text +); +--> statement-breakpoint +CREATE TABLE 'siteResources' ( + 'siteResourceId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'siteId' integer NOT NULL, + 'orgId' text NOT NULL, + 'name' text NOT NULL, + 'protocol' text NOT NULL, + 'proxyPort' integer NOT NULL, + 'destinationPort' integer NOT NULL, + 'destinationIp' text NOT NULL, + 'enabled' integer DEFAULT true NOT NULL, + FOREIGN KEY ('siteId') REFERENCES 'sites'('siteId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade +); +--> statement-breakpoint +PRAGMA foreign_keys=OFF;--> statement-breakpoint +CREATE TABLE '__new_resources' ( + 'resourceId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'orgId' text NOT NULL, + 'name' text NOT NULL, + 'subdomain' text, + 'fullDomain' text, + 'domainId' text, + 'ssl' integer DEFAULT false NOT NULL, + 'blockAccess' integer DEFAULT false NOT NULL, + 'sso' integer DEFAULT true NOT NULL, + 'http' integer DEFAULT true NOT NULL, + 'protocol' text NOT NULL, + 'proxyPort' integer, + 'emailWhitelistEnabled' integer DEFAULT false NOT NULL, + 'applyRules' integer DEFAULT false NOT NULL, + 'enabled' integer DEFAULT true NOT NULL, + 'stickySession' integer DEFAULT false NOT NULL, + 'tlsServerName' text, + 'setHostHeader' text, + 'enableProxy' integer DEFAULT true, + 'skipToIdpId' integer, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null, + FOREIGN KEY ('skipToIdpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE cascade +); +--> statement-breakpoint +INSERT INTO '__new_resources'("resourceId", "orgId", "name", "subdomain", "fullDomain", "domainId", "ssl", "blockAccess", "sso", "http", "protocol", "proxyPort", "emailWhitelistEnabled", "applyRules", "enabled", "stickySession", "tlsServerName", "setHostHeader", "enableProxy", "skipToIdpId") SELECT "resourceId", "orgId", "name", "subdomain", "fullDomain", "domainId", "ssl", "blockAccess", "sso", "http", "protocol", "proxyPort", "emailWhitelistEnabled", "applyRules", "enabled", "stickySession", "tlsServerName", "setHostHeader", "enableProxy", null FROM 'resources';--> statement-breakpoint +DROP TABLE 'resources';--> statement-breakpoint +ALTER TABLE '__new_resources' RENAME TO 'resources';--> statement-breakpoint +PRAGMA foreign_keys=ON;--> statement-breakpoint +CREATE TABLE '__new_clients' ( + 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'orgId' text NOT NULL, + 'exitNode' integer, + 'name' text NOT NULL, + 'pubKey' text, + 'subnet' text NOT NULL, + 'bytesIn' integer, + 'bytesOut' integer, + 'lastBandwidthUpdate' text, + 'lastPing' integer, + 'type' text NOT NULL, + 'online' integer DEFAULT false NOT NULL, + 'lastHolePunch' integer, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('exitNode') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null +); +--> statement-breakpoint +INSERT INTO '__new_clients'("id", "orgId", "exitNode", "name", "pubKey", "subnet", "bytesIn", "bytesOut", "lastBandwidthUpdate", "lastPing", "type", "online", "lastHolePunch") SELECT "id", "orgId", "exitNode", "name", "pubKey", "subnet", "bytesIn", "bytesOut", "lastBandwidthUpdate", NULL, "type", "online", "lastHolePunch" FROM 'clients';--> statement-breakpoint +DROP TABLE 'clients';--> statement-breakpoint +ALTER TABLE '__new_clients' RENAME TO 'clients';--> statement-breakpoint +ALTER TABLE 'clientSites' ADD 'endpoint' text;--> statement-breakpoint +ALTER TABLE 'exitNodes' ADD 'online' integer DEFAULT false NOT NULL;--> statement-breakpoint +ALTER TABLE 'exitNodes' ADD 'lastPing' integer;--> statement-breakpoint +ALTER TABLE 'exitNodes' ADD 'type' text DEFAULT 'gerbil';--> statement-breakpoint +ALTER TABLE 'olms' ADD 'version' text;--> statement-breakpoint +ALTER TABLE 'orgs' ADD 'createdAt' text;--> statement-breakpoint +ALTER TABLE 'targets' ADD 'siteId' integer NOT NULL DEFAULT ${firstSiteId || 1} REFERENCES sites(siteId);`); + + // for each resource, get all of its targets, and update the siteId to be the previously stored siteId + for (const [resourceId, siteId] of resourceSiteMap) { + const targets = db + .prepare( + "SELECT targetId FROM targets WHERE resourceId = ?" + ) + .all(resourceId) as Array<{ targetId: number }>; + for (const target of targets) { + db.prepare( + "UPDATE targets SET siteId = ? WHERE targetId = ?" + ).run(siteId, target.targetId); + } + } + + // list resources that have enableProxy false + // move them to the siteResources table + // remove them from the resources table + const proxyFalseResources = db + .prepare("SELECT * FROM resources WHERE enableProxy = 0") + .all() as Array; + + for (const resource of proxyFalseResources) { + // Get the first target to derive destination IP and port + const firstTarget = db + .prepare( + "SELECT ip, port FROM targets WHERE resourceId = ? LIMIT 1" + ) + .get(resource.resourceId) as + | { ip: string; port: number } + | undefined; + + if (!firstTarget) { + continue; + } + + // Insert into siteResources table + const stmt = db.prepare(` + INSERT INTO siteResources (siteId, orgId, name, protocol, proxyPort, destinationPort, destinationIp, enabled) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) + `); + stmt.run( + resourceSiteMap.get(resource.resourceId), + resource.orgId, + resource.name, + resource.protocol, + resource.proxyPort, + firstTarget.port, + firstTarget.ip, + resource.enabled + ); + + // Delete from resources table + db.prepare("DELETE FROM resources WHERE resourceId = ?").run( + resource.resourceId + ); + + // Delete the targets for this resource + db.prepare("DELETE FROM targets WHERE resourceId = ?").run( + resource.resourceId + ); + } + })(); + + db.pragma("foreign_keys = ON"); + + console.log(`Migrated database`); + } catch (e) { + console.log("Failed to migrate db:", e); + throw e; + } +} From cc2326baddb0f7765aeb70aac886f3a092ddcefd Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Thu, 20 Nov 2025 13:47:49 +0000 Subject: [PATCH 18/27] add current migrations --- server/setup/migrationsSqlite.ts | 12 +- server/setup/scriptsSqlite/1.12.0.ts | 250 +++++++++++++++++++++++++++ 2 files changed, 258 insertions(+), 4 deletions(-) create mode 100644 server/setup/scriptsSqlite/1.12.0.ts diff --git a/server/setup/migrationsSqlite.ts b/server/setup/migrationsSqlite.ts index 1611c4926..4e31ab906 100644 --- a/server/setup/migrationsSqlite.ts +++ b/server/setup/migrationsSqlite.ts @@ -1,11 +1,11 @@ #! /usr/bin/env node -import { migrate } from "drizzle-orm/libsql/migrator"; +import { migrate } from "drizzle-orm/better-sqlite3/migrator"; import { db, exists } from "../db/sqlite"; import path from "path"; import semver from "semver"; import { versionMigrations } from "../db/sqlite"; import { __DIRNAME, APP_PATH, APP_VERSION } from "@server/lib/consts"; -import { LibsqlError } from "@libsql/client"; +import { SqliteError } from "better-sqlite3"; import fs from "fs"; import m1 from "./scriptsSqlite/1.0.0-beta1"; import m2 from "./scriptsSqlite/1.0.0-beta2"; @@ -30,6 +30,8 @@ import m25 from "./scriptsSqlite/1.10.0"; import m26 from "./scriptsSqlite/1.10.1"; import m27 from "./scriptsSqlite/1.10.2"; import m28 from "./scriptsSqlite/1.11.0"; +import m29 from "./scriptsSqlite/1.11.1"; +import m30 from "./scriptsSqlite/1.12.0"; // THIS CANNOT IMPORT ANYTHING FROM THE SERVER // EXCEPT FOR THE DATABASE AND THE SCHEMA @@ -59,6 +61,8 @@ const migrations = [ { version: "1.10.1", run: m26 }, { version: "1.10.2", run: m27 }, { version: "1.11.0", run: m28 }, + { version: "1.11.1", run: m29 }, + { version: "1.12.0", run: m30 } // Add new migrations here as they are created ] as const; @@ -174,7 +178,7 @@ async function executeScripts() { ); } catch (e) { if ( - e instanceof LibsqlError && + e instanceof SqliteError && e.code === "SQLITE_CONSTRAINT_UNIQUE" ) { console.error("Migration has already run! Skipping..."); @@ -193,4 +197,4 @@ async function executeScripts() { console.error("Migration process failed:", error); throw error; } -} +} \ No newline at end of file diff --git a/server/setup/scriptsSqlite/1.12.0.ts b/server/setup/scriptsSqlite/1.12.0.ts new file mode 100644 index 000000000..0f2c884d2 --- /dev/null +++ b/server/setup/scriptsSqlite/1.12.0.ts @@ -0,0 +1,250 @@ +import { APP_PATH } from "@server/lib/consts"; +import Database from "better-sqlite3"; +import path from "path"; + +const version = "1.12.0"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = new Database(location); + + try { + db.pragma("foreign_keys = OFF"); + + db.transaction(() => { + db.prepare( + `UPDATE 'resourceRules' SET match = 'COUNTRY' WHERE match = 'GEOIP'` + ).run(); + + db.prepare( + ` + CREATE TABLE 'accessAuditLog' ( + 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'timestamp' integer NOT NULL, + 'orgId' text NOT NULL, + 'actorType' text, + 'actor' text, + 'actorId' text, + 'resourceId' integer, + 'ip' text, + 'location' text, + 'type' text NOT NULL, + 'action' integer NOT NULL, + 'userAgent' text, + 'metadata' text, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + ` + ).run(); + + db.prepare( + `CREATE INDEX 'idx_identityAuditLog_timestamp' ON 'accessAuditLog' ('timestamp');` + ).run(); + db.prepare( + `CREATE INDEX 'idx_identityAuditLog_org_timestamp' ON 'accessAuditLog' ('orgId','timestamp');` + ).run(); + + db.prepare( + ` + CREATE TABLE 'actionAuditLog' ( + 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'timestamp' integer NOT NULL, + 'orgId' text NOT NULL, + 'actorType' text NOT NULL, + 'actor' text NOT NULL, + 'actorId' text NOT NULL, + 'action' text NOT NULL, + 'metadata' text, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + ` + ).run(); + + db.prepare( + `CREATE INDEX 'idx_actionAuditLog_timestamp' ON 'actionAuditLog' ('timestamp');` + ).run(); + db.prepare( + `CREATE INDEX 'idx_actionAuditLog_org_timestamp' ON 'actionAuditLog' ('orgId','timestamp');` + ).run(); + + db.prepare( + ` + CREATE TABLE 'dnsRecords' ( + 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'domainId' text NOT NULL, + 'recordType' text NOT NULL, + 'baseDomain' text, + 'value' text NOT NULL, + 'verified' integer DEFAULT false NOT NULL, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade + ); + ` + ).run(); + + db.prepare( + ` + CREATE TABLE 'requestAuditLog' ( + 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'timestamp' integer NOT NULL, + 'orgId' text, + 'action' integer NOT NULL, + 'reason' integer NOT NULL, + 'actorType' text, + 'actor' text, + 'actorId' text, + 'resourceId' integer, + 'ip' text, + 'location' text, + 'userAgent' text, + 'metadata' text, + 'headers' text, + 'query' text, + 'originalRequestURL' text, + 'scheme' text, + 'host' text, + 'path' text, + 'method' text, + 'tls' integer, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + ` + ).run(); + + + db.prepare( + ` + CREATE TABLE 'blueprints' ( + 'blueprintId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'orgId' text NOT NULL, + 'name' text NOT NULL, + 'source' text NOT NULL, + 'createdAt' integer NOT NULL, + 'succeeded' integer NOT NULL, + 'contents' text NOT NULL, + 'message' text, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + ` + ).run(); + + db.prepare( + `CREATE INDEX 'idx_requestAuditLog_timestamp' ON 'requestAuditLog' ('timestamp');` + ).run(); + db.prepare( + `CREATE INDEX 'idx_requestAuditLog_org_timestamp' ON 'requestAuditLog' ('orgId','timestamp');` + ).run(); + + db.prepare( + ` + CREATE TABLE '__new_resources' ( + 'resourceId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'resourceGuid' text(36) NOT NULL, + 'orgId' text NOT NULL, + 'niceId' text NOT NULL, + 'name' text NOT NULL, + 'subdomain' text, + 'fullDomain' text, + 'domainId' text, + 'ssl' integer DEFAULT false NOT NULL, + 'blockAccess' integer DEFAULT false NOT NULL, + 'sso' integer DEFAULT true NOT NULL, + 'http' integer DEFAULT true NOT NULL, + 'protocol' text NOT NULL, + 'proxyPort' integer, + 'emailWhitelistEnabled' integer DEFAULT false NOT NULL, + 'applyRules' integer DEFAULT false NOT NULL, + 'enabled' integer DEFAULT true NOT NULL, + 'stickySession' integer DEFAULT false NOT NULL, + 'tlsServerName' text, + 'setHostHeader' text, + 'enableProxy' integer DEFAULT true, + 'skipToIdpId' integer, + 'headers' text, + 'proxyProtocol' integer DEFAULT false NOT NULL, + 'proxyProtocolVersion' integer DEFAULT 1, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null, + FOREIGN KEY ('skipToIdpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE set null + ); + ` + ).run(); + + db.prepare( + `INSERT INTO '__new_resources'("resourceId", "resourceGuid", "orgId", "niceId", "name", "subdomain", "fullDomain", "domainId", "ssl", "blockAccess", "sso", "http", "protocol", "proxyPort", "emailWhitelistEnabled", "applyRules", "enabled", "stickySession", "tlsServerName", "setHostHeader", "enableProxy", "skipToIdpId", "headers") SELECT "resourceId", "resourceGuid", "orgId", "niceId", "name", "subdomain", "fullDomain", "domainId", "ssl", "blockAccess", "sso", "http", "protocol", "proxyPort", "emailWhitelistEnabled", "applyRules", "enabled", "stickySession", "tlsServerName", "setHostHeader", "enableProxy", "skipToIdpId", "headers" FROM 'resources';` + ).run(); + db.prepare(`DROP TABLE 'resources';`).run(); + db.prepare( + `ALTER TABLE '__new_resources' RENAME TO 'resources';` + ).run(); + + db.prepare( + `CREATE UNIQUE INDEX 'resources_resourceGuid_unique' ON 'resources' ('resourceGuid');` + ).run(); + db.prepare(`ALTER TABLE 'domains' ADD 'certResolver' text;`).run(); + db.prepare( + `ALTER TABLE 'domains' ADD 'preferWildcardCert' integer;` + ).run(); + db.prepare( + `ALTER TABLE 'orgs' ADD 'requireTwoFactor' integer;` + ).run(); + db.prepare( + `ALTER TABLE 'orgs' ADD 'maxSessionLengthHours' integer;` + ).run(); + db.prepare( + `ALTER TABLE 'orgs' ADD 'passwordExpiryDays' integer;` + ).run(); + db.prepare( + `ALTER TABLE 'orgs' ADD 'settingsLogRetentionDaysRequest' integer DEFAULT 7 NOT NULL;` + ).run(); + db.prepare( + `ALTER TABLE 'orgs' ADD 'settingsLogRetentionDaysAccess' integer DEFAULT 0 NOT NULL;` + ).run(); + db.prepare( + `ALTER TABLE 'orgs' ADD 'settingsLogRetentionDaysAction' integer DEFAULT 0 NOT NULL;` + ).run(); + db.prepare(`ALTER TABLE 'orgs' DROP COLUMN 'settings';`).run(); + db.prepare( + `ALTER TABLE 'resourceSessions' ADD 'issuedAt' integer;` + ).run(); + db.prepare(`ALTER TABLE 'session' ADD 'issuedAt' integer;`).run(); + db.prepare( + `ALTER TABLE 'user' ADD 'lastPasswordChange' integer;` + ).run(); + db.prepare(`ALTER TABLE 'remoteExitNode' ADD 'secondaryVersion' text;`).run(); + + // get all of the domains + const domains = db.prepare(`SELECT domainId, baseDomain from domains`).all() as { + domainId: number; + baseDomain: string; + }[]; + + for (const domain of domains) { + // insert two records into the dnsRecords table for each domain + const insert = db.prepare( + `INSERT INTO 'dnsRecords' (domainId, recordType, baseDomain, value, verified) VALUES (?, 'A', ?, ?, 1)` + ); + insert.run( + domain.domainId, + `*.${domain.baseDomain}`, + `Server IP Address` + ); + insert.run( + domain.domainId, + `${domain.baseDomain}`, + `Server IP Address` + ); + } + })(); + + db.pragma("foreign_keys = ON"); + + console.log(`Migrated database`); + } catch (e) { + console.log("Failed to migrate db:", e); + throw e; + } + + console.log(`${version} migration complete`); +} \ No newline at end of file From 704b4cccfb718de7c73caebf70a04a9ac8cd7703 Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Thu, 20 Nov 2025 13:58:48 +0000 Subject: [PATCH 19/27] update migrations --- server/setup/scriptsSqlite/1.11.1.ts | 23 ++--------------------- server/setup/scriptsSqlite/1.12.0.ts | 2 +- 2 files changed, 3 insertions(+), 22 deletions(-) diff --git a/server/setup/scriptsSqlite/1.11.1.ts b/server/setup/scriptsSqlite/1.11.1.ts index 7f9065b6e..3aa4ec3d6 100644 --- a/server/setup/scriptsSqlite/1.11.1.ts +++ b/server/setup/scriptsSqlite/1.11.1.ts @@ -11,27 +11,8 @@ export default async function migration() { const db = new Database(location); db.transaction(() => { - const exitNodes = db.prepare(`SELECT * FROM exitNodes WHERE type = 'gerbil' LIMIT 1`).all() as { - exitNodeId: number; - name: string; - }[]; - - const exitNodeId = exitNodes.length > 0 ? exitNodes[0].exitNodeId : null; - - // get all of the targets - const sites = db.prepare(`SELECT * FROM sites WHERE type = 'local'`).all() as { - siteId: number; - exitNodeId: number | null; - }[]; - - const defineExitNodeOnSite = db.prepare( - `UPDATE sites SET exitNodeId = ? WHERE siteId = ?` - ); - - for (const site of sites) { - defineExitNodeOnSite.run(exitNodeId, site.siteId); - } + db.prepare(`UPDATE exitNodes SET online = 1`).run(); // mark exit nodes as online })(); console.log(`${version} migration complete`); -} \ No newline at end of file +} diff --git a/server/setup/scriptsSqlite/1.12.0.ts b/server/setup/scriptsSqlite/1.12.0.ts index 0f2c884d2..bb357c81f 100644 --- a/server/setup/scriptsSqlite/1.12.0.ts +++ b/server/setup/scriptsSqlite/1.12.0.ts @@ -247,4 +247,4 @@ export default async function migration() { } console.log(`${version} migration complete`); -} \ No newline at end of file +} From 2ad634eb96e632c97a4433175832540b9d7dbb32 Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Thu, 20 Nov 2025 13:59:34 +0000 Subject: [PATCH 20/27] fix revert --- server/setup/migrationsSqlite.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/setup/migrationsSqlite.ts b/server/setup/migrationsSqlite.ts index 4e31ab906..dd546db29 100644 --- a/server/setup/migrationsSqlite.ts +++ b/server/setup/migrationsSqlite.ts @@ -197,4 +197,4 @@ async function executeScripts() { console.error("Migration process failed:", error); throw error; } -} \ No newline at end of file +} From 3c8ee9aeaceaaf6fc3311567c8d067bb51ebbb8b Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Mon, 1 Dec 2025 20:37:09 +0000 Subject: [PATCH 21/27] first batch of moving migration scripts to libsql --- server/setup/scriptsSqlite/1.0.0-beta12.ts | 19 +- server/setup/scriptsSqlite/1.0.0-beta13.ts | 39 +- server/setup/scriptsSqlite/1.0.0-beta15.ts | 52 +- server/setup/scriptsSqlite/1.1.0.ts | 28 +- server/setup/scriptsSqlite/1.10.0.ts | 155 ++--- server/setup/scriptsSqlite/1.10.1.ts | 96 ++-- server/setup/scriptsSqlite/1.10.2.ts | 56 +- server/setup/scriptsSqlite/1.11.0.ts | 625 ++++++++++----------- server/setup/scriptsSqlite/1.11.1.ts | 8 +- server/setup/scriptsSqlite/1.12.0.ts | 444 ++++++++------- server/setup/scriptsSqlite/1.2.0.ts | 14 +- server/setup/scriptsSqlite/1.3.0.ts | 279 +++++---- server/setup/scriptsSqlite/1.5.0.ts | 15 +- server/setup/scriptsSqlite/1.6.0.ts | 17 +- server/setup/scriptsSqlite/1.7.0.ts | 289 +++++----- server/setup/scriptsSqlite/1.8.0.ts | 18 +- server/setup/scriptsSqlite/1.9.0.ts | 141 +++-- 17 files changed, 1137 insertions(+), 1158 deletions(-) diff --git a/server/setup/scriptsSqlite/1.0.0-beta12.ts b/server/setup/scriptsSqlite/1.0.0-beta12.ts index 8c96e663c..47ef45dbb 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta12.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta12.ts @@ -1,11 +1,16 @@ -import { db } from "../../db/sqlite"; -import { configFilePath1, configFilePath2 } from "@server/lib/consts"; -import { sql } from "drizzle-orm"; +import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; +import { createClient } from "@libsql/client"; +import path from "path"; import fs from "fs"; import yaml from "js-yaml"; +const version = "1.0.0-beta.12"; + export default async function migration() { - console.log("Running setup script 1.0.0-beta.12..."); + console.log(`Running setup script ${version}...`); + + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = createClient({ url: "file:" + location }); try { // Determine which config file exists @@ -47,9 +52,9 @@ export default async function migration() { } try { - db.transaction((trx) => { - trx.run(sql`ALTER TABLE 'resources' ADD 'isBaseDomain' integer;`); - }); + await db.execute( + `ALTER TABLE 'resources' ADD 'isBaseDomain' integer;` + ); console.log(`Added new column: isBaseDomain`); } catch (e) { diff --git a/server/setup/scriptsSqlite/1.0.0-beta13.ts b/server/setup/scriptsSqlite/1.0.0-beta13.ts index 9ced727f7..6fd1ab951 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta13.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta13.ts @@ -1,27 +1,32 @@ -import { db } from "../../db/sqlite"; -import { sql } from "drizzle-orm"; +import { APP_PATH } from "@server/lib/consts"; +import { createClient } from "@libsql/client"; +import path from "path"; const version = "1.0.0-beta.13"; export default async function migration() { console.log(`Running setup script ${version}...`); + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = createClient({ url: "file:" + location }); + try { - db.transaction((trx) => { - trx.run(sql`CREATE TABLE resourceRules ( - ruleId integer PRIMARY KEY AUTOINCREMENT NOT NULL, - resourceId integer NOT NULL, - priority integer NOT NULL, - enabled integer DEFAULT true NOT NULL, - action text NOT NULL, - match text NOT NULL, - value text NOT NULL, - FOREIGN KEY (resourceId) REFERENCES resources(resourceId) ON UPDATE no action ON DELETE cascade - );`); - trx.run( - sql`ALTER TABLE resources ADD applyRules integer DEFAULT false NOT NULL;` - ); - }); + await db.execute( + `CREATE TABLE resourceRules ( + ruleId integer PRIMARY KEY AUTOINCREMENT NOT NULL, + resourceId integer NOT NULL, + priority integer NOT NULL, + enabled integer DEFAULT true NOT NULL, + action text NOT NULL, + match text NOT NULL, + value text NOT NULL, + FOREIGN KEY (resourceId) REFERENCES resources(resourceId) ON UPDATE no action ON DELETE cascade + );` + ); + + await db.execute( + `ALTER TABLE resources ADD applyRules integer DEFAULT false NOT NULL;` + ); console.log(`Added new table and column: resourceRules, applyRules`); } catch (e) { diff --git a/server/setup/scriptsSqlite/1.0.0-beta15.ts b/server/setup/scriptsSqlite/1.0.0-beta15.ts index cf39fd8a3..679b2af1b 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta15.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta15.ts @@ -1,8 +1,8 @@ -import { db } from "../../db/sqlite"; -import { configFilePath1, configFilePath2 } from "@server/lib/consts"; +import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; +import { createClient } from "@libsql/client"; +import path from "path"; import fs from "fs"; import yaml from "js-yaml"; -import { sql } from "drizzle-orm"; import { domains, orgDomains, resources } from "@server/db"; const version = "1.0.0-beta.15"; @@ -10,6 +10,9 @@ const version = "1.0.0-beta.15"; export default async function migration() { console.log(`Running setup script ${version}...`); + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = createClient({ url: "file:" + location }); + let domain = ""; try { @@ -70,25 +73,30 @@ export default async function migration() { } try { - db.transaction((trx) => { - trx.run(sql`CREATE TABLE 'domains' ( - 'domainId' text PRIMARY KEY NOT NULL, - 'baseDomain' text NOT NULL, - 'configManaged' integer DEFAULT false NOT NULL -);`); - - trx.run(sql`CREATE TABLE 'orgDomains' ( - 'orgId' text NOT NULL, - 'domainId' text NOT NULL, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade -);`); - - trx.run( - sql`ALTER TABLE 'resources' ADD 'domainId' text REFERENCES domains(domainId);` - ); - trx.run(sql`ALTER TABLE 'orgs' DROP COLUMN 'domain';`); - }); + await db.execute( + `CREATE TABLE 'domains' ( + 'domainId' text PRIMARY KEY NOT NULL, + 'baseDomain' text NOT NULL, + 'configManaged' integer DEFAULT false NOT NULL + );` + ); + + await db.execute( + `CREATE TABLE 'orgDomains' ( + 'orgId' text NOT NULL, + 'domainId' text NOT NULL, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade + );` + ); + + await db.execute( + `ALTER TABLE 'resources' ADD 'domainId' text REFERENCES domains(domainId);` + ); + + await db.execute( + `ALTER TABLE 'orgs' DROP COLUMN 'domain';` + ); console.log(`Migrated database schema`); } catch (e) { diff --git a/server/setup/scriptsSqlite/1.1.0.ts b/server/setup/scriptsSqlite/1.1.0.ts index 4d1218522..5d6189eb9 100644 --- a/server/setup/scriptsSqlite/1.1.0.ts +++ b/server/setup/scriptsSqlite/1.1.0.ts @@ -1,22 +1,26 @@ -import { db } from "../../db/sqlite"; -import { sql } from "drizzle-orm"; +import { APP_PATH } from "@server/lib/consts"; +import { createClient } from "@libsql/client"; +import path from "path"; const version = "1.1.0"; export default async function migration() { console.log(`Running setup script ${version}...`); + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = createClient({ url: "file:" + location }); + try { - db.transaction((trx) => { - trx.run(sql`CREATE TABLE 'supporterKey' ( - 'keyId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'key' text NOT NULL, - 'githubUsername' text NOT NULL, - 'phrase' text, - 'tier' text, - 'valid' integer DEFAULT false NOT NULL -);`); - }); + await db.execute( + `CREATE TABLE 'supporterKey' ( + 'keyId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'key' text NOT NULL, + 'githubUsername' text NOT NULL, + 'phrase' text, + 'tier' text, + 'valid' integer DEFAULT false NOT NULL + );` + ); console.log(`Migrated database schema`); } catch (e) { diff --git a/server/setup/scriptsSqlite/1.10.0.ts b/server/setup/scriptsSqlite/1.10.0.ts index 3065a664d..d39b5afa1 100644 --- a/server/setup/scriptsSqlite/1.10.0.ts +++ b/server/setup/scriptsSqlite/1.10.0.ts @@ -1,5 +1,5 @@ import { __DIRNAME, APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; +import { createClient } from "@libsql/client"; import { readFileSync } from "fs"; import path, { join } from "path"; @@ -9,100 +9,101 @@ export default async function migration() { console.log(`Running setup script ${version}...`); const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); + const db = createClient({ url: "file:" + location }); try { - const resources = db - .prepare( + const resources = await db + .execute( "SELECT resourceId FROM resources" ) .all() as Array<{ resourceId: number }>; - const siteResources = db - .prepare( + const siteResources = await db + .execute( "SELECT siteResourceId FROM siteResources" ) .all() as Array<{ siteResourceId: number }>; - db.transaction(() => { - db.exec(` - ALTER TABLE 'exitNodes' ADD 'region' text; - ALTER TABLE 'idpOidcConfig' ADD 'variant' text DEFAULT 'oidc' NOT NULL; - ALTER TABLE 'resources' ADD 'niceId' text DEFAULT '' NOT NULL; - ALTER TABLE 'siteResources' ADD 'niceId' text DEFAULT '' NOT NULL; - ALTER TABLE 'userOrgs' ADD 'autoProvisioned' integer DEFAULT false; - ALTER TABLE 'targets' ADD 'pathMatchType' text; - ALTER TABLE 'targets' ADD 'path' text; - ALTER TABLE 'resources' ADD 'headers' text; - `); // this diverges from the schema a bit because the schema does not have a default on niceId but was required for the migration and I dont think it will effect much down the line... - - const usedNiceIds: string[] = []; - - for (const resourceId of resources) { - // Generate a unique name and ensure it's unique - let niceId = ""; - let loops = 0; - while (true) { - if (loops > 100) { - throw new Error("Could not generate a unique name"); - } - - niceId = generateName(); - if (!usedNiceIds.includes(niceId)) { - usedNiceIds.push(niceId); - break; - } - loops++; + await db.execute(` + ALTER TABLE 'exitNodes' ADD 'region' text; + ALTER TABLE 'idpOidcConfig' ADD 'variant' text DEFAULT 'oidc' NOT NULL; + ALTER TABLE 'resources' ADD 'niceId' text DEFAULT '' NOT NULL; + ALTER TABLE 'siteResources' ADD 'niceId' text DEFAULT '' NOT NULL; + ALTER TABLE 'userOrgs' ADD 'autoProvisioned' integer DEFAULT false; + ALTER TABLE 'targets' ADD 'pathMatchType' text; + ALTER TABLE 'targets' ADD 'path' text; + ALTER TABLE 'resources' ADD 'headers' text; + `); // this diverges from the schema a bit because the schema does not have a default on niceId but was required for the migration and I dont think it will effect much down the line... + + const usedNiceIds: string[] = []; + + for (const resourceId of resources) { + // Generate a unique name and ensure it's unique + let niceId = ""; + let loops = 0; + while (true) { + if (loops > 100) { + throw new Error("Could not generate a unique name"); } - db.prepare( - `UPDATE resources SET niceId = ? WHERE resourceId = ?` - ).run(niceId, resourceId.resourceId); + + niceId = generateName(); + if (!usedNiceIds.includes(niceId)) { + usedNiceIds.push(niceId); + break; + } + loops++; } + await db.execute({ + sql: `UPDATE resources SET niceId = ? WHERE resourceId = ?`, + args: [niceId, resourceId.resourceId] + }); + } + + for (const resourceId of siteResources) { + // Generate a unique name and ensure it's unique + let niceId = ""; + let loops = 0; + while (true) { + if (loops > 100) { + throw new Error("Could not generate a unique name"); + } - for (const resourceId of siteResources) { - // Generate a unique name and ensure it's unique - let niceId = ""; - let loops = 0; - while (true) { - if (loops > 100) { - throw new Error("Could not generate a unique name"); - } - - niceId = generateName(); - if (!usedNiceIds.includes(niceId)) { - usedNiceIds.push(niceId); - break; - } - loops++; + niceId = generateName(); + if (!usedNiceIds.includes(niceId)) { + usedNiceIds.push(niceId); + break; } - db.prepare( - `UPDATE siteResources SET niceId = ? WHERE siteResourceId = ?` - ).run(niceId, resourceId.siteResourceId); + loops++; } + await db.execute({ + sql: `UPDATE siteResources SET niceId = ? WHERE siteResourceId = ?`, + args: [niceId, resourceId.siteResourceId] + }); + } + + // Handle auto-provisioned users for identity providers + const autoProvisionIdps = await db + .execute( + "SELECT idpId FROM idp WHERE autoProvision = 1" + ) + .all() as Array<{ idpId: number }>; - // Handle auto-provisioned users for identity providers - const autoProvisionIdps = db - .prepare( - "SELECT idpId FROM idp WHERE autoProvision = 1" + for (const idp of autoProvisionIdps) { + // Get all users with this identity provider + const usersWithIdp = await db + .execute( + "SELECT id FROM user WHERE idpId = ?" ) - .all() as Array<{ idpId: number }>; - - for (const idp of autoProvisionIdps) { - // Get all users with this identity provider - const usersWithIdp = db - .prepare( - "SELECT id FROM user WHERE idpId = ?" - ) - .all(idp.idpId) as Array<{ id: string }>; - - // Update userOrgs to set autoProvisioned to true for these users - for (const user of usersWithIdp) { - db.prepare( - "UPDATE userOrgs SET autoProvisioned = 1 WHERE userId = ?" - ).run(user.id); - } + .all(idp.idpId) as Array<{ id: string }>; + + // Update userOrgs to set autoProvisioned to true for these users + for (const user of usersWithIdp) { + await db.execute({ + sql: "UPDATE userOrgs SET autoProvisioned = 1 WHERE userId = ?", + args: [user.id] + }); } - })(); + } console.log(`Migrated database`); } catch (e) { diff --git a/server/setup/scriptsSqlite/1.10.1.ts b/server/setup/scriptsSqlite/1.10.1.ts index f6f9894ed..3c8ffe3e3 100644 --- a/server/setup/scriptsSqlite/1.10.1.ts +++ b/server/setup/scriptsSqlite/1.10.1.ts @@ -1,5 +1,5 @@ import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; +import { createClient } from "@libsql/client"; import path from "path"; const version = "1.10.1"; @@ -8,58 +8,52 @@ export default async function migration() { console.log(`Running setup script ${version}...`); const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); + const db = createClient({ url: "file:" + location }); try { - db.pragma("foreign_keys = OFF"); - - db.transaction(() => { - db.exec(`ALTER TABLE "targets" RENAME TO "targets_old"; ---> statement-breakpoint -CREATE TABLE "targets" ( - "targetId" INTEGER PRIMARY KEY AUTOINCREMENT, - "resourceId" INTEGER NOT NULL, - "siteId" INTEGER NOT NULL, - "ip" TEXT NOT NULL, - "method" TEXT, - "port" INTEGER NOT NULL, - "internalPort" INTEGER, - "enabled" INTEGER NOT NULL DEFAULT 1, - "path" TEXT, - "pathMatchType" TEXT, - FOREIGN KEY ("resourceId") REFERENCES "resources"("resourceId") ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ("siteId") REFERENCES "sites"("siteId") ON UPDATE no action ON DELETE cascade -); ---> statement-breakpoint -INSERT INTO "targets" ( - "targetId", - "resourceId", - "siteId", - "ip", - "method", - "port", - "internalPort", - "enabled", - "path", - "pathMatchType" -) -SELECT - targetId, - resourceId, - siteId, - ip, - method, - port, - internalPort, - enabled, - path, - pathMatchType -FROM "targets_old"; ---> statement-breakpoint -DROP TABLE "targets_old";`); - })(); - - db.pragma("foreign_keys = ON"); + await db.execute(`ALTER TABLE "targets" RENAME TO "targets_old"; + --> statement-breakpoint + CREATE TABLE "targets" ( + "targetId" INTEGER PRIMARY KEY AUTOINCREMENT, + "resourceId" INTEGER NOT NULL, + "siteId" INTEGER NOT NULL, + "ip" TEXT NOT NULL, + "method" TEXT, + "port" INTEGER NOT NULL, + "internalPort" INTEGER, + "enabled" INTEGER NOT NULL DEFAULT 1, + "path" TEXT, + "pathMatchType" TEXT, + FOREIGN KEY ("resourceId") REFERENCES "resources"("resourceId") ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ("siteId") REFERENCES "sites"("siteId") ON UPDATE no action ON DELETE cascade + ); + --> statement-breakpoint + INSERT INTO "targets" ( + "targetId", + "resourceId", + "siteId", + "ip", + "method", + "port", + "internalPort", + "enabled", + "path", + "pathMatchType" + ) + SELECT + targetId, + resourceId, + siteId, + ip, + method, + port, + internalPort, + enabled, + path, + pathMatchType + FROM "targets_old"; + --> statement-breakpoint + DROP TABLE "targets_old";`); console.log(`Migrated database`); } catch (e) { diff --git a/server/setup/scriptsSqlite/1.10.2.ts b/server/setup/scriptsSqlite/1.10.2.ts index 7978e2621..c40c5b351 100644 --- a/server/setup/scriptsSqlite/1.10.2.ts +++ b/server/setup/scriptsSqlite/1.10.2.ts @@ -1,5 +1,5 @@ import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; +import { createClient } from "@libsql/client"; import path from "path"; const version = "1.10.2"; @@ -8,43 +8,37 @@ export default async function migration() { console.log(`Running setup script ${version}...`); const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); + const db = createClient({ url: "file:" + location }); - const resources = db.prepare("SELECT * FROM resources").all() as Array<{ + const resources = await db.execute("SELECT * FROM resources").all() as Array<{ resourceId: number; headers: string | null; }>; try { - db.pragma("foreign_keys = OFF"); - - db.transaction(() => { - for (const resource of resources) { - const headers = resource.headers; - if (headers && headers !== "") { - // lets convert it to json - // fist split at commas - const headersArray = headers - .split(",") - .map((header: string) => { - const [name, ...valueParts] = header.split(":"); - const value = valueParts.join(":").trim(); - return { name: name.trim(), value }; - }); - - db.prepare( - ` - UPDATE "resources" SET "headers" = ? WHERE "resourceId" = ?` - ).run(JSON.stringify(headersArray), resource.resourceId); - - console.log( - `Updated resource ${resource.resourceId} headers to JSON format` - ); - } + for (const resource of resources) { + const headers = resource.headers; + if (headers && headers !== "") { + // lets convert it to json + // fist split at commas + const headersArray = headers + .split(",") + .map((header: string) => { + const [name, ...valueParts] = header.split(":"); + const value = valueParts.join(":").trim(); + return { name: name.trim(), value }; + }); + + await db.execute({ + sql: `UPDATE "resources" SET "headers" = ? WHERE "resourceId" = ?`, + args: [JSON.stringify(headersArray), resource.resourceId] + }); + + console.log( + `Updated resource ${resource.resourceId} headers to JSON format` + ); } - })(); - - db.pragma("foreign_keys = ON"); + } console.log(`Migrated database`); } catch (e) { diff --git a/server/setup/scriptsSqlite/1.11.0.ts b/server/setup/scriptsSqlite/1.11.0.ts index c79cfdb46..0deb8680f 100644 --- a/server/setup/scriptsSqlite/1.11.0.ts +++ b/server/setup/scriptsSqlite/1.11.0.ts @@ -1,5 +1,5 @@ import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; +import { createClient } from "@libsql/client"; import path from "path"; import { isoBase64URL } from "@simplewebauthn/server/helpers"; import { randomUUID } from "crypto"; @@ -10,283 +10,280 @@ export default async function migration() { console.log(`Running setup script ${version}...`); const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); - - db.transaction(() => { - - db.prepare(` - CREATE TABLE 'account' ( - 'accountId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'userId' text NOT NULL, - FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'accountDomains' ( - 'accountId' integer NOT NULL, - 'domainId' text NOT NULL, - FOREIGN KEY ('accountId') REFERENCES 'account'('accountId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'certificates' ( - 'certId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'domain' text NOT NULL, - 'domainId' text, - 'wildcard' integer DEFAULT false, - 'status' text DEFAULT 'pending' NOT NULL, - 'expiresAt' integer, - 'lastRenewalAttempt' integer, - 'createdAt' integer NOT NULL, - 'updatedAt' integer NOT NULL, - 'orderId' text, - 'errorMessage' text, - 'renewalCount' integer DEFAULT 0, - 'certFile' text, - 'keyFile' text, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(`CREATE UNIQUE INDEX 'certificates_domain_unique' ON 'certificates' ('domain');`).run(); - - db.prepare(` - CREATE TABLE 'customers' ( - 'customerId' text PRIMARY KEY NOT NULL, - 'orgId' text NOT NULL, - 'email' text, - 'name' text, - 'phone' text, - 'address' text, - 'createdAt' integer NOT NULL, - 'updatedAt' integer NOT NULL, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'dnsChallenges' ( - 'dnsChallengeId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'domain' text NOT NULL, - 'token' text NOT NULL, - 'keyAuthorization' text NOT NULL, - 'createdAt' integer NOT NULL, - 'expiresAt' integer NOT NULL, - 'completed' integer DEFAULT false - ); - `).run(); - - db.prepare(` - CREATE TABLE 'domainNamespaces' ( - 'domainNamespaceId' text PRIMARY KEY NOT NULL, - 'domainId' text NOT NULL, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null - ); - `).run(); - - db.prepare(` - CREATE TABLE 'exitNodeOrgs' ( - 'exitNodeId' integer NOT NULL, - 'orgId' text NOT NULL, - FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'loginPage' ( - 'loginPageId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'subdomain' text, - 'fullDomain' text, - 'exitNodeId' integer, - 'domainId' text, - FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null - ); - `).run(); - - db.prepare(` - CREATE TABLE 'loginPageOrg' ( - 'loginPageId' integer NOT NULL, - 'orgId' text NOT NULL, - FOREIGN KEY ('loginPageId') REFERENCES 'loginPage'('loginPageId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'remoteExitNodeSession' ( - 'id' text PRIMARY KEY NOT NULL, - 'remoteExitNodeId' text NOT NULL, - 'expiresAt' integer NOT NULL, - FOREIGN KEY ('remoteExitNodeId') REFERENCES 'remoteExitNode'('id') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'remoteExitNode' ( - 'id' text PRIMARY KEY NOT NULL, - 'secretHash' text NOT NULL, - 'dateCreated' text NOT NULL, - 'version' text, - 'exitNodeId' integer, - FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'sessionTransferToken' ( - 'token' text PRIMARY KEY NOT NULL, - 'sessionId' text NOT NULL, - 'encryptedSession' text NOT NULL, - 'expiresAt' integer NOT NULL, - FOREIGN KEY ('sessionId') REFERENCES 'session'('id') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'subscriptionItems' ( - 'subscriptionItemId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'subscriptionId' text NOT NULL, - 'planId' text NOT NULL, - 'priceId' text, - 'meterId' text, - 'unitAmount' real, - 'tiers' text, - 'interval' text, - 'currentPeriodStart' integer, - 'currentPeriodEnd' integer, - 'name' text, - FOREIGN KEY ('subscriptionId') REFERENCES 'subscriptions'('subscriptionId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'subscriptions' ( - 'subscriptionId' text PRIMARY KEY NOT NULL, - 'customerId' text NOT NULL, - 'status' text DEFAULT 'active' NOT NULL, - 'canceledAt' integer, - 'createdAt' integer NOT NULL, - 'updatedAt' integer, - 'billingCycleAnchor' integer, - FOREIGN KEY ('customerId') REFERENCES 'customers'('customerId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'usage' ( - 'usageId' text PRIMARY KEY NOT NULL, - 'featureId' text NOT NULL, - 'orgId' text NOT NULL, - 'meterId' text, - 'instantaneousValue' real, - 'latestValue' real NOT NULL, - 'previousValue' real, - 'updatedAt' integer NOT NULL, - 'rolledOverAt' integer, - 'nextRolloverAt' integer, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'usageNotifications' ( - 'notificationId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'orgId' text NOT NULL, - 'featureId' text NOT NULL, - 'limitId' text NOT NULL, - 'notificationType' text NOT NULL, - 'sentAt' integer NOT NULL, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'resourceHeaderAuth' ( - 'headerAuthId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'resourceId' integer NOT NULL, - 'headerAuthHash' text NOT NULL, - FOREIGN KEY ('resourceId') REFERENCES 'resources'('resourceId') ON UPDATE no action ON DELETE cascade - ); - `).run(); - - db.prepare(` - CREATE TABLE 'targetHealthCheck' ( - 'targetHealthCheckId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'targetId' integer NOT NULL, - 'hcEnabled' integer DEFAULT false NOT NULL, - 'hcPath' text, - 'hcScheme' text, - 'hcMode' text DEFAULT 'http', - 'hcHostname' text, - 'hcPort' integer, - 'hcInterval' integer DEFAULT 30, - 'hcUnhealthyInterval' integer DEFAULT 30, - 'hcTimeout' integer DEFAULT 5, - 'hcHeaders' text, - 'hcFollowRedirects' integer DEFAULT true, - 'hcMethod' text DEFAULT 'GET', - 'hcStatus' integer, - 'hcHealth' text DEFAULT 'unknown', - FOREIGN KEY ('targetId') REFERENCES 'targets'('targetId') ON UPDATE no action ON DELETE cascade + const db = createClient({ url: "file:" + location }); + + await db.execute(` + CREATE TABLE 'account' ( + 'accountId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'userId' text NOT NULL, + FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(` + CREATE TABLE 'accountDomains' ( + 'accountId' integer NOT NULL, + 'domainId' text NOT NULL, + FOREIGN KEY ('accountId') REFERENCES 'account'('accountId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(` + CREATE TABLE 'certificates' ( + 'certId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'domain' text NOT NULL, + 'domainId' text, + 'wildcard' integer DEFAULT false, + 'status' text DEFAULT 'pending' NOT NULL, + 'expiresAt' integer, + 'lastRenewalAttempt' integer, + 'createdAt' integer NOT NULL, + 'updatedAt' integer NOT NULL, + 'orderId' text, + 'errorMessage' text, + 'renewalCount' integer DEFAULT 0, + 'certFile' text, + 'keyFile' text, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(`CREATE UNIQUE INDEX 'certificates_domain_unique' ON 'certificates' ('domain');`); + + await db.execute(` + CREATE TABLE 'customers' ( + 'customerId' text PRIMARY KEY NOT NULL, + 'orgId' text NOT NULL, + 'email' text, + 'name' text, + 'phone' text, + 'address' text, + 'createdAt' integer NOT NULL, + 'updatedAt' integer NOT NULL, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(` + CREATE TABLE 'dnsChallenges' ( + 'dnsChallengeId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'domain' text NOT NULL, + 'token' text NOT NULL, + 'keyAuthorization' text NOT NULL, + 'createdAt' integer NOT NULL, + 'expiresAt' integer NOT NULL, + 'completed' integer DEFAULT false + ); + `); + + await db.execute(` + CREATE TABLE 'domainNamespaces' ( + 'domainNamespaceId' text PRIMARY KEY NOT NULL, + 'domainId' text NOT NULL, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null + ); + `); + + await db.execute(` + CREATE TABLE 'exitNodeOrgs' ( + 'exitNodeId' integer NOT NULL, + 'orgId' text NOT NULL, + FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(` + CREATE TABLE 'loginPage' ( + 'loginPageId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'subdomain' text, + 'fullDomain' text, + 'exitNodeId' integer, + 'domainId' text, + FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null + ); + `); + + await db.execute(` + CREATE TABLE 'loginPageOrg' ( + 'loginPageId' integer NOT NULL, + 'orgId' text NOT NULL, + FOREIGN KEY ('loginPageId') REFERENCES 'loginPage'('loginPageId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(` + CREATE TABLE 'remoteExitNodeSession' ( + 'id' text PRIMARY KEY NOT NULL, + 'remoteExitNodeId' text NOT NULL, + 'expiresAt' integer NOT NULL, + FOREIGN KEY ('remoteExitNodeId') REFERENCES 'remoteExitNode'('id') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(` + CREATE TABLE 'remoteExitNode' ( + 'id' text PRIMARY KEY NOT NULL, + 'secretHash' text NOT NULL, + 'dateCreated' text NOT NULL, + 'version' text, + 'exitNodeId' integer, + FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(` + CREATE TABLE 'sessionTransferToken' ( + 'token' text PRIMARY KEY NOT NULL, + 'sessionId' text NOT NULL, + 'encryptedSession' text NOT NULL, + 'expiresAt' integer NOT NULL, + FOREIGN KEY ('sessionId') REFERENCES 'session'('id') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(` + CREATE TABLE 'subscriptionItems' ( + 'subscriptionItemId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'subscriptionId' text NOT NULL, + 'planId' text NOT NULL, + 'priceId' text, + 'meterId' text, + 'unitAmount' real, + 'tiers' text, + 'interval' text, + 'currentPeriodStart' integer, + 'currentPeriodEnd' integer, + 'name' text, + FOREIGN KEY ('subscriptionId') REFERENCES 'subscriptions'('subscriptionId') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(` + CREATE TABLE 'subscriptions' ( + 'subscriptionId' text PRIMARY KEY NOT NULL, + 'customerId' text NOT NULL, + 'status' text DEFAULT 'active' NOT NULL, + 'canceledAt' integer, + 'createdAt' integer NOT NULL, + 'updatedAt' integer, + 'billingCycleAnchor' integer, + FOREIGN KEY ('customerId') REFERENCES 'customers'('customerId') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(` + CREATE TABLE 'usage' ( + 'usageId' text PRIMARY KEY NOT NULL, + 'featureId' text NOT NULL, + 'orgId' text NOT NULL, + 'meterId' text, + 'instantaneousValue' real, + 'latestValue' real NOT NULL, + 'previousValue' real, + 'updatedAt' integer NOT NULL, + 'rolledOverAt' integer, + 'nextRolloverAt' integer, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(` + CREATE TABLE 'usageNotifications' ( + 'notificationId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'orgId' text NOT NULL, + 'featureId' text NOT NULL, + 'limitId' text NOT NULL, + 'notificationType' text NOT NULL, + 'sentAt' integer NOT NULL, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(` + CREATE TABLE 'resourceHeaderAuth' ( + 'headerAuthId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'resourceId' integer NOT NULL, + 'headerAuthHash' text NOT NULL, + FOREIGN KEY ('resourceId') REFERENCES 'resources'('resourceId') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(` + CREATE TABLE 'targetHealthCheck' ( + 'targetHealthCheckId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'targetId' integer NOT NULL, + 'hcEnabled' integer DEFAULT false NOT NULL, + 'hcPath' text, + 'hcScheme' text, + 'hcMode' text DEFAULT 'http', + 'hcHostname' text, + 'hcPort' integer, + 'hcInterval' integer DEFAULT 30, + 'hcUnhealthyInterval' integer DEFAULT 30, + 'hcTimeout' integer DEFAULT 5, + 'hcHeaders' text, + 'hcFollowRedirects' integer DEFAULT true, + 'hcMethod' text DEFAULT 'GET', + 'hcStatus' integer, + 'hcHealth' text DEFAULT 'unknown', + FOREIGN KEY ('targetId') REFERENCES 'targets'('targetId') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(`DROP TABLE 'limits';`); + + await db.execute(` + CREATE TABLE 'limits' ( + 'limitId' text PRIMARY KEY NOT NULL, + 'featureId' text NOT NULL, + 'orgId' text NOT NULL, + 'value' real, + 'description' text, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + `); + + await db.execute(`ALTER TABLE 'orgs' ADD 'settings' text;`); + await db.execute(`ALTER TABLE 'targets' ADD 'rewritePath' text;`); + await db.execute(`ALTER TABLE 'targets' ADD 'rewritePathType' text;`); + await db.execute(`ALTER TABLE 'targets' ADD 'priority' integer DEFAULT 100 NOT NULL;`); + + const webauthnCredentials = db.execute({ + sql: `SELECT credentialId, publicKey, userId, signCount, transports, name, lastUsed, dateCreated FROM 'webauthnCredentials'` + ) + as { + credentialId: string; + publicKey: string; + userId: string; + signCount: number; + transports: string | null; + name: string | null; + lastUsed: string; + dateCreated: string; + }[]; + + await db.execute(`DELETE FROM 'webauthnCredentials';`); + + for (const webauthnCredential of webauthnCredentials) { + const newCredentialId = isoBase64URL.fromBuffer( + new Uint8Array( + Buffer.from(webauthnCredential.credentialId, "base64") + ) ); - `).run(); - - db.prepare(`DROP TABLE 'limits';`).run(); - - db.prepare(` - CREATE TABLE 'limits' ( - 'limitId' text PRIMARY KEY NOT NULL, - 'featureId' text NOT NULL, - 'orgId' text NOT NULL, - 'value' real, - 'description' text, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + const newPublicKey = isoBase64URL.fromBuffer( + new Uint8Array( + Buffer.from(webauthnCredential.publicKey, "base64") + ) ); - `).run(); - db.prepare(`ALTER TABLE 'orgs' ADD 'settings' text;`).run(); - db.prepare(`ALTER TABLE 'targets' ADD 'rewritePath' text;`).run(); - db.prepare(`ALTER TABLE 'targets' ADD 'rewritePathType' text;`).run(); - db.prepare(`ALTER TABLE 'targets' ADD 'priority' integer DEFAULT 100 NOT NULL;`).run(); - - const webauthnCredentials = db - .prepare( - `SELECT credentialId, publicKey, userId, signCount, transports, name, lastUsed, dateCreated FROM 'webauthnCredentials'` - ) - .all() as { - credentialId: string; - publicKey: string; - userId: string; - signCount: number; - transports: string | null; - name: string | null; - lastUsed: string; - dateCreated: string; - }[]; - - db.prepare(`DELETE FROM 'webauthnCredentials';`).run(); - - for (const webauthnCredential of webauthnCredentials) { - const newCredentialId = isoBase64URL.fromBuffer( - new Uint8Array( - Buffer.from(webauthnCredential.credentialId, "base64") - ) - ); - const newPublicKey = isoBase64URL.fromBuffer( - new Uint8Array( - Buffer.from(webauthnCredential.publicKey, "base64") - ) - ); - - // Insert the updated record with converted values - db.prepare( - `INSERT INTO 'webauthnCredentials' (credentialId, publicKey, userId, signCount, transports, name, lastUsed, dateCreated) VALUES (?, ?, ?, ?, ?, ?, ?, ?)` - ).run( + // Insert the updated record with converted values + await db.execute({ + sql: `INSERT INTO 'webauthnCredentials' (credentialId, publicKey, userId, signCount, transports, name, lastUsed, dateCreated) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, + args: [ newCredentialId, newPublicKey, webauthnCredential.userId, @@ -295,45 +292,45 @@ export default async function migration() { webauthnCredential.name, webauthnCredential.lastUsed, webauthnCredential.dateCreated - ); - } - - // 1. Add the column (nullable or with placeholder) if it doesn’t exist yet - db.prepare( - `ALTER TABLE resources ADD COLUMN resourceGuid TEXT DEFAULT 'PLACEHOLDER';` - ).run(); - - // 2. Select all rows - const resources = db.prepare(`SELECT resourceId FROM resources`).all() as { - resourceId: number; - }[]; - - // 3. Prefill with random UUIDs - const updateStmt = db.prepare( - `UPDATE resources SET resourceGuid = ? WHERE resourceId = ?` - ); - - for (const row of resources) { - updateStmt.run(randomUUID(), row.resourceId); - } - - // get all of the targets - const targets = db.prepare(`SELECT targetId FROM targets`).all() as { - targetId: number; - }[]; - - const insertTargetHealthCheckStmt = db.prepare( - `INSERT INTO targetHealthCheck (targetId) VALUES (?)` - ); - - for (const target of targets) { - insertTargetHealthCheckStmt.run(target.targetId); - } - - db.prepare( - `CREATE UNIQUE INDEX resources_resourceGuid_unique ON resources ('resourceGuid');` - ).run(); - })(); + ] + }); + } + + // 1. Add the column (nullable or with placeholder) if it doesn’t exist yet + await db.execute( + `ALTER TABLE resources ADD COLUMN resourceGuid TEXT DEFAULT 'PLACEHOLDER';` + ); + + // 2. Select all rows + const resources = await db.execute(`SELECT resourceId FROM resources`) as { + resourceId: number; + }[]; + + // 3. Prefill with random UUIDs + const updateStmt = await db.execute( + `UPDATE resources SET resourceGuid = ? WHERE resourceId = ?` + ); + + for (const row of resources) { + updateStmt.run(randomUUID(), row.resourceId); + } + + // get all of the targets + const targets = await db.execute(`SELECT targetId FROM targets`).all() as { + targetId: number; + }[]; + + const insertTargetHealthCheckStmt = await db.execute( + `INSERT INTO targetHealthCheck (targetId) VALUES (?)` + ); + + for (const target of targets) { + insertTargetHealthCheckStmt.run(target.targetId); + } + + await db.execute( + `CREATE UNIQUE INDEX resources_resourceGuid_unique ON resources ('resourceGuid');` + ); console.log(`${version} migration complete`); } diff --git a/server/setup/scriptsSqlite/1.11.1.ts b/server/setup/scriptsSqlite/1.11.1.ts index 3aa4ec3d6..c2e6a090d 100644 --- a/server/setup/scriptsSqlite/1.11.1.ts +++ b/server/setup/scriptsSqlite/1.11.1.ts @@ -1,5 +1,5 @@ import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; +import { createClient } from "@libsql/client"; import path from "path"; const version = "1.11.1"; @@ -8,11 +8,9 @@ export default async function migration() { console.log(`Running setup script ${version}...`); const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); + const db = createClient({ url: "file:" + location }); - db.transaction(() => { - db.prepare(`UPDATE exitNodes SET online = 1`).run(); // mark exit nodes as online - })(); + await db.execute(`UPDATE exitNodes SET online = 1`); // mark exit nodes as online console.log(`${version} migration complete`); } diff --git a/server/setup/scriptsSqlite/1.12.0.ts b/server/setup/scriptsSqlite/1.12.0.ts index bb357c81f..34d12b998 100644 --- a/server/setup/scriptsSqlite/1.12.0.ts +++ b/server/setup/scriptsSqlite/1.12.0.ts @@ -1,5 +1,5 @@ import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; +import { createClient } from "@libsql/client"; import path from "path"; const version = "1.12.0"; @@ -8,237 +8,231 @@ export default async function migration() { console.log(`Running setup script ${version}...`); const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); + const db = createClient({ url: "file:" + location }); try { - db.pragma("foreign_keys = OFF"); - - db.transaction(() => { - db.prepare( - `UPDATE 'resourceRules' SET match = 'COUNTRY' WHERE match = 'GEOIP'` - ).run(); - - db.prepare( - ` - CREATE TABLE 'accessAuditLog' ( - 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'timestamp' integer NOT NULL, - 'orgId' text NOT NULL, - 'actorType' text, - 'actor' text, - 'actorId' text, - 'resourceId' integer, - 'ip' text, - 'location' text, - 'type' text NOT NULL, - 'action' integer NOT NULL, - 'userAgent' text, - 'metadata' text, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + await db.execute( + `UPDATE 'resourceRules' SET match = 'COUNTRY' WHERE match = 'GEOIP'` ); - ` - ).run(); - - db.prepare( - `CREATE INDEX 'idx_identityAuditLog_timestamp' ON 'accessAuditLog' ('timestamp');` - ).run(); - db.prepare( - `CREATE INDEX 'idx_identityAuditLog_org_timestamp' ON 'accessAuditLog' ('orgId','timestamp');` - ).run(); - - db.prepare( - ` - CREATE TABLE 'actionAuditLog' ( - 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'timestamp' integer NOT NULL, - 'orgId' text NOT NULL, - 'actorType' text NOT NULL, - 'actor' text NOT NULL, - 'actorId' text NOT NULL, - 'action' text NOT NULL, - 'metadata' text, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + + await db.execute( + ` + CREATE TABLE 'accessAuditLog' ( + 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'timestamp' integer NOT NULL, + 'orgId' text NOT NULL, + 'actorType' text, + 'actor' text, + 'actorId' text, + 'resourceId' integer, + 'ip' text, + 'location' text, + 'type' text NOT NULL, + 'action' integer NOT NULL, + 'userAgent' text, + 'metadata' text, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + ` ); - ` - ).run(); - - db.prepare( - `CREATE INDEX 'idx_actionAuditLog_timestamp' ON 'actionAuditLog' ('timestamp');` - ).run(); - db.prepare( - `CREATE INDEX 'idx_actionAuditLog_org_timestamp' ON 'actionAuditLog' ('orgId','timestamp');` - ).run(); - - db.prepare( - ` - CREATE TABLE 'dnsRecords' ( - 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'domainId' text NOT NULL, - 'recordType' text NOT NULL, - 'baseDomain' text, - 'value' text NOT NULL, - 'verified' integer DEFAULT false NOT NULL, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade - ); - ` - ).run(); - - db.prepare( - ` - CREATE TABLE 'requestAuditLog' ( - 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'timestamp' integer NOT NULL, - 'orgId' text, - 'action' integer NOT NULL, - 'reason' integer NOT NULL, - 'actorType' text, - 'actor' text, - 'actorId' text, - 'resourceId' integer, - 'ip' text, - 'location' text, - 'userAgent' text, - 'metadata' text, - 'headers' text, - 'query' text, - 'originalRequestURL' text, - 'scheme' text, - 'host' text, - 'path' text, - 'method' text, - 'tls' integer, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + + await db.execute( + `CREATE INDEX 'idx_identityAuditLog_timestamp' ON 'accessAuditLog' ('timestamp');` + ); + await db.execute( + `CREATE INDEX 'idx_identityAuditLog_org_timestamp' ON 'accessAuditLog' ('orgId','timestamp');` + ); + + await db.execute( + ` + CREATE TABLE 'actionAuditLog' ( + 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'timestamp' integer NOT NULL, + 'orgId' text NOT NULL, + 'actorType' text NOT NULL, + 'actor' text NOT NULL, + 'actorId' text NOT NULL, + 'action' text NOT NULL, + 'metadata' text, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + ` ); - ` - ).run(); - - - db.prepare( - ` - CREATE TABLE 'blueprints' ( - 'blueprintId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'orgId' text NOT NULL, - 'name' text NOT NULL, - 'source' text NOT NULL, - 'createdAt' integer NOT NULL, - 'succeeded' integer NOT NULL, - 'contents' text NOT NULL, - 'message' text, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - ` - ).run(); - - db.prepare( - `CREATE INDEX 'idx_requestAuditLog_timestamp' ON 'requestAuditLog' ('timestamp');` - ).run(); - db.prepare( - `CREATE INDEX 'idx_requestAuditLog_org_timestamp' ON 'requestAuditLog' ('orgId','timestamp');` - ).run(); - - db.prepare( - ` - CREATE TABLE '__new_resources' ( - 'resourceId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'resourceGuid' text(36) NOT NULL, + + await db.execute( + `CREATE INDEX 'idx_actionAuditLog_timestamp' ON 'actionAuditLog' ('timestamp');` + ); + await db.execute( + `CREATE INDEX 'idx_actionAuditLog_org_timestamp' ON 'actionAuditLog' ('orgId','timestamp');` + ); + + await db.execute( + ` + CREATE TABLE 'dnsRecords' ( + 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'domainId' text NOT NULL, + 'recordType' text NOT NULL, + 'baseDomain' text, + 'value' text NOT NULL, + 'verified' integer DEFAULT false NOT NULL, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade + ); + ` + ); + + await db.execute( + ` + CREATE TABLE 'requestAuditLog' ( + 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'timestamp' integer NOT NULL, + 'orgId' text, + 'action' integer NOT NULL, + 'reason' integer NOT NULL, + 'actorType' text, + 'actor' text, + 'actorId' text, + 'resourceId' integer, + 'ip' text, + 'location' text, + 'userAgent' text, + 'metadata' text, + 'headers' text, + 'query' text, + 'originalRequestURL' text, + 'scheme' text, + 'host' text, + 'path' text, + 'method' text, + 'tls' integer, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + ` + ); + + + await db.execute( + ` + CREATE TABLE 'blueprints' ( + 'blueprintId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, 'orgId' text NOT NULL, - 'niceId' text NOT NULL, 'name' text NOT NULL, - 'subdomain' text, - 'fullDomain' text, - 'domainId' text, - 'ssl' integer DEFAULT false NOT NULL, - 'blockAccess' integer DEFAULT false NOT NULL, - 'sso' integer DEFAULT true NOT NULL, - 'http' integer DEFAULT true NOT NULL, - 'protocol' text NOT NULL, - 'proxyPort' integer, - 'emailWhitelistEnabled' integer DEFAULT false NOT NULL, - 'applyRules' integer DEFAULT false NOT NULL, - 'enabled' integer DEFAULT true NOT NULL, - 'stickySession' integer DEFAULT false NOT NULL, - 'tlsServerName' text, - 'setHostHeader' text, - 'enableProxy' integer DEFAULT true, - 'skipToIdpId' integer, - 'headers' text, - 'proxyProtocol' integer DEFAULT false NOT NULL, - 'proxyProtocolVersion' integer DEFAULT 1, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null, - FOREIGN KEY ('skipToIdpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE set null - ); - ` - ).run(); - - db.prepare( - `INSERT INTO '__new_resources'("resourceId", "resourceGuid", "orgId", "niceId", "name", "subdomain", "fullDomain", "domainId", "ssl", "blockAccess", "sso", "http", "protocol", "proxyPort", "emailWhitelistEnabled", "applyRules", "enabled", "stickySession", "tlsServerName", "setHostHeader", "enableProxy", "skipToIdpId", "headers") SELECT "resourceId", "resourceGuid", "orgId", "niceId", "name", "subdomain", "fullDomain", "domainId", "ssl", "blockAccess", "sso", "http", "protocol", "proxyPort", "emailWhitelistEnabled", "applyRules", "enabled", "stickySession", "tlsServerName", "setHostHeader", "enableProxy", "skipToIdpId", "headers" FROM 'resources';` - ).run(); - db.prepare(`DROP TABLE 'resources';`).run(); - db.prepare( - `ALTER TABLE '__new_resources' RENAME TO 'resources';` - ).run(); - - db.prepare( - `CREATE UNIQUE INDEX 'resources_resourceGuid_unique' ON 'resources' ('resourceGuid');` - ).run(); - db.prepare(`ALTER TABLE 'domains' ADD 'certResolver' text;`).run(); - db.prepare( - `ALTER TABLE 'domains' ADD 'preferWildcardCert' integer;` - ).run(); - db.prepare( - `ALTER TABLE 'orgs' ADD 'requireTwoFactor' integer;` - ).run(); - db.prepare( - `ALTER TABLE 'orgs' ADD 'maxSessionLengthHours' integer;` - ).run(); - db.prepare( - `ALTER TABLE 'orgs' ADD 'passwordExpiryDays' integer;` - ).run(); - db.prepare( - `ALTER TABLE 'orgs' ADD 'settingsLogRetentionDaysRequest' integer DEFAULT 7 NOT NULL;` - ).run(); - db.prepare( - `ALTER TABLE 'orgs' ADD 'settingsLogRetentionDaysAccess' integer DEFAULT 0 NOT NULL;` - ).run(); - db.prepare( - `ALTER TABLE 'orgs' ADD 'settingsLogRetentionDaysAction' integer DEFAULT 0 NOT NULL;` - ).run(); - db.prepare(`ALTER TABLE 'orgs' DROP COLUMN 'settings';`).run(); - db.prepare( - `ALTER TABLE 'resourceSessions' ADD 'issuedAt' integer;` - ).run(); - db.prepare(`ALTER TABLE 'session' ADD 'issuedAt' integer;`).run(); - db.prepare( - `ALTER TABLE 'user' ADD 'lastPasswordChange' integer;` - ).run(); - db.prepare(`ALTER TABLE 'remoteExitNode' ADD 'secondaryVersion' text;`).run(); - - // get all of the domains - const domains = db.prepare(`SELECT domainId, baseDomain from domains`).all() as { - domainId: number; - baseDomain: string; - }[]; - - for (const domain of domains) { - // insert two records into the dnsRecords table for each domain - const insert = db.prepare( - `INSERT INTO 'dnsRecords' (domainId, recordType, baseDomain, value, verified) VALUES (?, 'A', ?, ?, 1)` - ); - insert.run( - domain.domainId, - `*.${domain.baseDomain}`, - `Server IP Address` - ); - insert.run( - domain.domainId, - `${domain.baseDomain}`, - `Server IP Address` - ); - } - })(); - - db.pragma("foreign_keys = ON"); + 'source' text NOT NULL, + 'createdAt' integer NOT NULL, + 'succeeded' integer NOT NULL, + 'contents' text NOT NULL, + 'message' text, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + ` + ); + + await db.execute( + `CREATE INDEX 'idx_requestAuditLog_timestamp' ON 'requestAuditLog' ('timestamp');` + ); + await db.execute( + `CREATE INDEX 'idx_requestAuditLog_org_timestamp' ON 'requestAuditLog' ('orgId','timestamp');` + ); + + await db.execute( + ` + CREATE TABLE '__new_resources' ( + 'resourceId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'resourceGuid' text(36) NOT NULL, + 'orgId' text NOT NULL, + 'niceId' text NOT NULL, + 'name' text NOT NULL, + 'subdomain' text, + 'fullDomain' text, + 'domainId' text, + 'ssl' integer DEFAULT false NOT NULL, + 'blockAccess' integer DEFAULT false NOT NULL, + 'sso' integer DEFAULT true NOT NULL, + 'http' integer DEFAULT true NOT NULL, + 'protocol' text NOT NULL, + 'proxyPort' integer, + 'emailWhitelistEnabled' integer DEFAULT false NOT NULL, + 'applyRules' integer DEFAULT false NOT NULL, + 'enabled' integer DEFAULT true NOT NULL, + 'stickySession' integer DEFAULT false NOT NULL, + 'tlsServerName' text, + 'setHostHeader' text, + 'enableProxy' integer DEFAULT true, + 'skipToIdpId' integer, + 'headers' text, + 'proxyProtocol' integer DEFAULT false NOT NULL, + 'proxyProtocolVersion' integer DEFAULT 1, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null, + FOREIGN KEY ('skipToIdpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE set null + ); + ` + ); + + await db.execute( + `INSERT INTO '__new_resources'("resourceId", "resourceGuid", "orgId", "niceId", "name", "subdomain", "fullDomain", "domainId", "ssl", "blockAccess", "sso", "http", "protocol", "proxyPort", "emailWhitelistEnabled", "applyRules", "enabled", "stickySession", "tlsServerName", "setHostHeader", "enableProxy", "skipToIdpId", "headers") SELECT "resourceId", "resourceGuid", "orgId", "niceId", "name", "subdomain", "fullDomain", "domainId", "ssl", "blockAccess", "sso", "http", "protocol", "proxyPort", "emailWhitelistEnabled", "applyRules", "enabled", "stickySession", "tlsServerName", "setHostHeader", "enableProxy", "skipToIdpId", "headers" FROM 'resources';` + ); + await db.execute(`DROP TABLE 'resources';`); + await db.execute( + `ALTER TABLE '__new_resources' RENAME TO 'resources';` + ); + + await db.execute( + `CREATE UNIQUE INDEX 'resources_resourceGuid_unique' ON 'resources' ('resourceGuid');` + ); + await db.execute(`ALTER TABLE 'domains' ADD 'certResolver' text;`); + await db.execute( + `ALTER TABLE 'domains' ADD 'preferWildcardCert' integer;` + ); + await db.execute( + `ALTER TABLE 'orgs' ADD 'requireTwoFactor' integer;` + ); + await db.execute( + `ALTER TABLE 'orgs' ADD 'maxSessionLengthHours' integer;` + ); + await db.execute( + `ALTER TABLE 'orgs' ADD 'passwordExpiryDays' integer;` + ); + await db.execute( + `ALTER TABLE 'orgs' ADD 'settingsLogRetentionDaysRequest' integer DEFAULT 7 NOT NULL;` + ); + await db.execute( + `ALTER TABLE 'orgs' ADD 'settingsLogRetentionDaysAccess' integer DEFAULT 0 NOT NULL;` + ); + await db.execute( + `ALTER TABLE 'orgs' ADD 'settingsLogRetentionDaysAction' integer DEFAULT 0 NOT NULL;` + ); + await db.execute(`ALTER TABLE 'orgs' DROP COLUMN 'settings';`); + await db.execute( + `ALTER TABLE 'resourceSessions' ADD 'issuedAt' integer;` + ); + await db.execute(`ALTER TABLE 'session' ADD 'issuedAt' integer;`); + await db.execute( + `ALTER TABLE 'user' ADD 'lastPasswordChange' integer;` + ); + await db.execute(`ALTER TABLE 'remoteExitNode' ADD 'secondaryVersion' text;`); + + // get all of the domains + const domains = await db.execute(`SELECT domainId, baseDomain from domains`) as { + domainId: number; + baseDomain: string; + }[]; + + for (const domain of domains) { + // insert two records into the dnsRecords table for each domain + const insert = await db.execute( + `INSERT INTO 'dnsRecords' (domainId, recordType, baseDomain, value, verified) VALUES (?, 'A', ?, ?, 1)` + ); + insert.run( + domain.domainId, + `*.${domain.baseDomain}`, + `Server IP Address` + ); + insert.run( + domain.domainId, + `${domain.baseDomain}`, + `Server IP Address` + ); + }; console.log(`Migrated database`); } catch (e) { diff --git a/server/setup/scriptsSqlite/1.2.0.ts b/server/setup/scriptsSqlite/1.2.0.ts index e6ba029af..774355fa3 100644 --- a/server/setup/scriptsSqlite/1.2.0.ts +++ b/server/setup/scriptsSqlite/1.2.0.ts @@ -1,6 +1,5 @@ -import { db } from "../../db/sqlite"; +import { createClient } from "@libsql/client"; import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; -import { sql } from "drizzle-orm"; import fs from "fs"; import yaml from "js-yaml"; import path from "path"; @@ -12,12 +11,13 @@ const version = "1.2.0"; export default async function migration() { console.log(`Running setup script ${version}...`); + const location = path.join(APP_PATH, "db", "db.sqlite"); + const db = createClient({ url: "file:" + location }); + try { - db.transaction((trx) => { - trx.run( - sql`ALTER TABLE 'resources' ADD 'enabled' integer DEFAULT true NOT NULL;` - ); - }); + await db.execute( + `ALTER TABLE 'resources' ADD 'enabled' integer DEFAULT true NOT NULL;` + ); console.log(`Migrated database schema`); } catch (e) { diff --git a/server/setup/scriptsSqlite/1.3.0.ts b/server/setup/scriptsSqlite/1.3.0.ts index a084d59ff..6599cbf6c 100644 --- a/server/setup/scriptsSqlite/1.3.0.ts +++ b/server/setup/scriptsSqlite/1.3.0.ts @@ -1,4 +1,4 @@ -import Database from "better-sqlite3"; +import { createClient } from "@libsql/client"; import path from "path"; import fs from "fs"; import yaml from "js-yaml"; @@ -11,148 +11,145 @@ const location = path.join(APP_PATH, "db", "db.sqlite"); export default async function migration() { console.log(`Running setup script ${version}...`); - const db = new Database(location); + const db = createClient({ url: "file:" + location }); try { - db.pragma("foreign_keys = OFF"); - db.transaction(() => { - db.exec(` - CREATE TABLE 'apiKeyActions' ( - 'apiKeyId' text NOT NULL, - 'actionId' text NOT NULL, - FOREIGN KEY ('apiKeyId') REFERENCES 'apiKeys'('apiKeyId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('actionId') REFERENCES 'actions'('actionId') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'apiKeyOrg' ( - 'apiKeyId' text NOT NULL, - 'orgId' text NOT NULL, - FOREIGN KEY ('apiKeyId') REFERENCES 'apiKeys'('apiKeyId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'apiKeys' ( - 'apiKeyId' text PRIMARY KEY NOT NULL, - 'name' text NOT NULL, - 'apiKeyHash' text NOT NULL, - 'lastChars' text NOT NULL, - 'dateCreated' text NOT NULL, - 'isRoot' integer DEFAULT false NOT NULL - ); - - CREATE TABLE 'hostMeta' ( - 'hostMetaId' text PRIMARY KEY NOT NULL, - 'createdAt' integer NOT NULL - ); - - CREATE TABLE 'idp' ( - 'idpId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'name' text NOT NULL, - 'type' text NOT NULL, - 'defaultRoleMapping' text, - 'defaultOrgMapping' text, - 'autoProvision' integer DEFAULT false NOT NULL - ); - - CREATE TABLE 'idpOidcConfig' ( - 'idpOauthConfigId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'idpId' integer NOT NULL, - 'clientId' text NOT NULL, - 'clientSecret' text NOT NULL, - 'authUrl' text NOT NULL, - 'tokenUrl' text NOT NULL, - 'identifierPath' text NOT NULL, - 'emailPath' text, - 'namePath' text, - 'scopes' text NOT NULL, - FOREIGN KEY ('idpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'idpOrg' ( - 'idpId' integer NOT NULL, - 'orgId' text NOT NULL, - 'roleMapping' text, - 'orgMapping' text, - FOREIGN KEY ('idpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'licenseKey' ( - 'licenseKeyId' text PRIMARY KEY NOT NULL, - 'instanceId' text NOT NULL, - 'token' text NOT NULL - ); - - CREATE TABLE '__new_user' ( - 'id' text PRIMARY KEY NOT NULL, - 'email' text, - 'username' text NOT NULL, - 'name' text, - 'type' text NOT NULL, - 'idpId' integer, - 'passwordHash' text, - 'twoFactorEnabled' integer DEFAULT false NOT NULL, - 'twoFactorSecret' text, - 'emailVerified' integer DEFAULT false NOT NULL, - 'dateCreated' text NOT NULL, - 'serverAdmin' integer DEFAULT false NOT NULL, - FOREIGN KEY ('idpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE cascade - ); - - INSERT INTO '__new_user'( - "id", "email", "username", "name", "type", "idpId", "passwordHash", - "twoFactorEnabled", "twoFactorSecret", "emailVerified", "dateCreated", "serverAdmin" - ) - SELECT - "id", - "email", - COALESCE("email", 'unknown'), - NULL, - 'internal', - NULL, - "passwordHash", - "twoFactorEnabled", - "twoFactorSecret", - "emailVerified", - "dateCreated", - "serverAdmin" - FROM 'user'; - - DROP TABLE 'user'; - ALTER TABLE '__new_user' RENAME TO 'user'; - - ALTER TABLE 'resources' ADD 'stickySession' integer DEFAULT false NOT NULL; - ALTER TABLE 'resources' ADD 'tlsServerName' text; - ALTER TABLE 'resources' ADD 'setHostHeader' text; - - CREATE TABLE 'exitNodes_new' ( - 'exitNodeId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'name' text NOT NULL, - 'address' text NOT NULL, - 'endpoint' text NOT NULL, - 'publicKey' text NOT NULL, - 'listenPort' integer NOT NULL, - 'reachableAt' text - ); - - INSERT INTO 'exitNodes_new' ( - 'exitNodeId', 'name', 'address', 'endpoint', 'publicKey', 'listenPort', 'reachableAt' - ) - SELECT - exitNodeId, - name, - address, - endpoint, - pubicKey, - listenPort, - reachableAt - FROM exitNodes; - - DROP TABLE 'exitNodes'; - ALTER TABLE 'exitNodes_new' RENAME TO 'exitNodes'; - `); - })(); // <-- executes the transaction immediately - db.pragma("foreign_keys = ON"); + await db.execute(` + CREATE TABLE 'apiKeyActions' ( + 'apiKeyId' text NOT NULL, + 'actionId' text NOT NULL, + FOREIGN KEY ('apiKeyId') REFERENCES 'apiKeys'('apiKeyId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('actionId') REFERENCES 'actions'('actionId') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'apiKeyOrg' ( + 'apiKeyId' text NOT NULL, + 'orgId' text NOT NULL, + FOREIGN KEY ('apiKeyId') REFERENCES 'apiKeys'('apiKeyId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'apiKeys' ( + 'apiKeyId' text PRIMARY KEY NOT NULL, + 'name' text NOT NULL, + 'apiKeyHash' text NOT NULL, + 'lastChars' text NOT NULL, + 'dateCreated' text NOT NULL, + 'isRoot' integer DEFAULT false NOT NULL + ); + + CREATE TABLE 'hostMeta' ( + 'hostMetaId' text PRIMARY KEY NOT NULL, + 'createdAt' integer NOT NULL + ); + + CREATE TABLE 'idp' ( + 'idpId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'name' text NOT NULL, + 'type' text NOT NULL, + 'defaultRoleMapping' text, + 'defaultOrgMapping' text, + 'autoProvision' integer DEFAULT false NOT NULL + ); + + CREATE TABLE 'idpOidcConfig' ( + 'idpOauthConfigId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'idpId' integer NOT NULL, + 'clientId' text NOT NULL, + 'clientSecret' text NOT NULL, + 'authUrl' text NOT NULL, + 'tokenUrl' text NOT NULL, + 'identifierPath' text NOT NULL, + 'emailPath' text, + 'namePath' text, + 'scopes' text NOT NULL, + FOREIGN KEY ('idpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'idpOrg' ( + 'idpId' integer NOT NULL, + 'orgId' text NOT NULL, + 'roleMapping' text, + 'orgMapping' text, + FOREIGN KEY ('idpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'licenseKey' ( + 'licenseKeyId' text PRIMARY KEY NOT NULL, + 'instanceId' text NOT NULL, + 'token' text NOT NULL + ); + + CREATE TABLE '__new_user' ( + 'id' text PRIMARY KEY NOT NULL, + 'email' text, + 'username' text NOT NULL, + 'name' text, + 'type' text NOT NULL, + 'idpId' integer, + 'passwordHash' text, + 'twoFactorEnabled' integer DEFAULT false NOT NULL, + 'twoFactorSecret' text, + 'emailVerified' integer DEFAULT false NOT NULL, + 'dateCreated' text NOT NULL, + 'serverAdmin' integer DEFAULT false NOT NULL, + FOREIGN KEY ('idpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE cascade + ); + + INSERT INTO '__new_user'( + "id", "email", "username", "name", "type", "idpId", "passwordHash", + "twoFactorEnabled", "twoFactorSecret", "emailVerified", "dateCreated", "serverAdmin" + ) + SELECT + "id", + "email", + COALESCE("email", 'unknown'), + NULL, + 'internal', + NULL, + "passwordHash", + "twoFactorEnabled", + "twoFactorSecret", + "emailVerified", + "dateCreated", + "serverAdmin" + FROM 'user'; + + DROP TABLE 'user'; + ALTER TABLE '__new_user' RENAME TO 'user'; + + ALTER TABLE 'resources' ADD 'stickySession' integer DEFAULT false NOT NULL; + ALTER TABLE 'resources' ADD 'tlsServerName' text; + ALTER TABLE 'resources' ADD 'setHostHeader' text; + + CREATE TABLE 'exitNodes_new' ( + 'exitNodeId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'name' text NOT NULL, + 'address' text NOT NULL, + 'endpoint' text NOT NULL, + 'publicKey' text NOT NULL, + 'listenPort' integer NOT NULL, + 'reachableAt' text + ); + + INSERT INTO 'exitNodes_new' ( + 'exitNodeId', 'name', 'address', 'endpoint', 'publicKey', 'listenPort', 'reachableAt' + ) + SELECT + exitNodeId, + name, + address, + endpoint, + pubicKey, + listenPort, + reachableAt + FROM exitNodes; + + DROP TABLE 'exitNodes'; + ALTER TABLE 'exitNodes_new' RENAME TO 'exitNodes'; + `); + console.log(`Migrated database schema`); } catch (e) { console.log("Unable to migrate database schema"); diff --git a/server/setup/scriptsSqlite/1.5.0.ts b/server/setup/scriptsSqlite/1.5.0.ts index 46e9cccaa..52fb09bf9 100644 --- a/server/setup/scriptsSqlite/1.5.0.ts +++ b/server/setup/scriptsSqlite/1.5.0.ts @@ -1,4 +1,4 @@ -import Database from "better-sqlite3"; +import { createClient } from "@libsql/client"; import path from "path"; import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; import fs from "fs"; @@ -10,16 +10,13 @@ const location = path.join(APP_PATH, "db", "db.sqlite"); export default async function migration() { console.log(`Running setup script ${version}...`); - const db = new Database(location); + const db = createClient({ url: "file:" + location }); try { - db.pragma("foreign_keys = OFF"); - db.transaction(() => { - db.exec(` - ALTER TABLE 'sites' ADD 'dockerSocketEnabled' integer DEFAULT true NOT NULL; - `); - })(); // <-- executes the transaction immediately - db.pragma("foreign_keys = ON"); + await db.execute(` + ALTER TABLE 'sites' ADD 'dockerSocketEnabled' integer DEFAULT true NOT NULL; + `); + console.log(`Migrated database schema`); } catch (e) { console.log("Unable to migrate database schema"); diff --git a/server/setup/scriptsSqlite/1.6.0.ts b/server/setup/scriptsSqlite/1.6.0.ts index adab26977..a476f8a93 100644 --- a/server/setup/scriptsSqlite/1.6.0.ts +++ b/server/setup/scriptsSqlite/1.6.0.ts @@ -1,5 +1,5 @@ import { APP_PATH, configFilePath1, configFilePath2 } from "@server/lib/consts"; -import Database from "better-sqlite3"; +import { createClient } from "@libsql/client"; import fs from "fs"; import yaml from "js-yaml"; import path from "path"; @@ -10,17 +10,14 @@ export default async function migration() { console.log(`Running setup script ${version}...`); const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); + const db = createClient({ url: "file:" + location }); try { - db.pragma("foreign_keys = OFF"); - db.transaction(() => { - db.exec(` - UPDATE 'user' SET email = LOWER(email); - UPDATE 'user' SET username = LOWER(username); - `); - })(); // <-- executes the transaction immediately - db.pragma("foreign_keys = ON"); + await db.execute(` + UPDATE 'user' SET email = LOWER(email); + UPDATE 'user' SET username = LOWER(username); + `); + console.log(`Migrated database schema`); } catch (e) { console.log("Unable to make all usernames and emails lowercase"); diff --git a/server/setup/scriptsSqlite/1.7.0.ts b/server/setup/scriptsSqlite/1.7.0.ts index f173d12e9..857abb397 100644 --- a/server/setup/scriptsSqlite/1.7.0.ts +++ b/server/setup/scriptsSqlite/1.7.0.ts @@ -1,5 +1,5 @@ import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; +import { createClient } from "@libsql/client"; import path from "path"; const version = "1.7.0"; @@ -8,147 +8,141 @@ export default async function migration() { console.log(`Running setup script ${version}...`); const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); + const db = createClient({ url: "file:" + location }); try { - db.pragma("foreign_keys = OFF"); - - db.transaction(() => { - db.exec(` - CREATE TABLE 'clientSites' ( - 'clientId' integer NOT NULL, - 'siteId' integer NOT NULL, - 'isRelayed' integer DEFAULT 0 NOT NULL, - FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('siteId') REFERENCES 'sites'('siteId') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'clients' ( - 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'orgId' text NOT NULL, - 'exitNode' integer, - 'name' text NOT NULL, - 'pubKey' text, - 'subnet' text NOT NULL, - 'bytesIn' integer, - 'bytesOut' integer, - 'lastBandwidthUpdate' text, - 'lastPing' text, - 'type' text NOT NULL, - 'online' integer DEFAULT 0 NOT NULL, - 'endpoint' text, - 'lastHolePunch' integer, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('exitNode') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null - ); - - CREATE TABLE 'clientSession' ( - 'id' text PRIMARY KEY NOT NULL, - 'olmId' text NOT NULL, - 'expiresAt' integer NOT NULL, - FOREIGN KEY ('olmId') REFERENCES 'olms'('id') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'olms' ( - 'id' text PRIMARY KEY NOT NULL, - 'secretHash' text NOT NULL, - 'dateCreated' text NOT NULL, - 'clientId' integer, - FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'roleClients' ( - 'roleId' integer NOT NULL, - 'clientId' integer NOT NULL, - FOREIGN KEY ('roleId') REFERENCES 'roles'('roleId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'webauthnCredentials' ( - 'credentialId' text PRIMARY KEY NOT NULL, - 'userId' text NOT NULL, - 'publicKey' text NOT NULL, - 'signCount' integer NOT NULL, - 'transports' text, - 'name' text, - 'lastUsed' text NOT NULL, - 'dateCreated' text NOT NULL, - FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'userClients' ( - 'userId' text NOT NULL, - 'clientId' integer NOT NULL, - FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'userDomains' ( - 'userId' text NOT NULL, - 'domainId' text NOT NULL, - FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade - ); - - CREATE TABLE 'webauthnChallenge' ( - 'sessionId' text PRIMARY KEY NOT NULL, - 'challenge' text NOT NULL, - 'securityKeyName' text, - 'userId' text, - 'expiresAt' integer NOT NULL, - FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade - ); - - `); - - db.exec(` - CREATE TABLE '__new_sites' ( - 'siteId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'orgId' text NOT NULL, - 'niceId' text NOT NULL, - 'exitNode' integer, - 'name' text NOT NULL, - 'pubKey' text, - 'subnet' text, - 'bytesIn' integer DEFAULT 0, - 'bytesOut' integer DEFAULT 0, - 'lastBandwidthUpdate' text, - 'type' text NOT NULL, - 'online' integer DEFAULT 0 NOT NULL, - 'address' text, - 'endpoint' text, - 'publicKey' text, - 'lastHolePunch' integer, - 'listenPort' integer, - 'dockerSocketEnabled' integer DEFAULT 1 NOT NULL, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('exitNode') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null - ); - - INSERT INTO '__new_sites' ( - 'siteId', 'orgId', 'niceId', 'exitNode', 'name', 'pubKey', 'subnet', 'bytesIn', 'bytesOut', 'lastBandwidthUpdate', 'type', 'online', 'address', 'endpoint', 'publicKey', 'lastHolePunch', 'listenPort', 'dockerSocketEnabled' - ) - SELECT siteId, orgId, niceId, exitNode, name, pubKey, subnet, bytesIn, bytesOut, lastBandwidthUpdate, type, online, NULL, NULL, NULL, NULL, NULL, dockerSocketEnabled - FROM sites; - - DROP TABLE 'sites'; - ALTER TABLE '__new_sites' RENAME TO 'sites'; - `); - - db.exec(` - ALTER TABLE 'domains' ADD 'type' text; - ALTER TABLE 'domains' ADD 'verified' integer DEFAULT 0 NOT NULL; - ALTER TABLE 'domains' ADD 'failed' integer DEFAULT 0 NOT NULL; - ALTER TABLE 'domains' ADD 'tries' integer DEFAULT 0 NOT NULL; - ALTER TABLE 'exitNodes' ADD 'maxConnections' integer; - ALTER TABLE 'newt' ADD 'version' text; - ALTER TABLE 'orgs' ADD 'subnet' text; - ALTER TABLE 'user' ADD 'twoFactorSetupRequested' integer DEFAULT 0; - ALTER TABLE 'resources' DROP COLUMN 'isBaseDomain'; - `); - })(); - - db.pragma("foreign_keys = ON"); + await db.execute(` + CREATE TABLE 'clientSites' ( + 'clientId' integer NOT NULL, + 'siteId' integer NOT NULL, + 'isRelayed' integer DEFAULT 0 NOT NULL, + FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('siteId') REFERENCES 'sites'('siteId') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'clients' ( + 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'orgId' text NOT NULL, + 'exitNode' integer, + 'name' text NOT NULL, + 'pubKey' text, + 'subnet' text NOT NULL, + 'bytesIn' integer, + 'bytesOut' integer, + 'lastBandwidthUpdate' text, + 'lastPing' text, + 'type' text NOT NULL, + 'online' integer DEFAULT 0 NOT NULL, + 'endpoint' text, + 'lastHolePunch' integer, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('exitNode') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null + ); + + CREATE TABLE 'clientSession' ( + 'id' text PRIMARY KEY NOT NULL, + 'olmId' text NOT NULL, + 'expiresAt' integer NOT NULL, + FOREIGN KEY ('olmId') REFERENCES 'olms'('id') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'olms' ( + 'id' text PRIMARY KEY NOT NULL, + 'secretHash' text NOT NULL, + 'dateCreated' text NOT NULL, + 'clientId' integer, + FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'roleClients' ( + 'roleId' integer NOT NULL, + 'clientId' integer NOT NULL, + FOREIGN KEY ('roleId') REFERENCES 'roles'('roleId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'webauthnCredentials' ( + 'credentialId' text PRIMARY KEY NOT NULL, + 'userId' text NOT NULL, + 'publicKey' text NOT NULL, + 'signCount' integer NOT NULL, + 'transports' text, + 'name' text, + 'lastUsed' text NOT NULL, + 'dateCreated' text NOT NULL, + FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'userClients' ( + 'userId' text NOT NULL, + 'clientId' integer NOT NULL, + FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('clientId') REFERENCES 'clients'('id') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'userDomains' ( + 'userId' text NOT NULL, + 'domainId' text NOT NULL, + FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade + ); + + CREATE TABLE 'webauthnChallenge' ( + 'sessionId' text PRIMARY KEY NOT NULL, + 'challenge' text NOT NULL, + 'securityKeyName' text, + 'userId' text, + 'expiresAt' integer NOT NULL, + FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade + ); + + `); + + await db.execute(` + CREATE TABLE '__new_sites' ( + 'siteId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'orgId' text NOT NULL, + 'niceId' text NOT NULL, + 'exitNode' integer, + 'name' text NOT NULL, + 'pubKey' text, + 'subnet' text, + 'bytesIn' integer DEFAULT 0, + 'bytesOut' integer DEFAULT 0, + 'lastBandwidthUpdate' text, + 'type' text NOT NULL, + 'online' integer DEFAULT 0 NOT NULL, + 'address' text, + 'endpoint' text, + 'publicKey' text, + 'lastHolePunch' integer, + 'listenPort' integer, + 'dockerSocketEnabled' integer DEFAULT 1 NOT NULL, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('exitNode') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null + ); + + INSERT INTO '__new_sites' ( + 'siteId', 'orgId', 'niceId', 'exitNode', 'name', 'pubKey', 'subnet', 'bytesIn', 'bytesOut', 'lastBandwidthUpdate', 'type', 'online', 'address', 'endpoint', 'publicKey', 'lastHolePunch', 'listenPort', 'dockerSocketEnabled' + ) + SELECT siteId, orgId, niceId, exitNode, name, pubKey, subnet, bytesIn, bytesOut, lastBandwidthUpdate, type, online, NULL, NULL, NULL, NULL, NULL, dockerSocketEnabled + FROM sites; + + DROP TABLE 'sites'; + ALTER TABLE '__new_sites' RENAME TO 'sites'; + `); + + await db.execute(` + ALTER TABLE 'domains' ADD 'type' text; + ALTER TABLE 'domains' ADD 'verified' integer DEFAULT 0 NOT NULL; + ALTER TABLE 'domains' ADD 'failed' integer DEFAULT 0 NOT NULL; + ALTER TABLE 'domains' ADD 'tries' integer DEFAULT 0 NOT NULL; + ALTER TABLE 'exitNodes' ADD 'maxConnections' integer; + ALTER TABLE 'newt' ADD 'version' text; + ALTER TABLE 'orgs' ADD 'subnet' text; + ALTER TABLE 'user' ADD 'twoFactorSetupRequested' integer DEFAULT 0; + ALTER TABLE 'resources' DROP COLUMN 'isBaseDomain'; + `); console.log(`Migrated database schema`); } catch (e) { @@ -156,18 +150,17 @@ export default async function migration() { throw e; } - db.transaction(() => { // Update all existing orgs to have the default subnet - db.exec(`UPDATE 'orgs' SET 'subnet' = '100.90.128.0/24'`); + await db.execute(`UPDATE 'orgs' SET 'subnet' = '100.90.128.0/24'`); // Get all orgs and their sites to assign sequential IP addresses - const orgs = db.prepare(`SELECT orgId FROM 'orgs'`).all() as { + const orgs = await db.execute(`SELECT orgId FROM 'orgs'`).all() as { orgId: string; }[]; for (const org of orgs) { const sites = db - .prepare( + .execute( `SELECT siteId FROM 'sites' WHERE orgId = ? ORDER BY siteId` ) .all(org.orgId) as { siteId: number }[]; @@ -175,13 +168,13 @@ export default async function migration() { let ipIndex = 1; for (const site of sites) { const address = `100.90.128.${ipIndex}/24`; - db.prepare( - `UPDATE 'sites' SET 'address' = ? WHERE siteId = ?` - ).run(address, site.siteId); + await db.execute({ + sql: `UPDATE 'sites' SET 'address' = ? WHERE siteId = ?`, + args: [address, site.siteId] + }); ipIndex++; } } - })(); console.log(`${version} migration complete`); } diff --git a/server/setup/scriptsSqlite/1.8.0.ts b/server/setup/scriptsSqlite/1.8.0.ts index f8ac7c951..9bb684e7e 100644 --- a/server/setup/scriptsSqlite/1.8.0.ts +++ b/server/setup/scriptsSqlite/1.8.0.ts @@ -1,5 +1,5 @@ import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; +import { createClient } from "@libsql/client"; import path from "path"; const version = "1.8.0"; @@ -8,17 +8,15 @@ export default async function migration() { console.log(`Running setup script ${version}...`); const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); + const db = createClient({ url: "file:" + location }); try { - db.transaction(() => { - db.exec(` - ALTER TABLE 'resources' ADD 'enableProxy' integer DEFAULT 1; - ALTER TABLE 'sites' ADD 'remoteSubnets' text; - ALTER TABLE 'user' ADD 'termsAcceptedTimestamp' text; - ALTER TABLE 'user' ADD 'termsVersion' text; - `); - })(); + await db.execute(` + ALTER TABLE 'resources' ADD 'enableProxy' integer DEFAULT 1; + ALTER TABLE 'sites' ADD 'remoteSubnets' text; + ALTER TABLE 'user' ADD 'termsAcceptedTimestamp' text; + ALTER TABLE 'user' ADD 'termsVersion' text; + `); console.log("Migrated database schema"); } catch (e) { diff --git a/server/setup/scriptsSqlite/1.9.0.ts b/server/setup/scriptsSqlite/1.9.0.ts index 5f247ea50..9790c075c 100644 --- a/server/setup/scriptsSqlite/1.9.0.ts +++ b/server/setup/scriptsSqlite/1.9.0.ts @@ -1,5 +1,5 @@ import { APP_PATH } from "@server/lib/consts"; -import Database from "better-sqlite3"; +import { createClient } from "@libsql/client"; import path from "path"; const version = "1.9.0"; @@ -8,20 +8,20 @@ export default async function migration() { console.log(`Running setup script ${version}...`); const location = path.join(APP_PATH, "db", "db.sqlite"); - const db = new Database(location); + const db = createClient({ url: "file:" + location }); const resourceSiteMap = new Map(); let firstSiteId: number = 1; try { // Get the first siteId to use as default - const firstSite = db.prepare("SELECT siteId FROM sites LIMIT 1").get() as { siteId: number } | undefined; + const firstSite = await db.execute("SELECT siteId FROM sites LIMIT 1").get() as { siteId: number } | undefined; if (firstSite) { firstSiteId = firstSite.siteId; } - const resources = db - .prepare( + const resources = await db + .execute( "SELECT resourceId, siteId FROM resources WHERE siteId IS NOT NULL" ) .all() as Array<{ resourceId: number; siteId: number }>; @@ -33,10 +33,7 @@ export default async function migration() { } try { - db.pragma("foreign_keys = OFF"); - - db.transaction(() => { - db.exec(`CREATE TABLE 'setupTokens' ( + await db.execute(`CREATE TABLE 'setupTokens' ( 'tokenId' text PRIMARY KEY NOT NULL, 'token' text NOT NULL, 'used' integer DEFAULT false NOT NULL, @@ -118,70 +115,70 @@ ALTER TABLE 'olms' ADD 'version' text;--> statement-breakpoint ALTER TABLE 'orgs' ADD 'createdAt' text;--> statement-breakpoint ALTER TABLE 'targets' ADD 'siteId' integer NOT NULL DEFAULT ${firstSiteId || 1} REFERENCES sites(siteId);`); - // for each resource, get all of its targets, and update the siteId to be the previously stored siteId - for (const [resourceId, siteId] of resourceSiteMap) { - const targets = db - .prepare( - "SELECT targetId FROM targets WHERE resourceId = ?" - ) - .all(resourceId) as Array<{ targetId: number }>; - for (const target of targets) { - db.prepare( - "UPDATE targets SET siteId = ? WHERE targetId = ?" - ).run(siteId, target.targetId); - } - } - - // list resources that have enableProxy false - // move them to the siteResources table - // remove them from the resources table - const proxyFalseResources = db - .prepare("SELECT * FROM resources WHERE enableProxy = 0") - .all() as Array; - - for (const resource of proxyFalseResources) { - // Get the first target to derive destination IP and port - const firstTarget = db - .prepare( - "SELECT ip, port FROM targets WHERE resourceId = ? LIMIT 1" - ) - .get(resource.resourceId) as - | { ip: string; port: number } - | undefined; - - if (!firstTarget) { - continue; - } - - // Insert into siteResources table - const stmt = db.prepare(` - INSERT INTO siteResources (siteId, orgId, name, protocol, proxyPort, destinationPort, destinationIp, enabled) - VALUES (?, ?, ?, ?, ?, ?, ?, ?) - `); - stmt.run( - resourceSiteMap.get(resource.resourceId), - resource.orgId, - resource.name, - resource.protocol, - resource.proxyPort, - firstTarget.port, - firstTarget.ip, - resource.enabled - ); - - // Delete from resources table - db.prepare("DELETE FROM resources WHERE resourceId = ?").run( - resource.resourceId - ); - - // Delete the targets for this resource - db.prepare("DELETE FROM targets WHERE resourceId = ?").run( - resource.resourceId - ); - } - })(); + // for each resource, get all of its targets, and update the siteId to be the previously stored siteId + for (const [resourceId, siteId] of resourceSiteMap) { + const targets = await db + .execute( + "SELECT targetId FROM targets WHERE resourceId = ?" + ) + .all(resourceId) as Array<{ targetId: number }>; + for (const target of targets) { + await db.execute({ + sql: "UPDATE targets SET siteId = ? WHERE targetId = ?", + args: [siteId, target.targetId] + }); + } + } - db.pragma("foreign_keys = ON"); + // list resources that have enableProxy false + // move them to the siteResources table + // remove them from the resources table + const proxyFalseResources = await db + .execute("SELECT * FROM resources WHERE enableProxy = 0") + .all() as Array; + + for (const resource of proxyFalseResources) { + // Get the first target to derive destination IP and port + const firstTarget = db + .execute( + "SELECT ip, port FROM targets WHERE resourceId = ? LIMIT 1" + ) + .get(resource.resourceId) as + | { ip: string; port: number } + | undefined; + + if (!firstTarget) { + continue; + } + + // Insert into siteResources table + const stmt = await db.execute({ + sql: `INSERT INTO siteResources (siteId, orgId, name, protocol, proxyPort, destinationPort, destinationIp, enabled) + VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, + args: [ + resourceSiteMap.get(resource.resourceId), + resource.orgId, + resource.name, + resource.protocol, + resource.proxyPort, + firstTarget.port, + firstTarget.ip, + resource.enabled + ] + }); + + // Delete from resources table + await db.execute({ + sql: "DELETE FROM resources WHERE resourceId = ?", + args: [resource.resourceId] + }); + + // Delete the targets for this resource + await db.execute({ + sql: "DELETE FROM targets WHERE resourceId = ?", + args: [resource.resourceId] + }); + } console.log(`Migrated database`); } catch (e) { From 49f306ce45f7d4e16387c788246b92740249ff5d Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Mon, 1 Dec 2025 21:18:52 +0000 Subject: [PATCH 22/27] migrate to libsql --- server/setup/scriptsSqlite/1.11.0.ts | 374 ++++++++++++++------------- server/setup/scriptsSqlite/1.12.0.ts | 274 ++++++++++---------- server/setup/scriptsSqlite/1.7.0.ts | 16 +- server/setup/scriptsSqlite/1.9.0.ts | 42 +-- 4 files changed, 356 insertions(+), 350 deletions(-) diff --git a/server/setup/scriptsSqlite/1.11.0.ts b/server/setup/scriptsSqlite/1.11.0.ts index 0deb8680f..ab6cbd096 100644 --- a/server/setup/scriptsSqlite/1.11.0.ts +++ b/server/setup/scriptsSqlite/1.11.0.ts @@ -13,238 +13,238 @@ export default async function migration() { const db = createClient({ url: "file:" + location }); await db.execute(` - CREATE TABLE 'account' ( - 'accountId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'userId' text NOT NULL, - FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'account' ( + 'accountId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'userId' text NOT NULL, + FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(` - CREATE TABLE 'accountDomains' ( - 'accountId' integer NOT NULL, - 'domainId' text NOT NULL, - FOREIGN KEY ('accountId') REFERENCES 'account'('accountId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'accountDomains' ( + 'accountId' integer NOT NULL, + 'domainId' text NOT NULL, + FOREIGN KEY ('accountId') REFERENCES 'account'('accountId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(` - CREATE TABLE 'certificates' ( - 'certId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'domain' text NOT NULL, - 'domainId' text, - 'wildcard' integer DEFAULT false, - 'status' text DEFAULT 'pending' NOT NULL, - 'expiresAt' integer, - 'lastRenewalAttempt' integer, - 'createdAt' integer NOT NULL, - 'updatedAt' integer NOT NULL, - 'orderId' text, - 'errorMessage' text, - 'renewalCount' integer DEFAULT 0, - 'certFile' text, - 'keyFile' text, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'certificates' ( + 'certId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'domain' text NOT NULL, + 'domainId' text, + 'wildcard' integer DEFAULT false, + 'status' text DEFAULT 'pending' NOT NULL, + 'expiresAt' integer, + 'lastRenewalAttempt' integer, + 'createdAt' integer NOT NULL, + 'updatedAt' integer NOT NULL, + 'orderId' text, + 'errorMessage' text, + 'renewalCount' integer DEFAULT 0, + 'certFile' text, + 'keyFile' text, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(`CREATE UNIQUE INDEX 'certificates_domain_unique' ON 'certificates' ('domain');`); await db.execute(` - CREATE TABLE 'customers' ( - 'customerId' text PRIMARY KEY NOT NULL, - 'orgId' text NOT NULL, - 'email' text, - 'name' text, - 'phone' text, - 'address' text, - 'createdAt' integer NOT NULL, - 'updatedAt' integer NOT NULL, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'customers' ( + 'customerId' text PRIMARY KEY NOT NULL, + 'orgId' text NOT NULL, + 'email' text, + 'name' text, + 'phone' text, + 'address' text, + 'createdAt' integer NOT NULL, + 'updatedAt' integer NOT NULL, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(` - CREATE TABLE 'dnsChallenges' ( - 'dnsChallengeId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'domain' text NOT NULL, - 'token' text NOT NULL, - 'keyAuthorization' text NOT NULL, - 'createdAt' integer NOT NULL, - 'expiresAt' integer NOT NULL, - 'completed' integer DEFAULT false - ); + CREATE TABLE 'dnsChallenges' ( + 'dnsChallengeId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'domain' text NOT NULL, + 'token' text NOT NULL, + 'keyAuthorization' text NOT NULL, + 'createdAt' integer NOT NULL, + 'expiresAt' integer NOT NULL, + 'completed' integer DEFAULT false + ); `); await db.execute(` - CREATE TABLE 'domainNamespaces' ( - 'domainNamespaceId' text PRIMARY KEY NOT NULL, - 'domainId' text NOT NULL, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null - ); + CREATE TABLE 'domainNamespaces' ( + 'domainNamespaceId' text PRIMARY KEY NOT NULL, + 'domainId' text NOT NULL, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null + ); `); await db.execute(` - CREATE TABLE 'exitNodeOrgs' ( - 'exitNodeId' integer NOT NULL, - 'orgId' text NOT NULL, - FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'exitNodeOrgs' ( + 'exitNodeId' integer NOT NULL, + 'orgId' text NOT NULL, + FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(` - CREATE TABLE 'loginPage' ( - 'loginPageId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'subdomain' text, - 'fullDomain' text, - 'exitNodeId' integer, - 'domainId' text, - FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null - ); + CREATE TABLE 'loginPage' ( + 'loginPageId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'subdomain' text, + 'fullDomain' text, + 'exitNodeId' integer, + 'domainId' text, + FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE set null, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null + ); `); await db.execute(` - CREATE TABLE 'loginPageOrg' ( - 'loginPageId' integer NOT NULL, - 'orgId' text NOT NULL, - FOREIGN KEY ('loginPageId') REFERENCES 'loginPage'('loginPageId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'loginPageOrg' ( + 'loginPageId' integer NOT NULL, + 'orgId' text NOT NULL, + FOREIGN KEY ('loginPageId') REFERENCES 'loginPage'('loginPageId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(` - CREATE TABLE 'remoteExitNodeSession' ( - 'id' text PRIMARY KEY NOT NULL, - 'remoteExitNodeId' text NOT NULL, - 'expiresAt' integer NOT NULL, - FOREIGN KEY ('remoteExitNodeId') REFERENCES 'remoteExitNode'('id') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'remoteExitNodeSession' ( + 'id' text PRIMARY KEY NOT NULL, + 'remoteExitNodeId' text NOT NULL, + 'expiresAt' integer NOT NULL, + FOREIGN KEY ('remoteExitNodeId') REFERENCES 'remoteExitNode'('id') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(` - CREATE TABLE 'remoteExitNode' ( - 'id' text PRIMARY KEY NOT NULL, - 'secretHash' text NOT NULL, - 'dateCreated' text NOT NULL, - 'version' text, - 'exitNodeId' integer, - FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'remoteExitNode' ( + 'id' text PRIMARY KEY NOT NULL, + 'secretHash' text NOT NULL, + 'dateCreated' text NOT NULL, + 'version' text, + 'exitNodeId' integer, + FOREIGN KEY ('exitNodeId') REFERENCES 'exitNodes'('exitNodeId') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(` - CREATE TABLE 'sessionTransferToken' ( - 'token' text PRIMARY KEY NOT NULL, - 'sessionId' text NOT NULL, - 'encryptedSession' text NOT NULL, - 'expiresAt' integer NOT NULL, - FOREIGN KEY ('sessionId') REFERENCES 'session'('id') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'sessionTransferToken' ( + 'token' text PRIMARY KEY NOT NULL, + 'sessionId' text NOT NULL, + 'encryptedSession' text NOT NULL, + 'expiresAt' integer NOT NULL, + FOREIGN KEY ('sessionId') REFERENCES 'session'('id') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(` - CREATE TABLE 'subscriptionItems' ( - 'subscriptionItemId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'subscriptionId' text NOT NULL, - 'planId' text NOT NULL, - 'priceId' text, - 'meterId' text, - 'unitAmount' real, - 'tiers' text, - 'interval' text, - 'currentPeriodStart' integer, - 'currentPeriodEnd' integer, - 'name' text, - FOREIGN KEY ('subscriptionId') REFERENCES 'subscriptions'('subscriptionId') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'subscriptionItems' ( + 'subscriptionItemId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'subscriptionId' text NOT NULL, + 'planId' text NOT NULL, + 'priceId' text, + 'meterId' text, + 'unitAmount' real, + 'tiers' text, + 'interval' text, + 'currentPeriodStart' integer, + 'currentPeriodEnd' integer, + 'name' text, + FOREIGN KEY ('subscriptionId') REFERENCES 'subscriptions'('subscriptionId') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(` - CREATE TABLE 'subscriptions' ( - 'subscriptionId' text PRIMARY KEY NOT NULL, - 'customerId' text NOT NULL, - 'status' text DEFAULT 'active' NOT NULL, - 'canceledAt' integer, - 'createdAt' integer NOT NULL, - 'updatedAt' integer, - 'billingCycleAnchor' integer, - FOREIGN KEY ('customerId') REFERENCES 'customers'('customerId') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'subscriptions' ( + 'subscriptionId' text PRIMARY KEY NOT NULL, + 'customerId' text NOT NULL, + 'status' text DEFAULT 'active' NOT NULL, + 'canceledAt' integer, + 'createdAt' integer NOT NULL, + 'updatedAt' integer, + 'billingCycleAnchor' integer, + FOREIGN KEY ('customerId') REFERENCES 'customers'('customerId') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(` - CREATE TABLE 'usage' ( - 'usageId' text PRIMARY KEY NOT NULL, - 'featureId' text NOT NULL, - 'orgId' text NOT NULL, - 'meterId' text, - 'instantaneousValue' real, - 'latestValue' real NOT NULL, - 'previousValue' real, - 'updatedAt' integer NOT NULL, - 'rolledOverAt' integer, - 'nextRolloverAt' integer, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'usage' ( + 'usageId' text PRIMARY KEY NOT NULL, + 'featureId' text NOT NULL, + 'orgId' text NOT NULL, + 'meterId' text, + 'instantaneousValue' real, + 'latestValue' real NOT NULL, + 'previousValue' real, + 'updatedAt' integer NOT NULL, + 'rolledOverAt' integer, + 'nextRolloverAt' integer, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(` - CREATE TABLE 'usageNotifications' ( - 'notificationId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'orgId' text NOT NULL, - 'featureId' text NOT NULL, - 'limitId' text NOT NULL, - 'notificationType' text NOT NULL, - 'sentAt' integer NOT NULL, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'usageNotifications' ( + 'notificationId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'orgId' text NOT NULL, + 'featureId' text NOT NULL, + 'limitId' text NOT NULL, + 'notificationType' text NOT NULL, + 'sentAt' integer NOT NULL, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(` - CREATE TABLE 'resourceHeaderAuth' ( - 'headerAuthId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'resourceId' integer NOT NULL, - 'headerAuthHash' text NOT NULL, - FOREIGN KEY ('resourceId') REFERENCES 'resources'('resourceId') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'resourceHeaderAuth' ( + 'headerAuthId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'resourceId' integer NOT NULL, + 'headerAuthHash' text NOT NULL, + FOREIGN KEY ('resourceId') REFERENCES 'resources'('resourceId') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(` - CREATE TABLE 'targetHealthCheck' ( - 'targetHealthCheckId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'targetId' integer NOT NULL, - 'hcEnabled' integer DEFAULT false NOT NULL, - 'hcPath' text, - 'hcScheme' text, - 'hcMode' text DEFAULT 'http', - 'hcHostname' text, - 'hcPort' integer, - 'hcInterval' integer DEFAULT 30, - 'hcUnhealthyInterval' integer DEFAULT 30, - 'hcTimeout' integer DEFAULT 5, - 'hcHeaders' text, - 'hcFollowRedirects' integer DEFAULT true, - 'hcMethod' text DEFAULT 'GET', - 'hcStatus' integer, - 'hcHealth' text DEFAULT 'unknown', - FOREIGN KEY ('targetId') REFERENCES 'targets'('targetId') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'targetHealthCheck' ( + 'targetHealthCheckId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'targetId' integer NOT NULL, + 'hcEnabled' integer DEFAULT false NOT NULL, + 'hcPath' text, + 'hcScheme' text, + 'hcMode' text DEFAULT 'http', + 'hcHostname' text, + 'hcPort' integer, + 'hcInterval' integer DEFAULT 30, + 'hcUnhealthyInterval' integer DEFAULT 30, + 'hcTimeout' integer DEFAULT 5, + 'hcHeaders' text, + 'hcFollowRedirects' integer DEFAULT true, + 'hcMethod' text DEFAULT 'GET', + 'hcStatus' integer, + 'hcHealth' text DEFAULT 'unknown', + FOREIGN KEY ('targetId') REFERENCES 'targets'('targetId') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(`DROP TABLE 'limits';`); await db.execute(` - CREATE TABLE 'limits' ( - 'limitId' text PRIMARY KEY NOT NULL, - 'featureId' text NOT NULL, - 'orgId' text NOT NULL, - 'value' real, - 'description' text, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); + CREATE TABLE 'limits' ( + 'limitId' text PRIMARY KEY NOT NULL, + 'featureId' text NOT NULL, + 'orgId' text NOT NULL, + 'value' real, + 'description' text, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + ); `); await db.execute(`ALTER TABLE 'orgs' ADD 'settings' text;`); @@ -252,10 +252,8 @@ export default async function migration() { await db.execute(`ALTER TABLE 'targets' ADD 'rewritePathType' text;`); await db.execute(`ALTER TABLE 'targets' ADD 'priority' integer DEFAULT 100 NOT NULL;`); - const webauthnCredentials = db.execute({ - sql: `SELECT credentialId, publicKey, userId, signCount, transports, name, lastUsed, dateCreated FROM 'webauthnCredentials'` - ) - as { + const webauthnCredentialsResult = await db.execute(`SELECT credentialId, publicKey, userId, signCount, transports, name, lastUsed, dateCreated FROM 'webauthnCredentials'`); + const webauthnCredentials = (webauthnCredentialsResult.rows as unknown) as { credentialId: string; publicKey: string; userId: string; @@ -302,7 +300,8 @@ export default async function migration() { ); // 2. Select all rows - const resources = await db.execute(`SELECT resourceId FROM resources`) as { + const resourcesResult = await db.execute(`SELECT resourceId FROM resources`); + const resources = (resourcesResult.rows as unknown) as { resourceId: number; }[]; @@ -312,20 +311,23 @@ export default async function migration() { ); for (const row of resources) { - updateStmt.run(randomUUID(), row.resourceId); + await db.execute({ + sql: `UPDATE resources SET resourceGuid = ? WHERE resourceId = ?`, + args: [randomUUID(), row.resourceId] + }); } // get all of the targets - const targets = await db.execute(`SELECT targetId FROM targets`).all() as { + const targetsResult = await db.execute(`SELECT targetId FROM targets`); + const targets = (targetsResult.rows as unknown) as { targetId: number; }[]; - const insertTargetHealthCheckStmt = await db.execute( - `INSERT INTO targetHealthCheck (targetId) VALUES (?)` - ); - for (const target of targets) { - insertTargetHealthCheckStmt.run(target.targetId); + await db.execute({ + sql: `INSERT INTO targetHealthCheck (targetId) VALUES (?)`, + args: [target.targetId] + }); } await db.execute( diff --git a/server/setup/scriptsSqlite/1.12.0.ts b/server/setup/scriptsSqlite/1.12.0.ts index 34d12b998..14ea028ad 100644 --- a/server/setup/scriptsSqlite/1.12.0.ts +++ b/server/setup/scriptsSqlite/1.12.0.ts @@ -16,24 +16,22 @@ export default async function migration() { ); await db.execute( - ` - CREATE TABLE 'accessAuditLog' ( - 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'timestamp' integer NOT NULL, - 'orgId' text NOT NULL, - 'actorType' text, - 'actor' text, - 'actorId' text, - 'resourceId' integer, - 'ip' text, - 'location' text, - 'type' text NOT NULL, - 'action' integer NOT NULL, - 'userAgent' text, - 'metadata' text, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - ` + `CREATE TABLE 'accessAuditLog' ( + 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'timestamp' integer NOT NULL, + 'orgId' text NOT NULL, + 'actorType' text, + 'actor' text, + 'actorId' text, + 'resourceId' integer, + 'ip' text, + 'location' text, + 'type' text NOT NULL, + 'action' integer NOT NULL, + 'userAgent' text, + 'metadata' text, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + );` ); await db.execute( @@ -44,19 +42,17 @@ export default async function migration() { ); await db.execute( - ` - CREATE TABLE 'actionAuditLog' ( - 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'timestamp' integer NOT NULL, - 'orgId' text NOT NULL, - 'actorType' text NOT NULL, - 'actor' text NOT NULL, - 'actorId' text NOT NULL, - 'action' text NOT NULL, - 'metadata' text, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - ` + `CREATE TABLE 'actionAuditLog' ( + 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'timestamp' integer NOT NULL, + 'orgId' text NOT NULL, + 'actorType' text NOT NULL, + 'actor' text NOT NULL, + 'actorId' text NOT NULL, + 'action' text NOT NULL, + 'metadata' text, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + );` ); await db.execute( @@ -67,63 +63,57 @@ export default async function migration() { ); await db.execute( - ` - CREATE TABLE 'dnsRecords' ( - 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'domainId' text NOT NULL, - 'recordType' text NOT NULL, - 'baseDomain' text, - 'value' text NOT NULL, - 'verified' integer DEFAULT false NOT NULL, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade - ); - ` - ); - - await db.execute( - ` - CREATE TABLE 'requestAuditLog' ( - 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'timestamp' integer NOT NULL, - 'orgId' text, - 'action' integer NOT NULL, - 'reason' integer NOT NULL, - 'actorType' text, - 'actor' text, - 'actorId' text, - 'resourceId' integer, - 'ip' text, - 'location' text, - 'userAgent' text, - 'metadata' text, - 'headers' text, - 'query' text, - 'originalRequestURL' text, - 'scheme' text, - 'host' text, - 'path' text, - 'method' text, - 'tls' integer, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - ` - ); - - - await db.execute( - ` - CREATE TABLE 'blueprints' ( - 'blueprintId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'orgId' text NOT NULL, - 'name' text NOT NULL, - 'source' text NOT NULL, - 'createdAt' integer NOT NULL, - 'succeeded' integer NOT NULL, - 'contents' text NOT NULL, - 'message' text, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade - ); - ` + `CREATE TABLE 'dnsRecords' ( + 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'domainId' text NOT NULL, + 'recordType' text NOT NULL, + 'baseDomain' text, + 'value' text NOT NULL, + 'verified' integer DEFAULT false NOT NULL, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE cascade + );` + ); + + await db.execute( + `CREATE TABLE 'requestAuditLog' ( + 'id' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'timestamp' integer NOT NULL, + 'orgId' text, + 'action' integer NOT NULL, + 'reason' integer NOT NULL, + 'actorType' text, + 'actor' text, + 'actorId' text, + 'resourceId' integer, + 'ip' text, + 'location' text, + 'userAgent' text, + 'metadata' text, + 'headers' text, + 'query' text, + 'originalRequestURL' text, + 'scheme' text, + 'host' text, + 'path' text, + 'method' text, + 'tls' integer, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + );` + ); + + + await db.execute( + `CREATE TABLE 'blueprints' ( + 'blueprintId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'orgId' text NOT NULL, + 'name' text NOT NULL, + 'source' text NOT NULL, + 'createdAt' integer NOT NULL, + 'succeeded' integer NOT NULL, + 'contents' text NOT NULL, + 'message' text, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade + );` ); await db.execute( @@ -134,38 +124,36 @@ export default async function migration() { ); await db.execute( - ` - CREATE TABLE '__new_resources' ( - 'resourceId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, - 'resourceGuid' text(36) NOT NULL, - 'orgId' text NOT NULL, - 'niceId' text NOT NULL, - 'name' text NOT NULL, - 'subdomain' text, - 'fullDomain' text, - 'domainId' text, - 'ssl' integer DEFAULT false NOT NULL, - 'blockAccess' integer DEFAULT false NOT NULL, - 'sso' integer DEFAULT true NOT NULL, - 'http' integer DEFAULT true NOT NULL, - 'protocol' text NOT NULL, - 'proxyPort' integer, - 'emailWhitelistEnabled' integer DEFAULT false NOT NULL, - 'applyRules' integer DEFAULT false NOT NULL, - 'enabled' integer DEFAULT true NOT NULL, - 'stickySession' integer DEFAULT false NOT NULL, - 'tlsServerName' text, - 'setHostHeader' text, - 'enableProxy' integer DEFAULT true, - 'skipToIdpId' integer, - 'headers' text, - 'proxyProtocol' integer DEFAULT false NOT NULL, - 'proxyProtocolVersion' integer DEFAULT 1, - FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, - FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null, - FOREIGN KEY ('skipToIdpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE set null - ); - ` + `CREATE TABLE '__new_resources' ( + 'resourceId' integer PRIMARY KEY AUTOINCREMENT NOT NULL, + 'resourceGuid' text(36) NOT NULL, + 'orgId' text NOT NULL, + 'niceId' text NOT NULL, + 'name' text NOT NULL, + 'subdomain' text, + 'fullDomain' text, + 'domainId' text, + 'ssl' integer DEFAULT false NOT NULL, + 'blockAccess' integer DEFAULT false NOT NULL, + 'sso' integer DEFAULT true NOT NULL, + 'http' integer DEFAULT true NOT NULL, + 'protocol' text NOT NULL, + 'proxyPort' integer, + 'emailWhitelistEnabled' integer DEFAULT false NOT NULL, + 'applyRules' integer DEFAULT false NOT NULL, + 'enabled' integer DEFAULT true NOT NULL, + 'stickySession' integer DEFAULT false NOT NULL, + 'tlsServerName' text, + 'setHostHeader' text, + 'enableProxy' integer DEFAULT true, + 'skipToIdpId' integer, + 'headers' text, + 'proxyProtocol' integer DEFAULT false NOT NULL, + 'proxyProtocolVersion' integer DEFAULT 1, + FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade, + FOREIGN KEY ('domainId') REFERENCES 'domains'('domainId') ON UPDATE no action ON DELETE set null, + FOREIGN KEY ('skipToIdpId') REFERENCES 'idp'('idpId') ON UPDATE no action ON DELETE set null + );` ); await db.execute( @@ -212,27 +200,39 @@ export default async function migration() { await db.execute(`ALTER TABLE 'remoteExitNode' ADD 'secondaryVersion' text;`); // get all of the domains - const domains = await db.execute(`SELECT domainId, baseDomain from domains`) as { - domainId: number; + const result = await db.execute("SELECT domainId, baseDomain FROM domains"); + const domains = (result.rows as unknown) as { + domainId: string; baseDomain: string; }[]; for (const domain of domains) { - // insert two records into the dnsRecords table for each domain - const insert = await db.execute( - `INSERT INTO 'dnsRecords' (domainId, recordType, baseDomain, value, verified) VALUES (?, 'A', ?, ?, 1)` - ); - insert.run( - domain.domainId, - `*.${domain.baseDomain}`, - `Server IP Address` - ); - insert.run( - domain.domainId, - `${domain.baseDomain}`, - `Server IP Address` - ); - }; + + // erster Record: *.domain.tld + await db.execute({ + sql: `INSERT INTO dnsRecords + (domainId, recordType, baseDomain, value, verified) + VALUES (?, 'A', ?, ?, 1)`, + args: [ + domain.domainId, + `*.${domain.baseDomain}`, + "Server IP Address" + ], + }); + + // zweiter Record: domain.tld + await db.execute({ + sql: `INSERT INTO dnsRecords + (domainId, recordType, baseDomain, value, verified) + VALUES (?, 'A', ?, ?, 1)`, + args: [ + domain.domainId, + `${domain.baseDomain}`, + "Server IP Address" + ], + }); + } + console.log(`Migrated database`); } catch (e) { diff --git a/server/setup/scriptsSqlite/1.7.0.ts b/server/setup/scriptsSqlite/1.7.0.ts index 857abb397..dc3cf665c 100644 --- a/server/setup/scriptsSqlite/1.7.0.ts +++ b/server/setup/scriptsSqlite/1.7.0.ts @@ -154,16 +154,20 @@ export default async function migration() { await db.execute(`UPDATE 'orgs' SET 'subnet' = '100.90.128.0/24'`); // Get all orgs and their sites to assign sequential IP addresses - const orgs = await db.execute(`SELECT orgId FROM 'orgs'`).all() as { + const orgsResult = await db.execute(`SELECT orgId FROM 'orgs'`); + const orgs = (orgsResult.rows as unknown) as { orgId: string; }[]; for (const org of orgs) { - const sites = db - .execute( - `SELECT siteId FROM 'sites' WHERE orgId = ? ORDER BY siteId` - ) - .all(org.orgId) as { siteId: number }[]; + const sitesResult = await db.execute({ + sql: `SELECT siteId FROM 'sites' WHERE orgId = ? ORDER BY siteId`, + args: [org.orgId] + }); + + const sites = (sitesResult.rows as unknown) as { + siteId: number + }[]; let ipIndex = 1; for (const site of sites) { diff --git a/server/setup/scriptsSqlite/1.9.0.ts b/server/setup/scriptsSqlite/1.9.0.ts index 9790c075c..e63ddb60f 100644 --- a/server/setup/scriptsSqlite/1.9.0.ts +++ b/server/setup/scriptsSqlite/1.9.0.ts @@ -15,19 +15,20 @@ export default async function migration() { try { // Get the first siteId to use as default - const firstSite = await db.execute("SELECT siteId FROM sites LIMIT 1").get() as { siteId: number } | undefined; + const firstSiteResult = await db.execute("SELECT siteId FROM sites LIMIT 1"); + const firstSite = (firstSiteResult.rows?.[0] as unknown) as { siteId: number } | undefined; + if (firstSite) { firstSiteId = firstSite.siteId; } - const resources = await db - .execute( - "SELECT resourceId, siteId FROM resources WHERE siteId IS NOT NULL" - ) - .all() as Array<{ resourceId: number; siteId: number }>; + const resourcesResult = await db.execute("SELECT resourceId, siteId FROM resources WHERE siteId IS NOT NULL"); + const resources = (resourcesResult.rows as unknown) as Array<{ resourceId: number; siteId: number }>; + for (const resource of resources) { resourceSiteMap.set(resource.resourceId, resource.siteId); } + } catch (e) { console.log("Error getting resources:", e); } @@ -117,11 +118,12 @@ ALTER TABLE 'targets' ADD 'siteId' integer NOT NULL DEFAULT ${firstSiteId || 1} // for each resource, get all of its targets, and update the siteId to be the previously stored siteId for (const [resourceId, siteId] of resourceSiteMap) { - const targets = await db - .execute( - "SELECT targetId FROM targets WHERE resourceId = ?" - ) - .all(resourceId) as Array<{ targetId: number }>; + const targetsResult = await db.execute({ + sql: "SELECT targetId FROM targets WHERE resourceId = ?", + args: [resourceId] + }); + const targets = (targetsResult.rows as unknown) as Array<{ targetId: number }>; + for (const target of targets) { await db.execute({ sql: "UPDATE targets SET siteId = ? WHERE targetId = ?", @@ -133,17 +135,16 @@ ALTER TABLE 'targets' ADD 'siteId' integer NOT NULL DEFAULT ${firstSiteId || 1} // list resources that have enableProxy false // move them to the siteResources table // remove them from the resources table - const proxyFalseResources = await db - .execute("SELECT * FROM resources WHERE enableProxy = 0") - .all() as Array; + const proxyFalseResourcesResult = await db.execute("SELECT * FROM resources WHERE enableProxy = 0"); + const proxyFalseResources = (proxyFalseResourcesResult.rows as unknown) as Array; for (const resource of proxyFalseResources) { // Get the first target to derive destination IP and port - const firstTarget = db - .execute( - "SELECT ip, port FROM targets WHERE resourceId = ? LIMIT 1" - ) - .get(resource.resourceId) as + const targetResult = await db.execute({ + sql: "SELECT ip, port FROM targets WHERE resourceId = ? LIMIT 1", + args: [resource.resourceId] + }); + const firstTarget = (targetResult.rows?.[0] as unknown) as | { ip: string; port: number } | undefined; @@ -153,8 +154,7 @@ ALTER TABLE 'targets' ADD 'siteId' integer NOT NULL DEFAULT ${firstSiteId || 1} // Insert into siteResources table const stmt = await db.execute({ - sql: `INSERT INTO siteResources (siteId, orgId, name, protocol, proxyPort, destinationPort, destinationIp, enabled) - VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, + sql: `INSERT INTO siteResources (siteId, orgId, name, protocol, proxyPort, destinationPort, destinationIp, enabled) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, args: [ resourceSiteMap.get(resource.resourceId), resource.orgId, From 88ea9745f2bf868c0db5b497cfb256fc09ee4520 Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Mon, 1 Dec 2025 21:28:36 +0000 Subject: [PATCH 23/27] update to libsql --- server/setup/scriptsSqlite/1.10.0.ts | 33 ++++++++++------------------ server/setup/scriptsSqlite/1.10.2.ts | 3 ++- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/server/setup/scriptsSqlite/1.10.0.ts b/server/setup/scriptsSqlite/1.10.0.ts index d39b5afa1..39ab1bb41 100644 --- a/server/setup/scriptsSqlite/1.10.0.ts +++ b/server/setup/scriptsSqlite/1.10.0.ts @@ -12,17 +12,11 @@ export default async function migration() { const db = createClient({ url: "file:" + location }); try { - const resources = await db - .execute( - "SELECT resourceId FROM resources" - ) - .all() as Array<{ resourceId: number }>; - - const siteResources = await db - .execute( - "SELECT siteResourceId FROM siteResources" - ) - .all() as Array<{ siteResourceId: number }>; + const resourcesResult = await db.execute("SELECT resourceId FROM resources"); + const resources = (resourcesResult.rows as unknown) as Array<{ resourceId: number }>; + + const siteResourcesResult = await db.execute("SELECT siteResourceId FROM siteResources"); + const siteResources = (siteResourcesResult.rows as unknown) as Array<{ siteResourceId: number }>; await db.execute(` ALTER TABLE 'exitNodes' ADD 'region' text; @@ -82,19 +76,16 @@ export default async function migration() { } // Handle auto-provisioned users for identity providers - const autoProvisionIdps = await db - .execute( - "SELECT idpId FROM idp WHERE autoProvision = 1" - ) - .all() as Array<{ idpId: number }>; + const autoProvisionIdpsResult = await db.execute("SELECT idpId FROM idp WHERE autoProvision = 1"); + const autoProvisionIdps = (autoProvisionIdpsResult.rows as unknown) as Array<{ idpId: number }>; for (const idp of autoProvisionIdps) { // Get all users with this identity provider - const usersWithIdp = await db - .execute( - "SELECT id FROM user WHERE idpId = ?" - ) - .all(idp.idpId) as Array<{ id: string }>; + const usersWithIdpResult = await db.execute({ + sql: "SELECT id FROM user WHERE idpId = ?", + args: [idp.idpId] + }); + const usersWithIdp = (usersWithIdpResult.rows as unknown) as Array<{ id: string }>; // Update userOrgs to set autoProvisioned to true for these users for (const user of usersWithIdp) { diff --git a/server/setup/scriptsSqlite/1.10.2.ts b/server/setup/scriptsSqlite/1.10.2.ts index c40c5b351..52a2cfe7d 100644 --- a/server/setup/scriptsSqlite/1.10.2.ts +++ b/server/setup/scriptsSqlite/1.10.2.ts @@ -10,7 +10,8 @@ export default async function migration() { const location = path.join(APP_PATH, "db", "db.sqlite"); const db = createClient({ url: "file:" + location }); - const resources = await db.execute("SELECT * FROM resources").all() as Array<{ + const resourcesResult = await db.execute("SELECT * FROM resources"); + const resources = (resourcesResult.rows as unknown) as Array<{ resourceId: number; headers: string | null; }>; From 17cfb212348565f8e01b4a77c72d8fb0b0945d19 Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Mon, 1 Dec 2025 21:42:57 +0000 Subject: [PATCH 24/27] no errors in build, ready for tests --- server/setup/migrationsSqlite.ts | 6 ++-- server/setup/scriptsSqlite/1.0.0-beta15.ts | 38 ++++++++++++---------- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/server/setup/migrationsSqlite.ts b/server/setup/migrationsSqlite.ts index dd546db29..475c4b6b1 100644 --- a/server/setup/migrationsSqlite.ts +++ b/server/setup/migrationsSqlite.ts @@ -1,11 +1,11 @@ #! /usr/bin/env node -import { migrate } from "drizzle-orm/better-sqlite3/migrator"; +import { migrate } from "drizzle-orm/libsql/migrator"; import { db, exists } from "../db/sqlite"; import path from "path"; import semver from "semver"; import { versionMigrations } from "../db/sqlite"; import { __DIRNAME, APP_PATH, APP_VERSION } from "@server/lib/consts"; -import { SqliteError } from "better-sqlite3"; +import { LibsqlError } from "@libsql/client"; import fs from "fs"; import m1 from "./scriptsSqlite/1.0.0-beta1"; import m2 from "./scriptsSqlite/1.0.0-beta2"; @@ -178,7 +178,7 @@ async function executeScripts() { ); } catch (e) { if ( - e instanceof SqliteError && + e instanceof LibsqlError && e.code === "SQLITE_CONSTRAINT_UNIQUE" ) { console.error("Migration has already run! Skipping..."); diff --git a/server/setup/scriptsSqlite/1.0.0-beta15.ts b/server/setup/scriptsSqlite/1.0.0-beta15.ts index 679b2af1b..0b53ad509 100644 --- a/server/setup/scriptsSqlite/1.0.0-beta15.ts +++ b/server/setup/scriptsSqlite/1.0.0-beta15.ts @@ -105,26 +105,30 @@ export default async function migration() { } try { - await db.transaction(async (trx) => { - await trx - .insert(domains) - .values({ - domainId: "domain1", - baseDomain: domain, - configManaged: true - }) - .execute(); - await trx.update(resources).set({ domainId: "domain1" }); - const existingOrgDomains = await trx.select().from(orgDomains); - for (const orgDomain of existingOrgDomains) { - await trx - .insert(orgDomains) - .values({ orgId: orgDomain.orgId, domainId: "domain1" }) - .execute(); - } + await db.execute({ + sql: `INSERT INTO domains (domainId, baseDomain, configManaged) VALUES (?, ?, ?)`, + args: ["domain1", domain, 1] + }); + + await db.execute({ + sql: `UPDATE resources SET domainId = ?`, + args: ["domain1"] }); + const existingOrgDomainsResult = await db.execute(`SELECT orgId FROM orgDomains`); + const existingOrgDomains = (existingOrgDomainsResult.rows as unknown) as Array<{ + orgId: string; + }>; + + for (const orgDomain of existingOrgDomains) { + await db.execute({ + sql: `INSERT INTO orgDomains (orgId, domainId) VALUES (?, ?)`, + args: [orgDomain.orgId, "domain1"] + }); + } + console.log(`Updated resources table with new domainId`); + } catch (e) { console.log( `Unable to update resources table with new domainId. Error: ${e}` From 9302a65e28ebbc42d8de3ba32d18c17ff38ee964 Mon Sep 17 00:00:00 2001 From: Lokowitz Date: Mon, 15 Dec 2025 11:12:21 +0000 Subject: [PATCH 25/27] merge upstream --- .github/workflows/cicd.yml | 13 +- .github/workflows/linting.yml | 4 +- .github/workflows/restart-runners.yml | 39 + .github/workflows/stale-bot.yml | 2 +- .github/workflows/test.yml | 4 +- .gitignore | 3 +- .nvmrc | 2 +- .prettierignore | 12 + .vscode/extensions.json | 3 + .vscode/settings.json | 22 + Dockerfile | 16 +- Makefile | 31 +- README.md | 20 +- blueprint.yaml | 1 + bruno/Auth/login.bru | 4 +- bruno/Olm/createOlm.bru | 15 + bruno/Olm/folder.bru | 8 + bruno/bruno.json | 2 +- components.json | 2 +- config/config.example.yml | 1 - docker-compose.example.yml | 4 +- drizzle.pg.config.ts | 4 +- drizzle.sqlite.config.ts | 4 +- esbuild.mjs | 95 +- eslint.config.js | 32 +- install/config/docker-compose.yml | 4 +- install/containers.go | 4 +- install/go.mod | 4 +- install/go.sum | 8 +- install/main.go | 30 +- messages/bg-BG.json | 392 +- messages/cs-CZ.json | 378 +- messages/de-DE.json | 428 +- messages/en-US.json | 398 +- messages/es-ES.json | 386 +- messages/fr-FR.json | 392 +- messages/it-IT.json | 380 +- messages/ko-KR.json | 288 +- messages/nb-NO.json | 390 +- messages/nl-NL.json | 392 +- messages/pl-PL.json | 378 +- messages/pt-PT.json | 394 +- messages/ru-RU.json | 388 +- messages/tr-TR.json | 296 +- messages/zh-CN.json | 386 +- messages/zh-TW.json | 2099 ++ next.config.ts | 3 + package-lock.json | 18943 +++++++--------- package.json | 188 +- postcss.config.mjs | 4 +- {src/app => public}/favicon.ico | Bin public/screenshots/create-resource.png | Bin 703526 -> 0 bytes public/screenshots/create-site.png | Bin 730130 -> 504790 bytes public/screenshots/edit-resource.png | Bin 651484 -> 0 bytes public/screenshots/hero.png | Bin 729706 -> 495179 bytes public/screenshots/private-resources.png | Bin 0 -> 430701 bytes public/screenshots/public-resources.png | Bin 0 -> 495179 bytes public/screenshots/resources.png | Bin 729706 -> 0 bytes public/screenshots/sites-fade.png | Bin 466767 -> 0 bytes public/screenshots/sites.png | Bin 690253 -> 405219 bytes public/screenshots/user-devices.png | Bin 0 -> 444519 bytes server/auth/actions.ts | 1 + server/auth/password.ts | 6 +- server/auth/passwordSchema.ts | 9 +- server/auth/sessions/app.ts | 16 +- server/auth/sessions/newt.ts | 22 +- server/auth/sessions/olm.ts | 22 +- server/auth/sessions/verifySession.ts | 40 +- server/cleanup.ts | 4 +- server/db/countries.ts | 1014 +- server/db/names.json | 2 +- server/db/names.ts | 89 +- server/db/pg/driver.ts | 37 +- server/db/pg/migrate.ts | 1 + server/db/pg/schema/privateSchema.ts | 86 +- server/db/pg/schema/schema.ts | 120 +- server/db/queries/verifySessionQueries.ts | 5 +- server/db/sqlite/migrate.ts | 2 +- server/db/sqlite/schema/privateSchema.ts | 102 +- server/db/sqlite/schema/schema.ts | 137 +- server/emails/index.ts | 11 +- .../templates/NotifyUsageLimitApproaching.tsx | 27 +- .../templates/NotifyUsageLimitReached.tsx | 40 +- server/index.ts | 3 + server/integrationApiServer.ts | 2 +- server/lib/billing/features.ts | 33 +- server/lib/billing/index.ts | 2 +- server/lib/billing/limitSet.ts | 6 +- server/lib/billing/tiers.ts | 24 +- server/lib/billing/usageService.ts | 2 +- server/lib/blueprints/applyBlueprint.ts | 175 +- .../blueprints/applyNewtDockerBlueprint.ts | 5 +- server/lib/blueprints/clientResources.ts | 232 +- .../lib/blueprints/parseDockerContainers.ts | 15 +- server/lib/blueprints/proxyResources.ts | 42 +- server/lib/blueprints/types.ts | 325 +- server/lib/cache.ts | 2 +- server/lib/calculateUserClientsForOrgs.ts | 293 + server/lib/certificates.ts | 6 +- server/lib/cleanupLogs.test.ts | 270 + server/lib/cleanupLogs.ts | 22 +- server/lib/config.ts | 4 - server/lib/consts.ts | 2 +- server/lib/createUserAccountOrg.ts | 4 + server/lib/domainUtils.ts | 27 +- server/lib/encryption.ts | 62 +- server/lib/exitNodes/getCurrentExitNodeId.ts | 2 +- server/lib/exitNodes/index.ts | 2 +- server/lib/exitNodes/subnet.ts | 2 +- server/lib/geoip.ts | 2 +- server/lib/idp/generateRedirectUrl.ts | 6 +- server/lib/ip.test.ts | 12 +- server/lib/ip.ts | 252 +- server/lib/lock.ts | 111 + server/lib/logAccessAudit.ts | 2 +- server/lib/readConfigFile.ts | 20 +- server/lib/rebuildClientAssociations.ts | 1310 ++ server/lib/resend.ts | 8 +- server/lib/response.ts | 4 +- server/lib/s3.ts | 2 +- server/lib/serverIpService.ts | 6 +- server/lib/stoi.ts | 9 +- server/lib/telemetry.ts | 77 +- server/lib/traefik/TraefikConfigManager.ts | 57 +- server/lib/traefik/getTraefikConfig.ts | 6 +- server/lib/traefik/index.ts | 2 +- server/lib/traefik/traefikConfig.test.ts | 237 +- server/lib/traefik/utils.ts | 17 +- server/lib/validators.test.ts | 288 +- server/lib/validators.ts | 18 +- server/middlewares/formatError.ts | 2 +- server/middlewares/getUserOrgs.ts | 10 +- server/middlewares/index.ts | 5 +- server/middlewares/integration/index.ts | 3 +- .../integration/verifyAccessTokenAccess.ts | 1 - .../integration/verifyApiKeyApiKeyAccess.ts | 7 +- .../verifyApiKeySetResourceClients.ts | 75 + .../verifyApiKeySetResourceUsers.ts | 15 +- .../verifyApiKeySiteResourceAccess.ts | 24 +- server/middlewares/notFound.ts | 2 +- server/middlewares/requestTimeout.ts | 18 +- server/middlewares/verifyAccessTokenAccess.ts | 19 + server/middlewares/verifyAdmin.ts | 19 + server/middlewares/verifyApiKeyAccess.ts | 19 + server/middlewares/verifyClientAccess.ts | 87 +- server/middlewares/verifyClientsEnabled.ts | 29 - server/middlewares/verifyDomainAccess.ts | 19 + server/middlewares/verifyOlmAccess.ts | 45 + server/middlewares/verifyOrgAccess.ts | 34 +- server/middlewares/verifyResourceAccess.ts | 92 +- server/middlewares/verifyRoleAccess.ts | 29 +- server/middlewares/verifySession.ts | 24 +- .../middlewares/verifySetResourceClients.ts | 90 + server/middlewares/verifySetResourceUsers.ts | 19 + server/middlewares/verifySiteAccess.ts | 93 +- .../middlewares/verifySiteResourceAccess.ts | 132 +- server/middlewares/verifyTargetAccess.ts | 21 + server/middlewares/verifyUser.ts | 4 +- server/middlewares/verifyUserAccess.ts | 19 + server/nextServer.ts | 5 +- .../private/auth/sessions/remoteExitNode.ts | 58 +- server/private/cleanup.ts | 2 +- server/private/lib/billing/index.ts | 2 +- server/private/lib/certificates.ts | 1 - server/private/lib/checkOrgAccessPolicy.ts | 9 +- server/private/lib/config.ts | 12 +- server/private/lib/exitNodes/exitNodeComms.ts | 4 +- server/private/lib/exitNodes/exitNodes.ts | 86 +- server/private/lib/exitNodes/index.ts | 2 +- server/private/lib/lock.ts | 365 + server/private/lib/logAccessAudit.ts | 5 +- server/private/lib/rateLimit.test.ts | 151 +- server/private/lib/rateLimit.ts | 182 +- server/private/lib/rateLimitStore.ts | 5 +- server/private/lib/readConfigFile.ts | 8 +- server/private/lib/redis.ts | 241 +- server/private/lib/redisStore.ts | 42 +- server/private/lib/resend.ts | 12 +- .../private/lib/traefik/getTraefikConfig.ts | 10 +- server/private/lib/traefik/index.ts | 2 +- server/private/license/license.ts | 171 +- server/private/license/licenseJwt.ts | 5 +- server/private/middlewares/index.ts | 3 +- server/private/middlewares/logActionAudit.ts | 12 +- .../middlewares/verifyCertificateAccess.ts | 14 +- server/private/middlewares/verifyIdpAccess.ts | 7 +- .../middlewares/verifyRemoteExitNode.ts | 3 +- .../routers/auditLogs/exportAccessAuditLog.ts | 30 +- .../routers/auditLogs/exportActionAuditLog.ts | 32 +- server/private/routers/auditLogs/index.ts | 2 +- .../routers/auditLogs/queryAccessAuditLog.ts | 25 +- .../routers/auditLogs/queryActionAuditLog.ts | 30 +- server/private/routers/auth/index.ts | 2 +- server/private/routers/auth/quickStart.ts | 10 +- .../routers/billing/createCheckoutSession.ts | 6 +- .../routers/billing/createPortalSession.ts | 4 +- .../routers/billing/getOrgSubscription.ts | 4 +- server/private/routers/billing/getOrgUsage.ts | 27 +- .../billing/hooks/handleCustomerDeleted.ts | 4 +- .../hooks/handleSubscriptionDeleted.ts | 15 +- server/private/routers/billing/index.ts | 2 +- .../routers/billing/internalGetOrgTier.ts | 4 +- .../routers/billing/subscriptionLifecycle.ts | 13 +- server/private/routers/billing/webhooks.ts | 19 +- .../routers/certificates/getCertificate.ts | 21 +- server/private/routers/certificates/index.ts | 2 +- .../certificates/restartCertificate.ts | 13 +- .../checkDomainNamespaceAvailability.ts | 4 +- server/private/routers/domain/index.ts | 2 +- .../routers/domain/listDomainNamespaces.ts | 26 +- server/private/routers/external.ts | 13 +- .../routers/gerbil/receiveBandwidth.ts | 13 - server/private/routers/hybrid.ts | 136 +- server/private/routers/integration.ts | 57 +- .../routers/license/activateLicense.ts | 4 +- .../routers/license/deleteLicenseKey.ts | 4 +- .../routers/loginPage/createLoginPage.ts | 33 +- .../routers/loginPage/deleteLoginPage.ts | 8 +- .../private/routers/loginPage/getLoginPage.ts | 4 +- .../routers/loginPage/updateLoginPage.ts | 10 +- .../private/routers/misc/sendSupportEmail.ts | 6 +- server/private/routers/org/index.ts | 2 +- .../routers/org/sendUsageNotifications.ts | 50 +- .../routers/orgIdp/createOrgOidcIdp.ts | 31 +- server/private/routers/orgIdp/deleteOrgIdp.ts | 15 +- server/private/routers/orgIdp/getOrgIdp.ts | 5 +- server/private/routers/orgIdp/index.ts | 2 +- server/private/routers/orgIdp/listOrgIdps.ts | 30 +- .../routers/orgIdp/updateOrgOidcIdp.ts | 24 +- server/private/routers/re-key/index.ts | 2 +- .../routers/re-key/reGenerateClientSecret.ts | 101 +- .../re-key/reGenerateExitNodeSecret.ts | 84 +- .../routers/re-key/reGenerateSiteSecret.ts | 192 +- .../remoteExitNode/createRemoteExitNode.ts | 6 +- .../remoteExitNode/deleteRemoteExitNode.ts | 6 +- .../remoteExitNode/getRemoteExitNode.ts | 6 +- .../remoteExitNode/getRemoteExitNodeToken.ts | 8 +- .../handleRemoteExitNodePingMessage.ts | 29 +- .../handleRemoteExitNodeRegisterMessage.ts | 8 +- .../remoteExitNode/listRemoteExitNodes.ts | 4 +- .../pickRemoteExitNodeDefaults.ts | 4 +- .../quickStartRemoteExitNode.ts | 4 +- server/private/routers/ws/index.ts | 2 +- server/private/routers/ws/messageHandlers.ts | 2 +- server/private/routers/ws/ws.ts | 212 +- .../routers/accessToken/deleteAccessToken.ts | 4 +- .../accessToken/generateAccessToken.ts | 15 +- .../routers/accessToken/listAccessTokens.ts | 3 +- server/routers/apiKeys/createRootApiKey.ts | 4 +- server/routers/apiKeys/listApiKeyActions.ts | 3 +- server/routers/apiKeys/setApiKeyActions.ts | 7 +- server/routers/apiKeys/setApiKeyOrgs.ts | 7 +- ...stAuditLog.ts => exportRequestAuditLog.ts} | 37 +- server/routers/auditLogs/generateCSV.ts | 20 +- server/routers/auditLogs/index.ts | 5 +- .../auditLogs/queryRequestAnalytics.ts | 195 + ...ustAuditLog.ts => queryRequestAuditLog.ts} | 42 +- server/routers/auditLogs/types.ts | 2 +- server/routers/auth/changePassword.ts | 32 +- server/routers/auth/checkResourceSession.ts | 16 +- server/routers/auth/disable2fa.ts | 11 +- server/routers/auth/index.ts | 5 +- server/routers/auth/login.ts | 46 +- server/routers/auth/pollDeviceWebAuth.ts | 164 + server/routers/auth/requestPasswordReset.ts | 4 +- server/routers/auth/requestTotpSecret.ts | 15 +- server/routers/auth/resetPassword.ts | 10 +- server/routers/auth/securityKey.ts | 163 +- server/routers/auth/signup.ts | 14 +- server/routers/auth/startDeviceWebAuth.ts | 156 + server/routers/auth/types.ts | 2 +- server/routers/auth/validateSetupToken.ts | 11 +- server/routers/auth/verifyDeviceWebAuth.ts | 180 + server/routers/auth/verifyEmail.ts | 4 +- server/routers/auth/verifyTotp.ts | 8 +- server/routers/badger/exchangeSession.ts | 13 +- server/routers/badger/logRequestAudit.ts | 111 +- server/routers/badger/verifySession.test.ts | 227 +- server/routers/billing/types.ts | 1 - server/routers/billing/webhooks.ts | 2 +- .../routers/blueprints/applyJSONBlueprint.ts | 8 +- server/routers/blueprints/getBlueprint.ts | 9 +- server/routers/blueprints/listBlueprints.ts | 30 +- .../routers/certificates/createCertificate.ts | 8 +- server/routers/certificates/types.ts | 2 +- server/routers/client/createClient.ts | 98 +- server/routers/client/createUserClient.ts | 257 + server/routers/client/deleteClient.ts | 46 +- server/routers/client/getClient.ts | 90 +- server/routers/client/index.ts | 3 +- server/routers/client/listClients.ts | 163 +- server/routers/client/pickClientDefaults.ts | 4 +- server/routers/client/targets.ts | 141 +- server/routers/client/terminate.ts | 25 + server/routers/client/updateClient.ts | 306 +- server/routers/domain/createOrgDomain.ts | 33 +- server/routers/domain/deleteOrgDomain.ts | 11 +- server/routers/domain/getDNSRecords.ts | 17 +- server/routers/domain/getDomain.ts | 12 +- server/routers/domain/index.ts | 2 +- server/routers/domain/listDomains.ts | 30 +- server/routers/domain/restartOrgDomain.ts | 6 +- server/routers/domain/types.ts | 2 +- server/routers/domain/updateDomain.ts | 16 +- server/routers/external.ts | 271 +- server/routers/generatedLicense/types.ts | 2 +- server/routers/gerbil/createExitNode.ts | 5 +- server/routers/gerbil/getAllRelays.ts | 6 +- server/routers/gerbil/getConfig.ts | 7 +- server/routers/gerbil/index.ts | 2 +- server/routers/gerbil/receiveBandwidth.ts | 379 +- server/routers/gerbil/updateHolePunch.ts | 276 +- server/routers/hybrid.ts | 2 +- server/routers/idp/createIdpOrgPolicy.ts | 12 +- server/routers/idp/createOidcIdp.ts | 22 +- server/routers/idp/deleteIdp.ts | 15 +- server/routers/idp/deleteIdpOrgPolicy.ts | 6 +- server/routers/idp/generateOidcUrl.ts | 4 +- server/routers/idp/getIdp.ts | 10 +- server/routers/idp/index.ts | 2 +- server/routers/idp/listIdpOrgPolicies.ts | 26 +- server/routers/idp/listIdps.ts | 26 +- server/routers/idp/updateIdpOrgPolicy.ts | 12 +- server/routers/idp/updateOidcIdp.ts | 26 +- server/routers/idp/validateOidcCallback.ts | 37 +- server/routers/integration.ts | 188 +- server/routers/license/types.ts | 2 +- server/routers/loginPage/types.ts | 2 +- server/routers/newt/createNewt.ts | 13 +- server/routers/newt/getNewtToken.ts | 6 +- server/routers/newt/handleGetConfigMessage.ts | 233 +- .../newt/handleNewtPingRequestMessage.ts | 6 +- .../routers/newt/handleNewtRegisterMessage.ts | 71 +- .../newt/handleReceiveBandwidthMessage.ts | 6 +- server/routers/newt/handleSocketMessages.ts | 6 +- server/routers/newt/index.ts | 2 +- server/routers/newt/peers.ts | 140 +- server/routers/newt/targets.ts | 45 +- server/routers/olm/createOlm.ts | 13 +- server/routers/olm/createUserOlm.ts | 116 + server/routers/olm/deleteUserOlm.ts | 101 + server/routers/olm/getOlmToken.ts | 131 +- server/routers/olm/getUserOlm.ts | 70 + server/routers/olm/handleOlmPingMessage.ts | 99 +- .../routers/olm/handleOlmRegisterMessage.ts | 213 +- server/routers/olm/handleOlmRelayMessage.ts | 35 +- .../olm/handleOlmServerPeerAddMessage.ts | 188 + server/routers/olm/handleOlmUnRelayMessage.ts | 96 + server/routers/olm/index.ts | 10 +- server/routers/olm/listUserOlms.ts | 139 + server/routers/olm/peers.ts | 151 +- server/routers/org/checkId.ts | 4 +- server/routers/org/createOrg.ts | 32 +- server/routers/org/deleteOrg.ts | 119 +- server/routers/org/getOrg.ts | 4 +- server/routers/org/getOrgOverview.ts | 6 +- server/routers/org/listUserOrgs.ts | 8 +- server/routers/org/updateOrg.ts | 7 +- server/routers/orgIdp/types.ts | 10 +- server/routers/remoteExitNode/types.ts | 17 +- .../resource/addEmailToResourceWhitelist.ts | 24 +- server/routers/resource/addRoleToResource.ts | 157 + server/routers/resource/addUserToResource.ts | 129 + .../routers/resource/authWithAccessToken.ts | 18 +- server/routers/resource/authWithPassword.ts | 11 +- server/routers/resource/authWithPincode.ts | 11 +- server/routers/resource/authWithWhitelist.ts | 13 +- server/routers/resource/createResource.ts | 14 +- server/routers/resource/createResourceRule.ts | 19 +- server/routers/resource/deleteResource.ts | 7 +- server/routers/resource/deleteResourceRule.ts | 9 +- server/routers/resource/getExchangeToken.ts | 7 +- server/routers/resource/getResource.ts | 31 +- .../routers/resource/getResourceAuthInfo.ts | 4 +- .../routers/resource/getResourceWhitelist.ts | 7 +- server/routers/resource/index.ts | 5 + .../routers/resource/listAllResourceNames.ts | 78 + server/routers/resource/listResourceRoles.ts | 7 +- server/routers/resource/listResourceRules.ts | 7 +- server/routers/resource/listResourceUsers.ts | 7 +- server/routers/resource/listResources.ts | 33 +- .../removeEmailFromResourceWhitelist.ts | 24 +- .../resource/removeRoleFromResource.ts | 160 + .../resource/removeUserFromResource.ts | 133 + .../routers/resource/setResourceHeaderAuth.ts | 10 +- .../routers/resource/setResourcePassword.ts | 4 +- server/routers/resource/setResourcePincode.ts | 10 +- server/routers/resource/setResourceRoles.ts | 61 +- server/routers/resource/setResourceUsers.ts | 11 +- .../routers/resource/setResourceWhitelist.ts | 28 +- server/routers/resource/updateResource.ts | 37 +- server/routers/resource/updateResourceRule.ts | 12 +- server/routers/role/addRoleAction.ts | 8 +- server/routers/role/addRoleSite.ts | 8 +- server/routers/role/createRole.ts | 10 +- server/routers/role/deleteRole.ts | 8 +- server/routers/role/getRole.ts | 4 +- server/routers/role/listRoleActions.ts | 4 +- server/routers/role/listRoleResources.ts | 4 +- server/routers/role/listRoleSites.ts | 4 +- server/routers/role/listRoles.ts | 4 +- server/routers/role/removeRoleAction.ts | 8 +- server/routers/role/removeRoleResource.ts | 11 +- server/routers/role/removeRoleSite.ts | 8 +- server/routers/role/updateRole.ts | 7 +- server/routers/site/createSite.ts | 90 +- server/routers/site/deleteSite.ts | 11 +- server/routers/site/getSite.ts | 33 +- server/routers/site/index.ts | 2 +- server/routers/site/listSiteRoles.ts | 4 +- server/routers/site/listSites.ts | 4 +- server/routers/site/pickSiteDefaults.ts | 14 +- server/routers/site/socketIntegration.ts | 19 +- server/routers/site/updateSite.ts | 18 +- .../siteResource/addClientToSiteResource.ts | 158 + .../siteResource/addRoleToSiteResource.ts | 165 + .../siteResource/addUserToSiteResource.ts | 134 + .../siteResource/createSiteResource.ts | 304 +- .../siteResource/deleteSiteResource.ts | 92 +- .../routers/siteResource/getSiteResource.ts | 67 +- server/routers/siteResource/index.ts | 12 + .../siteResource/listAllSiteResourcesByOrg.ts | 33 +- .../siteResource/listSiteResourceClients.ts | 86 + .../siteResource/listSiteResourceRoles.ts | 85 + .../siteResource/listSiteResourceUsers.ts | 88 + .../routers/siteResource/listSiteResources.ts | 34 +- .../removeClientFromSiteResource.ts | 162 + .../removeRoleFromSiteResource.ts | 170 + .../removeUserFromSiteResource.ts | 140 + .../siteResource/setSiteResourceClients.ts | 146 + .../siteResource/setSiteResourceRoles.ts | 170 + .../siteResource/setSiteResourceUsers.ts | 125 + .../siteResource/updateSiteResource.ts | 405 +- .../supporterKey/validateSupporterKey.ts | 6 +- server/routers/target/createTarget.ts | 82 +- server/routers/target/deleteTarget.ts | 4 +- server/routers/target/getTarget.ts | 11 +- .../target/handleHealthcheckStatusMessage.ts | 25 +- server/routers/target/helpers.ts | 5 +- server/routers/target/listTargets.ts | 19 +- server/routers/target/updateTarget.ts | 47 +- server/routers/traefik/index.ts | 2 +- .../routers/traefik/traefikConfigProvider.ts | 2 +- server/routers/user/acceptInvite.ts | 9 +- server/routers/user/addUserAction.ts | 8 +- server/routers/user/addUserRole.ts | 50 +- server/routers/user/addUserSite.ts | 7 +- .../user/adminGeneratePasswordResetCode.ts | 123 + server/routers/user/adminGetUser.ts | 4 +- server/routers/user/adminListUsers.ts | 26 +- server/routers/user/adminRemoveUser.ts | 11 +- server/routers/user/adminUpdateUser2FA.ts | 14 +- server/routers/user/createOrgUser.ts | 53 +- server/routers/user/getOrgUser.ts | 6 +- server/routers/user/index.ts | 2 + server/routers/user/inviteUser.ts | 23 +- server/routers/user/listInvitations.ts | 30 +- server/routers/user/listUsers.ts | 32 +- server/routers/user/myDevice.ts | 114 + server/routers/user/removeInvitation.ts | 6 +- server/routers/user/removeUserAction.ts | 10 +- server/routers/user/removeUserOrg.ts | 41 +- server/routers/user/removeUserResource.ts | 9 +- server/routers/user/removeUserSite.ts | 8 +- server/routers/user/updateOrgUser.ts | 9 +- server/routers/ws/index.ts | 2 +- server/routers/ws/messageHandlers.ts | 16 +- server/routers/ws/types.ts | 6 +- server/routers/ws/ws.ts | 274 +- server/setup/clearStaleData.ts | 10 +- server/setup/ensureSetupToken.ts | 6 +- server/setup/migrationsPg.ts | 4 +- server/setup/migrationsSqlite.ts | 4 +- server/setup/scriptsPg/1.12.0.ts | 125 +- server/setup/scriptsPg/1.13.0.ts | 382 + server/setup/scriptsPg/1.7.0.ts | 2 +- server/setup/scriptsPg/1.9.0.ts | 54 +- server/setup/scriptsSqlite/1.0.0-beta13.ts | 4 +- server/setup/scriptsSqlite/1.0.0-beta3.ts | 2 +- server/setup/scriptsSqlite/1.0.0-beta6.ts | 4 +- server/setup/scriptsSqlite/1.0.0-beta9.ts | 7 +- server/setup/scriptsSqlite/1.10.0.ts | 29 +- server/setup/scriptsSqlite/1.10.1.ts | 112 +- server/setup/scriptsSqlite/1.11.0.ts | 102 +- server/setup/scriptsSqlite/1.12.0.ts | 162 +- server/setup/scriptsSqlite/1.13.0.ts | 444 + server/setup/scriptsSqlite/1.5.0.ts | 8 +- server/setup/scriptsSqlite/1.6.0.ts | 4 +- server/setup/scriptsSqlite/1.9.0.ts | 41 +- server/types/HttpCode.ts | 2 +- src/actions/server.ts | 28 +- src/app/[orgId]/page.tsx | 20 +- .../settings/(private)/billing/layout.tsx | 18 +- .../settings/(private)/idp/create/page.tsx | 14 +- .../remote-exit-nodes/ExitNodesDataTable.tsx | 7 +- .../remote-exit-nodes/ExitNodesTable.tsx | 29 +- .../[remoteExitNodeId]/credentials/page.tsx | 288 +- .../[remoteExitNodeId]/layout.tsx | 2 +- .../remote-exit-nodes/create/page.tsx | 2 +- .../settings/access/invitations/page.tsx | 12 +- .../[orgId]/settings/access/roles/page.tsx | 6 +- .../settings/access/users/create/page.tsx | 3 +- .../[orgId]/settings/access/users/page.tsx | 14 +- .../settings/api-keys/[apiKeyId]/layout.tsx | 8 +- .../settings/api-keys/[apiKeyId]/page.tsx | 4 +- .../api-keys/[apiKeyId]/permissions/page.tsx | 20 +- .../[orgId]/settings/api-keys/create/page.tsx | 44 +- src/app/[orgId]/settings/api-keys/page.tsx | 10 +- .../clients/[clientId]/credentials/page.tsx | 124 - .../settings/clients/[clientId]/page.tsx | 8 - src/app/[orgId]/settings/clients/layout.tsx | 4 - .../machine/[niceId]/credentials/page.tsx | 257 + .../[niceId]}/general/page.tsx | 110 +- .../[niceId]}/layout.tsx | 42 +- .../clients/machine/[niceId]/page.tsx | 10 + .../clients/{ => machine}/create/page.tsx | 300 +- .../[orgId]/settings/clients/machine/page.tsx | 80 + src/app/[orgId]/settings/clients/page.tsx | 56 +- .../[orgId]/settings/clients/user/page.tsx | 77 + src/app/[orgId]/settings/general/layout.tsx | 26 +- src/app/[orgId]/settings/general/page.tsx | 55 +- src/app/[orgId]/settings/layout.tsx | 2 +- src/app/[orgId]/settings/logs/access/page.tsx | 46 +- src/app/[orgId]/settings/logs/action/page.tsx | 65 +- .../[orgId]/settings/logs/analytics/page.tsx | 28 + .../[orgId]/settings/logs/request/page.tsx | 59 +- .../settings/resources/client/page.tsx | 93 + src/app/[orgId]/settings/resources/page.tsx | 148 +- .../[niceId]/authentication/page.tsx | 13 +- .../{ => proxy}/[niceId]/general/page.tsx | 72 +- .../resources/{ => proxy}/[niceId]/layout.tsx | 29 +- .../resources/{ => proxy}/[niceId]/page.tsx | 2 +- .../{ => proxy}/[niceId]/proxy/page.tsx | 248 +- .../{ => proxy}/[niceId]/rules/page.tsx | 386 +- .../resources/{ => proxy}/create/page.tsx | 460 +- .../[orgId]/settings/resources/proxy/page.tsx | 112 + src/app/[orgId]/settings/share-links/page.tsx | 8 +- .../sites/[niceId]/credentials/page.tsx | 536 +- .../settings/sites/[niceId]/general/page.tsx | 108 +- .../settings/sites/[niceId]/layout.tsx | 23 +- .../sites/[niceId]/wireguardConfig.ts | 64 +- .../[orgId]/settings/sites/create/page.tsx | 287 +- src/app/[orgId]/settings/sites/page.tsx | 12 +- src/app/admin/api-keys/[apiKeyId]/layout.tsx | 6 +- .../api-keys/[apiKeyId]/permissions/page.tsx | 20 +- src/app/admin/api-keys/create/page.tsx | 46 +- src/app/admin/api-keys/page.tsx | 4 +- src/app/admin/idp/[idpId]/general/page.tsx | 118 +- src/app/admin/idp/[idpId]/layout.tsx | 8 +- src/app/admin/idp/[idpId]/policies/page.tsx | 94 +- src/app/admin/idp/create/page.tsx | 128 +- src/app/admin/idp/page.tsx | 4 +- src/app/admin/license/layout.tsx | 1 - src/app/admin/license/page.tsx | 9 +- src/app/admin/users/AdminUsersTable.tsx | 42 +- src/app/admin/users/[userId]/layout.tsx | 12 +- src/app/admin/users/[userId]/page.tsx | 2 +- src/app/admin/users/page.tsx | 12 +- src/app/auth/(private)/org/page.tsx | 6 +- src/app/auth/2fa/setup/page.tsx | 4 +- .../auth/idp/[idpId]/oidc/callback/page.tsx | 8 +- src/app/auth/layout.tsx | 132 +- src/app/auth/login/device/page.tsx | 36 + src/app/auth/login/device/success/page.tsx | 49 + src/app/auth/login/page.tsx | 12 +- .../auth/reset-password/ResetPasswordForm.tsx | 101 +- src/app/auth/verify-email/page.tsx | 5 +- src/app/globals.css | 20 +- src/app/layout.tsx | 51 +- src/app/navigation.tsx | 180 +- src/app/not-found.tsx | 5 +- src/app/page.tsx | 2 +- src/app/setup/page.tsx | 52 +- src/components/AccessPageHeaderAndNav.tsx | 16 +- src/components/AccessToken.tsx | 23 +- src/components/AccessTokenUsage.tsx | 26 +- src/components/AdminIdpDataTable.tsx | 9 +- src/components/AdminIdpTable.tsx | 19 +- src/components/AdminUsersDataTable.tsx | 12 +- src/components/AdminUsersTable.tsx | 179 +- src/components/ApiKeysDataTable.tsx | 10 +- src/components/ApiKeysTable.tsx | 41 +- src/components/AutoLoginHandler.tsx | 3 +- src/components/BlueprintDetailsForm.tsx | 1 - src/components/BlueprintsTable.tsx | 15 +- src/components/BrandingLogo.tsx | 2 +- src/components/ChangePasswordDialog.tsx | 15 +- src/components/ChangePasswordForm.tsx | 73 +- src/components/ClientInfoCard.tsx | 40 +- src/components/ClientResourcesTable.tsx | 345 + src/components/ClientsDataTable.tsx | 36 +- src/components/ClientsTable.tsx | 350 - src/components/ColumnFilter.tsx | 29 +- src/components/ContainersSelector.tsx | 27 +- src/components/CopyTextBox.tsx | 4 +- src/components/CopyToClipboard.tsx | 19 +- src/components/CreateDomainForm.tsx | 354 +- .../CreateInternalResourceDialog.tsx | 897 +- src/components/CreateRoleForm.tsx | 26 +- src/components/CreateShareLinkForm.tsx | 93 +- src/components/Credenza.tsx | 23 +- src/components/DNSRecordTable.tsx | 20 +- src/components/DNSRecordsDataTable.tsx | 10 +- src/components/DashboardLoginForm.tsx | 33 +- src/components/DataTablePagination.tsx | 109 +- src/components/DateTimePicker.tsx | 381 +- src/components/DeleteRoleForm.tsx | 122 +- src/components/DeviceAuthConfirmation.tsx | 150 + src/components/DeviceLoginForm.tsx | 303 + src/components/Disable2FaForm.tsx | 30 +- src/components/DomainPicker.tsx | 9 - src/components/DomainsDataTable.tsx | 3 + src/components/DomainsTable.tsx | 140 +- src/components/EditInternalResourceDialog.tsx | 804 +- src/components/Enable2FaDialog.tsx | 22 +- src/components/ExitNodeInfoCard.tsx | 36 +- src/components/GenerateLicenseKeysTable.tsx | 8 +- src/components/HeadersInput.tsx | 67 +- src/components/HealthCheckDialog.tsx | 101 +- src/components/HorizontalTabs.tsx | 2 +- src/components/IdpCreateWizard.tsx | 146 +- src/components/InfoSection.tsx | 2 +- src/components/InvitationsDataTable.tsx | 14 +- src/components/InvitationsTable.tsx | 25 +- src/components/Layout.tsx | 12 +- src/components/LayoutSidebar.tsx | 114 +- src/components/LicenseKeysDataTable.tsx | 17 +- src/components/LicenseViolation.tsx | 6 +- src/components/LocaleSwitcher.tsx | 6 +- src/components/LogAnalyticsData.tsx | 540 + src/components/LogDataTable.tsx | 222 +- src/components/LoginForm.tsx | 46 +- src/components/MachineClientsTable.tsx | 389 + src/components/OrgApiKeysDataTable.tsx | 10 +- src/components/OrgApiKeysTable.tsx | 36 +- src/components/OrgPolicyResult.tsx | 11 +- src/components/OrgSelector.tsx | 54 +- src/components/OrganizationLandingCard.tsx | 24 +- src/components/PathMatchRenameModal.tsx | 39 +- src/components/PermissionsSelectBox.tsx | 97 +- src/components/PolicyDataTable.tsx | 12 +- src/components/PolicyTable.tsx | 92 +- src/components/ProductUpdates.tsx | 81 +- src/components/ProfessionalContentOverlay.tsx | 4 +- src/components/ProfileIcon.tsx | 19 +- src/components/ProxyResourcesTable.tsx | 571 + src/components/QRContainer.tsx | 14 +- src/components/RefreshButton.tsx | 6 +- src/components/RegenerateCredentialsModal.tsx | 216 - src/components/RegenerateInvitationForm.tsx | 72 +- src/components/ResetPasswordForm.tsx | 228 +- src/components/ResourceAccessDenied.tsx | 8 +- src/components/ResourceAuthPortal.tsx | 26 +- src/components/ResourceInfoBox.tsx | 15 +- src/components/ResourceNotFound.tsx | 9 +- src/components/ResourcesTable.tsx | 1204 - src/components/RestartDomainButton.tsx | 5 +- src/components/RolesDataTable.tsx | 16 +- src/components/RolesTable.tsx | 15 +- src/components/SecurityFeaturesAlert.tsx | 1 - src/components/SecurityKeyForm.tsx | 16 +- src/components/SetResourceHeaderAuthForm.tsx | 35 +- src/components/SetResourcePasswordForm.tsx | 22 +- src/components/SetResourcePincodeForm.tsx | 22 +- src/components/Settings.tsx | 2 +- src/components/ShareLinksDataTable.tsx | 14 +- src/components/ShareLinksSplash.tsx | 14 +- src/components/ShareLinksTable.tsx | 21 +- src/components/SidebarNav.tsx | 383 +- src/components/SidebarSupportButton.tsx | 151 +- src/components/SignupForm.tsx | 26 +- src/components/SiteInfoCard.tsx | 16 +- src/components/SitePriceCalculator.tsx | 22 +- src/components/SitesDataTable.tsx | 17 +- src/components/SitesSplashCard.tsx | 26 +- src/components/SitesTable.tsx | 125 +- src/components/StrategySelect.tsx | 8 +- src/components/SupporterMessage.tsx | 7 +- src/components/SupporterStatus.tsx | 98 +- src/components/TailwindIndicator.tsx | 27 + ...provider.tsx => TanstackQueryProvider.tsx} | 14 +- src/components/TopbarNav.tsx | 4 +- src/components/TwoFactorSetupForm.tsx | 2 +- src/components/UserDevicesTable.tsx | 432 + src/components/UsersDataTable.tsx | 16 +- src/components/UsersTable.tsx | 127 +- src/components/ValidateOidcToken.tsx | 3 +- src/components/VerifyEmailForm.tsx | 2 +- src/components/ViewDevicesDialog.tsx | 246 + src/components/WorldMap.tsx | 275 + src/components/private/AuthPageSettings.tsx | 3 +- src/components/private/CertificateStatus.tsx | 28 +- src/components/private/OrgIdpTable.tsx | 34 +- src/components/private/RegionSelector.tsx | 8 +- src/components/tags/autocomplete.tsx | 2 +- src/components/tags/tag-input.tsx | 3 +- src/components/tags/tag-popover.tsx | 4 +- src/components/tags/tag.tsx | 2 +- src/components/ui/alert.tsx | 4 +- src/components/ui/avatar.tsx | 54 +- src/components/ui/badge.tsx | 3 +- src/components/ui/breadcrumb.tsx | 144 +- src/components/ui/button.tsx | 19 +- src/components/ui/calendar.tsx | 391 +- src/components/ui/card.tsx | 6 +- src/components/ui/chart.tsx | 420 + src/components/ui/checkbox.tsx | 8 +- src/components/ui/command.tsx | 4 +- src/components/ui/data-table.tsx | 501 +- src/components/ui/dialog.tsx | 4 +- src/components/ui/dropdown-menu.tsx | 4 +- src/components/ui/input-otp.tsx | 2 +- src/components/ui/input.tsx | 8 +- src/components/ui/popover.tsx | 2 +- src/components/ui/progress.tsx | 36 +- src/components/ui/radio-group.tsx | 50 +- src/components/ui/scroll-area.tsx | 85 +- src/components/ui/select.tsx | 4 +- src/components/ui/separator.tsx | 38 +- src/components/ui/sheet.tsx | 168 +- src/components/ui/switch.tsx | 2 +- src/components/ui/tabs.tsx | 60 +- src/components/ui/textarea.tsx | 27 +- src/contexts/domainContext.ts | 2 +- src/contexts/envContext.ts | 4 +- src/contexts/remoteExitNodeContext.ts | 8 +- src/hooks/useCertificate.ts | 51 +- src/hooks/useClientContext.ts | 4 +- src/hooks/useDomainContext.ts | 6 +- src/hooks/useLocalStorage.ts | 4 +- src/hooks/useRemoteExitNodeContext.ts | 8 +- src/hooks/useSiteContext.ts | 4 +- src/hooks/useStoredColumnVisibility.ts | 81 + src/hooks/useStoredPageSize.ts | 60 + src/hooks/useToast.ts | 26 +- src/i18n/config.ts | 21 +- src/i18n/request.ts | 16 +- src/lib/api/cookies.ts | 36 +- src/lib/auth/verifySession.ts | 6 +- src/lib/cleanRedirect.ts | 6 +- src/lib/countryCodeList.ts | 1002 + src/lib/countryCodeToFlagEmoji.ts | 6 + src/lib/dataSize.ts | 32 +- src/lib/docker.ts | 14 +- src/lib/getSevenDaysAgo.ts | 7 + src/lib/parseHostTarget.ts | 51 +- src/lib/pullEnv.ts | 8 +- src/lib/queries.ts | 180 +- src/lib/shareLinks.ts | 4 +- src/lib/subdomain-utils.ts | 90 +- src/lib/types/env.ts | 6 +- src/lib/wireguard.ts | 69 + src/middleware.ts | 30 +- src/providers/ApiKeyProvider.tsx | 2 +- src/providers/DomainProvider.tsx | 4 +- src/providers/OrgProvider.tsx | 6 +- src/providers/OrgUserProvider.tsx | 6 +- src/providers/RemoteExitNodeProvider.tsx | 13 +- src/providers/ResourceProvider.tsx | 4 +- src/providers/SiteProvider.tsx | 2 +- src/providers/SubscriptionStatusProvider.tsx | 1 - src/providers/UserProvider.tsx | 2 +- src/services/locale.ts | 49 +- src/types/canvas-confetti.d.ts | 2 +- src/types/tanstack-query.d.ts | 13 + 765 files changed, 46685 insertions(+), 24405 deletions(-) create mode 100644 .github/workflows/restart-runners.yml create mode 100644 .prettierignore create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 bruno/Olm/createOlm.bru create mode 100644 bruno/Olm/folder.bru create mode 100644 messages/zh-TW.json rename {src/app => public}/favicon.ico (100%) delete mode 100644 public/screenshots/create-resource.png delete mode 100644 public/screenshots/edit-resource.png create mode 100644 public/screenshots/private-resources.png create mode 100644 public/screenshots/public-resources.png delete mode 100644 public/screenshots/resources.png delete mode 100644 public/screenshots/sites-fade.png create mode 100644 public/screenshots/user-devices.png create mode 100644 server/lib/calculateUserClientsForOrgs.ts create mode 100644 server/lib/cleanupLogs.test.ts create mode 100644 server/lib/lock.ts create mode 100644 server/lib/rebuildClientAssociations.ts create mode 100644 server/middlewares/integration/verifyApiKeySetResourceClients.ts delete mode 100644 server/middlewares/verifyClientsEnabled.ts create mode 100644 server/middlewares/verifyOlmAccess.ts create mode 100644 server/middlewares/verifySetResourceClients.ts create mode 100644 server/private/lib/lock.ts delete mode 100644 server/private/routers/gerbil/receiveBandwidth.ts rename server/routers/auditLogs/{exportRequstAuditLog.ts => exportRequestAuditLog.ts} (64%) create mode 100644 server/routers/auditLogs/queryRequestAnalytics.ts rename server/routers/auditLogs/{queryRequstAuditLog.ts => queryRequestAuditLog.ts} (86%) create mode 100644 server/routers/auth/pollDeviceWebAuth.ts create mode 100644 server/routers/auth/startDeviceWebAuth.ts create mode 100644 server/routers/auth/verifyDeviceWebAuth.ts create mode 100644 server/routers/client/createUserClient.ts create mode 100644 server/routers/client/terminate.ts create mode 100644 server/routers/olm/createUserOlm.ts create mode 100644 server/routers/olm/deleteUserOlm.ts create mode 100644 server/routers/olm/getUserOlm.ts create mode 100644 server/routers/olm/handleOlmServerPeerAddMessage.ts create mode 100644 server/routers/olm/handleOlmUnRelayMessage.ts create mode 100644 server/routers/olm/listUserOlms.ts create mode 100644 server/routers/resource/addRoleToResource.ts create mode 100644 server/routers/resource/addUserToResource.ts create mode 100644 server/routers/resource/listAllResourceNames.ts create mode 100644 server/routers/resource/removeRoleFromResource.ts create mode 100644 server/routers/resource/removeUserFromResource.ts create mode 100644 server/routers/siteResource/addClientToSiteResource.ts create mode 100644 server/routers/siteResource/addRoleToSiteResource.ts create mode 100644 server/routers/siteResource/addUserToSiteResource.ts create mode 100644 server/routers/siteResource/listSiteResourceClients.ts create mode 100644 server/routers/siteResource/listSiteResourceRoles.ts create mode 100644 server/routers/siteResource/listSiteResourceUsers.ts create mode 100644 server/routers/siteResource/removeClientFromSiteResource.ts create mode 100644 server/routers/siteResource/removeRoleFromSiteResource.ts create mode 100644 server/routers/siteResource/removeUserFromSiteResource.ts create mode 100644 server/routers/siteResource/setSiteResourceClients.ts create mode 100644 server/routers/siteResource/setSiteResourceRoles.ts create mode 100644 server/routers/siteResource/setSiteResourceUsers.ts create mode 100644 server/routers/user/adminGeneratePasswordResetCode.ts create mode 100644 server/routers/user/myDevice.ts create mode 100644 server/setup/scriptsPg/1.13.0.ts create mode 100644 server/setup/scriptsSqlite/1.13.0.ts delete mode 100644 src/app/[orgId]/settings/clients/[clientId]/credentials/page.tsx delete mode 100644 src/app/[orgId]/settings/clients/[clientId]/page.tsx create mode 100644 src/app/[orgId]/settings/clients/machine/[niceId]/credentials/page.tsx rename src/app/[orgId]/settings/clients/{[clientId] => machine/[niceId]}/general/page.tsx (61%) rename src/app/[orgId]/settings/clients/{[clientId] => machine/[niceId]}/layout.tsx (69%) create mode 100644 src/app/[orgId]/settings/clients/machine/[niceId]/page.tsx rename src/app/[orgId]/settings/clients/{ => machine}/create/page.tsx (74%) create mode 100644 src/app/[orgId]/settings/clients/machine/page.tsx create mode 100644 src/app/[orgId]/settings/clients/user/page.tsx create mode 100644 src/app/[orgId]/settings/logs/analytics/page.tsx create mode 100644 src/app/[orgId]/settings/resources/client/page.tsx rename src/app/[orgId]/settings/resources/{ => proxy}/[niceId]/authentication/page.tsx (98%) rename src/app/[orgId]/settings/resources/{ => proxy}/[niceId]/general/page.tsx (91%) rename src/app/[orgId]/settings/resources/{ => proxy}/[niceId]/layout.tsx (78%) rename src/app/[orgId]/settings/resources/{ => proxy}/[niceId]/page.tsx (74%) rename src/app/[orgId]/settings/resources/{ => proxy}/[niceId]/proxy/page.tsx (90%) rename src/app/[orgId]/settings/resources/{ => proxy}/[niceId]/rules/page.tsx (68%) rename src/app/[orgId]/settings/resources/{ => proxy}/create/page.tsx (88%) create mode 100644 src/app/[orgId]/settings/resources/proxy/page.tsx create mode 100644 src/app/auth/login/device/page.tsx create mode 100644 src/app/auth/login/device/success/page.tsx create mode 100644 src/components/ClientResourcesTable.tsx delete mode 100644 src/components/ClientsTable.tsx create mode 100644 src/components/DeviceAuthConfirmation.tsx create mode 100644 src/components/DeviceLoginForm.tsx create mode 100644 src/components/LogAnalyticsData.tsx create mode 100644 src/components/MachineClientsTable.tsx create mode 100644 src/components/ProxyResourcesTable.tsx delete mode 100644 src/components/RegenerateCredentialsModal.tsx delete mode 100644 src/components/ResourcesTable.tsx create mode 100644 src/components/TailwindIndicator.tsx rename src/components/{react-query-provider.tsx => TanstackQueryProvider.tsx} (59%) create mode 100644 src/components/UserDevicesTable.tsx create mode 100644 src/components/ViewDevicesDialog.tsx create mode 100644 src/components/WorldMap.tsx create mode 100644 src/components/ui/chart.tsx create mode 100644 src/hooks/useStoredColumnVisibility.ts create mode 100644 src/hooks/useStoredPageSize.ts create mode 100644 src/lib/countryCodeList.ts create mode 100644 src/lib/countryCodeToFlagEmoji.ts create mode 100644 src/lib/getSevenDaysAgo.ts create mode 100644 src/lib/wireguard.ts create mode 100644 src/types/tanstack-query.d.ts diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 710c5c86d..c21294939 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -36,7 +36,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Set up QEMU uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0 @@ -56,7 +56,7 @@ jobs: shell: bash - name: Install Go - uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0 + uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 with: go-version: 1.24 @@ -107,7 +107,7 @@ jobs: - name: Build and push Docker images (Docker Hub) run: | TAG=${{ env.TAG }} - make build-release tag=$TAG + make -j4 build-release tag=$TAG echo "Built & pushed to: ${{ env.DOCKERHUB_IMAGE }}:${TAG}" shell: bash @@ -135,6 +135,13 @@ jobs: docker://$DOCKERHUB_IMAGE:$TAG \ docker://$GHCR_IMAGE:$TAG shell: bash + + - name: Login to GitHub Container Registry (for cosign) + uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - name: Install cosign # cosign is used to sign and verify container images (key and keyless) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 46c5e8ee1..98f9b1c8f 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -21,10 +21,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Set up Node.js - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 + uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 with: node-version: '22' diff --git a/.github/workflows/restart-runners.yml b/.github/workflows/restart-runners.yml new file mode 100644 index 000000000..14bbcefbc --- /dev/null +++ b/.github/workflows/restart-runners.yml @@ -0,0 +1,39 @@ +name: Restart Runners + +on: + schedule: + - cron: '0 0 */7 * *' + +permissions: + id-token: write + contents: read + +jobs: + ec2-maintenance-prod: + runs-on: ubuntu-latest + permissions: write-all + steps: + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ROLE_NAME }} + role-duration-seconds: 3600 + aws-region: ${{ secrets.AWS_REGION }} + + - name: Verify AWS identity + run: aws sts get-caller-identity + + - name: Start EC2 instance + run: | + aws ec2 start-instances --instance-ids ${{ secrets.EC2_INSTANCE_ID_ARM_RUNNER }} + aws ec2 start-instances --instance-ids ${{ secrets.EC2_INSTANCE_ID_AMD_RUNNER }} + echo "EC2 instances started" + + - name: Wait + run: sleep 600 + + - name: Stop EC2 instance + run: | + aws ec2 stop-instances --instance-ids ${{ secrets.EC2_INSTANCE_ID_ARM_RUNNER }} + aws ec2 stop-instances --instance-ids ${{ secrets.EC2_INSTANCE_ID_AMD_RUNNER }} + echo "EC2 instances stopped" diff --git a/.github/workflows/stale-bot.yml b/.github/workflows/stale-bot.yml index 5b6889dac..4df7e93ec 100644 --- a/.github/workflows/stale-bot.yml +++ b/.github/workflows/stale-bot.yml @@ -14,7 +14,7 @@ jobs: stale: runs-on: ubuntu-latest steps: - - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0 + - uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1 with: days-before-stale: 14 days-before-close: 14 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dda739ce3..3b0627ccb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,9 +14,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 + - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 with: node-version: '22' diff --git a/.gitignore b/.gitignore index 2fc6b10b0..700963cc5 100644 --- a/.gitignore +++ b/.gitignore @@ -49,4 +49,5 @@ postgres/ dynamic/ *.mmdb scratch/ -tsconfig.json \ No newline at end of file +tsconfig.json +hydrateSaas.ts \ No newline at end of file diff --git a/.nvmrc b/.nvmrc index 2bd5a0a98..a45fd52cc 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22 +24 diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..0ae563eed --- /dev/null +++ b/.prettierignore @@ -0,0 +1,12 @@ +.github/ +bruno/ +cli/ +config/ +messages/ +next.config.mjs/ +public/ +tailwind.config.js/ +test/ +**/*.yml +**/*.yaml +**/*.md \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000..974188b8d --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["esbenp.prettier-vscode"] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..77440d967 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,22 @@ +{ + "editor.codeActionsOnSave": { + "source.addMissingImports.ts": "always" + }, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "editor.formatOnSave": true +} diff --git a/Dockerfile b/Dockerfile index 1a1493a53..fa2d71c03 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,12 @@ -FROM node:22-alpine AS builder +FROM node:24-alpine AS builder WORKDIR /app ARG BUILD=oss ARG DATABASE=sqlite +RUN apk add --no-cache curl tzdata python3 make g++ + # COPY package.json package-lock.json ./ COPY package*.json ./ RUN npm ci @@ -12,8 +14,9 @@ RUN npm ci COPY . . RUN echo "export * from \"./$DATABASE\";" > server/db/index.ts +RUN echo "export const driver: \"pg\" | \"sqlite\" = \"$DATABASE\";" >> server/db/index.ts -RUN echo "export const build = \"$BUILD\" as any;" > server/build.ts +RUN echo "export const build = \"$BUILD\" as \"saas\" | \"enterprise\" | \"oss\";" > server/build.ts # Copy the appropriate TypeScript configuration based on build type RUN if [ "$BUILD" = "oss" ]; then cp tsconfig.oss.json tsconfig.json; \ @@ -30,9 +33,9 @@ RUN mkdir -p dist RUN npm run next:build RUN node esbuild.mjs -e server/index.ts -o dist/server.mjs -b $BUILD RUN if [ "$DATABASE" = "pg" ]; then \ - node esbuild.mjs -e server/setup/migrationsPg.ts -o dist/migrations.mjs; \ + node esbuild.mjs -e server/setup/migrationsPg.ts -o dist/migrations.mjs; \ else \ - node esbuild.mjs -e server/setup/migrationsSqlite.ts -o dist/migrations.mjs; \ + node esbuild.mjs -e server/setup/migrationsSqlite.ts -o dist/migrations.mjs; \ fi # test to make sure the build output is there and error if not @@ -40,12 +43,13 @@ RUN test -f dist/server.mjs RUN npm run build:cli -FROM node:22-alpine AS runner +FROM node:24-alpine AS runner WORKDIR /app # Curl used for the health checks -RUN apk add --no-cache curl tzdata +# Python and build tools needed for better-sqlite3 native compilation +RUN apk add --no-cache curl tzdata python3 make g++ # COPY package.json package-lock.json ./ COPY package*.json ./ diff --git a/Makefile b/Makefile index 6c538a477..1519aec7d 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,13 @@ -.PHONY: build build-pg build-release build-arm build-x86 test clean +.PHONY: build dev-build-sqlite dev-build-pg build-release build-arm build-x86 test clean major_tag := $(shell echo $(tag) | cut -d. -f1) minor_tag := $(shell echo $(tag) | cut -d. -f1,2) -build-release: + +.PHONY: build-release build-sqlite build-postgresql build-ee-sqlite build-ee-postgresql + +build-release: build-sqlite build-postgresql build-ee-sqlite build-ee-postgresql + +build-sqlite: @if [ -z "$(tag)" ]; then \ echo "Error: tag is required. Usage: make build-release tag="; \ exit 1; \ @@ -16,6 +21,12 @@ build-release: --tag fosrl/pangolin:$(minor_tag) \ --tag fosrl/pangolin:$(tag) \ --push . + +build-postgresql: + @if [ -z "$(tag)" ]; then \ + echo "Error: tag is required. Usage: make build-release tag="; \ + exit 1; \ + fi docker buildx build \ --build-arg BUILD=oss \ --build-arg DATABASE=pg \ @@ -25,6 +36,12 @@ build-release: --tag fosrl/pangolin:postgresql-$(minor_tag) \ --tag fosrl/pangolin:postgresql-$(tag) \ --push . + +build-ee-sqlite: + @if [ -z "$(tag)" ]; then \ + echo "Error: tag is required. Usage: make build-release tag="; \ + exit 1; \ + fi docker buildx build \ --build-arg BUILD=enterprise \ --build-arg DATABASE=sqlite \ @@ -34,6 +51,12 @@ build-release: --tag fosrl/pangolin:ee-$(minor_tag) \ --tag fosrl/pangolin:ee-$(tag) \ --push . + +build-ee-postgresql: + @if [ -z "$(tag)" ]; then \ + echo "Error: tag is required. Usage: make build-release tag="; \ + exit 1; \ + fi docker buildx build \ --build-arg BUILD=enterprise \ --build-arg DATABASE=pg \ @@ -80,10 +103,10 @@ build-arm: build-x86: docker buildx build --platform linux/amd64 -t fosrl/pangolin:latest . -build-sqlite: +dev-build-sqlite: docker build --build-arg DATABASE=sqlite -t fosrl/pangolin:latest . -build-pg: +dev-build-pg: docker build --build-arg DATABASE=pg -t fosrl/pangolin:postgresql-latest . test: diff --git a/README.md b/README.md index 5484f8fbb..a842ed3b8 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@

-Pangolin is a self-hosted tunneled reverse proxy server with identity and context aware access control, designed to easily expose and protect applications running anywhere. Pangolin acts as a central hub and connects isolated networks — even those behind restrictive firewalls — through encrypted tunnels, enabling easy access to remote services without opening ports or requiring a VPN. +Pangolin is an open-source, identity-based remote access platform built on WireGuard that enables secure, seamless connectivity to private and public resources. Pangolin combines reverse proxy and VPN capabilities into one platform, providing browser-based access to web applications and client-based access to any private resources, all with zero-trust security and granular access control. ## Installation @@ -60,14 +60,20 @@ Pangolin is a self-hosted tunneled reverse proxy server with identity and contex ## Key Features -Pangolin packages everything you need for seamless application access and exposure into one cohesive platform. - | | | |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------| -| **Manage applications in one place**

Pangolin provides a unified dashboard where you can monitor, configure, and secure all of your services regardless of where they are hosted. | | -| **Reverse proxy across networks anywhere**

Route traffic via tunnels to any private network. Pangolin works like a reverse proxy that spans multiple networks and handles routing, load balancing, health checking, and more to the right services on the other end. | | -| **Enforce identity and context aware rules**

Protect your applications with identity and context aware rules such as SSO, OIDC, PIN, password, temporary share links, geolocation, IP, and more. | | -| **Quickly connect Pangolin sites**

Pangolin's lightweight [Newt](https://github.com/fosrl/newt) client runs in userspace and can run anywhere. Use it as a site connector to route traffic to backends across all of your environments. | | +| **Connect remote networks with sites**

Pangolin's lightweight site connectors create secure tunnels from remote networks without requiring public IP addresses or open ports. Sites make any network anywhere available for authorized access. | | +| **Browser-based reverse proxy access**

Expose web applications through identity and context-aware tunneled reverse proxies. Pangolin handles routing, load balancing, health checking, and automatic SSL certificates without exposing your network directly to the internet. Users access applications through any web browser with authentication and granular access control. | | +| **Client-based private resource access**

Access private resources like SSH servers, databases, RDP, and entire network ranges through Pangolin clients. Intelligent NAT traversal enables connections even through restrictive firewalls, while DNS aliases provide friendly names and fast connections to resources across all your sites. | | +| **Zero-trust granular access**

Grant users access to specific resources, not entire networks. Unlike traditional VPNs that expose full network access, Pangolin's zero-trust model ensures users can only reach the applications and services you explicitly define, reducing security risk and attack surface. | | + +## Download Clients + +Download the Pangolin client for your platform: + +- [Mac](https://pangolin.net/downloads/mac) +- [Windows](https://pangolin.net/downloads/windows) +- [Linux](https://pangolin.net/downloads/linux) ## Get Started diff --git a/blueprint.yaml b/blueprint.yaml index 0a524f12f..adc250556 100644 --- a/blueprint.yaml +++ b/blueprint.yaml @@ -31,6 +31,7 @@ proxy-resources: # - owen@pangolin.net # whitelist-users: # - owen@pangolin.net + # auto-login-idp: 1 headers: - name: X-Example-Header value: example-value diff --git a/bruno/Auth/login.bru b/bruno/Auth/login.bru index 4ca7b412d..3825a2525 100644 --- a/bruno/Auth/login.bru +++ b/bruno/Auth/login.bru @@ -5,14 +5,14 @@ meta { } post { - url: http://localhost:4000/api/v1/auth/login + url: http://localhost:3000/api/v1/auth/login body: json auth: none } body:json { { - "email": "owen@pangolin.net", + "email": "admin@fosrl.io", "password": "Password123!" } } diff --git a/bruno/Olm/createOlm.bru b/bruno/Olm/createOlm.bru new file mode 100644 index 000000000..ca755dea8 --- /dev/null +++ b/bruno/Olm/createOlm.bru @@ -0,0 +1,15 @@ +meta { + name: createOlm + type: http + seq: 1 +} + +put { + url: http://localhost:3000/api/v1/olm + body: none + auth: inherit +} + +settings { + encodeUrl: true +} diff --git a/bruno/Olm/folder.bru b/bruno/Olm/folder.bru new file mode 100644 index 000000000..d245e6d1c --- /dev/null +++ b/bruno/Olm/folder.bru @@ -0,0 +1,8 @@ +meta { + name: Olm + seq: 15 +} + +auth { + mode: inherit +} diff --git a/bruno/bruno.json b/bruno/bruno.json index f0ed66b30..f19d936a8 100644 --- a/bruno/bruno.json +++ b/bruno/bruno.json @@ -1,6 +1,6 @@ { "version": "1", - "name": "Pangolin Saas", + "name": "Pangolin", "type": "collection", "ignore": [ "node_modules", diff --git a/components.json b/components.json index 97d8c8c0e..13f7efefb 100644 --- a/components.json +++ b/components.json @@ -17,4 +17,4 @@ "lib": "@/lib", "hooks": "@/hooks" } -} \ No newline at end of file +} diff --git a/config/config.example.yml b/config/config.example.yml index e4af586c6..7eeebf81a 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -25,4 +25,3 @@ flags: disable_user_create_org: true allow_raw_resources: true enable_integration_api: true - enable_clients: true diff --git a/docker-compose.example.yml b/docker-compose.example.yml index 21a5134ff..84a5140b4 100644 --- a/docker-compose.example.yml +++ b/docker-compose.example.yml @@ -35,7 +35,7 @@ services: - 80:80 # Port for traefik because of the network_mode traefik: - image: traefik:v3.5 + image: traefik:v3.6 container_name: traefik restart: unless-stopped network_mode: service:gerbil # Ports appear on the gerbil service @@ -52,4 +52,4 @@ networks: default: driver: bridge name: pangolin - enable_ipv6: true \ No newline at end of file + enable_ipv6: true diff --git a/drizzle.pg.config.ts b/drizzle.pg.config.ts index febd5f453..ba4ca8fe5 100644 --- a/drizzle.pg.config.ts +++ b/drizzle.pg.config.ts @@ -1,9 +1,7 @@ import { defineConfig } from "drizzle-kit"; import path from "path"; -const schema = [ - path.join("server", "db", "pg", "schema"), -]; +const schema = [path.join("server", "db", "pg", "schema")]; export default defineConfig({ dialect: "postgresql", diff --git a/drizzle.sqlite.config.ts b/drizzle.sqlite.config.ts index 4912c2565..d8344f942 100644 --- a/drizzle.sqlite.config.ts +++ b/drizzle.sqlite.config.ts @@ -2,9 +2,7 @@ import { APP_PATH } from "@server/lib/consts"; import { defineConfig } from "drizzle-kit"; import path from "path"; -const schema = [ - path.join("server", "db", "sqlite", "schema"), -]; +const schema = [path.join("server", "db", "sqlite", "schema")]; export default defineConfig({ dialect: "sqlite", diff --git a/esbuild.mjs b/esbuild.mjs index 7f67fe819..0157c34ac 100644 --- a/esbuild.mjs +++ b/esbuild.mjs @@ -24,20 +24,20 @@ const argv = yargs(hideBin(process.argv)) alias: "e", describe: "Entry point file", type: "string", - demandOption: true, + demandOption: true }) .option("out", { alias: "o", describe: "Output file path", type: "string", - demandOption: true, + demandOption: true }) .option("build", { alias: "b", describe: "Build type (oss, saas, enterprise)", type: "string", choices: ["oss", "saas", "enterprise"], - default: "oss", + default: "oss" }) .help() .alias("help", "h").argv; @@ -66,7 +66,9 @@ function privateImportGuardPlugin() { // Check if the importing file is NOT in server/private const normalizedImporter = path.normalize(importingFile); - const isInServerPrivate = normalizedImporter.includes(path.normalize("server/private")); + const isInServerPrivate = normalizedImporter.includes( + path.normalize("server/private") + ); if (!isInServerPrivate) { const violation = { @@ -79,8 +81,8 @@ function privateImportGuardPlugin() { console.log(`PRIVATE IMPORT VIOLATION:`); console.log(` File: ${importingFile}`); console.log(` Import: ${args.path}`); - console.log(` Resolve dir: ${args.resolveDir || 'N/A'}`); - console.log(''); + console.log(` Resolve dir: ${args.resolveDir || "N/A"}`); + console.log(""); } // Return null to let the default resolver handle it @@ -89,16 +91,20 @@ function privateImportGuardPlugin() { build.onEnd((result) => { if (violations.length > 0) { - console.log(`\nSUMMARY: Found ${violations.length} private import violation(s):`); + console.log( + `\nSUMMARY: Found ${violations.length} private import violation(s):` + ); violations.forEach((v, i) => { - console.log(` ${i + 1}. ${path.relative(process.cwd(), v.file)} imports ${v.importPath}`); + console.log( + ` ${i + 1}. ${path.relative(process.cwd(), v.file)} imports ${v.importPath}` + ); }); - console.log(''); + console.log(""); result.errors.push({ text: `Private import violations detected: ${violations.length} violation(s) found`, location: null, - notes: violations.map(v => ({ + notes: violations.map((v) => ({ text: `${path.relative(process.cwd(), v.file)} imports ${v.importPath}`, location: null })) @@ -121,7 +127,9 @@ function dynamicImportGuardPlugin() { // Check if the importing file is NOT in server/private const normalizedImporter = path.normalize(importingFile); - const isInServerPrivate = normalizedImporter.includes(path.normalize("server/private")); + const isInServerPrivate = normalizedImporter.includes( + path.normalize("server/private") + ); if (isInServerPrivate) { const violation = { @@ -134,8 +142,8 @@ function dynamicImportGuardPlugin() { console.log(`DYNAMIC IMPORT VIOLATION:`); console.log(` File: ${importingFile}`); console.log(` Import: ${args.path}`); - console.log(` Resolve dir: ${args.resolveDir || 'N/A'}`); - console.log(''); + console.log(` Resolve dir: ${args.resolveDir || "N/A"}`); + console.log(""); } // Return null to let the default resolver handle it @@ -144,16 +152,20 @@ function dynamicImportGuardPlugin() { build.onEnd((result) => { if (violations.length > 0) { - console.log(`\nSUMMARY: Found ${violations.length} dynamic import violation(s):`); + console.log( + `\nSUMMARY: Found ${violations.length} dynamic import violation(s):` + ); violations.forEach((v, i) => { - console.log(` ${i + 1}. ${path.relative(process.cwd(), v.file)} imports ${v.importPath}`); + console.log( + ` ${i + 1}. ${path.relative(process.cwd(), v.file)} imports ${v.importPath}` + ); }); - console.log(''); + console.log(""); result.errors.push({ text: `Dynamic import violations detected: ${violations.length} violation(s) found`, location: null, - notes: violations.map(v => ({ + notes: violations.map((v) => ({ text: `${path.relative(process.cwd(), v.file)} imports ${v.importPath}`, location: null })) @@ -172,21 +184,28 @@ function dynamicImportSwitcherPlugin(buildValue) { const switches = []; build.onStart(() => { - console.log(`Dynamic import switcher using build type: ${buildValue}`); + console.log( + `Dynamic import switcher using build type: ${buildValue}` + ); }); build.onResolve({ filter: /^#dynamic\// }, (args) => { // Extract the path after #dynamic/ - const dynamicPath = args.path.replace(/^#dynamic\//, ''); + const dynamicPath = args.path.replace(/^#dynamic\//, ""); // Determine the replacement based on build type let replacement; if (buildValue === "oss") { replacement = `#open/${dynamicPath}`; - } else if (buildValue === "saas" || buildValue === "enterprise") { + } else if ( + buildValue === "saas" || + buildValue === "enterprise" + ) { replacement = `#closed/${dynamicPath}`; // We use #closed here so that the route guards dont complain after its been changed but this is the same as #private } else { - console.warn(`Unknown build type '${buildValue}', defaulting to #open/`); + console.warn( + `Unknown build type '${buildValue}', defaulting to #open/` + ); replacement = `#open/${dynamicPath}`; } @@ -201,8 +220,10 @@ function dynamicImportSwitcherPlugin(buildValue) { console.log(`DYNAMIC IMPORT SWITCH:`); console.log(` File: ${args.importer}`); console.log(` Original: ${args.path}`); - console.log(` Switched to: ${replacement} (build: ${buildValue})`); - console.log(''); + console.log( + ` Switched to: ${replacement} (build: ${buildValue})` + ); + console.log(""); // Rewrite the import path and let the normal resolution continue return build.resolve(replacement, { @@ -215,12 +236,18 @@ function dynamicImportSwitcherPlugin(buildValue) { build.onEnd((result) => { if (switches.length > 0) { - console.log(`\nDYNAMIC IMPORT SUMMARY: Switched ${switches.length} import(s) for build type '${buildValue}':`); + console.log( + `\nDYNAMIC IMPORT SUMMARY: Switched ${switches.length} import(s) for build type '${buildValue}':` + ); switches.forEach((s, i) => { - console.log(` ${i + 1}. ${path.relative(process.cwd(), s.file)}`); - console.log(` ${s.originalPath} → ${s.replacementPath}`); + console.log( + ` ${i + 1}. ${path.relative(process.cwd(), s.file)}` + ); + console.log( + ` ${s.originalPath} → ${s.replacementPath}` + ); }); - console.log(''); + console.log(""); } }); } @@ -235,7 +262,7 @@ esbuild format: "esm", minify: false, banner: { - js: banner, + js: banner }, platform: "node", external: ["body-parser"], @@ -244,20 +271,22 @@ esbuild dynamicImportGuardPlugin(), dynamicImportSwitcherPlugin(argv.build), nodeExternalsPlugin({ - packagePath: getPackagePaths(), - }), + packagePath: getPackagePaths() + }) ], sourcemap: "inline", - target: "node22", + target: "node22" }) .then((result) => { // Check if there were any errors in the build result if (result.errors && result.errors.length > 0) { - console.error(`Build failed with ${result.errors.length} error(s):`); + console.error( + `Build failed with ${result.errors.length} error(s):` + ); result.errors.forEach((error, i) => { console.error(`${i + 1}. ${error.text}`); if (error.notes) { - error.notes.forEach(note => { + error.notes.forEach((note) => { console.error(` - ${note.text}`); }); } diff --git a/eslint.config.js b/eslint.config.js index dfc194bca..ae921d450 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,19 +1,19 @@ -import tseslint from 'typescript-eslint'; +import tseslint from "typescript-eslint"; export default tseslint.config({ - files: ["**/*.{ts,tsx,js,jsx}"], - languageOptions: { - parser: tseslint.parser, - parserOptions: { - ecmaVersion: "latest", - sourceType: "module", - ecmaFeatures: { - jsx: true - } + files: ["**/*.{ts,tsx,js,jsx}"], + languageOptions: { + parser: tseslint.parser, + parserOptions: { + ecmaVersion: "latest", + sourceType: "module", + ecmaFeatures: { + jsx: true + } + } + }, + rules: { + semi: "error", + "prefer-const": "warn" } - }, - rules: { - "semi": "error", - "prefer-const": "warn" - } -}); \ No newline at end of file +}); diff --git a/install/config/docker-compose.yml b/install/config/docker-compose.yml index b507e9146..90613b2aa 100644 --- a/install/config/docker-compose.yml +++ b/install/config/docker-compose.yml @@ -35,7 +35,7 @@ services: - 80:80 {{end}} traefik: - image: docker.io/traefik:v3.5 + image: docker.io/traefik:v3.6 container_name: traefik restart: unless-stopped {{if .InstallGerbil}} @@ -59,4 +59,4 @@ networks: default: driver: bridge name: pangolin -{{if .EnableIPv6}} enable_ipv6: true{{end}} \ No newline at end of file +{{if .EnableIPv6}} enable_ipv6: true{{end}} diff --git a/install/containers.go b/install/containers.go index 9993e117d..464186c22 100644 --- a/install/containers.go +++ b/install/containers.go @@ -73,7 +73,7 @@ func installDocker() error { case strings.Contains(osRelease, "ID=ubuntu"): installCmd = exec.Command("bash", "-c", fmt.Sprintf(` apt-get update && - apt-get install -y apt-transport-https ca-certificates curl && + apt-get install -y apt-transport-https ca-certificates curl gpg && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && echo "deb [arch=%s signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list && apt-get update && @@ -82,7 +82,7 @@ func installDocker() error { case strings.Contains(osRelease, "ID=debian"): installCmd = exec.Command("bash", "-c", fmt.Sprintf(` apt-get update && - apt-get install -y apt-transport-https ca-certificates curl && + apt-get install -y apt-transport-https ca-certificates curl gpg && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && echo "deb [arch=%s signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list && apt-get update && diff --git a/install/go.mod b/install/go.mod index b639e8476..bcd568966 100644 --- a/install/go.mod +++ b/install/go.mod @@ -3,8 +3,8 @@ module installer go 1.24.0 require ( - golang.org/x/term v0.37.0 + golang.org/x/term v0.38.0 gopkg.in/yaml.v3 v3.0.1 ) -require golang.org/x/sys v0.38.0 // indirect +require golang.org/x/sys v0.39.0 // indirect diff --git a/install/go.sum b/install/go.sum index 24b1a1efa..5655d91a0 100644 --- a/install/go.sum +++ b/install/go.sum @@ -1,7 +1,7 @@ -golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= -golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= -golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= +golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/install/main.go b/install/main.go index a8cb13e13..e1994fc25 100644 --- a/install/main.go +++ b/install/main.go @@ -54,8 +54,8 @@ type Config struct { type SupportedContainer string const ( - Docker SupportedContainer = "docker" - Podman SupportedContainer = "podman" + Docker SupportedContainer = "docker" + Podman SupportedContainer = "podman" Undefined SupportedContainer = "undefined" ) @@ -160,7 +160,7 @@ func main() { } else { alreadyInstalled = true fmt.Println("Looks like you already installed Pangolin!") - + // Check if MaxMind database exists and offer to update it fmt.Println("\n=== MaxMind Database Update ===") if _, err := os.Stat("config/GeoLite2-Country.mmdb"); err == nil { @@ -209,8 +209,8 @@ func main() { parsedURL, err := url.Parse(appConfig.DashboardURL) if err != nil { - fmt.Printf("Error parsing URL: %v\n", err) - return + fmt.Printf("Error parsing URL: %v\n", err) + return } config.DashboardDomain = parsedURL.Hostname() @@ -242,7 +242,7 @@ func main() { } } - if !alreadyInstalled { + if !alreadyInstalled || config.DoCrowdsecInstall { // Setup Token Section fmt.Println("\n=== Setup Token ===") @@ -359,7 +359,7 @@ func collectUserInput(reader *bufio.Reader) Config { config.EmailSMTPPort = readInt(reader, "Enter SMTP port (default 587)", 587) config.EmailSMTPUser = readString(reader, "Enter SMTP username", "") config.EmailSMTPPass = readString(reader, "Enter SMTP password", "") // Should this be readPassword? - config.EmailNoReply = readString(reader, "Enter no-reply email address", "") + config.EmailNoReply = readString(reader, "Enter no-reply email address (often the same as SMTP username)", "") } // Validate required fields @@ -371,6 +371,10 @@ func collectUserInput(reader *bufio.Reader) Config { fmt.Println("Error: Let's Encrypt email is required") os.Exit(1) } + if config.EnableEmail && config.EmailNoReply == "" { + fmt.Println("Error: No-reply email address is required when email is enabled") + os.Exit(1) + } // Advanced configuration @@ -643,28 +647,28 @@ func checkPortsAvailable(port int) error { func downloadMaxMindDatabase() error { fmt.Println("Downloading MaxMind GeoLite2 Country database...") - + // Download the GeoLite2 Country database - if err := run("curl", "-L", "-o", "GeoLite2-Country.tar.gz", + if err := run("curl", "-L", "-o", "GeoLite2-Country.tar.gz", "https://github.com/GitSquared/node-geolite2-redist/raw/refs/heads/master/redist/GeoLite2-Country.tar.gz"); err != nil { return fmt.Errorf("failed to download GeoLite2 database: %v", err) } - + // Extract the database if err := run("tar", "-xzf", "GeoLite2-Country.tar.gz"); err != nil { return fmt.Errorf("failed to extract GeoLite2 database: %v", err) } - + // Find the .mmdb file and move it to the config directory if err := run("bash", "-c", "mv GeoLite2-Country_*/GeoLite2-Country.mmdb config/"); err != nil { return fmt.Errorf("failed to move GeoLite2 database to config directory: %v", err) } - + // Clean up the downloaded files if err := run("rm", "-rf", "GeoLite2-Country.tar.gz", "GeoLite2-Country_*"); err != nil { fmt.Printf("Warning: failed to clean up temporary files: %v\n", err) } - + fmt.Println("MaxMind GeoLite2 Country database downloaded successfully!") return nil } diff --git a/messages/bg-BG.json b/messages/bg-BG.json index 7c31feb5e..5deb59e3c 100644 --- a/messages/bg-BG.json +++ b/messages/bg-BG.json @@ -1,12 +1,12 @@ { - "setupCreate": "Създайте своя организация, сайт и ресурси", + "setupCreate": "Създайте организацията, сайта и ресурсите", "setupNewOrg": "Нова организация", "setupCreateOrg": "Създаване на организация", "setupCreateResources": "Създаване на ресурси", "setupOrgName": "Име на организацията", - "orgDisplayName": "Това е публичното име на вашата организация.", + "orgDisplayName": "Това е публичното име на организацията.", "orgId": "Идентификатор на организация", - "setupIdentifierMessage": "Това е уникалният идентификатор на вашата организация. Това е различно от публичното ѝ име.", + "setupIdentifierMessage": "Това е уникалният идентификатор за организацията.", "setupErrorIdentifier": "Идентификаторът на организация вече е зает. Моля, изберете друг.", "componentsErrorNoMemberCreate": "В момента не сте част от организация. Създайте организация, за да продължите.", "componentsErrorNoMember": "В момента не сте част от организация.", @@ -50,10 +50,10 @@ "siteMessageRemove": "След премахване, сайтът вече няма да бъде достъпен. Всички цели, свързани със сайта, също ще бъдат премахнати.", "siteQuestionRemove": "Сигурни ли сте, че искате да премахнете сайта от организацията?", "siteManageSites": "Управление на сайтове", - "siteDescription": "Позволете свързване към вашата мрежа чрез сигурни тунели", + "siteDescription": "Създайте и управлявайте сайтове, за да осигурите свързаност със частни мрежи", "siteCreate": "Създайте сайт", "siteCreateDescription2": "Следвайте стъпките по-долу, за да създадете и свържете нов сайт", - "siteCreateDescription": "Създайте нов сайт, за да започнете да свързвате вашите ресурси", + "siteCreateDescription": "Създайте нов сайт, за да започнете да свързвате ресурси", "close": "Затвори", "siteErrorCreate": "Грешка при създаване на сайт", "siteErrorCreateKeyPair": "Ключова двойка или настройки по подразбиране на сайта не са намерени", @@ -74,7 +74,7 @@ "siteInstallNewt": "Инсталирайте Newt", "siteInstallNewtDescription": "Пуснете Newt на вашата система", "WgConfiguration": "WireGuard конфигурация", - "WgConfigurationDescription": "Използвайте следната конфигурация, за да се свържете с вашата мрежа", + "WgConfigurationDescription": "Използвайте следната конфигурация, за да се свържете с мрежата", "operatingSystem": "Операционна система", "commands": "Команди", "recommended": "Препоръчано", @@ -87,32 +87,32 @@ "siteUpdated": "Сайтът е обновен", "siteUpdatedDescription": "Сайтът е актуализиран.", "siteGeneralDescription": "Конфигурирайте общи настройки за този сайт", - "siteSettingDescription": "Настройте настройките на вашия сайт", + "siteSettingDescription": "Конфигурирайте настройките на сайта", "siteSetting": "Настройки на {siteName}", - "siteNewtTunnel": "Newt тунел (Препоръчително)", - "siteNewtTunnelDescription": "Най-лесният начин да създадете входна точка в мрежата си. Без допълнително конфигуриране.", + "siteNewtTunnel": "Нов Сайт (Препоръчително)", + "siteNewtTunnelDescription": "Най-лесният начин да създадете точка за достъп до всяка мрежа. Няма нужда от допълнителни настройки.", "siteWg": "Основен WireGuard", "siteWgDescription": "Use any WireGuard client to establish a tunnel. Manual NAT setup required. ONLY WORKS ON SELF HOSTED NODES", "siteWgDescriptionSaas": "Използвайте всеки WireGuard клиент за установяване на тунел. Ръчно нат задаване е необходимо. РАБОТИ САМО НА СОБСТВЕНИ УЗЛИ.", "siteLocalDescription": "Local resources only. No tunneling. ONLY WORKS ON SELF HOSTED NODES", "siteLocalDescriptionSaas": "Само локални ресурси. Без тунелиране. Достъпно само на отдалечени възли.", "siteSeeAll": "Вижте всички сайтове", - "siteTunnelDescription": "Определете как искате да се свържете с вашия сайт", - "siteNewtCredentials": "Newt Удостоверения", - "siteNewtCredentialsDescription": "Това е така, защото Newt ще се удостовери със сървъра", - "siteCredentialsSave": "Запазете вашите удостоверения", + "siteTunnelDescription": "Определете как искате да се свържете със сайта", + "siteNewtCredentials": "Пълномощия", + "siteNewtCredentialsDescription": "Това е как сайтът ще се удостоверява с сървъра", + "siteCredentialsSave": "Запазете Пълномощията", "siteCredentialsSaveDescription": "Ще можете да виждате това само веднъж. Уверете се да го копирате на сигурно място.", "siteInfo": "Информация за сайта", "status": "Статус", "shareTitle": "Управление на връзки за споделяне", - "shareDescription": "Създайте споделяеми връзки, за да разрешите временен или постоянен достъп до вашите ресурси", + "shareDescription": "Създайте споделими връзки, за да предоставите временен или постоянен достъп до прокси ресурсите", "shareSearch": "Търсене на връзки за споделяне...", "shareCreate": "Създайте връзка за споделяне", "shareErrorDelete": "Неуспешно изтриване на връзката", "shareErrorDeleteMessage": "Възникна грешка при изтриване на връзката", "shareDeleted": "Връзката беше изтрита", "shareDeletedDescription": "Връзката беше премахната", - "shareTokenDescription": "Вашият достъп токен може да се предава по два начина: като параметър на URL или в заглавките на заявката. Тези трябва да се предават от клиента при всяка заявка за удостоверен достъп.", + "shareTokenDescription": "Достъпният токен може да бъде предаван по два начина: като параметър или в хедърите на заявките. Те трябва да бъдат предавани от клиента при всяка заявка за удостоверен достъп.", "accessToken": "Достъп Токен", "usageExamples": "Примери за използване", "tokenId": "Токен ID", @@ -121,7 +121,7 @@ "importantNote": "Важно бележка", "shareImportantDescription": "По съображения за сигурност, използването на заглавки се препоръчва пред параметри на заявка, когато е възможно, тъй като параметри на заявка могат да бъдат записвани в логове на сървъра или в историята на браузъра.", "token": "Токен", - "shareTokenSecurety": "Пазете вашият достъп токен в безопасност. Не го споделяйте в публичнодостъпни зони или клиентски код.", + "shareTokenSecurety": "Запазете сигурността на токена за достъп. Не го споделяйте в общодостъпни зони или в клиентски код.", "shareErrorFetchResource": "Неуспешно вземане на ресурси", "shareErrorFetchResourceDescription": "Възникна грешка при опит за вземане на ресурсите", "shareErrorCreate": "Неуспешно създаване на връзка за споделяне", @@ -144,8 +144,10 @@ "expires": "Изтича", "never": "Никога", "shareErrorSelectResource": "Моля, изберете ресурс", - "resourceTitle": "Управление на ресурси", - "resourceDescription": "Създайте сигурни проксита към вашите частни приложения", + "proxyResourceTitle": "Управление на обществени ресурси", + "proxyResourceDescription": "Създайте и управлявайте ресурси, които са общодостъпни чрез уеб браузър.", + "clientResourceTitle": "Управление на частни ресурси", + "clientResourceDescription": "Създайте и управлявайте ресурси, които са достъпни само чрез свързан клиент.", "resourcesSearch": "Търсене на ресурси...", "resourceAdd": "Добавете ресурс", "resourceErrorDelte": "Грешка при изтриване на ресурс", @@ -155,9 +157,9 @@ "resourceMessageRemove": "След като се премахне, ресурсът няма повече да бъде достъпен. Всички цели, свързани с ресурса, също ще бъдат премахнати.", "resourceQuestionRemove": "Сигурни ли сте, че искате да премахнете ресурса от организацията?", "resourceHTTP": "HTTPS ресурс", - "resourceHTTPDescription": "Прокси заявки към вашето приложение през HTTPS с помощта на субдомейн или базов домейн.", + "resourceHTTPDescription": "Прокси заяви към приложението по HTTPS използвайки поддомейн или базов домейн.", "resourceRaw": "Суров TCP/UDP ресурс", - "resourceRawDescription": "Прокси заявки към вашето приложение през TCP/UDP с помощта на номер на порт.", + "resourceRawDescription": "Прокси заяви към приложението по TCP/UDP използвайки номер на порт. Това работи само когато сайтовете са свързани към възли.", "resourceCreate": "Създайте ресурс", "resourceCreateDescription": "Следвайте стъпките по-долу, за да създадете нов ресурс", "resourceSeeAll": "Вижте всички ресурси", @@ -171,22 +173,22 @@ "noCountryFound": "Не е намерена държава.", "siteSelectionDescription": "Този сайт ще осигури свързаност до целта.", "resourceType": "Тип ресурс", - "resourceTypeDescription": "Определете как искате да получите достъп до вашия ресурс", + "resourceTypeDescription": "Определете как да се достъпи ресурсът", "resourceHTTPSSettings": "HTTPS настройки", - "resourceHTTPSSettingsDescription": "Конфигурирайте как вашият ресурс ще бъде достъпен през HTTPS", + "resourceHTTPSSettingsDescription": "Конфигурирайте как ресурсът ще бъде достъпен по HTTPS", "domainType": "Тип домейн", "subdomain": "Субдомейн", "baseDomain": "Базов домейн", - "subdomnainDescription": "Субдомейнът, в който ще бъде достъпен вашият ресурс.", + "subdomnainDescription": "Поддомейнът, където ресурсът ще бъде достъпен.", "resourceRawSettings": "TCP/UDP настройки", - "resourceRawSettingsDescription": "Настройте как ресурсът ви ще бъде достъпен през TCP/UDP. Свързвате ресурса към порт на хост сървъра Pangolin, за да го достъпвате от server-public-ip:mapped-port.", + "resourceRawSettingsDescription": "Конфигурирайте как ресурсът ще бъде достъпен чрез TCP/UDP", "protocol": "Протокол", "protocolSelect": "Изберете протокол", "resourcePortNumber": "Номер на порт", "resourcePortNumberDescription": "Външен номер на порт за прокси заявки.", "cancel": "Отмяна", "resourceConfig": "Конфигурационни фрагменти", - "resourceConfigDescription": "Копирайте и поставете тези конфигурационни фрагменти за настройка на вашия TCP/UDP ресурс", + "resourceConfigDescription": "Копирайте и поставете тези конфигурационни отрязъци, за да настроите TCP/UDP ресурса", "resourceAddEntrypoints": "Traefik: Добавете Входни точки", "resourceExposePorts": "Gerbil: Изложете портове в Docker Compose", "resourceLearnRaw": "Научете как да конфигурирате TCP/UDP ресурси", @@ -202,14 +204,14 @@ "proxy": "Прокси", "internal": "Вътрешен", "rules": "Правила", - "resourceSettingDescription": "Конфигурирайте настройките на вашия ресурс", + "resourceSettingDescription": "Конфигурирайте настройките на ресурса", "resourceSetting": "Настройки на {resourceName}", - "alwaysAllow": "Винаги позволявай", - "alwaysDeny": "Винаги отказвай", + "alwaysAllow": "Заобикаляне на Ауторизацията", + "alwaysDeny": "Блокиране на Достъпа", "passToAuth": "Прехвърляне към удостоверяване", - "orgSettingsDescription": "Конфигурирайте общите настройки на вашата организация", + "orgSettingsDescription": "Конфигурирайте настройките на организацията", "orgGeneralSettings": "Настройки на организацията", - "orgGeneralSettingsDescription": "Управлявайте детайлите и конфигурацията на вашата организация", + "orgGeneralSettingsDescription": "Управлявайте детайлите и конфигурацията на организацията", "saveGeneralSettings": "Запазете общите настройки", "saveSettings": "Запазване на настройките", "orgDangerZone": "Опасна зона", @@ -232,7 +234,7 @@ "orgMissing": "Липсва идентификатор на организация", "orgMissingMessage": "Невъзможност за регенериране на покана без идентификатор на организация.", "accessUsersManage": "Управление на потребители", - "accessUsersDescription": "Поканете потребители и ги добавете в роли, за да управлявате достъпа до вашата организация", + "accessUsersDescription": "Канете и управлявайте потребители с достъп до тази организация", "accessUsersSearch": "Търсене на потребители...", "accessUserCreate": "Създайте потребител", "accessUserRemove": "Премахнете потребител", @@ -241,13 +243,13 @@ "role": "Роля", "nameRequired": "Името е задължително", "accessRolesManage": "Управление на роли", - "accessRolesDescription": "Конфигурирайте роли, за да управлявате достъпа до вашата организация", + "accessRolesDescription": "Създайте и управлявайте роли за потребители в организацията", "accessRolesSearch": "Търсене на роли...", "accessRolesAdd": "Добавете роля", "accessRoleDelete": "Изтриване на роля", "description": "Описание", "inviteTitle": "Отворени покани", - "inviteDescription": "Управление на вашите покани към други потребители", + "inviteDescription": "Управлявайте покани за други потребители да се присъединят към организацията", "inviteSearch": "Търсене на покани...", "minutes": "Минути", "hours": "Часове", @@ -261,13 +263,13 @@ "apiKeysErrorCreate": "Грешка при създаване на API ключ", "apiKeysErrorSetPermission": "Грешка при задаване на разрешения", "apiKeysCreate": "Генерирайте API ключ", - "apiKeysCreateDescription": "Генерирайте нов API ключ за вашата организация", + "apiKeysCreateDescription": "Създайте нов API ключ за организацията", "apiKeysGeneralSettings": "Разрешения", "apiKeysGeneralSettingsDescription": "Определете какво може да прави този API ключ", - "apiKeysList": "Вашият API ключ", - "apiKeysSave": "Запазване на вашия API ключ", + "apiKeysList": "Нов API Ключ", + "apiKeysSave": "Запазете API Ключа", "apiKeysSaveDescription": "Ще можете да виждате това само веднъж. Уверете се да го копирате на сигурно място.", - "apiKeysInfo": "Вашият API ключ е:", + "apiKeysInfo": "API ключът е:", "apiKeysConfirmCopy": "Копирах API ключа", "generate": "Генериране", "done": "Готово", @@ -424,7 +426,7 @@ "userCreated": "Потребителят е създаден", "userCreatedDescription": "Потребителят беше успешно създаден.", "userTypeInternal": "Вътрешен потребител", - "userTypeInternalDescription": "Поканете потребител да се присъедини директно към вашата организация.", + "userTypeInternalDescription": "Поканете потребител да се присъедини директно към организацията.", "userTypeExternal": "Външен потребител", "userTypeExternalDescription": "Създайте потребител с външен доставчик на идентичност.", "accessUserCreateDescription": "Следвайте стъпките по-долу, за да създадете нов потребител", @@ -436,6 +438,16 @@ "inviteEmailSent": "Изпратете покана по имейл до потребителя", "inviteValid": "Валидна за", "selectDuration": "Изберете продължителност", + "selectResource": "Изберете Ресурс", + "filterByResource": "Филтрирай По Ресурс", + "resetFilters": "Нулиране на Филтрите", + "totalBlocked": "Заявки Блокирани От Pangolin", + "totalRequests": "Общо Заявки", + "requestsByCountry": "Заявки По Държава", + "requestsByDay": "Заявки По Ден", + "blocked": "Блокирани", + "allowed": "Позволени", + "topCountries": "Топ Държави", "accessRoleSelect": "Изберете роля", "inviteEmailSentDescription": "Имейлът е изпратен до потребителя с достъпния линк по-долу. Те трябва да достъпят линка, за да приемат поканата.", "inviteSentDescription": "Потребителят е поканен. Те трябва да достъпят линка по-долу, за да приемат поканата.", @@ -458,13 +470,13 @@ "accessControlsSubmit": "Запазване на контролите за достъп", "roles": "Роли", "accessUsersRoles": "Управление на потребители и роли", - "accessUsersRolesDescription": "Поканете потребители и ги добавете към роли, за да управлявате достъпа до вашата организация", + "accessUsersRolesDescription": "Поканете потребители и ги добавете към роли, за да управлявате достъпа до организацията", "key": "Ключ", "createdAt": "Създаден на", "proxyErrorInvalidHeader": "Невалидна стойност за заглавие на хоста. Използвайте формат на име на домейн, или оставете празно поле за да премахнете персонализирано заглавие на хост.", "proxyErrorTls": "Невалидно име на TLS сървър. Използвайте формат на име на домейн, или оставете празно за да премахнете името на TLS сървъра.", "proxyEnableSSL": "Активиране на SSL", - "proxyEnableSSLDescription": "Активиране на SSL/TLS криптиране за сигурни HTTPS връзки към вашите цели.", + "proxyEnableSSLDescription": "Активирайте SSL/TLS криптиране за сигурни HTTPS връзки към целите.", "target": "Цел", "configureTarget": "Конфигуриране на цели", "targetErrorFetch": "Неуспешно извличане на цели", @@ -480,29 +492,29 @@ "targetsErrorUpdate": "Неуспешно актуализиране на целите", "targetsErrorUpdateDescription": "Възникна грешка при актуализиране на целите", "targetTlsUpdate": "Настройките на TLS са актуализирани", - "targetTlsUpdateDescription": "Вашите настройки на TLS бяха успешно актуализирани", + "targetTlsUpdateDescription": "Настройките за TLS бяха успешно актуализирани", "targetErrorTlsUpdate": "Неуспешно актуализиране на настройки на TLS", "targetErrorTlsUpdateDescription": "Възникна грешка при актуализиране на настройки на TLS", "proxyUpdated": "Настройките на прокси са актуализирани", - "proxyUpdatedDescription": "Вашите настройки на прокси бяха успешно актуализирани", + "proxyUpdatedDescription": "Настройките за прокси бяха успешно актуализирани", "proxyErrorUpdate": "Неуспешно актуализиране на настройки на прокси", "proxyErrorUpdateDescription": "Възникна грешка при актуализиране на настройки на прокси", - "targetAddr": "IP / Хост име", + "targetAddr": "Хост", "targetPort": "Порт", "targetProtocol": "Протокол", "targetTlsSettings": "Конфигурация на защитена връзка", - "targetTlsSettingsDescription": "Конфигурирайте SSL/TLS настройките за вашия ресурс", + "targetTlsSettingsDescription": "Конфигурирайте SSL/TLS настройки за ресурса", "targetTlsSettingsAdvanced": "Разширени TLS настройки", "targetTlsSni": "Имя на TLS сървър", "targetTlsSniDescription": "Името на TLS сървъра за използване за SNI. Оставете празно, за да използвате подразбиране.", "targetTlsSubmit": "Запазване на настройките", "targets": "Конфигурация на целите", - "targetsDescription": "Настройте цели за маршрутиране на трафик към вашите бекенд услуги", + "targetsDescription": "Настройте целите да пренасочват трафика към бекенд услугите", "targetStickySessions": "Активиране на постоянни сесии", "targetStickySessionsDescription": "Запазване на връзките със същото задно целево място за цялата сесия.", "methodSelect": "Изберете метод", "targetSubmit": "Добавяне на цел", - "targetNoOne": "Този ресурс няма цели. Добавете цел, за да конфигурирате къде да изпращате заявки към вашия бекенд.", + "targetNoOne": "Този ресурс няма цели. Добавете цел, за да конфигурирате къде да се изпращат заявките към бекенда.", "targetNoOneDescription": "Добавянето на повече от една цел ще активира натоварването на баланса.", "targetsSubmit": "Запазване на целите", "addTarget": "Добавете цел", @@ -516,9 +528,11 @@ "targetCreatedDescription": "Целта беше успешно създадена", "targetErrorCreate": "Неуспешно създаване на целта", "targetErrorCreateDescription": "Възникна грешка при създаването на целта", + "tlsServerName": "TLS Име на Сървъра", + "tlsServerNameDescription": "TLS името на сървъра, което ще се използва за SNI", "save": "Запази", "proxyAdditional": "Допълнителни настройки на прокси", - "proxyAdditionalDescription": "Конфигурирайте как вашият ресурс обработва прокси настройки", + "proxyAdditionalDescription": "Конфигурирайте как ресурсът обработва настройките на прокси", "proxyCustomHeader": "Персонализиран хост заглавие", "proxyCustomHeaderDescription": "Хост заглавието, което да зададете при прокси заявките. Оставете празно, за да използвате подразбиране.", "proxyAdditionalSubmit": "Запазване на прокси настройките", @@ -558,7 +572,7 @@ "rulesMatchType": "Тип на съвпадение", "value": "Стойност", "rulesAbout": "Относно правилата", - "rulesAboutDescription": "Правилата ви позволяват да контролирате достъпа до вашия ресурс въз основа на набор от критерии. Можете да създавате правила за разрешаване или отказ на достъп въз основа на IP адрес или URL път.", + "rulesAboutDescription": "Правилата ви позволяват да контролирате достъпа до ресурса въз основа на набор от критерии. Можете да създадете правила за позволяване или отказ на достъп въз основа на IP адрес или URL път.", "rulesActions": "Действия", "rulesActionAlwaysAllow": "Винаги позволи: заобикаля всички методи за автентикация", "rulesActionAlwaysDeny": "Винаги отказвай: блокиране на всички заявки; не може да се направи опит за автентикация", @@ -570,7 +584,7 @@ "rulesEnable": "Активирай правилата", "rulesEnableDescription": "Активиране или деактивиране на оценката на правилата за този ресурс", "rulesResource": "Конфигурация на правилата за ресурси", - "rulesResourceDescription": "Конфигурирайте правила, за да контролирате достъпа до вашия ресурс", + "rulesResourceDescription": "Конфигурирайте правила за контролиране на достъпа до ресурса", "ruleSubmit": "Добави правило", "rulesNoOne": "Няма правила. Добавете правило чрез формуляра.", "rulesOrder": "Правилата се оценяват по приоритет в нарастващ ред.", @@ -586,7 +600,7 @@ "none": "Няма", "unknown": "Неизвестно", "resources": "Ресурси", - "resourcesDescription": "Ресурсите са проксита за приложения, работещи във вашата частна мрежа. Създайте ресурс за всеки HTTP/HTTPS или суров TCP/UDP услуга във вашата частна мрежа. Всеки ресурс трябва да бъде свързан със сайт, за да се осигури частна, сигурна свързаност чрез криптиран WireGuard тунел.", + "resourcesDescription": "Ресурсите са прокси към приложения, работещи в частната мрежа. Създайте ресурс за всяка HTTP/HTTPS или сурова TCP/UDP услуга във вашата частна мрежа. Всеки ресурс трябва да бъде свързан със сайт, за да се позволи частна, сигурна свързаност през криптиран WireGuard тунел.", "resourcesWireGuardConnect": "Сигурно свързване с криптиране на WireGuard", "resourcesMultipleAuthenticationMethods": "Конфигуриране на множество методи за автентикация", "resourcesUsersRolesAccess": "Контрол на достъпа, базиран на потребители и роли", @@ -597,7 +611,7 @@ "resourceSelect": "Изберете ресурс", "shareLinks": "Споделени връзки", "share": "Споделени връзки", - "shareDescription2": "Създайте споделени връзки към вашите ресурси. Връзките осигуряват временно или неограничено достъп до вашия ресурс. Можете да конфигурирате продължителността на изтичане на връзката при създаването й.", + "shareDescription2": "Създайте връзки за достъп до ресурси. Връзките предоставят временен или неограничен достъп до вашия ресурс. Можете да конфигурирате продължителността на изтичане на връзката, когато я създавате.", "shareEasyCreate": "Лесно за създаване и споделяне", "shareConfigurableExpirationDuration": "Конфигурируемо време на изтичане", "shareSecureAndRevocable": "Сигурни и отменяеми", @@ -607,19 +621,19 @@ "unknownCommand": "Неизвестна команда", "newtErrorFetchReleases": "Неуспешно получаване на информация за изданието: {err}", "newtErrorFetchLatest": "Грешка при получаването на последното издание: {err}", - "newtEndpoint": "Newt Изходен пункт", - "newtId": "Newt ID", - "newtSecretKey": "Newt Secret Key", + "newtEndpoint": "Крайна точка", + "newtId": "Идентификационен номер", + "newtSecretKey": "Секретен ключ", "architecture": "Архитектура", "sites": "Сайтове", - "siteWgAnyClients": "Използвайте всеки WireGuard клиент за свързване. Ще трябва да адресирате вашите вътрешни ресурси, използвайки IP на равностойния.", + "siteWgAnyClients": "Използвайте клиент на WireGuard, за да се свържете. Ще трябва да използвате вътрешните ресурси чрез IP адреса на връстника.", "siteWgCompatibleAllClients": "Съвместим с всички WireGuard клиенти", "siteWgManualConfigurationRequired": "Необходима е ръчна конфигурация", "userErrorNotAdminOrOwner": "Потребителят не е администратор или собственик", "pangolinSettings": "Настройки - Панголин", "accessRoleYour": "Вашата роля:", - "accessRoleSelect2": "Изберете роля", - "accessUserSelect": "Изберете потребител", + "accessRoleSelect2": "Изберете роли", + "accessUserSelect": "Изберете потребители", "otpEmailEnter": "Въведете имейл", "otpEmailEnterDescription": "Натиснете Enter, за да добавите имейл след като сте го въведели в полето за въвеждане.", "otpEmailErrorInvalid": "Невалиден имейл адрес. Wilcard (*) трябва да е цялата част от локалния адрес.", @@ -671,7 +685,7 @@ "resourcePincodeSetupTitle": "Задай ПИН код", "resourcePincodeSetupTitleDescription": "Задайте ПИН код, за да защитите този ресурс", "resourceRoleDescription": "Администраторите винаги могат да имат достъп до този ресурс.", - "resourceUsersRoles": "Потребители и роли", + "resourceUsersRoles": "Контроли за достъп", "resourceUsersRolesDescription": "Конфигурирайте кои потребители и роли могат да посещават този ресурс", "resourceUsersRolesSubmit": "Запазете потребители и роли", "resourceWhitelistSave": "Успешно запазено", @@ -702,6 +716,7 @@ "resourceTransferSubmit": "Прехвърлете ресурс", "siteDestination": "Дестинационен сайт", "searchSites": "Търси сайтове", + "countries": "Държави", "accessRoleCreate": "Създайте роля", "accessRoleCreateDescription": "Създайте нова роля за групиране на потребители и управление на техните разрешения.", "accessRoleCreateSubmit": "Създайте роля", @@ -766,15 +781,15 @@ "idpOidcConfigure": "Конфигурация на OAuth2/OIDC", "idpOidcConfigureDescription": "Конфигурирайте OAuth2/OIDC доставчика на крайни точки и кредити", "idpClientId": "ID на клиента", - "idpClientIdDescription": "OAuth2 идентификационен номер на клиента от вашия доставчик на идентичност", + "idpClientIdDescription": "OAuth2 идентификационен клиент от доставчика на идентичност", "idpClientSecret": "Секретен код на клиента", - "idpClientSecretDescription": "OAuth2 секретен код на клиента от вашия доставчик на идентичност", + "idpClientSecretDescription": "OAuth2 секретен клиент от доставчика на идентичност", "idpAuthUrl": "URL за удостоверение", "idpAuthUrlDescription": "OAuth2 крайна точка за удостоверяване URL", "idpTokenUrl": "URL на токена", "idpTokenUrlDescription": "OAuth2 крайна точка на токена URL", "idpOidcConfigureAlert": "Важно информация", - "idpOidcConfigureAlertDescription": "След създаването на доставчика на идентичност ще е необходимо да конфигурирате URL за обратна връзка в настройките на вашия доставчик на идентичност. URL за обратна връзка ще бъде предоставен след успешно създаване.", + "idpOidcConfigureAlertDescription": "След създаването на доставчика на идентичност, ще трябва да конфигурирате адреса за callback в настройките на доставчика на идентичност. Адресът за callback ще бъде предоставен след успешно създаване.", "idpToken": "Конфигуриране на токените", "idpTokenDescription": "Конфигурирайте как да извлечете информация за потребителя от ID токена", "idpJmespathAbout": "Относно JMESPath", @@ -791,7 +806,7 @@ "idpSubmit": "Създайте доставчик на идентичност", "orgPolicies": "Организационни политики", "idpSettings": "{idpName} Настройки", - "idpCreateSettingsDescription": "Конфигурирайте настройките за вашия доставчик на идентичност", + "idpCreateSettingsDescription": "Конфигурирайте настройките за доставчика на идентичност", "roleMapping": "Ролева карта", "orgMapping": "Организационна карта", "orgPoliciesSearch": "Търсене на организационни политики...", @@ -826,7 +841,7 @@ "idpUpdatedDescription": "Идентификационният доставчик беше актуализиран успешно", "redirectUrl": "URL за пренасочване", "redirectUrlAbout": "За URL за пренасочване", - "redirectUrlAboutDescription": "Това е URL, към който потребителите ще бъдат пренасочени след удостоверяване. Трябва да конфигурирате този URL в настройките на вашия доставчик на идентификация.", + "redirectUrlAboutDescription": "Това е URL адресът, към който потребителите ще бъдат пренасочени след удостоверяване. Трябва да конфигурирате този URL адрес в настройките на доставчика на идентичност.", "pangolinAuth": "Authent - Pangolin", "verificationCodeLengthRequirements": "Вашият код за удостоверяване трябва да бъде 8 символа.", "errorOccurred": "Възникна грешка", @@ -909,6 +924,10 @@ "passwordResetSent": "Ще изпратим код за нулиране на паролата на този имейл адрес.", "passwordResetCode": "Код за нулиране", "passwordResetCodeDescription": "Проверете имейла си за код за нулиране.", + "generatePasswordResetCode": "Генериране на код за нулиране на парола", + "passwordResetCodeGenerated": "Кодът за нулиране на парола е генериран", + "passwordResetCodeGeneratedDescription": "Споделете този код с потребителя. Той може да го използва, за да нулира паролата си.", + "passwordResetUrl": "URL за нулиране", "passwordNew": "Нова парола", "passwordNewConfirm": "Потвърдете новата парола", "changePassword": "Промяна на парола", @@ -926,6 +945,9 @@ "pincodeAuth": "Код на удостоверителя", "pincodeSubmit2": "Изпрати код", "passwordResetSubmit": "Заявка за нулиране", + "passwordResetAlreadyHaveCode": "Въведете код за нулиране на парола", + "passwordResetSmtpRequired": "Моля, свържете се с вашия администратор", + "passwordResetSmtpRequiredDescription": "Кодът за нулиране на парола е задължителен за нулиране на паролата ви. Моля, свържете се с вашия администратор за помощ.", "passwordBack": "Назад към Парола", "loginBack": "Връщане към вход", "signup": "Регистрация", @@ -1091,12 +1113,15 @@ "actionListSiteResources": "Списък на ресурсите на сайта", "actionUpdateSiteResource": "Актуализиране на сайт ресурс", "actionListInvitations": "Списък с покани", + "actionExportLogs": "Експортиране на дневници", + "actionViewLogs": "Преглед на дневници", "noneSelected": "Нищо не е избрано", "orgNotFound2": "Няма намерени организации.", "searchProgress": "Търсене...", "create": "Създаване", "orgs": "Организации", "loginError": "Възникна грешка при влизане", + "loginRequiredForDevice": "Необходим е вход за удостоверяване на вашето устройство.", "passwordForgot": "Забравена парола?", "otpAuth": "Двуфакторно удостоверяване", "otpAuthDescription": "Въведете кода от приложението за удостоверяване или един от вашите резервни кодове за еднократна употреба.", @@ -1151,19 +1176,29 @@ "sidebarHome": "Начало", "sidebarSites": "Сайтове", "sidebarResources": "Ресурси", + "sidebarProxyResources": "Публично", + "sidebarClientResources": "Частно", "sidebarAccessControl": "Контрол на достъпа", + "sidebarLogsAndAnalytics": "Дневници и анализи", "sidebarUsers": "Потребители", + "sidebarAdmin": "Администратор", "sidebarInvitations": "Покани", "sidebarRoles": "Роли", - "sidebarShareableLinks": "Споделени връзки", + "sidebarShareableLinks": "Връзки", "sidebarApiKeys": "API ключове", "sidebarSettings": "Настройки", "sidebarAllUsers": "Всички потребители", "sidebarIdentityProviders": "Идентификационни доставчици", "sidebarLicense": "Лиценз", "sidebarClients": "Клиенти", + "sidebarUserDevices": "Потребители", + "sidebarMachineClients": "Машини", "sidebarDomains": "Домейни", + "sidebarGeneral": "Общи", + "sidebarLogAndAnalytics": "Лог & Анализи", "sidebarBluePrints": "Чертежи", + "sidebarOrganization": "Организация", + "sidebarLogsAnalytics": "Анализи", "blueprints": "Чертежи", "blueprintsDescription": "Прилагайте декларативни конфигурации и преглеждайте предишни изпълнения", "blueprintAdd": "Добави Чертеж", @@ -1174,7 +1209,7 @@ "blueprintDetailsDescription": "Вижте резултата от приложените чертежи и всички възникнали грешки", "blueprintInfo": "Информация за Чертежа", "message": "Съобщение", - "blueprintContentsDescription": "Дефинирайте YAML съдържанието, описващо вашата инфраструктура", + "blueprintContentsDescription": "Определете съдържанието на YAML, описващо инфраструктурата", "blueprintErrorCreateDescription": "Възникна грешка при прилагането на чертежа", "blueprintErrorCreate": "Грешка при създаването на чертеж", "searchBlueprintProgress": "Търси чертежи...", @@ -1230,15 +1265,15 @@ "loading": "Зареждане", "restart": "Рестарт", "domains": "Домейни", - "domainsDescription": "Управление на домейни за вашата организация", + "domainsDescription": "Създайте и управлявайте наличните домейни в организацията", "domainsSearch": "Търсене на домейни...", "domainAdd": "Добавяне на домейн", - "domainAddDescription": "Регистриране на нов домейн с вашата организация", + "domainAddDescription": "Регистрирайте нов домейн в организацията", "domainCreate": "Създаване на домейн", "domainCreatedDescription": "Домейнът е създаден успешно", "domainDeletedDescription": "Домейнът е изтрит успешно", - "domainQuestionRemove": "Сигурни ли сте, че искате да премахнете домейна от вашия профил?", - "domainMessageRemove": "След премахването, домейнът вече няма да бъде свързан с вашия профил.", + "domainQuestionRemove": "Сигурни ли сте, че искате да премахнете домейна?", + "domainMessageRemove": "След като бъде премахнат, домейнът вече няма да бъде свързан с организацията.", "domainConfirmDelete": "Потвърдете изтриването на домейн", "domainDelete": "Изтриване на домейн", "domain": "Домейн", @@ -1257,7 +1292,7 @@ "pending": "Чакащо", "sidebarBilling": "Фактуриране", "billing": "Фактуриране", - "orgBillingDescription": "Управление на информацията за фактуриране и абонаментите", + "orgBillingDescription": "Управлявайте информацията за плащане и абонаментите", "github": "GitHub", "pangolinHosted": "Hosted Pangolin", "fossorial": "Fossorial", @@ -1285,9 +1320,9 @@ "productUpdateTitle": "Актуализации на продукта", "productUpdateEmpty": "Няма актуализации", "dismissAll": "Отхвърляне на всички", - "pangolinUpdateAvailable": "Налична е нова версия", + "pangolinUpdateAvailable": "Актуализация е налична", "pangolinUpdateAvailableInfo": "Версия {version} е готова за инсталиране", - "pangolinUpdateAvailableReleaseNotes": "Преглед на бележките за издание", + "pangolinUpdateAvailableReleaseNotes": "Преглед на бележките за изданието", "newtUpdateAvailable": "Ново обновление", "newtUpdateAvailableInfo": "Нова версия на Newt е налична. Моля, обновете до последната версия за най-добро изживяване.", "domainPickerEnterDomain": "Домейн", @@ -1300,7 +1335,7 @@ "domainPickerSortAsc": "A-Z", "domainPickerSortDesc": "Z-A", "domainPickerCheckingAvailability": "Проверка на наличността...", - "domainPickerNoMatchingDomains": "Не са намерени съвпадащи домейни. Опитайте се с друг домейн или проверете настройките на домейна на вашата организация.", + "domainPickerNoMatchingDomains": "Не са намерени съвпадащи домейни. Опитайте различен домейн или проверете настройките на домейна на организацията.", "domainPickerOrganizationDomains": "Домейни на организацията", "domainPickerProvidedDomains": "Предоставени домейни", "domainPickerSubdomain": "Поддомейн: {subdomain}", @@ -1334,7 +1369,7 @@ "billingModifySubscription": "Промяна на абонамента", "billingStartSubscription": "Започване на абонамент", "billingRecurringCharge": "Повтаряща се такса", - "billingManageSubscriptionSettings": "Управление на настройките и предпочитанията на абонамента ви", + "billingManageSubscriptionSettings": "Управление на настройките и предпочитанията за абонамент", "billingNoActiveSubscription": "Нямате активен абонамент. Започнете абонамента си, за да увеличите лимитите за използване.", "billingFailedToLoadSubscription": "Грешка при зареждане на абонамент", "billingFailedToLoadUsage": "Грешка при зареждане на използването", @@ -1345,9 +1380,9 @@ "billingPortalError": "Грешка в портала", "billingDataUsageInfo": "Таксува се за всички данни, прехвърляни през вашите защитени тунели, когато сте свързани към облака. Това включва както входящия, така и изходящия трафик за всички ваши сайтове. Когато достигнете лимита си, вашите сайтове ще бъдат прекъснати, докато не надстроите плана или не намалите използването. Данните не се таксуват при използване на възли.", "billingOnlineTimeInfo": "Таксува се на база колко време вашите сайтове остават свързани с облака. Пример: 44,640 минути се равняват на един сайт работещ 24/7 за цял месец. Когато достигнете лимита си, вашите сайтове ще бъдат прекъснати, докато не надстроите плана или не намалите използването. Времето не се таксува при използване на възли.", - "billingUsersInfo": "Таксува се за всеки потребител във вашата организация. Фактурирането се извършва ежедневно на базата на броя активни потребителски акаунти във вашата организация.", - "billingDomainInfo": "Таксува се за всеки домейн във вашата организация. Фактурирането се извършва ежедневно на базата на броя активни домейн акаунти във вашата организация.", - "billingRemoteExitNodesInfo": "Таксува се за всеки управляван възел във вашата организация. Фактурирането се извършва ежедневно на базата на броя активни управлявани възли във вашата организация.", + "billingUsersInfo": "Таксува се всеки потребител в организацията. Таксуването се изчислява ежедневно въз основа на броя на активните потребителски акаунти във вашата организация.", + "billingDomainInfo": "Таксува се всеки домейн в организацията. Таксуването се изчислява ежедневно въз основа на броя на активните домейн акаунти във вашата организация.", + "billingRemoteExitNodesInfo": "Таксува се всеки управляван възел в организацията. Таксуването се изчислява ежедневно въз основа на броя на активните управлявани възли във вашата организация.", "domainNotFound": "Домейнът не е намерен", "domainNotFoundDescription": "Този ресурс е деактивиран, защото домейнът вече не съществува в нашата система. Моля, задайте нов домейн за този ресурс.", "failed": "Неуспешно", @@ -1430,29 +1465,32 @@ "and": "и", "privacyPolicy": "политиката за поверителност" }, + "signUpMarketing": { + "keepMeInTheLoop": "Дръж ме в течение с новини, актуализации и нови функции чрез имейл." + }, "siteRequired": "Изисква се сайт.", "olmTunnel": "Olm тунел", "olmTunnelDescription": "Използвайте Olm за клиентска свързаност", "errorCreatingClient": "Възникна грешка при създаване на клиент", "clientDefaultsNotFound": "Не са намерени настройки по подразбиране за клиента", "createClient": "Създаване на клиент", - "createClientDescription": "Създайте нов клиент за свързване към вашите сайтове", + "createClientDescription": "Създайте нов клиент за достъп до частни ресурси", "seeAllClients": "Виж всички клиенти", "clientInformation": "Информация за клиента", "clientNamePlaceholder": "Име на клиента", "address": "Адрес", "subnetPlaceholder": "Мрежа", - "addressDescription": "Адресът, който клиентът ще използва за свързване", + "addressDescription": "Вътрешният адрес на клиента. Трябва да пада в подмрежата на организацията.", "selectSites": "Избор на сайтове", "sitesDescription": "Клиентът ще има връзка с избраните сайтове", "clientInstallOlm": "Инсталиране на Olm", "clientInstallOlmDescription": "Конфигурирайте Olm да работи на вашата система", - "clientOlmCredentials": "Olm Удостоверения", - "clientOlmCredentialsDescription": "Това е как Olm ще се удостоверява със сървъра", - "olmEndpoint": "Olm Ендпойнт", - "olmId": "Olm ID", - "olmSecretKey": "Olm Тайна парола", - "clientCredentialsSave": "Запазете вашите удостоверения", + "clientOlmCredentials": "Удостоверителни данни", + "clientOlmCredentialsDescription": "Това е начинът, по който клиентът ще се удостоверява със сървъра", + "olmEndpoint": "Крайна точка", + "olmId": "Идентификационен номер", + "olmSecretKey": "Секретен ключ", + "clientCredentialsSave": "Запазете удостоверителните данни", "clientCredentialsSaveDescription": "Ще можете да го видите само веднъж. Уверете се, че ще го копирате на сигурно място.", "generalSettingsDescription": "Конфигурирайте общите настройки за този клиент", "clientUpdated": "Клиентът актуализиран", @@ -1463,9 +1501,7 @@ "sitesFetchError": "Възникна грешка при получаването на сайтовете.", "olmErrorFetchReleases": "Възникна грешка при получаването на Olm версиите.", "olmErrorFetchLatest": "Възникна грешка при получаването на последната версия на Olm.", - "remoteSubnets": "Отдалечени подмрежи", "enterCidrRange": "Въведете CIDR обхват", - "remoteSubnetsDescription": "Добавете CIDR диапазони, които могат да бъдат достъпни от този сайт отдалечено с клиенти. Използвайте формат като 10.0.0.0/24. Това се прилага САМО за VPN клиентска свързаност.", "resourceEnableProxy": "Разрешаване на публичен прокси", "resourceEnableProxyDescription": "Разрешете публично проксиране на този ресурс. Това позволява достъп до ресурса извън мрежата чрез облак на отворен порт. Изисква конфигурация на Traefik.", "externalProxyEnabled": "Външен прокси разрешен", @@ -1483,14 +1519,15 @@ "enableHealthChecksDescription": "Мониторинг на здравето на тази цел. Можете да наблюдавате различен краен пункт от целта, ако е необходимо.", "healthScheme": "Метод", "healthSelectScheme": "Избор на метод", + "healthCheckPortInvalid": "Портът за проверка на състоянието трябва да е между 1 и 65535", "healthCheckPath": "Път", "healthHostname": "IP / Хост", "healthPort": "Порт", "healthCheckPathDescription": "Пътят за проверка на здравното състояние.", - "healthyIntervalSeconds": "Интервал за здраве", - "unhealthyIntervalSeconds": "Интервал за нездраве", + "healthyIntervalSeconds": "Интервал на здраве (сек)", + "unhealthyIntervalSeconds": "Интервал на нездраве (сек)", "IntervalSeconds": "Интервал за здраве", - "timeoutSeconds": "Време за изчакване", + "timeoutSeconds": "Време за изчакване (сек)", "timeIsInSeconds": "Времето е в секунди", "retryAttempts": "Опити за повторно", "expectedResponseCodes": "Очаквани кодове за отговор", @@ -1526,12 +1563,12 @@ "resourceEditDomain": "Редактиране на домейн", "siteName": "Име на сайта", "proxyPort": "Порт", - "resourcesTableProxyResources": "Прокси Ресурси", - "resourcesTableClientResources": "Клиентски ресурси", + "resourcesTableProxyResources": "Публичен", + "resourcesTableClientResources": "Частен", "resourcesTableNoProxyResourcesFound": "Не са намерени ресурсни проксита.", "resourcesTableNoInternalResourcesFound": "Не са намерени вътрешни ресурси.", "resourcesTableDestination": "Дестинация", - "resourcesTableTheseResourcesForUseWith": "Тези ресурси са за използване с", + "resourcesTableAlias": "Псевдоним", "resourcesTableClients": "Клиенти", "resourcesTableAndOnlyAccessibleInternally": "и са достъпни само вътрешно при свързване с клиент.", "resourcesTableNoTargets": "Без цели", @@ -1540,8 +1577,8 @@ "resourcesTableOffline": "Извън линия", "resourcesTableUnknown": "Неизвестно", "resourcesTableNotMonitored": "Не е наблюдавано", - "editInternalResourceDialogEditClientResource": "Редактиране на клиентски ресурс", - "editInternalResourceDialogUpdateResourceProperties": "Актуализирайте свойствата на ресурса и конфигурацията на целите за {resourceName}.", + "editInternalResourceDialogEditClientResource": "Редактиране на частен ресурс", + "editInternalResourceDialogUpdateResourceProperties": "Актуализирайте конфигурацията на ресурса и контрола на достъпа за {resourceName}", "editInternalResourceDialogResourceProperties": "Свойствата на ресурса", "editInternalResourceDialogName": "Име", "editInternalResourceDialogProtocol": "Протокол", @@ -1560,11 +1597,22 @@ "editInternalResourceDialogInvalidIPAddressFormat": "Невалиден формат на IP адрес", "editInternalResourceDialogDestinationPortMin": "Дестинационният порт трябва да бъде поне 1", "editInternalResourceDialogDestinationPortMax": "Дестинационният порт трябва да е по-малък от 65536", + "editInternalResourceDialogPortModeRequired": "За порт режим се изискват протокол, прокси порт и порт на дестинация", + "editInternalResourceDialogMode": "Режим", + "editInternalResourceDialogModePort": "Порт", + "editInternalResourceDialogModeHost": "Хост", + "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogDestination": "Дестинация", + "editInternalResourceDialogDestinationHostDescription": "IP адресът или името на хоста на ресурса в мрежата на сайта.", + "editInternalResourceDialogDestinationIPDescription": "IP адресът или името на хоста на ресурса в мрежата на сайта.", + "editInternalResourceDialogDestinationCidrDescription": "CIDR диапазонът на ресурса в мрежата на сайта.", + "editInternalResourceDialogAlias": "Псевдоним", + "editInternalResourceDialogAliasDescription": "По избор вътрешен DNS псевдоним за този ресурс.", "createInternalResourceDialogNoSitesAvailable": "Няма достъпни сайтове", "createInternalResourceDialogNoSitesAvailableDescription": "Трябва да имате поне един сайт на Newt с конфигурирана мрежа, за да създадете вътрешни ресурси.", "createInternalResourceDialogClose": "Затвори", - "createInternalResourceDialogCreateClientResource": "Създаване на клиентски ресурс", - "createInternalResourceDialogCreateClientResourceDescription": "Създайте нов ресурс, който ще бъде достъпен за клиентите свързани със избрания сайт.", + "createInternalResourceDialogCreateClientResource": "Създаване на частен ресурс", + "createInternalResourceDialogCreateClientResourceDescription": "Създайте нов ресурс, който ще бъде достъпен само за клиенти, свързани към организацията", "createInternalResourceDialogResourceProperties": "Свойства на ресурса", "createInternalResourceDialogName": "Име", "createInternalResourceDialogSite": "Сайт", @@ -1593,11 +1641,22 @@ "createInternalResourceDialogInvalidIPAddressFormat": "Невалиден формат на IP адрес", "createInternalResourceDialogDestinationPortMin": "Дестинационният порт трябва да бъде поне 1", "createInternalResourceDialogDestinationPortMax": "Дестинационният порт трябва да е по-малък от 65536", + "createInternalResourceDialogPortModeRequired": "За порт режим се изискват протокол, прокси порт и порт на дестинация", + "createInternalResourceDialogMode": "Режим", + "createInternalResourceDialogModePort": "Порт", + "createInternalResourceDialogModeHost": "Хост", + "createInternalResourceDialogModeCidr": "CIDR", + "createInternalResourceDialogDestination": "Дестинация", + "createInternalResourceDialogDestinationHostDescription": "IP адресът или името на хоста на ресурса в мрежата на сайта.", + "createInternalResourceDialogDestinationCidrDescription": "CIDR диапазонът на ресурса в мрежата на сайта.", + "createInternalResourceDialogAlias": "Псевдоним", + "createInternalResourceDialogAliasDescription": "По избор вътрешен DNS псевдоним за този ресурс.", "siteConfiguration": "Конфигурация", "siteAcceptClientConnections": "Приемане на клиентски връзки", - "siteAcceptClientConnectionsDescription": "Позволете на други устройства да се свързват чрез този Newt инстанция като възел чрез клиенти.", - "siteAddress": "Адрес на сайта", - "siteAddressDescription": "Посочете IP адреса на хоста, към който клиентите ще се свързват. Това е вътрешният адрес на сайта в мрежата на Панголиин за адресиране от клиенти. Трябва да е в рамките на подмрежата на Организацията.", + "siteAcceptClientConnectionsDescription": "Позволете на потребителските устройства и клиенти да получават достъп до ресурси на този сайт. Това може да бъде променено по-късно.", + "siteAddress": "Адрес на сайта (Разширено)", + "siteAddressDescription": "Вътрешният адрес на сайта. Трябва да пада в подмрежата на организацията.", + "siteNameDescription": "Показваното име на сайта, което може да се промени по-късно.", "autoLoginExternalIdp": "Автоматично влизане с Външен IDP", "autoLoginExternalIdpDescription": "Незабавно пренасочете потребителя към външния IDP за удостоверяване.", "selectIdp": "Изберете IDP", @@ -1611,7 +1670,7 @@ "autoLoginErrorNoRedirectUrl": "Не е получен URL за пренасочване от доставчика на идентификационни данни.", "autoLoginErrorGeneratingUrl": "Неуспешно генериране на URL за удостоверяване.", "remoteExitNodeManageRemoteExitNodes": "Отдалечени възли", - "remoteExitNodeDescription": "Самостоятелно хоствайте един или повече отдалечени възли, за да разширите своята мрежова връзка и намалите зависимостта от облака.", + "remoteExitNodeDescription": "Самостоятелно хоствайте един или повече отдалечени възли, за да разширите мрежовата свързаност и да намалите зависимостта от облака", "remoteExitNodes": "Възли", "searchRemoteExitNodes": "Търсене на възли...", "remoteExitNodeAdd": "Добавяне на възел", @@ -1623,11 +1682,11 @@ "sidebarRemoteExitNodes": "Отдалечени възли", "remoteExitNodeCreate": { "title": "Създаване на възел", - "description": "Създайте нов възел, за да разширите мрежовата си свързаност", + "description": "Създайте нов възел, за да разширите мрежовата свързаност", "viewAllButton": "Вижте всички възли", "strategy": { "title": "Стратегия на създаване", - "description": "Изберете това, за да конфигурирате ръчно възела си или да създадете нови кредити.", + "description": "Изберете това, за да конфигурирате ръчно възела или да генерирате нови идентификационни данни.", "adopt": { "title": "Осиновете възел", "description": "Изберете това, ако вече имате кредити за възела." @@ -1648,7 +1707,7 @@ }, "generate": { "title": "Генерирани кредити", - "description": "Използвайте тези генерирани кредити, за да конфигурирате възела си", + "description": "Използвайте тези генерирани идентификационни данни за конфигуриране на възела", "nodeIdTitle": "ID на възела", "secretTitle": "Секретен", "saveCredentialsTitle": "Добавете кредити към конфигурацията", @@ -1724,16 +1783,16 @@ "idpTypeLabel": "Тип на доставчика на идентичност", "roleMappingExpressionPlaceholder": "напр.: contains(groups, 'admin') && 'Admin' || 'Member'", "idpGoogleConfiguration": "Конфигурация на Google", - "idpGoogleConfigurationDescription": "Конфигурирайте своите Google OAuth2 кредити", - "idpGoogleClientIdDescription": "Вашият Google OAuth2 клиентски ID", - "idpGoogleClientSecretDescription": "Вашият Google OAuth2 клиентски секрет", + "idpGoogleConfigurationDescription": "Конфигурирайте Google OAuth2 идентификационни данни", + "idpGoogleClientIdDescription": "Google OAuth2 идентификационен клиент", + "idpGoogleClientSecretDescription": "Google OAuth2 секретен клиент", "idpAzureConfiguration": "Конфигурация на Azure Entra ID", - "idpAzureConfigurationDescription": "Конфигурирайте своите Azure Entra ID OAuth2 кредити", + "idpAzureConfigurationDescription": "Конфигурирайте OAuth2 идентификационни данни на Azure Entra ID", "idpTenantId": "Идентификационен номер на наемателя", - "idpTenantIdPlaceholder": "вашият идентификационен номер на наемателя", - "idpAzureTenantIdDescription": "Вашият Azure идентификационен номер на наемателя (намира се в преглед на Azure Active Directory)", - "idpAzureClientIdDescription": "Вашият Azure клиентски идентификационен номер за приложението", - "idpAzureClientSecretDescription": "Вашият Azure клиентски секрет за приложението", + "idpTenantIdPlaceholder": "tenant-id", + "idpAzureTenantIdDescription": "Идентификационен номер на наемателя на Azure (намира се в прегледа на Azure Active Directory)", + "idpAzureClientIdDescription": "Идентификационен код на клиента за регистриране на приложение в Azure", + "idpAzureClientSecretDescription": "Секретен код на клиента за регистриране на приложение в Azure", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", @@ -1741,14 +1800,14 @@ "idpGoogleConfigurationTitle": "Конфигурация на Google", "idpAzureConfigurationTitle": "Конфигурация на Azure Entra ID", "idpTenantIdLabel": "Идентификационен номер на наемателя", - "idpAzureClientIdDescription2": "Вашият Azure клиентски идентификационен номер за приложението", - "idpAzureClientSecretDescription2": "Вашият Azure клиентски секрет за приложението", + "idpAzureClientIdDescription2": "Идентификационен код на клиента за регистриране на приложение в Azure", + "idpAzureClientSecretDescription2": "Секретен код на клиента за регистриране на приложение в Azure", "idpGoogleDescription": "Google OAuth2/OIDC доставчик", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC доставчик", "subnet": "Подмрежа", "subnetDescription": "Подмрежата за конфигурацията на мрежата на тази организация.", "authPage": "Страница за удостоверяване", - "authPageDescription": "Конфигурирайте страницата за удостоверяване на вашата организация", + "authPageDescription": "Конфигурирайте страницата за автентикация за организацията", "authPageDomain": "Домен на страницата за удостоверяване", "noDomainSet": "Няма зададен домейн", "changeDomain": "Смяна на домейн", @@ -1758,7 +1817,7 @@ "setAuthPageDomain": "Задаване на домейн на страницата за удостоверяване", "failedToFetchCertificate": "Неуспех при извличане на сертификат", "failedToRestartCertificate": "Неуспех при рестартиране на сертификат", - "addDomainToEnableCustomAuthPages": "Добавете домейн, за да активирате персонализирани страници за удостоверяване за вашата организация", + "addDomainToEnableCustomAuthPages": "Добавете домейн за да активирате персонализирани страници за автентикация за организацията", "selectDomainForOrgAuthPage": "Изберете домейн за страницата за удостоверяване на организацията", "domainPickerProvidedDomain": "Предоставен домейн", "domainPickerFreeProvidedDomain": "Безплатен предоставен домейн", @@ -1773,7 +1832,7 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" не може да се направи валиден за {domain}.", "domainPickerSubdomainSanitized": "Поддомен пречистен", "domainPickerSubdomainCorrected": "\"{sub}\" беше коригиран на \"{sanitized}\"", - "orgAuthSignInTitle": "Впишете се във вашата организация", + "orgAuthSignInTitle": "Влезте в организацията", "orgAuthChooseIdpDescription": "Изберете своя доставчик на идентичност, за да продължите", "orgAuthNoIdpConfigured": "Тази организация няма конфигурирани доставчици на идентичност. Можете да влезете с вашата Pangolin идентичност.", "orgAuthSignInWithPangolin": "Впишете се с Pangolin", @@ -1791,7 +1850,7 @@ "enableTwoFactorAuthentication": "Активирайте двуфакторното удостоверяване", "completeSecuritySteps": "Завършете стъпките за сигурност", "securitySettings": "Настройки за сигурност", - "securitySettingsDescription": "Конфигурирайте политиките за сигурност на вашата организация", + "securitySettingsDescription": "Конфигурирайте политики за сигурност за организацията", "requireTwoFactorForAllUsers": "Изисквайте двуфакторно удостоверяване за всички потребители", "requireTwoFactorDescription": "Когато е активирано, всички вътрешни потребители в организацията трябва да имат активирано двуфакторно удостоверяване, за да имат достъп до организацията.", "requireTwoFactorDisabledDescription": "Тази функция изисква валиден лиценз (Enterprise) или активен абонамент (SaaS).", @@ -1854,8 +1913,12 @@ "enterpriseEdition": "Корпоративно издание", "unlicensed": "Без лиценз", "beta": "Бета", - "manageClients": "Управление на клиенти", - "manageClientsDescription": "Клиентите са устройства, които могат да се свързват към вашите сайтове", + "manageUserDevices": "Потребителски устройства", + "manageUserDevicesDescription": "Прегледайте и управлявайте устройства, които потребителите използват за поверително свързване към ресурси", + "manageMachineClients": "Управлявайте машинни клиенти", + "manageMachineClientsDescription": "Създавайте и управлявайте клиенти, които сървърите и системите използват за поверително свързване към ресурси", + "clientsTableUserClients": "Потребител", + "clientsTableMachineClients": "Машина", "licenseTableValidUntil": "Валиден до", "saasLicenseKeysSettingsTitle": "Корпоративни лицензи", "saasLicenseKeysSettingsDescription": "Генериране и управление на корпоративни лицензионни ключове за самостоятелно хоствани инстанции на Pangolin", @@ -1990,11 +2053,12 @@ "pathRewriteStripLabel": "премахване", "sidebarEnableEnterpriseLicense": "Активиране на корпоративен лиценз", "cannotbeUndone": "Това не може да се отмени.", - "toConfirm": "за потвърждение", + "toConfirm": "за да потвърдите.", "deleteClientQuestion": "Сигурни ли сте, че искате да премахнете клиента от сайта и организацията?", "clientMessageRemove": "След като клиентът бъде премахнат, той вече няма да може да се свързва с сайта.", "sidebarLogs": "Логове", "request": "Изискване", + "requests": "Заявки", "logs": "Логове", "logsSettingsDescription": "Следете логовете, събрани от тази организация", "searchLogs": "Търсете в логовете...", @@ -2020,6 +2084,7 @@ "ip": "IP", "reason": "Причина", "requestLogs": "Заявка за логове", + "requestAnalytics": "Анализи На Заявки", "host": "Хост", "location": "Местоположение", "actionLogs": "Дневници на действията", @@ -2029,6 +2094,7 @@ "logRetention": "Задържане на логове", "logRetentionDescription": "Управлявайте времето за задържане на различни видове логове за тази организация или ги деактивирайте", "requestLogsDescription": "Прегледайте подробни логове на заявки за ресурси в тази организация", + "requestAnalyticsDescription": "Вижте подробни анализи на заявки за ресурсите в тази организация", "logRetentionRequestLabel": "Задържане на логове на заявки", "logRetentionRequestDescription": "Колко дълго да се задържат логовете на заявките", "logRetentionAccessLabel": "Задържане на логове за достъп", @@ -2042,6 +2108,7 @@ "logRetention30Days": "30 дни", "logRetention90Days": "90 дни", "logRetentionForever": "Завинаги", + "logRetentionEndOfFollowingYear": "Край на следващата година", "actionLogsDescription": "Прегледайте историята на действията, извършени в тази организация", "accessLogsDescription": "Прегледайте заявките за удостоверяване на достъпа до ресурсите в тази организация", "licenseRequiredToUse": "Необходим е лиценз Enterprise, за да се използва тази функция.", @@ -2052,7 +2119,7 @@ "preferWildcardCert": "Предпочитайте универсален сертификат", "unverified": "Невалидиран", "domainSetting": "Настройки на домейните", - "domainSettingDescription": "Конфигурирайте настройките за вашия домейн", + "domainSettingDescription": "Конфигурирайте настройките за домейна", "preferWildcardCertDescription": "Опит за генериране на универсален сертификат (изисква правилно конфигуриран решавач на сертификати).", "recordName": "Име на запис", "auto": "Автоматично", @@ -2066,9 +2133,9 @@ "olmUpdateAvailableInfo": "Налична е актуализирана версия на Olm. Моля, актуализирайте до най-новата версия за най-добро преживяване.", "client": "Клиент", "proxyProtocol": "Настройки на прокси протокол", - "proxyProtocolDescription": "Конфигурирайте прокси протокол за запазване на IP адресите на клиентите за TCP/UDP услуги.", + "proxyProtocolDescription": "Конфигурирайте Proxy Protocol, за да запазите IP адресите на клиентите за TCP услуги.", "enableProxyProtocol": "Активирайте прокси протокола", - "proxyProtocolInfo": "Запазете IP адресите на клиентите за TCP/UDP бекенди", + "proxyProtocolInfo": "Запазете IP адресите на клиентите за TCP бекендове", "proxyProtocolVersion": "Версия на прокси протокола", "version1": "Версия 1 (Препоръчително)", "version2": "Версия 2", @@ -2097,6 +2164,43 @@ "supportMessageSent": "Съобщението е изпратено!", "supportWillContact": "Ще се свържем с вас скоро!", "selectLogRetention": "Изберете съхранение на логовете", + "terms": "Термини", + "privacy": "Поверителност", + "security": "Сигурност", + "docs": "Документи", + "deviceActivation": "Активиране на устройство", + "deviceCodeInvalidFormat": "Кодът трябва да бъде 9 символа (напр. A1AJ-N5JD)", + "deviceCodeInvalidOrExpired": "Невалиден или изтекъл код", + "deviceCodeVerifyFailed": "Неуспешна проверка на кода на устройството", + "signedInAs": "Вписан като", + "deviceCodeEnterPrompt": "Въведете кода, показан на устройството", + "continue": "Продължете", + "deviceUnknownLocation": "Неизвестно местоположение", + "deviceAuthorizationRequested": "Това разрешение беше заявено от {location} на {date}. Уверете се, че се доверявате на това устройство, тъй като то ще получи достъп до акаунта.", + "deviceLabel": "Устройство: {deviceName}", + "deviceWantsAccess": "иска да има достъп до вашия акаунт", + "deviceExistingAccess": "Съществуващ достъп:", + "deviceFullAccess": "Пълен достъп до вашия акаунт", + "deviceOrganizationsAccess": "Достъп до всички организации, до които има достъп акаунтът ви", + "deviceAuthorize": "Разрешете {applicationName}", + "deviceConnected": "Устройството е свързано!", + "deviceAuthorizedMessage": "Устройството е разрешено да има достъп до вашия акаунт.", + "pangolinCloud": "Pangolin Cloud", + "viewDevices": "Преглед на устройствата", + "viewDevicesDescription": "Управлявайте свързаните си устройства", + "noDevices": "Не са намерени устройства", + "dateCreated": "Дата на създаване", + "unnamedDevice": "Устройство без име", + "deviceQuestionRemove": "Сигурни ли сте, че искате да изтриете това устройство?", + "deviceMessageRemove": "Това действие не може да бъде отменено.", + "deviceDeleteConfirm": "Изтриване на устройство", + "deleteDevice": "Изтриване на устройство", + "errorLoadingDevices": "Грешка при зареждане на устройства", + "failedToLoadDevices": "Неуспешно зареждане на устройства", + "deviceDeleted": "Устройството е изтрито", + "deviceDeletedDescription": "Устройството бе успешно изтрито.", + "errorDeletingDevice": "Грешка при изтриване на устройството", + "failedToDeleteDevice": "Неуспешно изтриване на устройството", "showColumns": "Покажи колони", "hideColumns": "Скрий колони", "columnVisibility": "Видимост на колоните", @@ -2111,10 +2215,14 @@ "enableSelected": "Разреши избраните", "disableSelected": "Забрани избраните", "checkSelectedStatus": "Проверете състоянието на избраните", + "clients": "Клиенти", + "accessClientSelect": "Изберете машинни клиенти", + "resourceClientDescription": "Машинни клиенти, които могат да получат достъп до този ресурс", + "regenerate": "Генерирай", "credentials": "Удостоверения", "savecredentials": "Запазване на удостоверения", - "regeneratecredentials": "Прегенериране", - "regenerateCredentials": "Прегенериране и запазване на удостоверенията ви", + "regenerateCredentialsButton": "Генериране на нови удостоверителни данни", + "regenerateCredentials": "Генериране на нови удостоверителни данни", "generatedcredentials": "Прегенерирани удостоверения", "copyandsavethesecredentials": "Копирайте и запазете тези удостоверения", "copyandsavethesecredentialsdescription": "Тези удостоверения няма да бъдат показани отново след като напуснете тази страница. Запазете ги сигурно сега.", @@ -2122,13 +2230,12 @@ "credentialsSavedDescription": "Удостоверенията бяха прегенерирани и успешно запазени.", "credentialsSaveError": "Грешка при запазването на удостоверенията", "credentialsSaveErrorDescription": "Възникна грешка при прегенерирането и запазването на удостоверенията.", - "regenerateCredentialsWarning": "Прегенерирането на удостоверения ще анулира предишните. Уверете се, че актуализирате всички конфигурации, които използват тези удостоверения.", + "regenerateCredentialsWarning": "Генерирането на нови удостоверителни данни ще направи предишните невалидни и ще причини прекъсване на връзката. Уверете се, че сте актуализирали всички конфигурации, които използват тези удостоверителни данни.", "confirm": "Потвърждаване", "regenerateCredentialsConfirmation": "Сигурни ли сте, че искате да прегенерирате удостоверенията?", "endpoint": "Крайна точка", "Id": "Идентификатор", "SecretKey": "Таен ключ", - "featureDisabledTooltip": "Тази функция е налична само в корпоративния пакет и изисква лиценз за използване.", "niceId": "Красив ID", "niceIdUpdated": "Красив ID е обновен", "niceIdUpdatedSuccessfully": "Красив ID е успешно обновен", @@ -2136,5 +2243,32 @@ "niceIdUpdateErrorDescription": "Възникна грешка при обновяването на Красив ID.", "niceIdCannotBeEmpty": "Красив ID не може да бъде празен", "enterIdentifier": "Въведете идентификатор", - "identifier": "Идентификатор" + "identifier": "Идентификатор", + "deviceLoginUseDifferentAccount": "Не сте вие? Използвайте друг акаунт.", + "deviceLoginDeviceRequestingAccessToAccount": "Устройство запитващо достъп до този акаунт.", + "noData": "Няма Данни", + "machineClients": "Машинни клиенти", + "install": "Инсталирай", + "run": "Изпълни", + "clientNameDescription": "Показваното име на клиента, което може да се промени по-късно.", + "clientAddress": "Клиентски адрес (Разширено)", + "setupFailedToFetchSubnet": "Неуспешно извличане на подмрежа по подразбиране", + "setupSubnetAdvanced": "Подмрежа (Разширено)", + "setupSubnetDescription": "Подмрежата за вътрешната мрежа на тази организация.", + "siteRegenerateAndDisconnect": "Генериране и прекъсване на връзката", + "siteRegenerateAndDisconnectConfirmation": "Сигурни ли сте, че искате да генерирате нови удостоверителни данни и да прекъснете тази връзка?", + "siteRegenerateAndDisconnectWarning": "Това ще генерира нови удостоверителни данни и незабавно ще прекъсне връзката. На сайта ще трябва да се рестартира с новите удостоверителни данни.", + "siteRegenerateCredentialsConfirmation": "Сигурни ли сте, че искате да генерирате новите удостоверителни данни за този сайт?", + "siteRegenerateCredentialsWarning": "Това ще генерира нови удостоверителни данни. Сайтът ще остане свързан, докато не го рестартирате ръчно и използвате новите удостоверителни данни.", + "clientRegenerateAndDisconnect": "Генериране и прекъсване на връзката", + "clientRegenerateAndDisconnectConfirmation": "Сигурни ли сте, че искате да генерирате нови удостоверителни данни и да прекъснете връзката на този клиент?", + "clientRegenerateAndDisconnectWarning": "Това ще генерира нови удостоверителни данни и незабавно ще прекъсне връзката на клиента. Клиентът ще трябва да се рестартира с новите удостоверителни данни.", + "clientRegenerateCredentialsConfirmation": "Сигурни ли сте, че искате да генерирате новите удостоверителни данни за този клиент?", + "clientRegenerateCredentialsWarning": "Това ще генерира нови удостоверителни данни. Клиентът ще остане свързан, докато не го рестартирате ръчно и използвате новите удостоверителни данни.", + "remoteExitNodeRegenerateAndDisconnect": "Генериране и прекъсване на връзката", + "remoteExitNodeRegenerateAndDisconnectConfirmation": "Сигурни ли сте, че искате да генерирате нови удостоверителни данни и да прекъснете връзката на този отдалечен възел?", + "remoteExitNodeRegenerateAndDisconnectWarning": "Това ще генерира нови удостоверителни данни и незабавно ще прекъсне връзката на отдалечения възел. Отдалеченият възел ще трябва да се рестартира с новите удостоверителни данни.", + "remoteExitNodeRegenerateCredentialsConfirmation": "Сигурни ли сте, че искате да генерирате новите удостоверителни данни за този отдалечен възел?", + "remoteExitNodeRegenerateCredentialsWarning": "Това ще генерира нови удостоверителни данни. Отдалеченият възел ще остане свързан, докато не го рестартирате ръчно и използвате новите удостоверителни данни.", + "agent": "Агент" } diff --git a/messages/cs-CZ.json b/messages/cs-CZ.json index ff1a69005..be3d22329 100644 --- a/messages/cs-CZ.json +++ b/messages/cs-CZ.json @@ -1,12 +1,12 @@ { - "setupCreate": "Vytvořte si organizaci, lokalitu a služby", + "setupCreate": "Vytvořte organizaci, stránku a zdroje", "setupNewOrg": "Nová organizace", "setupCreateOrg": "Vytvořit organizaci", "setupCreateResources": "Vytvořit zdroje", "setupOrgName": "Název organizace", - "orgDisplayName": "Toto je zobrazovaný název vaší organizace.", + "orgDisplayName": "Toto je zobrazený název organizace.", "orgId": "ID organizace", - "setupIdentifierMessage": "Toto je jedinečný identifikátor vaší organizace. Nemusí odpovídat názvu organizace.", + "setupIdentifierMessage": "Toto je jedinečný identifikátor organizace.", "setupErrorIdentifier": "ID organizace je již použito. Zvolte prosím jiné.", "componentsErrorNoMemberCreate": "Zatím nejste členem žádné organizace. Abyste mohli začít, vytvořte si organizaci.", "componentsErrorNoMember": "Zatím nejste členem žádných organizací.", @@ -50,10 +50,10 @@ "siteMessageRemove": "Po odstranění webu již nebude přístupný. Všechny cíle spojené s webem budou také odstraněny.", "siteQuestionRemove": "Jste si jisti, že chcete odstranit tuto stránku z organizace?", "siteManageSites": "Správa lokalit", - "siteDescription": "Umožní připojení k vaší síti prostřednictvím zabezpečených tunelů", + "siteDescription": "Vytvořte a spravujte stránky pro povolení připojení k soukromým sítím", "siteCreate": "Vytvořit lokalitu", "siteCreateDescription2": "Postupujte podle níže uvedených kroků, abyste vytvořili a připojili novou lokalitu", - "siteCreateDescription": "Vytvořte novou lokalitu, abyste mohli začít připojovat služby", + "siteCreateDescription": "Vytvořit nový web pro zahájení připojování zdrojů", "close": "Zavřít", "siteErrorCreate": "Chyba při vytváření lokality", "siteErrorCreateKeyPair": "Nebyly nalezeny klíče nebo výchozí nastavení lokality", @@ -74,7 +74,7 @@ "siteInstallNewt": "Nainstalovat Newt", "siteInstallNewtDescription": "Spustit Newt na vašem systému", "WgConfiguration": "Konfigurace WireGuard", - "WgConfigurationDescription": "Použijte následující konfiguraci pro připojení k vaší síti", + "WgConfigurationDescription": "K připojení k síti použijte následující konfiguraci", "operatingSystem": "Operační systém", "commands": "Příkazy", "recommended": "Doporučeno", @@ -87,32 +87,32 @@ "siteUpdated": "Lokalita upravena", "siteUpdatedDescription": "Lokalita byla upravena.", "siteGeneralDescription": "Upravte obecná nastavení pro tuto lokalitu", - "siteSettingDescription": "Upravte nastavení vaší lokality", + "siteSettingDescription": "Konfigurace nastavení na webu", "siteSetting": "Nastavení {siteName}", - "siteNewtTunnel": "Tunel Newt (doporučeno)", - "siteNewtTunnelDescription": "Nejjednodušší způsob, jak vytvořit vstupní bod do vaší sítě. Žádné další nastavení.", + "siteNewtTunnel": "Novinka (doporučeno)", + "siteNewtTunnelDescription": "Nejjednodušší způsob, jak vytvořit vstupní bod do jakékoli sítě. Žádné další nastavení.", "siteWg": "Základní WireGuard", "siteWgDescription": "Použijte jakéhokoli klienta WireGuard abyste sestavili tunel. Vyžaduje se ruční nastavení NAT.", "siteWgDescriptionSaas": "Použijte jakéhokoli klienta WireGuard abyste sestavili tunel. Vyžaduje se ruční nastavení NAT. FUNGUJE POUZE NA SELF-HOSTED SERVERECH", "siteLocalDescription": "Pouze lokální zdroje. Žádný tunel.", "siteLocalDescriptionSaas": "Pouze místní zdroje. Žádný tunel. Dostupné pouze na vzdálených uzlech.", "siteSeeAll": "Zobrazit všechny lokality", - "siteTunnelDescription": "Určete jak se chcete připojit k vaší lokalitě", - "siteNewtCredentials": "Přihlašovací údaje Newt", - "siteNewtCredentialsDescription": "Tímto způsobem se bude Newt autentizovat na serveru", - "siteCredentialsSave": "Uložit přihlašovací údaje", + "siteTunnelDescription": "Určete, jak se chcete připojit k webu", + "siteNewtCredentials": "Pověření", + "siteNewtCredentialsDescription": "Takto se bude stránka autentizovat se serverem", + "siteCredentialsSave": "Uložit pověření", "siteCredentialsSaveDescription": "Toto nastavení uvidíte pouze jednou. Ujistěte se, že jej zkopírujete na bezpečné místo.", "siteInfo": "Údaje o lokalitě", "status": "Stav", "shareTitle": "Spravovat sdílení odkazů", - "shareDescription": "Vytvořte odkazy, abyste udělili dočasný nebo trvalý přístup k vašim zdrojům", + "shareDescription": "Vytvořit sdílitelné odkazy pro udělení dočasného nebo trvalého přístupu ke zdrojům proxy", "shareSearch": "Hledat sdílené odkazy...", "shareCreate": "Vytvořit odkaz", "shareErrorDelete": "Nepodařilo se odstranit odkaz", "shareErrorDeleteMessage": "Došlo k chybě při odstraňování odkazu", "shareDeleted": "Odkaz odstraněn", "shareDeletedDescription": "Odkaz byl odstraněn", - "shareTokenDescription": "Váš přístupový token může být předán dvěma způsoby: jako parametr dotazu nebo v záhlaví požadavku. Tyto údaje musí být předány klientem v každé žádosti o ověřený přístup.", + "shareTokenDescription": "Přístupový token může být předán dvěma způsoby: jako parametr dotazu nebo v záhlaví požadavku. Tyto údaje musí být předány klientovi na každé žádosti o ověřený přístup.", "accessToken": "Přístupový token", "usageExamples": "Příklady použití", "tokenId": "ID tokenu", @@ -121,7 +121,7 @@ "importantNote": "Důležité upozornění", "shareImportantDescription": "Z bezpečnostních důvodů je doporučeno používat raději hlavičky než parametry dotazu pokud je to možné, protože parametry dotazu mohou být zaznamenány v logu serveru nebo v historii prohlížeče.", "token": "Token", - "shareTokenSecurety": "Uchovejte přístupový token v bezpečí. Nesdílejte jej na veřejně přístupných místěch nebo v kódu na straně klienta.", + "shareTokenSecurety": "Udržujte přístupový token v bezpečí. Nesdílejte jej ve veřejně přístupných oblastech nebo kódu na straně klienta.", "shareErrorFetchResource": "Nepodařilo se načíst zdroje", "shareErrorFetchResourceDescription": "Při načítání zdrojů došlo k chybě", "shareErrorCreate": "Nepodařilo se vytvořit odkaz", @@ -144,8 +144,10 @@ "expires": "Vyprší", "never": "Nikdy", "shareErrorSelectResource": "Zvolte prosím zdroj", - "resourceTitle": "Spravovat zdroje", - "resourceDescription": "Vytvořte bezpečné proxy služby pro přístup k privátním aplikacím", + "proxyResourceTitle": "Spravovat veřejné zdroje", + "proxyResourceDescription": "Vytváření a správa zdrojů, které jsou veřejně přístupné prostřednictvím webového prohlížeče", + "clientResourceTitle": "Spravovat soukromé zdroje", + "clientResourceDescription": "Vytváření a správa zdrojů, které jsou přístupné pouze prostřednictvím připojeného klienta", "resourcesSearch": "Prohledat zdroje...", "resourceAdd": "Přidat zdroj", "resourceErrorDelte": "Chyba při odstraňování zdroje", @@ -155,9 +157,9 @@ "resourceMessageRemove": "Jakmile zdroj odstraníte, nebude dostupný. Všechny související služby a cíle budou také odstraněny.", "resourceQuestionRemove": "Jste si jisti, že chcete odstranit zdroj z organizace?", "resourceHTTP": "Zdroj HTTPS", - "resourceHTTPDescription": "Požadavky na proxy pro vaši aplikaci přes HTTPS pomocí subdomény nebo základní domény.", + "resourceHTTPDescription": "Požadavky na proxy pro aplikaci přes HTTPS pomocí subdomény nebo základní domény.", "resourceRaw": "Surový TCP/UDP zdroj", - "resourceRawDescription": "Požadavky na proxy pro vaši aplikaci přes TCP/UDP pomocí čísla portu.", + "resourceRawDescription": "Proxy požadavky na aplikaci přes TCP/UDP pomocí čísla portu. To funguje pouze v případě, že jsou stránky připojeny k uzlům.", "resourceCreate": "Vytvořit zdroj", "resourceCreateDescription": "Postupujte podle níže uvedených kroků, abyste vytvořili a připojili nový zdroj", "resourceSeeAll": "Zobrazit všechny zdroje", @@ -171,22 +173,22 @@ "noCountryFound": "Nebyla nalezena žádná země.", "siteSelectionDescription": "Tato lokalita poskytne připojení k cíli.", "resourceType": "Typ zdroje", - "resourceTypeDescription": "Určete, jak chcete přistupovat ke svému zdroji", + "resourceTypeDescription": "Určete, jak přistupovat ke zdroji", "resourceHTTPSSettings": "Nastavení HTTPS", - "resourceHTTPSSettingsDescription": "Nakonfigurujte, jak bude váš zdroj přístupný přes HTTPS", + "resourceHTTPSSettingsDescription": "Nakonfigurujte, jak bude dokument přístupný přes HTTPS", "domainType": "Typ domény", "subdomain": "Subdoména", "baseDomain": "Základní doména", - "subdomnainDescription": "Subdoména, kde bude váš zdroj přístupný.", + "subdomnainDescription": "Subdoména, kde bude zdroj přístupný.", "resourceRawSettings": "Nastavení TCP/UDP", - "resourceRawSettingsDescription": "Nakonfigurujte, jak bude váš dokument přístupný přes TCP/UDP. Mapováte zdroj na port na serveru Pangolin, takže můžete přistupovat ke zdroji ze serveru-veřejné ip:mapped-port.", + "resourceRawSettingsDescription": "Nakonfigurujte, jak bude dokument přístupný přes TCP/UDP", "protocol": "Protokol", "protocolSelect": "Vybrat protokol", "resourcePortNumber": "Číslo portu", "resourcePortNumberDescription": "Externí port k požadavkům proxy serveru.", "cancel": "Zrušit", "resourceConfig": "Konfigurační snippety", - "resourceConfigDescription": "Zkopírujte a vložte tyto konfigurační snippety pro nastavení TCP/UDP zdroje", + "resourceConfigDescription": "Zkopírujte a vložte tyto konfigurační textové bloky pro nastavení TCP/UDP zdroje", "resourceAddEntrypoints": "Traefik: Přidat vstupní body", "resourceExposePorts": "Gerbil: Expose Ports in Docker Compose", "resourceLearnRaw": "Naučte se konfigurovat zdroje TCP/UDP", @@ -202,14 +204,14 @@ "proxy": "Proxy server", "internal": "Interní", "rules": "Pravidla", - "resourceSettingDescription": "Konfigurace nastavení na vašem zdroji", + "resourceSettingDescription": "Konfigurace nastavení na zdroji", "resourceSetting": "Nastavení {resourceName}", - "alwaysAllow": "Vždy povolit", - "alwaysDeny": "Vždy zakázat", + "alwaysAllow": "Obejít Auth", + "alwaysDeny": "Blokovat přístup", "passToAuth": "Předat k ověření", - "orgSettingsDescription": "Konfigurace obecných nastavení vaší organizace", + "orgSettingsDescription": "Konfigurace nastavení organizace", "orgGeneralSettings": "Nastavení organizace", - "orgGeneralSettingsDescription": "Spravujte údaje a konfiguraci vaší organizace", + "orgGeneralSettingsDescription": "Spravovat podrobnosti a konfiguraci organizace", "saveGeneralSettings": "Uložit obecné nastavení", "saveSettings": "Uložit nastavení", "orgDangerZone": "Nebezpečná zóna", @@ -232,7 +234,7 @@ "orgMissing": "Chybí ID organizace", "orgMissingMessage": "Nelze obnovit pozvánku bez ID organizace.", "accessUsersManage": "Spravovat uživatele", - "accessUsersDescription": "Pozvěte uživatele a přidejte je do rolí pro správu přístupu do vaší organizace", + "accessUsersDescription": "Pozvat a spravovat uživatele s přístupem k této organizaci", "accessUsersSearch": "Hledat uživatele...", "accessUserCreate": "Vytvořit uživatele", "accessUserRemove": "Odstranit uživatele", @@ -241,13 +243,13 @@ "role": "Role", "nameRequired": "Název je povinný", "accessRolesManage": "Spravovat role", - "accessRolesDescription": "Konfigurace rolí pro správu přístupu do vaší organizace", + "accessRolesDescription": "Vytvořit a spravovat role pro uživatele v organizaci", "accessRolesSearch": "Hledat role...", "accessRolesAdd": "Přidat roli", "accessRoleDelete": "Odstranit roli", "description": "L 343, 22.12.2009, s. 1).", "inviteTitle": "Otevřít pozvánky", - "inviteDescription": "Spravujte své pozvánky ostatním uživatelům", + "inviteDescription": "Spravovat pozvánky pro ostatní uživatele do organizace", "inviteSearch": "Hledat pozvánky...", "minutes": "Zápis z jednání", "hours": "Hodiny", @@ -261,13 +263,13 @@ "apiKeysErrorCreate": "Chyba při vytváření API klíče", "apiKeysErrorSetPermission": "Chyba nastavení oprávnění", "apiKeysCreate": "Generovat API klíč", - "apiKeysCreateDescription": "Vygenerovat nový API klíč pro vaši organizaci", + "apiKeysCreateDescription": "Vygenerovat nový API klíč pro organizaci", "apiKeysGeneralSettings": "Práva", "apiKeysGeneralSettingsDescription": "Určete, co může tento API klíč udělat", - "apiKeysList": "Váš API klíč", - "apiKeysSave": "Uložit váš API klíč", + "apiKeysList": "Nový API klíč", + "apiKeysSave": "Uložit API klíč", "apiKeysSaveDescription": "Toto nastavení uvidíte pouze jednou. Ujistěte se, že jej zkopírujete na bezpečné místo.", - "apiKeysInfo": "Váš API klíč je:", + "apiKeysInfo": "API klíč je:", "apiKeysConfirmCopy": "Kopíroval jsem API klíč", "generate": "Generovat", "done": "Hotovo", @@ -424,7 +426,7 @@ "userCreated": "Uživatel byl vytvořen", "userCreatedDescription": "Uživatel byl úspěšně vytvořen.", "userTypeInternal": "Interní uživatel", - "userTypeInternalDescription": "Pozvěte uživatele do vaší organizace přímo.", + "userTypeInternalDescription": "Pozvěte uživatele do organizace přímo.", "userTypeExternal": "Externí uživatel", "userTypeExternalDescription": "Vytvořte uživatele s externím poskytovatelem identity.", "accessUserCreateDescription": "Postupujte podle níže uvedených kroků pro vytvoření nového uživatele", @@ -436,6 +438,16 @@ "inviteEmailSent": "Poslat uživateli pozvánku", "inviteValid": "Platné pro", "selectDuration": "Vyberte dobu trvání", + "selectResource": "Vybrat dokument", + "filterByResource": "Filtrovat podle zdroje", + "resetFilters": "Resetovat filtry", + "totalBlocked": "Požadavky blokovány Pangolinem", + "totalRequests": "Celkem požadavků", + "requestsByCountry": "Žádosti podle země", + "requestsByDay": "Žádosti podle dne", + "blocked": "Blokované", + "allowed": "Povoleno", + "topCountries": "Nejlepší země", "accessRoleSelect": "Vybrat roli", "inviteEmailSentDescription": "Uživateli byl odeslán e-mail s odkazem pro přístup níže. Pro přijetí pozvánky musí mít přístup k odkazu.", "inviteSentDescription": "Uživatel byl pozván. Pro přijetí pozvánky musí mít přístup na níže uvedený odkaz.", @@ -458,13 +470,13 @@ "accessControlsSubmit": "Uložit kontroly přístupu", "roles": "Role", "accessUsersRoles": "Spravovat uživatele a role", - "accessUsersRolesDescription": "Pozvěte uživatele a přidejte je do rolí pro správu přístupu do vaší organizace", + "accessUsersRolesDescription": "Pozvěte uživatele a přidejte je do rolí pro správu přístupu k organizaci", "key": "Klíč", "createdAt": "Vytvořeno v", "proxyErrorInvalidHeader": "Neplatná hodnota hlavičky hostitele. Použijte formát názvu domény, nebo uložte prázdné pro zrušení vlastního hlavičky hostitele.", "proxyErrorTls": "Neplatné jméno TLS serveru. Použijte formát doménového jména nebo uložte prázdné pro odstranění názvu TLS serveru.", "proxyEnableSSL": "Povolit SSL", - "proxyEnableSSLDescription": "Povolit šifrování SSL/TLS pro zabezpečená HTTPS připojení k vašim cílům.", + "proxyEnableSSLDescription": "Povolit šifrování SSL/TLS pro zabezpečená připojení HTTPS k cílům.", "target": "Target", "configureTarget": "Konfigurace cílů", "targetErrorFetch": "Nepodařilo se načíst cíle", @@ -480,29 +492,29 @@ "targetsErrorUpdate": "Nepodařilo se aktualizovat cíle", "targetsErrorUpdateDescription": "Došlo k chybě při aktualizaci cílů", "targetTlsUpdate": "Nastavení TLS aktualizováno", - "targetTlsUpdateDescription": "Vaše nastavení TLS bylo úspěšně aktualizováno", + "targetTlsUpdateDescription": "TLS nastavení bylo úspěšně aktualizováno", "targetErrorTlsUpdate": "Aktualizace nastavení TLS se nezdařila", "targetErrorTlsUpdateDescription": "Došlo k chybě při aktualizaci nastavení TLS", "proxyUpdated": "Nastavení proxy bylo aktualizováno", - "proxyUpdatedDescription": "Vaše nastavení proxy bylo úspěšně aktualizováno", + "proxyUpdatedDescription": "Nastavení proxy bylo úspěšně aktualizováno", "proxyErrorUpdate": "Aktualizace nastavení proxy se nezdařila", "proxyErrorUpdateDescription": "Došlo k chybě při aktualizaci nastavení proxy", - "targetAddr": "IP / Hostname", + "targetAddr": "Hostitel", "targetPort": "Přístav", "targetProtocol": "Protokol", "targetTlsSettings": "Nastavení bezpečného připojení", - "targetTlsSettingsDescription": "Konfigurace nastavení SSL/TLS pro váš dokument", + "targetTlsSettingsDescription": "Nastavení SSL/TLS pro zdroj", "targetTlsSettingsAdvanced": "Pokročilé nastavení TLS", "targetTlsSni": "Název serveru TLS", "targetTlsSniDescription": "Název serveru TLS pro použití v SNI. Ponechte prázdné pro použití výchozího nastavení.", "targetTlsSubmit": "Uložit nastavení", "targets": "Konfigurace cílů", - "targetsDescription": "Nastavte cíle pro směrování provozu do záložních služeb", + "targetsDescription": "Nastavte cíle pro trasu provozu do záložních služeb", "targetStickySessions": "Povolit Rychlé relace", "targetStickySessionsDescription": "Zachovat spojení na stejném cíli pro celou relaci.", "methodSelect": "Vyberte metodu", "targetSubmit": "Add Target", - "targetNoOne": "Tento zdroj nemá žádné cíle. Přidejte cíl pro konfiguraci kam poslat žádosti na vaši backend.", + "targetNoOne": "Tento zdroj nemá žádné cíle. Přidejte cíl pro konfiguraci kam poslat žádosti na backend.", "targetNoOneDescription": "Přidáním více než jednoho cíle se umožní vyvážení zatížení.", "targetsSubmit": "Uložit cíle", "addTarget": "Add Target", @@ -516,9 +528,11 @@ "targetCreatedDescription": "Cíl byl úspěšně vytvořen", "targetErrorCreate": "Nepodařilo se vytvořit cíl", "targetErrorCreateDescription": "Došlo k chybě při vytváření cíle", + "tlsServerName": "Název serveru TLS", + "tlsServerNameDescription": "Název serveru TLS pro SNI", "save": "Uložit", "proxyAdditional": "Další nastavení proxy", - "proxyAdditionalDescription": "Konfigurovat nastavení proxy zpracování vašeho zdroje", + "proxyAdditionalDescription": "Konfigurovat nastavení proxy", "proxyCustomHeader": "Vlastní hlavička hostitele", "proxyCustomHeaderDescription": "Hlavička hostitele bude nastavena při proxování požadavků. Nechte prázdné pro použití výchozího nastavení.", "proxyAdditionalSubmit": "Uložit nastavení proxy", @@ -558,7 +572,7 @@ "rulesMatchType": "Typ shody", "value": "Hodnota", "rulesAbout": "O pravidlech", - "rulesAboutDescription": "Pravidla vám umožňují kontrolovat přístup k vašemu zdroji na základě sady kritérií. Můžete vytvořit pravidla pro povolení nebo zamítnutí přístupu na základě IP adresy nebo cesty URL.", + "rulesAboutDescription": "Pravidla vám umožňují kontrolovat přístup ke zdrojům na základě souboru kritérií. Můžete vytvořit pravidla pro povolení nebo zamítnutí přístupu na základě IP adresy nebo cesty URL.", "rulesActions": "Akce", "rulesActionAlwaysAllow": "Vždy Povolit: Obejít všechny metody ověřování", "rulesActionAlwaysDeny": "Vždy odepří: Zablokovat všechny požadavky; nelze se pokusit o ověření", @@ -570,7 +584,7 @@ "rulesEnable": "Povolit pravidla", "rulesEnableDescription": "Povolit nebo zakázat hodnocení pravidel pro tento zdroj", "rulesResource": "Konfigurace pravidel zdroje", - "rulesResourceDescription": "Konfigurace pravidel pro kontrolu přístupu k vašemu zdroji", + "rulesResourceDescription": "Nastavit pravidla pro kontrolu přístupu ke zdroji", "ruleSubmit": "Přidat pravidlo", "rulesNoOne": "Žádná pravidla. Přidejte pravidlo pomocí formuláře.", "rulesOrder": "Pravidla jsou hodnocena podle priority vzestupně.", @@ -586,7 +600,7 @@ "none": "Nic", "unknown": "Neznámý", "resources": "Zdroje", - "resourcesDescription": "Zdroje jsou proxy aplikací běžících na vaší soukromé síti. Vytvořte zdroj pro jakoukoli HTTP/HTTPS nebo nakreslete TCP/UDP službu na vaší soukromé síti. Každý zdroj musí být připojen k webu pro povolení soukromého, zabezpečeného připojení pomocí šifrovaného tunelu WireGuard.", + "resourcesDescription": "Zdroje jsou proxy aplikací běžících na soukromé síti. Vytvořte zdroj pro jakoukoli HTTP/HTTPS nebo nakreslete TCP/UDP službu v soukromé síti. Každý zdroj musí být připojen k webu pro povolení soukromého, zabezpečeného připojení pomocí šifrovaného tunelu WireGuard.", "resourcesWireGuardConnect": "Bezpečné připojení s šifrováním WireGuard", "resourcesMultipleAuthenticationMethods": "Konfigurace vícenásobných metod ověřování", "resourcesUsersRolesAccess": "Kontrola přístupu na základě uživatelů a rolí", @@ -597,7 +611,7 @@ "resourceSelect": "Vyberte zdroj", "shareLinks": "Sdílet odkazy", "share": "Sdílené odkazy", - "shareDescription2": "Vytvořte sdílitelné odkazy na vaše zdroje. Odkazy poskytují dočasný nebo neomezený přístup k vašemu zdroji. Můžete nakonfigurovat dobu vypršení platnosti odkazu při jeho vytvoření.", + "shareDescription2": "Vytvořte sdílitelné odkazy na zdroje. Odkazy poskytují dočasný nebo neomezený přístup k vašemu zdroji. Můžete nakonfigurovat dobu vypršení platnosti odkazu při jeho vytvoření.", "shareEasyCreate": "Snadné vytváření a sdílení", "shareConfigurableExpirationDuration": "Konfigurovatelná doba vypršení platnosti", "shareSecureAndRevocable": "Bezpečné a odvolatelné", @@ -607,19 +621,19 @@ "unknownCommand": "Neznámý příkaz", "newtErrorFetchReleases": "Nepodařilo se načíst informace o vydání: {err}", "newtErrorFetchLatest": "Chyba při načítání nejnovější verze: {err}", - "newtEndpoint": "Newt Endpoint", - "newtId": "Newt ID", - "newtSecretKey": "Tajný klíč novinky", + "newtEndpoint": "Endpoint", + "newtId": "ID", + "newtSecretKey": "Tajný klíč", "architecture": "Architektura", "sites": "Stránky", - "siteWgAnyClients": "K připojení použijte jakéhokoli klienta WireGuard. Budete muset řešit své interní zdroje pomocí klientské IP adresy.", + "siteWgAnyClients": "K připojení použijte jakéhokoli klienta WireGuard. Budete muset řešit interní zdroje pomocí klientské IP adresy.", "siteWgCompatibleAllClients": "Kompatibilní se všemi klienty aplikace WireGuard", "siteWgManualConfigurationRequired": "Je vyžadována ruční konfigurace", "userErrorNotAdminOrOwner": "Uživatel není administrátor nebo vlastník", "pangolinSettings": "Nastavení - Pangolin", "accessRoleYour": "Vaše role:", - "accessRoleSelect2": "Vyberte roli", - "accessUserSelect": "Vyberte uživatele", + "accessRoleSelect2": "Vybrat role", + "accessUserSelect": "Vybrat uživatele", "otpEmailEnter": "Zadejte e-mail", "otpEmailEnterDescription": "Stisknutím klávesy Enter přidáte e-mail po zadání do vstupního pole.", "otpEmailErrorInvalid": "Neplatná e-mailová adresa. Wildcard (*) musí být celá místní část.", @@ -671,7 +685,7 @@ "resourcePincodeSetupTitle": "Nastavit anonymní kód", "resourcePincodeSetupTitleDescription": "Nastavit pincode pro ochranu tohoto zdroje", "resourceRoleDescription": "Administrátoři mají vždy přístup k tomuto zdroji.", - "resourceUsersRoles": "Uživatelé a role", + "resourceUsersRoles": "Kontrola přístupu", "resourceUsersRolesDescription": "Nastavení, kteří uživatelé a role mohou navštívit tento zdroj", "resourceUsersRolesSubmit": "Uložit uživatele a role", "resourceWhitelistSave": "Úspěšně uloženo", @@ -702,6 +716,7 @@ "resourceTransferSubmit": "Přenos zdroje", "siteDestination": "Cílová stránka", "searchSites": "Hledat lokality", + "countries": "Země", "accessRoleCreate": "Vytvořit roli", "accessRoleCreateDescription": "Vytvořte novou roli pro seskupení uživatelů a spravujte jejich oprávnění.", "accessRoleCreateSubmit": "Vytvořit roli", @@ -768,7 +783,7 @@ "idpClientId": "ID klienta", "idpClientIdDescription": "Klientské ID OAuth2 od poskytovatele identity", "idpClientSecret": "Tajný klíč klienta", - "idpClientSecretDescription": "OAuth2 klíč klienta od poskytovatele identity", + "idpClientSecretDescription": "OAuth2 heslo klienta od poskytovatele identity", "idpAuthUrl": "Autorizační URL", "idpAuthUrlDescription": "Koncový koncový bod ověření OAuth2", "idpTokenUrl": "URL tokenu", @@ -791,7 +806,7 @@ "idpSubmit": "Vytvořit poskytovatele identity", "orgPolicies": "Zásady organizace", "idpSettings": "Nastavení {idpName}", - "idpCreateSettingsDescription": "Konfigurace nastavení pro poskytovatele identity", + "idpCreateSettingsDescription": "Konfigurace nastavení poskytovatele identity", "roleMapping": "Mapování rolí", "orgMapping": "Mapování organizace", "orgPoliciesSearch": "Hledat v zásadách organizace...", @@ -826,7 +841,7 @@ "idpUpdatedDescription": "Poskytovatel identity byl úspěšně aktualizován", "redirectUrl": "Přesměrovat URL", "redirectUrlAbout": "O přesměrování URL", - "redirectUrlAboutDescription": "Toto je URL, na kterou budou uživatelé po ověření přesměrováni. Tuto URL je třeba nakonfigurovat v nastavení poskytovatele identity.", + "redirectUrlAboutDescription": "Toto je URL, na kterou budou uživatelé po ověření přesměrováni. Tuto URL je třeba nastavit v nastavení poskytovatele identity.", "pangolinAuth": "Auth - Pangolin", "verificationCodeLengthRequirements": "Váš ověřovací kód musí mít 8 znaků.", "errorOccurred": "Došlo k chybě", @@ -909,6 +924,10 @@ "passwordResetSent": "Na tuto e-mailovou adresu zašleme kód pro obnovení hesla.", "passwordResetCode": "Reset Code", "passwordResetCodeDescription": "Zkontrolujte svůj e-mail pro kód pro obnovení.", + "generatePasswordResetCode": "Vygenerovat kód pro obnovení hesla", + "passwordResetCodeGenerated": "Kód pro obnovení hesla byl vytvořen", + "passwordResetCodeGeneratedDescription": "Sdílejte tento kód s uživatelem. Mohou jej použít k obnovení hesla.", + "passwordResetUrl": "Reset URL", "passwordNew": "Nové heslo", "passwordNewConfirm": "Potvrdit nové heslo", "changePassword": "Změnit heslo", @@ -926,6 +945,9 @@ "pincodeAuth": "Ověřovací kód", "pincodeSubmit2": "Odeslat kód", "passwordResetSubmit": "Žádost o obnovení", + "passwordResetAlreadyHaveCode": "Zadejte kód pro obnovení hesla", + "passwordResetSmtpRequired": "Obraťte se na správce", + "passwordResetSmtpRequiredDescription": "Pro obnovení hesla je vyžadován kód pro obnovení hesla. Kontaktujte prosím svého administrátora.", "passwordBack": "Zpět na heslo", "loginBack": "Přejít zpět na přihlášení", "signup": "Zaregistrovat se", @@ -1091,12 +1113,15 @@ "actionListSiteResources": "Seznam zdrojů webu", "actionUpdateSiteResource": "Aktualizovat dokument webu", "actionListInvitations": "Seznam pozvánek", + "actionExportLogs": "Exportovat protokoly", + "actionViewLogs": "Zobrazit logy", "noneSelected": "Není vybráno", "orgNotFound2": "Nebyly nalezeny žádné organizace.", "searchProgress": "Hledat...", "create": "Vytvořit", "orgs": "Organizace", "loginError": "Při přihlášení došlo k chybě", + "loginRequiredForDevice": "Pro ověření vašeho zařízení je nutné se přihlásit.", "passwordForgot": "Zapomněli jste heslo?", "otpAuth": "Dvoufaktorové ověření", "otpAuthDescription": "Zadejte kód z vaší autentizační aplikace nebo jeden z vlastních záložních kódů.", @@ -1151,19 +1176,29 @@ "sidebarHome": "Domů", "sidebarSites": "Stránky", "sidebarResources": "Zdroje", + "sidebarProxyResources": "Veřejnost", + "sidebarClientResources": "Soukromé", "sidebarAccessControl": "Kontrola přístupu", + "sidebarLogsAndAnalytics": "Logy & Analytika", "sidebarUsers": "Uživatelé", + "sidebarAdmin": "Admin", "sidebarInvitations": "Pozvánky", "sidebarRoles": "Role", - "sidebarShareableLinks": "Sdílené odkazy", + "sidebarShareableLinks": "Odkazy", "sidebarApiKeys": "API klíče", "sidebarSettings": "Nastavení", "sidebarAllUsers": "Všichni uživatelé", "sidebarIdentityProviders": "Poskytovatelé identity", "sidebarLicense": "Licence", "sidebarClients": "Klienti", + "sidebarUserDevices": "Uživatelé", + "sidebarMachineClients": "Stroje a přístroje", "sidebarDomains": "Domény", + "sidebarGeneral": "Obecná ustanovení", + "sidebarLogAndAnalytics": "Log & Analytics", "sidebarBluePrints": "Plány", + "sidebarOrganization": "Organizace", + "sidebarLogsAnalytics": "Analytici", "blueprints": "Plány", "blueprintsDescription": "Použít deklarativní konfigurace a zobrazit předchozí běhy", "blueprintAdd": "Přidat plán", @@ -1174,7 +1209,7 @@ "blueprintDetailsDescription": "Podívejte se na výsledek použitého plánu a případné chyby, které se vyskytly", "blueprintInfo": "Informace o plánu", "message": "Zpráva", - "blueprintContentsDescription": "Definujte obsah YAML popisující vaši infrastrukturu", + "blueprintContentsDescription": "Definujte obsah YAML popisující infrastrukturu", "blueprintErrorCreateDescription": "Při aplikaci plánu došlo k chybě", "blueprintErrorCreate": "Chyba při vytváření plánu", "searchBlueprintProgress": "Hledat plány...", @@ -1230,15 +1265,15 @@ "loading": "Načítání", "restart": "Restartovat", "domains": "Domény", - "domainsDescription": "Spravovat domény pro vaši organizaci", + "domainsDescription": "Vytvořit a spravovat domény dostupné v organizaci", "domainsSearch": "Hledat domény...", "domainAdd": "Přidat doménu", - "domainAddDescription": "Registrujte novou doménu ve vaší organizaci", + "domainAddDescription": "Registrovat novou doménu s organizací", "domainCreate": "Vytvořit doménu", "domainCreatedDescription": "Doména byla úspěšně vytvořena", "domainDeletedDescription": "Doména byla úspěšně odstraněna", - "domainQuestionRemove": "Opravdu chcete odstranit doménu z vašeho účtu?", - "domainMessageRemove": "Po odstranění domény již nebude přiřazena k vašemu účtu.", + "domainQuestionRemove": "Jste si jisti, že chcete odstranit doménu?", + "domainMessageRemove": "Po odstranění domény již nebude přiřazena k organizaci.", "domainConfirmDelete": "Potvrdit odstranění domény", "domainDelete": "Odstranit doménu", "domain": "Doména", @@ -1257,7 +1292,7 @@ "pending": "Nevyřízeno", "sidebarBilling": "Fakturace", "billing": "Fakturace", - "orgBillingDescription": "Spravujte své fakturační údaje a předplatné", + "orgBillingDescription": "Spravovat fakturační informace a předplatné", "github": "GitHub", "pangolinHosted": "Pangolin hostovaný", "fossorial": "Fossorální", @@ -1285,7 +1320,7 @@ "productUpdateTitle": "Aktualizace produktu", "productUpdateEmpty": "Žádné aktualizace", "dismissAll": "Odmítnout vše", - "pangolinUpdateAvailable": "K dispozici je nová verze", + "pangolinUpdateAvailable": "Dostupná aktualizace", "pangolinUpdateAvailableInfo": "Verze {version} je připravena k instalaci", "pangolinUpdateAvailableReleaseNotes": "Zobrazit poznámky k vydání", "newtUpdateAvailable": "Dostupná aktualizace", @@ -1300,7 +1335,7 @@ "domainPickerSortAsc": "A-Z", "domainPickerSortDesc": "Z-A", "domainPickerCheckingAvailability": "Kontrola dostupnosti...", - "domainPickerNoMatchingDomains": "Nebyly nalezeny žádné odpovídající domény. Zkuste jinou doménu nebo zkontrolujte nastavení domény vaší organizace.", + "domainPickerNoMatchingDomains": "Nebyly nalezeny žádné odpovídající domény. Zkuste jinou doménu nebo zkontrolujte nastavení domény organizace.", "domainPickerOrganizationDomains": "Domény organizace", "domainPickerProvidedDomains": "Poskytnuté domény", "domainPickerSubdomain": "Subdoména: {subdomain}", @@ -1334,7 +1369,7 @@ "billingModifySubscription": "Upravit předplatné", "billingStartSubscription": "Začít předplatné", "billingRecurringCharge": "Opakované nabití", - "billingManageSubscriptionSettings": "Spravovat nastavení a nastavení předplatného", + "billingManageSubscriptionSettings": "Správa nastavení předplatného a předvoleb", "billingNoActiveSubscription": "Nemáte aktivní předplatné. Začněte předplatné, abyste zvýšili omezení používání.", "billingFailedToLoadSubscription": "Nepodařilo se načíst odběr", "billingFailedToLoadUsage": "Nepodařilo se načíst využití", @@ -1345,9 +1380,9 @@ "billingPortalError": "Chyba portálu", "billingDataUsageInfo": "Pokud jste připojeni k cloudu, jsou vám účtována všechna data přenášená prostřednictvím zabezpečených tunelů. To zahrnuje příchozí i odchozí provoz na všech vašich stránkách. Jakmile dosáhnete svého limitu, vaše stránky se odpojí, dokud neaktualizujete svůj tarif nebo nezmenšíte jeho používání. Data nejsou nabírána při používání uzlů.", "billingOnlineTimeInfo": "Platíte na základě toho, jak dlouho budou vaše stránky připojeny k cloudu. Například, 44,640 minut se rovná jedné stránce 24/7 po celý měsíc. Jakmile dosáhnete svého limitu, vaše stránky se odpojí, dokud neaktualizujete svůj tarif nebo nezkrátíte jeho používání. Čas není vybírán při používání uzlů.", - "billingUsersInfo": "Obdrželi jste platbu za každého uživatele ve vaší organizaci. Fakturace je počítána denně na základě počtu aktivních uživatelských účtů ve vašem org.", - "billingDomainInfo": "Platba je účtována za každou doménu ve vaší organizaci. Fakturace je počítána denně na základě počtu aktivních doménových účtů na Vašem org.", - "billingRemoteExitNodesInfo": "Za každý spravovaný uzel ve vaší organizaci se vám účtuje denně. Fakturace je počítána na základě počtu aktivních spravovaných uzlů ve vašem org.", + "billingUsersInfo": "Každý uživatel v organizaci je účtován denně. Fakturace je počítána na základě počtu aktivních uživatelských účtů na Vašem org.", + "billingDomainInfo": "Objednávka je účtována za každou doménu v organizaci. Fakturace je počítána denně na základě počtu aktivních doménových účtů na Vašem org.", + "billingRemoteExitNodesInfo": "Za každý spravovaný uzel v organizaci se vám účtuje denně. Fakturace je vypočítávána na základě počtu aktivních spravovaných uzlů ve vašem org.", "domainNotFound": "Doména nenalezena", "domainNotFoundDescription": "Tento dokument je zakázán, protože doména již neexistuje náš systém. Nastavte prosím novou doménu pro tento dokument.", "failed": "Selhalo", @@ -1430,29 +1465,32 @@ "and": "a", "privacyPolicy": "zásady ochrany osobních údajů" }, + "signUpMarketing": { + "keepMeInTheLoop": "Udržujte mě ve smyčce s novinkami, aktualizacemi a novými funkcemi e-mailem." + }, "siteRequired": "Stránka je povinná.", "olmTunnel": "Starý tunel", "olmTunnelDescription": "Použít Olm pro připojení klienta", "errorCreatingClient": "Chyba při vytváření klienta", "clientDefaultsNotFound": "Výchozí hodnoty klienta nebyly nalezeny", "createClient": "Vytvořit klienta", - "createClientDescription": "Vytvořte nového klienta pro připojení k vašim stránkám", + "createClientDescription": "Vytvořte nového klienta pro přístup k soukromým zdrojům", "seeAllClients": "Zobrazit všechny klienty", "clientInformation": "Informace o klientovi", "clientNamePlaceholder": "Název klienta", "address": "Adresa", "subnetPlaceholder": "Podsíť", - "addressDescription": "Adresa, kterou bude tento klient používat pro připojení", + "addressDescription": "Interní adresa klienta. Musí spadat do podsítě organizace.", "selectSites": "Vyberte stránky", "sitesDescription": "Klient bude mít připojení k vybraným webům", "clientInstallOlm": "Nainstalovat Olm", "clientInstallOlmDescription": "Stáhněte si Olm běžící ve vašem systému", - "clientOlmCredentials": "Olm pověření", - "clientOlmCredentialsDescription": "Tímto způsobem se bude Olm autentizovat se serverem", - "olmEndpoint": "Olm koncový bod", - "olmId": "Olm ID", - "olmSecretKey": "Olm tajný klíč", - "clientCredentialsSave": "Uložit přihlašovací údaje", + "clientOlmCredentials": "Pověření", + "clientOlmCredentialsDescription": "Tímto způsobem bude klient autentizovat se serverem", + "olmEndpoint": "Endpoint", + "olmId": "ID", + "olmSecretKey": "Tajný klíč", + "clientCredentialsSave": "Uložit pověření", "clientCredentialsSaveDescription": "Toto nastavení uvidíte pouze jednou. Ujistěte se, že jej zkopírujete na bezpečné místo.", "generalSettingsDescription": "Konfigurace obecných nastavení pro tohoto klienta", "clientUpdated": "Klient byl aktualizován", @@ -1463,9 +1501,7 @@ "sitesFetchError": "Došlo k chybě při načítání stránek.", "olmErrorFetchReleases": "Při načítání vydání Olm došlo k chybě.", "olmErrorFetchLatest": "Došlo k chybě při načítání nejnovější verze Olm.", - "remoteSubnets": "Vzdálené podsítě", "enterCidrRange": "Zadejte rozsah CIDR", - "remoteSubnetsDescription": "Přidejte CIDR rozsahy, které mohou být přístupné z tohoto webu dálkově pomocí klientů. Použijte formát jako 10.0.0.0/24. Toto platí pro připojení klienta VPN.", "resourceEnableProxy": "Povolit veřejné proxy", "resourceEnableProxyDescription": "Povolit veřejné proxying pro tento zdroj. To umožňuje přístup ke zdrojům mimo síť prostřednictvím cloudu na otevřeném portu. Vyžaduje nastavení Traefik.", "externalProxyEnabled": "Externí proxy povolen", @@ -1483,14 +1519,15 @@ "enableHealthChecksDescription": "Sledujte zdraví tohoto cíle. V případě potřeby můžete sledovat jiný cílový bod, než je cíl.", "healthScheme": "Způsob", "healthSelectScheme": "Vybrat metodu", + "healthCheckPortInvalid": "Přístav kontroly stavu musí být mezi 1 a 65535", "healthCheckPath": "Cesta", "healthHostname": "IP / Hostitel", "healthPort": "Přístav", "healthCheckPathDescription": "Cesta ke kontrole zdravotního stavu.", - "healthyIntervalSeconds": "Interval zdraví", - "unhealthyIntervalSeconds": "Nezdravý interval", + "healthyIntervalSeconds": "Zdravý interval (sek)", + "unhealthyIntervalSeconds": "Nezdravý interval (sek)", "IntervalSeconds": "Interval zdraví", - "timeoutSeconds": "Časový limit", + "timeoutSeconds": "Časový limit (sek)", "timeIsInSeconds": "Čas je v sekundách", "retryAttempts": "Opakovat pokusy", "expectedResponseCodes": "Očekávané kódy odezvy", @@ -1526,12 +1563,12 @@ "resourceEditDomain": "Upravit doménu", "siteName": "Název webu", "proxyPort": "Přístav", - "resourcesTableProxyResources": "Zdroje proxy", - "resourcesTableClientResources": "Zdroje klienta", + "resourcesTableProxyResources": "Veřejnost", + "resourcesTableClientResources": "Soukromé", "resourcesTableNoProxyResourcesFound": "Nebyly nalezeny žádné zdroje proxy", "resourcesTableNoInternalResourcesFound": "Nebyly nalezeny žádné vnitřní zdroje.", "resourcesTableDestination": "Místo určení", - "resourcesTableTheseResourcesForUseWith": "Tyto zdroje jsou určeny pro použití s", + "resourcesTableAlias": "Alias", "resourcesTableClients": "Klienti", "resourcesTableAndOnlyAccessibleInternally": "a jsou interně přístupné pouze v případě, že jsou propojeni s klientem.", "resourcesTableNoTargets": "Žádné cíle", @@ -1540,8 +1577,8 @@ "resourcesTableOffline": "Offline", "resourcesTableUnknown": "Neznámý", "resourcesTableNotMonitored": "Není sledováno", - "editInternalResourceDialogEditClientResource": "Upravit klientský dokument", - "editInternalResourceDialogUpdateResourceProperties": "Aktualizujte vlastnosti zdroje a cílovou konfiguraci pro {resourceName}.", + "editInternalResourceDialogEditClientResource": "Upravit soukromý dokument", + "editInternalResourceDialogUpdateResourceProperties": "Aktualizovat konfiguraci zdroje a ovládací prvky přístupu pro {resourceName}", "editInternalResourceDialogResourceProperties": "Vlastnosti zdroje", "editInternalResourceDialogName": "Jméno", "editInternalResourceDialogProtocol": "Protokol", @@ -1560,11 +1597,22 @@ "editInternalResourceDialogInvalidIPAddressFormat": "Neplatný formát IP adresy", "editInternalResourceDialogDestinationPortMin": "Cílový přístav musí být alespoň 1", "editInternalResourceDialogDestinationPortMax": "Cílový přístav musí být nižší než 65536", + "editInternalResourceDialogPortModeRequired": "Protokol, proxy port a cílový port jsou vyžadovány pro režim portu", + "editInternalResourceDialogMode": "Režim", + "editInternalResourceDialogModePort": "Přístav", + "editInternalResourceDialogModeHost": "Hostitel", + "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogDestination": "Místo určení", + "editInternalResourceDialogDestinationHostDescription": "IP adresa nebo název hostitele zdroje v síti webu.", + "editInternalResourceDialogDestinationIPDescription": "IP nebo název hostitele zdroje v síti webu.", + "editInternalResourceDialogDestinationCidrDescription": "Rozsah zdrojů CIDR v síti webu.", + "editInternalResourceDialogAlias": "Alias", + "editInternalResourceDialogAliasDescription": "Volitelný interní DNS alias pro tento dokument.", "createInternalResourceDialogNoSitesAvailable": "Nejsou k dispozici žádné weby", "createInternalResourceDialogNoSitesAvailableDescription": "Musíte mít alespoň jeden Newt web s podsítí nakonfigurovanou pro vytvoření vnitřních zdrojů.", "createInternalResourceDialogClose": "Zavřít", - "createInternalResourceDialogCreateClientResource": "Vytvořit klientský dokument", - "createInternalResourceDialogCreateClientResourceDescription": "Vytvořte nový zdroj, který bude přístupný klientům připojeným k vybranému webu.", + "createInternalResourceDialogCreateClientResource": "Vytvořit soukromý zdroj", + "createInternalResourceDialogCreateClientResourceDescription": "Vytvořte nový zdroj, který bude přístupný pouze klientům připojeným k organizaci", "createInternalResourceDialogResourceProperties": "Vlastnosti zdroje", "createInternalResourceDialogName": "Jméno", "createInternalResourceDialogSite": "Lokalita", @@ -1593,11 +1641,22 @@ "createInternalResourceDialogInvalidIPAddressFormat": "Neplatný formát IP adresy", "createInternalResourceDialogDestinationPortMin": "Cílový přístav musí být alespoň 1", "createInternalResourceDialogDestinationPortMax": "Cílový přístav musí být nižší než 65536", + "createInternalResourceDialogPortModeRequired": "Protokol, proxy port a cílový port jsou vyžadovány pro režim portu", + "createInternalResourceDialogMode": "Režim", + "createInternalResourceDialogModePort": "Přístav", + "createInternalResourceDialogModeHost": "Hostitel", + "createInternalResourceDialogModeCidr": "CIDR", + "createInternalResourceDialogDestination": "Místo určení", + "createInternalResourceDialogDestinationHostDescription": "IP adresa nebo název hostitele zdroje v síti webu.", + "createInternalResourceDialogDestinationCidrDescription": "Rozsah zdrojů CIDR v síti webu.", + "createInternalResourceDialogAlias": "Alias", + "createInternalResourceDialogAliasDescription": "Volitelný interní DNS alias pro tento dokument.", "siteConfiguration": "Konfigurace", "siteAcceptClientConnections": "Přijmout připojení klienta", - "siteAcceptClientConnectionsDescription": "Umožnit ostatním zařízením připojit se prostřednictvím této instance Newt jako brána pomocí klientů.", - "siteAddress": "Adresa webu", - "siteAddressDescription": "Zadejte IP adresu hostitele pro připojení. Toto je interní adresa webu v síti Pangolin pro klienty. Musí spadat do podsítě Org.", + "siteAcceptClientConnectionsDescription": "Povolit uživatelským zařízením a klientům přístup ke zdrojům na tomto webu. To lze později změnit.", + "siteAddress": "Adresa webu (Advanced)", + "siteAddressDescription": "Interní adresa webu. Musí spadat do podsítě organizace.", + "siteNameDescription": "Zobrazovaný název stránky, který lze později změnit.", "autoLoginExternalIdp": "Automatické přihlášení pomocí externího IDP", "autoLoginExternalIdpDescription": "Okamžitě přesměrujte uživatele na externí IDP k ověření.", "selectIdp": "Vybrat IDP", @@ -1611,7 +1670,7 @@ "autoLoginErrorNoRedirectUrl": "Od poskytovatele identity nebyla obdržena žádná adresa URL.", "autoLoginErrorGeneratingUrl": "Nepodařilo se vygenerovat ověřovací URL.", "remoteExitNodeManageRemoteExitNodes": "Vzdálené uzly", - "remoteExitNodeDescription": "Hostujte jeden nebo více vlastních vzdálených uzlů, abyste rozšířili síťová připojení a snížili závislost na cloudu", + "remoteExitNodeDescription": "Samohostitelská jedna nebo více vzdálených uzlů pro rozšíření připojení k síti a snížení závislosti na cloudu", "remoteExitNodes": "Uzly", "searchRemoteExitNodes": "Hledat uzly...", "remoteExitNodeAdd": "Přidat uzel", @@ -1627,7 +1686,7 @@ "viewAllButton": "Zobrazit všechny uzly", "strategy": { "title": "Strategie tvorby", - "description": "Vyberte pro manuální konfiguraci vašeho uzlu nebo vygenerujte nové přihlašovací údaje.", + "description": "Zvolte pro ruční nastavení uzlu nebo vygenerování nových pověření.", "adopt": { "title": "Přijmout uzel", "description": "Zvolte tuto možnost, pokud již máte přihlašovací údaje k uzlu." @@ -1648,7 +1707,7 @@ }, "generate": { "title": "Vygenerovaná pověření", - "description": "Použijte tyto generované přihlašovací údaje pro nastavení vašeho uzlu", + "description": "Použijte tyto generované přihlašovací údaje pro nastavení uzlu", "nodeIdTitle": "ID uzlu", "secretTitle": "Tajný klíč", "saveCredentialsTitle": "Přidat přihlašovací údaje do konfigurace", @@ -1725,14 +1784,14 @@ "roleMappingExpressionPlaceholder": "např. obsahuje(skupiny, 'admin') && 'Admin' || 'Member'", "idpGoogleConfiguration": "Konfigurace Google", "idpGoogleConfigurationDescription": "Konfigurace přihlašovacích údajů Google OAuth2", - "idpGoogleClientIdDescription": "Vaše ID klienta Google OAuth2", + "idpGoogleClientIdDescription": "Google OAuth2 Client ID", "idpGoogleClientSecretDescription": "Tajný klíč klienta Google OAuth2", "idpAzureConfiguration": "Nastavení Azure Entra ID", - "idpAzureConfigurationDescription": "Nastavte vaše Azure Entra ID OAuth2", + "idpAzureConfigurationDescription": "Konfigurace Azure Entra ID OAuth2", "idpTenantId": "ID tenanta", - "idpTenantIdPlaceholder": "vaše-tenant-id", - "idpAzureTenantIdDescription": "Vaše Azure nájemce ID (nalezeno v přehledu Azure Active Directory – Azure)", - "idpAzureClientIdDescription": "Vaše ID registrace aplikace Azure", + "idpTenantIdPlaceholder": "tenant-id", + "idpAzureTenantIdDescription": "ID nájemce Azura (nalezeno v přehledu Azure Active Directory - Azure Active Directory - přehled )", + "idpAzureClientIdDescription": "ID klienta pro registraci aplikace Azure", "idpAzureClientSecretDescription": "Tajný klíč registrace aplikace Azure", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", @@ -1741,14 +1800,14 @@ "idpGoogleConfigurationTitle": "Konfigurace Google", "idpAzureConfigurationTitle": "Nastavení Azure Entra ID", "idpTenantIdLabel": "ID tenanta", - "idpAzureClientIdDescription2": "Vaše ID registrace aplikace Azure", + "idpAzureClientIdDescription2": "ID klienta pro registraci aplikace Azure", "idpAzureClientSecretDescription2": "Tajný klíč registrace aplikace Azure", "idpGoogleDescription": "Poskytovatel Google OAuth2/OIDC", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", "subnet": "Podsíť", "subnetDescription": "Podsíť pro konfiguraci sítě této organizace.", "authPage": "Auth stránka", - "authPageDescription": "Konfigurace autentizační stránky vaší organizace", + "authPageDescription": "Konfigurace autentizační stránky organizace", "authPageDomain": "Doména ověření stránky", "noDomainSet": "Není nastavena žádná doména", "changeDomain": "Změnit doménu", @@ -1758,7 +1817,7 @@ "setAuthPageDomain": "Nastavit doménu autentické stránky", "failedToFetchCertificate": "Nepodařilo se načíst certifikát", "failedToRestartCertificate": "Restartování certifikátu se nezdařilo", - "addDomainToEnableCustomAuthPages": "Přidejte doménu pro povolení vlastních ověřovacích stránek pro vaši organizaci", + "addDomainToEnableCustomAuthPages": "Přidat doménu pro povolení vlastních ověřovacích stránek organizace", "selectDomainForOrgAuthPage": "Vyberte doménu pro ověřovací stránku organizace", "domainPickerProvidedDomain": "Poskytnutá doména", "domainPickerFreeProvidedDomain": "Zdarma poskytnutá doména", @@ -1773,7 +1832,7 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" nemohl být platný pro {domain}.", "domainPickerSubdomainSanitized": "Upravená subdoména", "domainPickerSubdomainCorrected": "\"{sub}\" bylo opraveno na \"{sanitized}\"", - "orgAuthSignInTitle": "Přihlaste se do vaší organizace", + "orgAuthSignInTitle": "Přihlásit se k organizaci", "orgAuthChooseIdpDescription": "Chcete-li pokračovat, vyberte svého poskytovatele identity", "orgAuthNoIdpConfigured": "Tato organizace nemá nakonfigurovány žádné poskytovatele identity. Místo toho se můžete přihlásit s vaší Pangolinovou identitou.", "orgAuthSignInWithPangolin": "Přihlásit se pomocí Pangolinu", @@ -1791,7 +1850,7 @@ "enableTwoFactorAuthentication": "Povolit dvoufaktorové ověření", "completeSecuritySteps": "Dokončit bezpečnostní kroky", "securitySettings": "Nastavení zabezpečení", - "securitySettingsDescription": "Konfigurace bezpečnostních zásad pro vaši organizaci", + "securitySettingsDescription": "Konfigurace bezpečnostních pravidel organizace", "requireTwoFactorForAllUsers": "Vyžadovat dvoufaktorové ověření pro všechny uživatele", "requireTwoFactorDescription": "Pokud je povoleno, všichni interní uživatelé v této organizaci musí mít dvoufaktorové ověření povoleno pro přístup k organizaci.", "requireTwoFactorDisabledDescription": "Tato funkce vyžaduje platnou licenci (Enterprise) nebo aktivní předplatné (SaaS)", @@ -1854,8 +1913,12 @@ "enterpriseEdition": "Podniková edice", "unlicensed": "Nelicencováno", "beta": "Beta", - "manageClients": "Spravovat klienty", - "manageClientsDescription": "Klienti jsou zařízení, která se mohou připojit k vašim lokalitám", + "manageUserDevices": "Uživatelská zařízení", + "manageUserDevicesDescription": "Zobrazit a spravovat zařízení, která používají uživatelé k soukromím připojení k zdrojům", + "manageMachineClients": "Správa automatických klientů", + "manageMachineClientsDescription": "Vytvořte a spravujte klienty, které servery a systémy používají k soukromím připojování k zdrojům", + "clientsTableUserClients": "Uživatel", + "clientsTableMachineClients": "Stroj", "licenseTableValidUntil": "Platná do", "saasLicenseKeysSettingsTitle": "Podniková licence", "saasLicenseKeysSettingsDescription": "Vygenerovat a spravovat podnikové licence pro instance Pangolin na vlastním hostingu", @@ -1990,11 +2053,12 @@ "pathRewriteStripLabel": "odstranit", "sidebarEnableEnterpriseLicense": "Použít podnikovou licenci", "cannotbeUndone": "To nelze vrátit zpět.", - "toConfirm": "Potvrdit", + "toConfirm": "potvrdit.", "deleteClientQuestion": "Jste si jisti, že chcete odstranit klienta z webu a organizace?", "clientMessageRemove": "Po odstranění se klient již nebude moci připojit k webu.", "sidebarLogs": "Logy", "request": "Žádost", + "requests": "Požadavky", "logs": "Logy", "logsSettingsDescription": "Monitorovat logy shromážděné z této orginizace", "searchLogs": "Hledat logy...", @@ -2020,6 +2084,7 @@ "ip": "IP adresa", "reason": "Důvod", "requestLogs": "Záznamy požadavků", + "requestAnalytics": "Vyžádat analýzu", "host": "Hostitel", "location": "Poloha", "actionLogs": "Záznamy akcí", @@ -2029,6 +2094,7 @@ "logRetention": "Zaznamenávání záznamu", "logRetentionDescription": "Spravovat, jak dlouho jsou různé typy logů uloženy pro tuto organizaci nebo je zakázat", "requestLogsDescription": "Zobrazit podrobné protokoly požadavků pro zdroje v této organizaci", + "requestAnalyticsDescription": "Zobrazit podrobnou analýzu požadavků pro zdroje v této organizaci", "logRetentionRequestLabel": "Zachování logu žádosti", "logRetentionRequestDescription": "Jak dlouho uchovávat záznamy požadavků", "logRetentionAccessLabel": "Zachování záznamu přístupu", @@ -2042,6 +2108,7 @@ "logRetention30Days": "30 dní", "logRetention90Days": "90 dní", "logRetentionForever": "Navždy", + "logRetentionEndOfFollowingYear": "Konec následujícího roku", "actionLogsDescription": "Zobrazit historii akcí provedených v této organizaci", "accessLogsDescription": "Zobrazit žádosti o ověření přístupu pro zdroje v této organizaci", "licenseRequiredToUse": "Pro použití této funkce je vyžadována licence pro podnikání.", @@ -2052,7 +2119,7 @@ "preferWildcardCert": "Preferovat Wildcard certifikát", "unverified": "Neověřeno", "domainSetting": "Nastavení domény", - "domainSettingDescription": "Konfigurace nastavení pro vaši doménu", + "domainSettingDescription": "Konfigurace nastavení pro doménu", "preferWildcardCertDescription": "Pokus o vygenerování zástupného certifikátu (vyžaduje správně nakonfigurovaný certifikát).", "recordName": "Název záznamu", "auto": "Automaticky", @@ -2066,15 +2133,15 @@ "olmUpdateAvailableInfo": "Je k dispozici aktualizovaná verze Olm. Pro nejlepší zážitek prosím aktualizujte na nejnovější verzi.", "client": "Zákazník", "proxyProtocol": "Nastavení proxy protokolu", - "proxyProtocolDescription": "Konfigurace Proxy protokolu pro zachování klientských IP adres pro služby TCP/UDP.", + "proxyProtocolDescription": "Konfigurace Proxy protokolu pro zachování klientských IP adres pro služby TCP.", "enableProxyProtocol": "Povolit Proxy protokol", - "proxyProtocolInfo": "Zachovat IP adresy klienta pro TCP/UDP backends", + "proxyProtocolInfo": "Zachovat IP adresu klienta pro TCP zálohy", "proxyProtocolVersion": "Verze proxy protokolu", "version1": " Verze 1 (doporučeno)", "version2": "Verze 2", "versionDescription": "Verze 1 je textová a široce podporovaná. Verze 2 je binární a efektivnější, ale méně kompatibilní.", "warning": "Varování", - "proxyProtocolWarning": "Vaše backend aplikace musí být nakonfigurována, aby mohla být přijata spojení s Proxy protokolem. Pokud vaše backend nepodporuje Proxy protokol, povolením tohoto protokolu dojde k přerušení všech připojení. Ujistěte se, že nastavíte svou backend a důvěřujte hlavičkám Proxy protokolu z Traefik.", + "proxyProtocolWarning": "Aplikace backend musí být nakonfigurována, aby mohla přijímat připojení k Proxy protokolu. Pokud vaše backend nepodporuje Proxy protokol, povolením tohoto protokolu dojde k přerušení všech připojení, takže toto povolíte pouze pokud víte, co děláte. Ujistěte se, že nastavíte svou backend a důvěřujte hlavičkám Proxy protokolu z Traefik.", "restarting": "Restartování...", "manual": "Ruční", "messageSupport": "Podpora zpráv", @@ -2097,6 +2164,43 @@ "supportMessageSent": "Zpráva odeslána!", "supportWillContact": "Brzy budeme v kontaktu!", "selectLogRetention": "Vyberte záznam", + "terms": "Výrazy", + "privacy": "Soukromí", + "security": "Zabezpečení", + "docs": "Dokumenty", + "deviceActivation": "Aktivace zařízení", + "deviceCodeInvalidFormat": "Kód musí být 9 znaků (např. A1AJ-N5JD)", + "deviceCodeInvalidOrExpired": "Neplatný nebo prošlý kód", + "deviceCodeVerifyFailed": "Ověření kódu zařízení se nezdařilo", + "signedInAs": "Přihlášen jako", + "deviceCodeEnterPrompt": "Zadejte kód zobrazený na zařízení", + "continue": "Pokračovat", + "deviceUnknownLocation": "Neznámá poloha", + "deviceAuthorizationRequested": "Tato autorizace byla vyžádána od {location} na {date}. Ujistěte se, že tomuto zařízení věříte, protože získá přístup k účtu.", + "deviceLabel": "Zařízení: {deviceName}", + "deviceWantsAccess": "chce přistupovat k vašemu účtu", + "deviceExistingAccess": "Stávající přístup:", + "deviceFullAccess": "Úplný přístup k vašemu účtu", + "deviceOrganizationsAccess": "Přístup ke všem organizacím má přístup k vašemu účtu", + "deviceAuthorize": "Autorizovat {applicationName}", + "deviceConnected": "Zařízení připojeno!", + "deviceAuthorizedMessage": "Zařízení má oprávnění k přístupu k vašemu účtu.", + "pangolinCloud": "Pangolin Cloud", + "viewDevices": "Zobrazit zařízení", + "viewDevicesDescription": "Spravovat připojená zařízení", + "noDevices": "Nebyla nalezena žádná zařízení", + "dateCreated": "Datum vytvoření", + "unnamedDevice": "Nepojmenované zařízení", + "deviceQuestionRemove": "Jste si jisti, že chcete odstranit toto zařízení?", + "deviceMessageRemove": "Tuto akci nelze vrátit zpět.", + "deviceDeleteConfirm": "Odstranit zařízení", + "deleteDevice": "Odstranit zařízení", + "errorLoadingDevices": "Chyba při načítání zařízení", + "failedToLoadDevices": "Načtení zařízení se nezdařilo", + "deviceDeleted": "Zařízení odstraněno", + "deviceDeletedDescription": "Zařízení bylo úspěšně smazáno.", + "errorDeletingDevice": "Chyba při odstraňování zařízení", + "failedToDeleteDevice": "Odstranění zařízení se nezdařilo", "showColumns": "Zobrazit sloupce", "hideColumns": "Skrýt sloupce", "columnVisibility": "Viditelnost sloupců", @@ -2111,10 +2215,14 @@ "enableSelected": "Povolit vybrané", "disableSelected": "Zakázat vybrané", "checkSelectedStatus": "Zkontrolovat stav vybraného", + "clients": "Klienti", + "accessClientSelect": "Vyberte klienty stroje", + "resourceClientDescription": "Strojové klienty, kteří mají přístup k tomuto zdroji", + "regenerate": "Regenerovat", "credentials": "Pověření", "savecredentials": "Uložit přihlašovací údaje", - "regeneratecredentials": "Znovu klíče", - "regenerateCredentials": "Regenerovat a uložit vaše přihlašovací údaje", + "regenerateCredentialsButton": "Obnovit přihlašovací údaje", + "regenerateCredentials": "Obnovit přihlašovací údaje", "generatedcredentials": "Vygenerovaná pověření", "copyandsavethesecredentials": "Zkopírovat a ukládat tato pověření", "copyandsavethesecredentialsdescription": "Tyto přihlašovací údaje se znovu nezobrazí po opuštění této stránky. Uložte je bezpečně.", @@ -2122,13 +2230,12 @@ "credentialsSavedDescription": "Pověření byla úspěšně obnovena a uložena.", "credentialsSaveError": "Chyba při ukládání pověření", "credentialsSaveErrorDescription": "Došlo k chybě při obnovování a ukládání přihlašovacích údajů.", - "regenerateCredentialsWarning": "Obnovení přihlašovacích údajů zneplatní ty předchozí. Ujistěte se, že aktualizujete všechny konfigurace, které tyto přihlašovací údaje používají.", + "regenerateCredentialsWarning": "Obnovení přihlašovacích údajů zneplatní předchozí a způsobí odpojení. Ujistěte se, že aktualizujete všechny konfigurace, které tyto přihlašovací údaje používají.", "confirm": "Potvrdit", "regenerateCredentialsConfirmation": "Jste si jisti, že chcete obnovit přihlašovací údaje?", "endpoint": "Endpoint", "Id": "Id", "SecretKey": "Tajný klíč", - "featureDisabledTooltip": "Tato funkce je dostupná pouze v podnikovém plánu a vyžaduje její používání.", "niceId": "Pěkné ID", "niceIdUpdated": "Nice ID aktualizováno", "niceIdUpdatedSuccessfully": "Nice ID úspěšně aktualizováno", @@ -2136,5 +2243,32 @@ "niceIdUpdateErrorDescription": "Došlo k chybě při aktualizaci identifikátoru Nice.", "niceIdCannotBeEmpty": "Nice ID nemůže být prázdné", "enterIdentifier": "Zadejte identifikátor", - "identifier": "Identifier" + "identifier": "Identifier", + "deviceLoginUseDifferentAccount": "Nejste vy? Použijte jiný účet.", + "deviceLoginDeviceRequestingAccessToAccount": "Zařízení žádá o přístup k tomuto účtu.", + "noData": "Žádná data", + "machineClients": "Strojoví klienti", + "install": "Instalovat", + "run": "Spustit", + "clientNameDescription": "Zobrazované jméno klienta, které lze později změnit.", + "clientAddress": "Adresa klienta (Rozšířeno)", + "setupFailedToFetchSubnet": "Nepodařilo se načíst výchozí podsíť", + "setupSubnetAdvanced": "Podsíť (předplacená)", + "setupSubnetDescription": "Podsíť pro vnitřní síť této organizace.", + "siteRegenerateAndDisconnect": "Obnovit a odpojit", + "siteRegenerateAndDisconnectConfirmation": "Opravdu chcete obnovit přihlašovací údaje a odpojit tuto stránku?", + "siteRegenerateAndDisconnectWarning": "Toto obnoví přihlašovací údaje a okamžitě odpojí stránku. Stránka bude muset být restartována s novými přihlašovacími údaji.", + "siteRegenerateCredentialsConfirmation": "Jste si jisti, že chcete obnovit přihlašovací údaje pro tuto stránku?", + "siteRegenerateCredentialsWarning": "Toto obnoví přihlašovací údaje. Stránka zůstane připojena, dokud ji ručně nerestartujete a nepoužijete nové přihlašovací údaje.", + "clientRegenerateAndDisconnect": "Obnovit a odpojit", + "clientRegenerateAndDisconnectConfirmation": "Opravdu chcete obnovit přihlašovací údaje a odpojit tohoto klienta?", + "clientRegenerateAndDisconnectWarning": "Toto obnoví přihlašovací údaje a okamžitě odpojí klienta. Klient bude muset být restartován s novými přihlašovacími údaji.", + "clientRegenerateCredentialsConfirmation": "Opravdu chcete obnovit přihlašovací údaje pro tohoto klienta?", + "clientRegenerateCredentialsWarning": "Toto obnoví přihlašovací údaje. Klient zůstane připojen, dokud jej ručně nerestartujete a nepoužije nové přihlašovací údaje.", + "remoteExitNodeRegenerateAndDisconnect": "Obnovit a odpojit", + "remoteExitNodeRegenerateAndDisconnectConfirmation": "Jste si jisti, že chcete obnovit přihlašovací údaje a odpojit tento vzdálený výstupní uzel?", + "remoteExitNodeRegenerateAndDisconnectWarning": "Toto obnoví přihlašovací údaje a okamžitě odpojí vzdálený výstupní uzel. Vzdálený výstupní uzel bude muset být restartován s novými přihlašovacími údaji.", + "remoteExitNodeRegenerateCredentialsConfirmation": "Jste si jisti, že chcete obnovit přihlašovací údaje pro tento vzdálený výstupní uzel?", + "remoteExitNodeRegenerateCredentialsWarning": "Toto obnoví přihlašovací údaje. Vzdálený výstupní uzel zůstane připojen, dokud jej ručně nerestartujete a nepoužijete nové přihlašovací údaje.", + "agent": "Agent" } diff --git a/messages/de-DE.json b/messages/de-DE.json index 15a56f2de..13ab3d11c 100644 --- a/messages/de-DE.json +++ b/messages/de-DE.json @@ -1,12 +1,12 @@ { - "setupCreate": "Erstelle eine Organisation, einen Standort und Ressourcen", + "setupCreate": "Organisation, Seite und Ressourcen erstellen", "setupNewOrg": "Neue Organisation", "setupCreateOrg": "Organisation erstellen", "setupCreateResources": "Ressource erstellen", "setupOrgName": "Name der Organisation", - "orgDisplayName": "Anzeigename der Organisation.", + "orgDisplayName": "Dies ist der Anzeigename der Organisation.", "orgId": "Organisations-ID", - "setupIdentifierMessage": "Dies ist eine Eindeutige ID für Ihre Organisation. Diese ist unabhängig vom Anzeigenamen.", + "setupIdentifierMessage": "Dies ist der eindeutige Bezeichner für die Organisation.", "setupErrorIdentifier": "Organisations-ID ist bereits vergeben. Bitte wähle eine andere.", "componentsErrorNoMemberCreate": "Du bist derzeit kein Mitglied einer Organisation. Erstelle eine Organisation, um zu starten.", "componentsErrorNoMember": "Du bist aktuell kein Mitglied einer Organisation.", @@ -50,10 +50,10 @@ "siteMessageRemove": "Sobald die Site entfernt ist, wird sie nicht mehr zugänglich sein. Alle mit der Site verbundenen Ziele werden ebenfalls entfernt.", "siteQuestionRemove": "Sind Sie sicher, dass Sie die Site aus der Organisation entfernen möchten?", "siteManageSites": "Standorte verwalten", - "siteDescription": "Verbindung zum Netzwerk durch sichere Tunnel erlauben", + "siteDescription": "Erstelle und verwalte Sites, um die Verbindung zu privaten Netzwerken zu ermöglichen", "siteCreate": "Standort erstellen", "siteCreateDescription2": "Folge den nachfolgenden Schritten, um einen neuen Standort zu erstellen und zu verbinden", - "siteCreateDescription": "Erstelle einen neuen Standort, um Ressourcen zu verbinden", + "siteCreateDescription": "Erstellen Sie eine neue Seite, um Ressourcen zu verbinden", "close": "Schließen", "siteErrorCreate": "Fehler beim Erstellen des Standortes", "siteErrorCreateKeyPair": "Schlüsselpaar oder Standardwerte nicht gefunden", @@ -74,7 +74,7 @@ "siteInstallNewt": "Newt installieren", "siteInstallNewtDescription": "Installiere Newt auf deinem System.", "WgConfiguration": "WireGuard Konfiguration", - "WgConfigurationDescription": "Verwende folgende Konfiguration, um dich mit deinem Netzwerk zu verbinden", + "WgConfigurationDescription": "Verwenden Sie folgende Konfiguration, um sich mit dem Netzwerk zu verbinden", "operatingSystem": "Betriebssystem", "commands": "Befehle", "recommended": "Empfohlen", @@ -87,32 +87,32 @@ "siteUpdated": "Standort aktualisiert", "siteUpdatedDescription": "Der Standort wurde aktualisiert.", "siteGeneralDescription": "Allgemeine Einstellungen für diesen Standort konfigurieren", - "siteSettingDescription": "Konfigurieren der Standort Einstellungen", + "siteSettingDescription": "Einstellungen auf der Seite konfigurieren", "siteSetting": "{siteName} Einstellungen", - "siteNewtTunnel": "Newt-Tunnel (empfohlen)", - "siteNewtTunnelDescription": "Einfachster Weg, einen Zugriffspunkt zu deinem Netzwerk zu erstellen. Keine zusätzliche Einrichtung erforderlich.", + "siteNewtTunnel": "Neue Seite (empfohlen)", + "siteNewtTunnelDescription": "Einfachster Weg, einen Einstiegspunkt in jedes Netzwerk zu erstellen. Keine zusätzliche Einrichtung.", "siteWg": "Einfacher WireGuard Tunnel", "siteWgDescription": "Verwende jeden WireGuard-Client, um einen Tunnel einzurichten. Manuelles NAT-Setup erforderlich.", "siteWgDescriptionSaas": "Verwenden Sie jeden WireGuard-Client, um einen Tunnel zu erstellen. Manuelles NAT-Setup erforderlich. FUNKTIONIERT NUR BEI SELBSTGEHOSTETEN KNOTEN", "siteLocalDescription": "Nur lokale Ressourcen. Kein Tunneling.", "siteLocalDescriptionSaas": "Nur lokale Ressourcen. Kein Tunneling. Nur für entfernte Knoten verfügbar.", "siteSeeAll": "Alle Standorte anzeigen", - "siteTunnelDescription": "Lege fest, wie du dich mit deinem Standort verbinden möchtest", - "siteNewtCredentials": "Neue Newt Zugangsdaten", - "siteNewtCredentialsDescription": "So wird sich Newt mit dem Server authentifizieren", - "siteCredentialsSave": "Ihre Zugangsdaten speichern", + "siteTunnelDescription": "Legen Sie fest, wie Sie sich mit der Site verbinden möchten", + "siteNewtCredentials": "Zugangsdaten", + "siteNewtCredentialsDescription": "So wird sich die Seite mit dem Server authentifizieren", + "siteCredentialsSave": "Anmeldedaten speichern", "siteCredentialsSaveDescription": "Du kannst das nur einmal sehen. Stelle sicher, dass du es an einen sicheren Ort kopierst.", "siteInfo": "Standort-Informationen", "status": "Status", "shareTitle": "Links zum Teilen verwalten", - "shareDescription": "Erstellen Sie teilbare Links, um temporären oder permanenten Zugriff auf Ihre Ressourcen zu gewähren", + "shareDescription": "Erstelle teilbare Links, um temporären oder permanenten Zugriff auf Proxy-Ressourcen zu gewähren", "shareSearch": "Freigabe-Links suchen...", "shareCreate": "Link erstellen", "shareErrorDelete": "Link konnte nicht gelöscht werden", "shareErrorDeleteMessage": "Fehler beim Löschen des Links", "shareDeleted": "Link gelöscht", "shareDeletedDescription": "Der Link wurde gelöscht", - "shareTokenDescription": "Ihr Zugriffstoken kann auf zwei Arten übergeben werden: als Abfrageparameter oder in den Anfrage-Headern. Diese müssen vom Client auf jeder Anfrage für authentifizierten Zugriff weitergegeben werden.", + "shareTokenDescription": "Das Zugriffstoken kann auf zwei Arten übergeben werden: als Abfrageparameter oder in den Request-Headern. Diese müssen vom Client auf jeder Anfrage für authentifizierten Zugriff weitergegeben werden.", "accessToken": "Zugangs-Token", "usageExamples": "Nutzungsbeispiele", "tokenId": "Token-ID", @@ -121,7 +121,7 @@ "importantNote": "Wichtiger Hinweis", "shareImportantDescription": "Aus Sicherheitsgründen wird die Verwendung von Headern über Abfrageparameter empfohlen, wenn möglich, da Abfrageparameter in Server-Logs oder Browserverlauf protokolliert werden können.", "token": "Token", - "shareTokenSecurety": "Halten Sie Ihr Zugangs-Token sicher. Teilen Sie es nicht in öffentlich zugänglichen Bereichen oder Client-seitigem Code.", + "shareTokenSecurety": "Bewahren Sie das Zugriffstoken sicher. Teilen Sie es nicht in öffentlich zugänglichen Bereichen oder Client-seitigem Code.", "shareErrorFetchResource": "Fehler beim Abrufen der Ressourcen", "shareErrorFetchResourceDescription": "Beim Abrufen der Ressourcen ist ein Fehler aufgetreten", "shareErrorCreate": "Fehler beim Erstellen des Teilen-Links", @@ -144,8 +144,10 @@ "expires": "Gültig bis", "never": "Nie", "shareErrorSelectResource": "Bitte wählen Sie eine Ressource", - "resourceTitle": "Ressourcen verwalten", - "resourceDescription": "Erstellen Sie sichere Proxies für Ihre privaten Anwendungen", + "proxyResourceTitle": "Öffentliche Ressourcen verwalten", + "proxyResourceDescription": "Erstelle und verwalte Ressourcen, die über einen Webbrowser öffentlich zugänglich sind", + "clientResourceTitle": "Private Ressourcen verwalten", + "clientResourceDescription": "Erstelle und verwalte Ressourcen, die nur über einen verbundenen Client zugänglich sind", "resourcesSearch": "Suche Ressourcen...", "resourceAdd": "Ressource hinzufügen", "resourceErrorDelte": "Fehler beim Löschen der Ressource", @@ -155,9 +157,9 @@ "resourceMessageRemove": "Einmal entfernt, wird die Ressource nicht mehr zugänglich sein. Alle mit der Ressource verbundenen Ziele werden ebenfalls entfernt.", "resourceQuestionRemove": "Sind Sie sicher, dass Sie die Ressource aus der Organisation entfernen möchten?", "resourceHTTP": "HTTPS-Ressource", - "resourceHTTPDescription": "Proxy-Anfragen an Ihre App über HTTPS unter Verwendung einer Subdomain oder einer Basis-Domain.", + "resourceHTTPDescription": "Proxy-Anfragen an die App über HTTPS unter Verwendung einer Subdomain oder einer Basis-Domain.", "resourceRaw": "Direkte TCP/UDP Ressource (raw)", - "resourceRawDescription": "Proxy-Anfragen an Ihre App über TCP/UDP mit einer Portnummer.", + "resourceRawDescription": "Proxy-Anfragen an die App über TCP/UDP mit einer Portnummer. Dies funktioniert nur, wenn Sites mit Knoten verbunden sind.", "resourceCreate": "Ressource erstellen", "resourceCreateDescription": "Folgen Sie den Schritten unten, um eine neue Ressource zu erstellen", "resourceSeeAll": "Alle Ressourcen anzeigen", @@ -171,22 +173,22 @@ "noCountryFound": "Kein Land gefunden.", "siteSelectionDescription": "Dieser Standort wird die Verbindung zum Ziel herstellen.", "resourceType": "Ressourcentyp", - "resourceTypeDescription": "Legen Sie fest, wie Sie auf Ihre Ressource zugreifen möchten", + "resourceTypeDescription": "Legen Sie fest, wie Sie auf die Ressource zugreifen", "resourceHTTPSSettings": "HTTPS-Einstellungen", - "resourceHTTPSSettingsDescription": "Konfigurieren Sie den Zugriff auf Ihre Ressource über HTTPS", + "resourceHTTPSSettingsDescription": "Konfigurieren Sie den Zugriff auf die Ressource über HTTPS", "domainType": "Domain-Typ", "subdomain": "Subdomain", "baseDomain": "Basis-Domain", - "subdomnainDescription": "Die Subdomain, auf der Ihre Ressource erreichbar sein soll.", + "subdomnainDescription": "Die Subdomäne, auf die die Ressource zugegriffen werden soll.", "resourceRawSettings": "TCP/UDP Einstellungen", - "resourceRawSettingsDescription": "Legen Sie fest, wie auf Ihre Ressource über TCP/UDP zugegriffen wird. Sie ordnen die Ressource einem Port auf dem Pangolin-Server zu, so dass Sie auf die Ressource von server-public-ip:mapped-port zugreifen können.", + "resourceRawSettingsDescription": "Konfigurieren, wie auf die Ressource über TCP/UDP zugegriffen wird", "protocol": "Protokoll", "protocolSelect": "Wählen Sie ein Protokoll", "resourcePortNumber": "Portnummer", "resourcePortNumberDescription": "Die externe Portnummer für Proxy-Anfragen.", "cancel": "Abbrechen", "resourceConfig": "Konfiguration Snippets", - "resourceConfigDescription": "Kopieren und fügen Sie diese Konfigurations-Snippets ein, um Ihre TCP/UDP Ressource einzurichten", + "resourceConfigDescription": "Kopieren und fügen Sie diese Konfigurations-Snippets ein, um die TCP/UDP Ressource einzurichten", "resourceAddEntrypoints": "Traefik: Einstiegspunkte hinzufügen", "resourceExposePorts": "Gerbil: Ports im Docker Compose freigeben", "resourceLearnRaw": "Lernen Sie, wie Sie TCP/UDP Ressourcen konfigurieren", @@ -202,14 +204,14 @@ "proxy": "Proxy", "internal": "Intern", "rules": "Regeln", - "resourceSettingDescription": "Konfigurieren Sie die Einstellungen Ihrer Ressource", + "resourceSettingDescription": "Einstellungen für die Ressource konfigurieren", "resourceSetting": "{resourceName} Einstellungen", - "alwaysAllow": "Immer erlauben", - "alwaysDeny": "Immer ablehnen", + "alwaysAllow": "Auth umgehen", + "alwaysDeny": "Zugriff blockieren", "passToAuth": "Weiterleiten zur Authentifizierung", - "orgSettingsDescription": "Konfiguriere die allgemeinen Einstellungen deiner Organisation", + "orgSettingsDescription": "Organisationseinstellungen konfigurieren", "orgGeneralSettings": "Organisations-Einstellungen", - "orgGeneralSettingsDescription": "Organisationsdetails und Konfiguration verwalten", + "orgGeneralSettingsDescription": "Verwalten Sie die Details und Konfiguration der Organisation", "saveGeneralSettings": "Allgemeine Einstellungen speichern", "saveSettings": "Einstellungen speichern", "orgDangerZone": "Gefahrenzone", @@ -232,7 +234,7 @@ "orgMissing": "Organisations-ID fehlt", "orgMissingMessage": "Einladung kann ohne Organisations-ID nicht neu generiert werden.", "accessUsersManage": "Benutzer verwalten", - "accessUsersDescription": "Lade Benutzer ein und füge sie zu Rollen hinzu, um den Zugriff auf deine Organisation zu verwalten", + "accessUsersDescription": "Benutzer mit Zugriff auf diese Organisation einladen und verwalten", "accessUsersSearch": "Benutzer suchen...", "accessUserCreate": "Benutzer erstellen", "accessUserRemove": "Benutzer entfernen", @@ -241,13 +243,13 @@ "role": "Rolle", "nameRequired": "Name ist erforderlich", "accessRolesManage": "Rollen verwalten", - "accessRolesDescription": "Konfigurieren Sie Rollen, um den Zugriff auf Ihre Organisation zu verwalten", + "accessRolesDescription": "Erstellen und verwalten von Rollen für Benutzer in der Organisation", "accessRolesSearch": "Rollen suchen...", "accessRolesAdd": "Rolle hinzufügen", "accessRoleDelete": "Rolle löschen", "description": "Beschreibung", "inviteTitle": "Einladungen öffnen", - "inviteDescription": "Ihre Einladungen an andere Benutzer verwalten", + "inviteDescription": "Einladungen für andere Benutzer verwalten, der Organisation beizutreten", "inviteSearch": "Einladungen suchen...", "minutes": "Minuten", "hours": "Stunden", @@ -261,13 +263,13 @@ "apiKeysErrorCreate": "Fehler beim Erstellen des API-Schlüssels", "apiKeysErrorSetPermission": "Fehler beim Setzen der Berechtigungen", "apiKeysCreate": "API-Schlüssel generieren", - "apiKeysCreateDescription": "Generieren Sie einen neuen API-Schlüssel für Ihre Organisation", + "apiKeysCreateDescription": "Einen neuen API-Schlüssel für die Organisation erstellen", "apiKeysGeneralSettings": "Berechtigungen", "apiKeysGeneralSettingsDescription": "Legen Sie fest, was dieser API-Schlüssel tun kann", - "apiKeysList": "Ihr API-Schlüssel", - "apiKeysSave": "Speichern Sie Ihren API-Schlüssel", + "apiKeysList": "Neuer API-Schlüssel", + "apiKeysSave": "API-Schlüssel speichern", "apiKeysSaveDescription": "Sie können dies nur einmal sehen. Kopieren Sie es an einen sicheren Ort.", - "apiKeysInfo": "Ihr API-Schlüssel ist:", + "apiKeysInfo": "Der API-Schlüssel ist:", "apiKeysConfirmCopy": "Ich habe den API-Schlüssel kopiert", "generate": "Generieren", "done": "Fertig", @@ -424,7 +426,7 @@ "userCreated": "Benutzer erstellt", "userCreatedDescription": "Der Benutzer wurde erfolgreich erstellt.", "userTypeInternal": "Interner Benutzer", - "userTypeInternalDescription": "Laden Sie einen Benutzer direkt in Ihre Organisation ein.", + "userTypeInternalDescription": "Lade einen Benutzer ein, der Organisation direkt beizutreten.", "userTypeExternal": "Externer Benutzer", "userTypeExternalDescription": "Erstellen Sie einen Benutzer mit einem externen Identitätsanbieter.", "accessUserCreateDescription": "Folgen Sie den Schritten unten, um einen neuen Benutzer zu erstellen", @@ -436,6 +438,16 @@ "inviteEmailSent": "Einladungs-E-Mail an Benutzer senden", "inviteValid": "Gültig für", "selectDuration": "Dauer auswählen", + "selectResource": "Ressource auswählen", + "filterByResource": "Nach Ressource filtern", + "resetFilters": "Filter zurücksetzen", + "totalBlocked": "Anfragen blockiert von Pangolin", + "totalRequests": "Gesamte Anfragen", + "requestsByCountry": "Anfragen nach Land", + "requestsByDay": "Anfragen nach Tag", + "blocked": "Blockiert", + "allowed": "Zulässig", + "topCountries": "Top Länder", "accessRoleSelect": "Rolle auswählen", "inviteEmailSentDescription": "Eine E-Mail mit dem Zugangslink wurde an den Benutzer gesendet. Er muss den Link aufrufen, um die Einladung anzunehmen.", "inviteSentDescription": "Der Benutzer wurde eingeladen. Er muss den unten stehenden Link aufrufen, um die Einladung anzunehmen.", @@ -458,13 +470,13 @@ "accessControlsSubmit": "Zugriffskontrollen speichern", "roles": "Rollen", "accessUsersRoles": "Benutzer & Rollen verwalten", - "accessUsersRolesDescription": "Laden Sie Benutzer ein und fügen Sie sie zu Rollen hinzu, um den Zugriff auf Ihre Organisation zu verwalten", + "accessUsersRolesDescription": "Lade Benutzer ein und füge sie zu Rollen hinzu, um den Zugriff auf die Organisation zu verwalten", "key": "Schlüssel", "createdAt": "Erstellt am", "proxyErrorInvalidHeader": "Ungültiger benutzerdefinierter Host-Header-Wert. Verwenden Sie das Domain-Namensformat oder speichern Sie leer, um den benutzerdefinierten Host-Header zu deaktivieren.", "proxyErrorTls": "Ungültiger TLS-Servername. Verwenden Sie das Domain-Namensformat oder speichern Sie leer, um den TLS-Servernamen zu entfernen.", "proxyEnableSSL": "SSL aktivieren", - "proxyEnableSSLDescription": "Aktiviere SSL/TLS-Verschlüsselung für sichere HTTPS-Verbindungen zu deinen Zielen.", + "proxyEnableSSLDescription": "Aktiviere SSL/TLS-Verschlüsselung für sichere HTTPS-Verbindungen zu den Zielen.", "target": "Target", "configureTarget": "Ziele konfigurieren", "targetErrorFetch": "Fehler beim Abrufen der Ziele", @@ -480,29 +492,29 @@ "targetsErrorUpdate": "Fehler beim Aktualisieren der Ziele", "targetsErrorUpdateDescription": "Beim Aktualisieren der Ziele ist ein Fehler aufgetreten", "targetTlsUpdate": "TLS-Einstellungen aktualisiert", - "targetTlsUpdateDescription": "Ihre TLS-Einstellungen wurden erfolgreich aktualisiert", + "targetTlsUpdateDescription": "TLS Einstellungen wurden erfolgreich aktualisiert", "targetErrorTlsUpdate": "Fehler beim Aktualisieren der TLS-Einstellungen", "targetErrorTlsUpdateDescription": "Beim Aktualisieren der TLS-Einstellungen ist ein Fehler aufgetreten", "proxyUpdated": "Proxy-Einstellungen aktualisiert", - "proxyUpdatedDescription": "Ihre Proxy-Einstellungen wurden erfolgreich aktualisiert", + "proxyUpdatedDescription": "Proxy-Einstellungen wurden erfolgreich aktualisiert", "proxyErrorUpdate": "Fehler beim Aktualisieren der Proxy-Einstellungen", "proxyErrorUpdateDescription": "Beim Aktualisieren der Proxy-Einstellungen ist ein Fehler aufgetreten", - "targetAddr": "IP / Hostname", + "targetAddr": "Host", "targetPort": "Port", "targetProtocol": "Protokoll", "targetTlsSettings": "Sicherheitskonfiguration", - "targetTlsSettingsDescription": "Konfiguriere SSL/TLS Einstellungen für deine Ressource", + "targetTlsSettingsDescription": "SSL/TLS Einstellungen für die Ressource konfigurieren", "targetTlsSettingsAdvanced": "Erweiterte TLS-Einstellungen", "targetTlsSni": "TLS Servername", "targetTlsSniDescription": "Der zu verwendende TLS-Servername für SNI. Leer lassen, um den Standard zu verwenden.", "targetTlsSubmit": "Einstellungen speichern", "targets": "Ziel-Konfiguration", - "targetsDescription": "Richten Sie Ziele ein, um Datenverkehr zu Ihren Backend-Diensten zu leiten", + "targetsDescription": "Ziele zur Routenplanung für Backend-Dienste festlegen", "targetStickySessions": "Sticky Sessions aktivieren", "targetStickySessionsDescription": "Verbindungen für die gesamte Sitzung auf demselben Backend-Ziel halten.", "methodSelect": "Methode auswählen", "targetSubmit": "Ziel hinzufügen", - "targetNoOne": "Diese Ressource hat keine Ziele. Fügen Sie ein Ziel hinzu, um zu konfigurieren, wo Anfragen an Ihr Backend gesendet werden sollen.", + "targetNoOne": "Diese Ressource hat keine Ziele. Fügen Sie ein Ziel hinzu, um zu konfigurieren, wo Anfragen an das Backend gesendet werden sollen.", "targetNoOneDescription": "Das Hinzufügen von mehr als einem Ziel aktiviert den Lastausgleich.", "targetsSubmit": "Ziele speichern", "addTarget": "Ziel hinzufügen", @@ -516,9 +528,11 @@ "targetCreatedDescription": "Ziel wurde erfolgreich erstellt", "targetErrorCreate": "Fehler beim Erstellen des Ziels", "targetErrorCreateDescription": "Beim Erstellen des Ziels ist ein Fehler aufgetreten", + "tlsServerName": "TLS Servername", + "tlsServerNameDescription": "Der für SNI verwendete TLS-Servername", "save": "Speichern", "proxyAdditional": "Zusätzliche Proxy-Einstellungen", - "proxyAdditionalDescription": "Konfigurieren Sie, wie Ihre Ressource mit Proxy-Einstellungen umgeht", + "proxyAdditionalDescription": "Konfigurieren Sie die Proxy-Einstellungen der Ressource", "proxyCustomHeader": "Benutzerdefinierter Host-Header", "proxyCustomHeaderDescription": "Der Host-Header, der beim Weiterleiten von Anfragen gesetzt werden soll. Leer lassen, um den Standard zu verwenden.", "proxyAdditionalSubmit": "Proxy-Einstellungen speichern", @@ -558,7 +572,7 @@ "rulesMatchType": "Übereinstimmungstyp", "value": "Wert", "rulesAbout": "Über Regeln", - "rulesAboutDescription": "Mit Regeln können Sie den Zugriff auf Ihre Ressource anhand verschiedener Kriterien steuern. Sie können Regeln erstellen, um den Zugriff basierend auf IP-Adresse oder URL-Pfad zu erlauben oder zu verweigern.", + "rulesAboutDescription": "Regeln erlauben es Ihnen, den Zugriff auf die Ressource anhand einer Reihe von Kriterien zu kontrollieren. Sie können Regeln erstellen, die den Zugriff basierend auf IP-Adresse oder URL-Pfad erlauben oder verweigern.", "rulesActions": "Aktionen", "rulesActionAlwaysAllow": "Immer erlauben: Alle Authentifizierungsmethoden umgehen", "rulesActionAlwaysDeny": "Immer verweigern: Alle Anfragen blockieren; keine Authentifizierung möglich", @@ -570,7 +584,7 @@ "rulesEnable": "Regeln aktivieren", "rulesEnableDescription": "Regelauswertung für diese Ressource aktivieren oder deaktivieren", "rulesResource": "Ressourcen-Regelkonfiguration", - "rulesResourceDescription": "Konfigurieren Sie Regeln zur Steuerung des Zugriffs auf Ihre Ressource", + "rulesResourceDescription": "Regeln konfigurieren, um den Zugriff auf die Ressource zu steuern", "ruleSubmit": "Regel hinzufügen", "rulesNoOne": "Keine Regeln. Fügen Sie eine Regel über das Formular hinzu.", "rulesOrder": "Regeln werden nach aufsteigender Priorität ausgewertet.", @@ -586,7 +600,7 @@ "none": "Keine", "unknown": "Unbekannt", "resources": "Ressourcen", - "resourcesDescription": "Ressourcen sind Proxies zu Anwendungen in Ihrem privaten Netzwerk. Erstellen Sie eine Ressource für jeden HTTP/HTTPS- oder direkten TCP/UDP-Dienst in Ihrem privaten Netzwerk. Jede Ressource muss mit einer Site verbunden sein, um private, sichere Konnektivität über einen verschlüsselten WireGuard-Tunnel zu ermöglichen.", + "resourcesDescription": "Ressourcen sind Proxies zu Anwendungen, die im privaten Netzwerk ausgeführt werden. Erstellen Sie eine Ressource für jeden HTTP/HTTPS oder rohen TCP/UDP-Dienst in Ihrem privaten Netzwerk. Jede Ressource muss mit einer Website verbunden sein, um eine private, sichere Verbindung durch einen verschlüsselten WireGuard-Tunnel zu aktivieren.", "resourcesWireGuardConnect": "Sichere Verbindung mit WireGuard-Verschlüsselung", "resourcesMultipleAuthenticationMethods": "Mehrere Authentifizierungsmethoden konfigurieren", "resourcesUsersRolesAccess": "Benutzer- und rollenbasierte Zugriffskontrolle", @@ -597,7 +611,7 @@ "resourceSelect": "Ressource auswählen", "shareLinks": "Freigabe-Links", "share": "Teilbare Links", - "shareDescription2": "Erstellen Sie teilbare Links zu Ihren Ressourcen. Links bieten temporären oder unbegrenzten Zugriff auf Ihre Ressource. Sie können die Ablaufzeit des Links bei der Erstellung konfigurieren.", + "shareDescription2": "Erstellen Sie teilbare Links zu Ressourcen. Links bieten temporären oder unbegrenzten Zugriff auf Ihre Ressource. Sie können die Verfallsdauer des Links beim Erstellen eines Links festlegen.", "shareEasyCreate": "Einfach zu erstellen und zu teilen", "shareConfigurableExpirationDuration": "Konfigurierbare Ablaufzeit", "shareSecureAndRevocable": "Sicher und widerrufbar", @@ -607,19 +621,19 @@ "unknownCommand": "Unbekannter Befehl", "newtErrorFetchReleases": "Fehler beim Abrufen der Release-Informationen: {err}", "newtErrorFetchLatest": "Fehler beim Abrufen der neuesten Version: {err}", - "newtEndpoint": "Newt-Endpunkt", - "newtId": "Newt-ID", - "newtSecretKey": "Newt-Geheimschlüssel", + "newtEndpoint": "Endpunkt", + "newtId": "ID", + "newtSecretKey": "Geheimnis", "architecture": "Architektur", "sites": "Standorte", - "siteWgAnyClients": "Verwenden Sie einen beliebigen WireGuard-Client zur Verbindung. Sie müssen Ihre internen Ressourcen über die Peer-IP adressieren.", + "siteWgAnyClients": "Verwenden Sie jeden WireGuard-Client um sich zu verbinden. Sie müssen interne Ressourcen über die Peer-IP ansprechen.", "siteWgCompatibleAllClients": "Kompatibel mit allen WireGuard-Clients", "siteWgManualConfigurationRequired": "Manuelle Konfiguration erforderlich", "userErrorNotAdminOrOwner": "Benutzer ist kein Administrator oder Eigentümer", "pangolinSettings": "Einstellungen - Pangolin", "accessRoleYour": "Ihre Rolle:", - "accessRoleSelect2": "Wähle eine Rolle", - "accessUserSelect": "Wähle einen Benutzer", + "accessRoleSelect2": "Rollen auswählen", + "accessUserSelect": "Benutzer auswählen", "otpEmailEnter": "E-Mail-Adresse eingeben", "otpEmailEnterDescription": "Drücken Sie Enter, um eine E-Mail nach der Eingabe im Eingabefeld hinzuzufügen.", "otpEmailErrorInvalid": "Ungültige E-Mail-Adresse. Platzhalter (*) muss der gesamte lokale Teil sein.", @@ -671,7 +685,7 @@ "resourcePincodeSetupTitle": "PIN-Code festlegen", "resourcePincodeSetupTitleDescription": "Legen Sie einen PIN-Code fest, um diese Ressource zu schützen", "resourceRoleDescription": "Administratoren haben immer Zugriff auf diese Ressource.", - "resourceUsersRoles": "Benutzer & Rollen", + "resourceUsersRoles": "Zugriffskontrolle", "resourceUsersRolesDescription": "Konfigurieren Sie, welche Benutzer und Rollen diese Ressource besuchen können", "resourceUsersRolesSubmit": "Benutzer & Rollen speichern", "resourceWhitelistSave": "Erfolgreich gespeichert", @@ -702,6 +716,7 @@ "resourceTransferSubmit": "Ressource übertragen", "siteDestination": "Zielort", "searchSites": "Standorte durchsuchen", + "countries": "Länder", "accessRoleCreate": "Rolle erstellen", "accessRoleCreateDescription": "Erstellen Sie eine neue Rolle, um Benutzer zu gruppieren und ihre Berechtigungen zu verwalten.", "accessRoleCreateSubmit": "Rolle erstellen", @@ -766,15 +781,15 @@ "idpOidcConfigure": "OAuth2/OIDC Konfiguration", "idpOidcConfigureDescription": "Konfigurieren Sie die OAuth2/OIDC Anbieter-Endpunkte und Anmeldeinformationen", "idpClientId": "Client-ID", - "idpClientIdDescription": "Die OAuth2 Client-ID von Ihrem Identitätsanbieter", + "idpClientIdDescription": "Die OAuth2-Client-ID des Identity Providers", "idpClientSecret": "Client-Secret", - "idpClientSecretDescription": "Das OAuth2 Client-Secret von Ihrem Identitätsanbieter", + "idpClientSecretDescription": "Das OAuth2-Client-Geheimnis des Identity Providers", "idpAuthUrl": "Autorisierungs-URL", "idpAuthUrlDescription": "Die OAuth2 Autorisierungs-Endpunkt-URL", "idpTokenUrl": "Token-URL", "idpTokenUrlDescription": "Die OAuth2 Token-Endpunkt-URL", "idpOidcConfigureAlert": "Wichtige Information", - "idpOidcConfigureAlertDescription": "Nach dem Erstellen des Identitätsanbieters müssen Sie die Callback-URL in den Einstellungen Ihres Identitätsanbieters konfigurieren. Die Callback-URL wird nach erfolgreicher Erstellung bereitgestellt.", + "idpOidcConfigureAlertDescription": "Nach der Erstellung des Identity Providers müssen Sie die Callback URL in den Einstellungen des Identity Providers konfigurieren. Die Callback-URL wird nach erfolgreicher Erstellung zur Verfügung gestellt.", "idpToken": "Token-Konfiguration", "idpTokenDescription": "Konfigurieren Sie, wie Benutzerinformationen aus dem ID-Token extrahiert werden", "idpJmespathAbout": "Über JMESPath", @@ -791,7 +806,7 @@ "idpSubmit": "Identitätsanbieter erstellen", "orgPolicies": "Organisationsrichtlinien", "idpSettings": "{idpName} Einstellungen", - "idpCreateSettingsDescription": "Konfigurieren Sie die Einstellungen für Ihren Identitätsanbieter", + "idpCreateSettingsDescription": "Einstellungen für den Identity Provider konfigurieren", "roleMapping": "Rollenzuordnung", "orgMapping": "Organisationszuordnung", "orgPoliciesSearch": "Organisationsrichtlinien suchen...", @@ -826,7 +841,7 @@ "idpUpdatedDescription": "Identitätsanbieter erfolgreich aktualisiert", "redirectUrl": "Weiterleitungs-URL", "redirectUrlAbout": "Über die Weiterleitungs-URL", - "redirectUrlAboutDescription": "Dies ist die URL, zu der Benutzer nach der Authentifizierung weitergeleitet werden. Sie müssen diese URL in den Einstellungen Ihres Identitätsanbieters konfigurieren.", + "redirectUrlAboutDescription": "Dies ist die URL, zu der Benutzer nach der Authentifizierung umgeleitet werden. Sie müssen diese URL in den Einstellungen des Identity Providers konfigurieren.", "pangolinAuth": "Authentifizierung - Pangolin", "verificationCodeLengthRequirements": "Ihr Verifizierungscode muss 8 Zeichen lang sein.", "errorOccurred": "Ein Fehler ist aufgetreten", @@ -909,6 +924,10 @@ "passwordResetSent": "Wir senden einen Code zum Zurücksetzen des Passworts an diese E-Mail-Adresse.", "passwordResetCode": "Reset-Code", "passwordResetCodeDescription": "Prüfen Sie Ihre E-Mail für den Reset-Code.", + "generatePasswordResetCode": "Passwort zurücksetzen Code generieren", + "passwordResetCodeGenerated": "Passwort zurücksetzen Code generiert", + "passwordResetCodeGeneratedDescription": "Teilen Sie diesen Code mit dem Benutzer. Sie können ihn verwenden, um ihr Passwort zurückzusetzen.", + "passwordResetUrl": "Reset URL", "passwordNew": "Neues Passwort", "passwordNewConfirm": "Neues Passwort bestätigen", "changePassword": "Passwort ändern", @@ -926,6 +945,9 @@ "pincodeAuth": "Authentifizierungscode", "pincodeSubmit2": "Code absenden", "passwordResetSubmit": "Zurücksetzung anfordern", + "passwordResetAlreadyHaveCode": "Passwort zurücksetzen Code eingeben", + "passwordResetSmtpRequired": "Bitte kontaktieren Sie Ihren Administrator", + "passwordResetSmtpRequiredDescription": "Zum Zurücksetzen Ihres Passworts ist ein Passwort erforderlich. Bitte wenden Sie sich an Ihren Administrator.", "passwordBack": "Zurück zum Passwort", "loginBack": "Zurück zur Anmeldung", "signup": "Registrieren", @@ -1021,7 +1043,7 @@ "actionDeleteSite": "Standort löschen", "actionGetSite": "Standort abrufen", "actionListSites": "Standorte auflisten", - "actionApplyBlueprint": "Blaupause anwenden", + "actionApplyBlueprint": "Blueprint anwenden", "setupToken": "Setup-Token", "setupTokenDescription": "Geben Sie das Setup-Token von der Serverkonsole ein.", "setupTokenRequired": "Setup-Token ist erforderlich", @@ -1080,7 +1102,7 @@ "actionDeleteIdpOrg": "IDP-Organisationsrichtlinie löschen", "actionListIdpOrgs": "IDP-Organisationen auflisten", "actionUpdateIdpOrg": "IDP-Organisation aktualisieren", - "actionCreateClient": "Client anlegen", + "actionCreateClient": "Client erstellen", "actionDeleteClient": "Client löschen", "actionUpdateClient": "Client aktualisieren", "actionListClients": "Clients auflisten", @@ -1091,12 +1113,15 @@ "actionListSiteResources": "Site-Ressourcen auflisten", "actionUpdateSiteResource": "Site-Ressource aktualisieren", "actionListInvitations": "Einladungen auflisten", + "actionExportLogs": "Logs exportieren", + "actionViewLogs": "Logs anzeigen", "noneSelected": "Keine ausgewählt", "orgNotFound2": "Keine Organisationen gefunden.", "searchProgress": "Suche...", "create": "Erstellen", "orgs": "Organisationen", "loginError": "Beim Anmelden ist ein Fehler aufgetreten", + "loginRequiredForDevice": "Anmeldung ist erforderlich, um Ihr Gerät zu authentifizieren.", "passwordForgot": "Passwort vergessen?", "otpAuth": "Zwei-Faktor-Authentifizierung", "otpAuthDescription": "Geben Sie den Code aus Ihrer Authenticator-App oder einen Ihrer einmaligen Backup-Codes ein.", @@ -1151,39 +1176,49 @@ "sidebarHome": "Zuhause", "sidebarSites": "Standorte", "sidebarResources": "Ressourcen", + "sidebarProxyResources": "Öffentlich", + "sidebarClientResources": "Privat", "sidebarAccessControl": "Zugriffskontrolle", + "sidebarLogsAndAnalytics": "Protokolle & Analysen", "sidebarUsers": "Benutzer", + "sidebarAdmin": "Admin", "sidebarInvitations": "Einladungen", "sidebarRoles": "Rollen", - "sidebarShareableLinks": "Teilbare Links", + "sidebarShareableLinks": "Links", "sidebarApiKeys": "API-Schlüssel", "sidebarSettings": "Einstellungen", "sidebarAllUsers": "Alle Benutzer", "sidebarIdentityProviders": "Identitätsanbieter", "sidebarLicense": "Lizenz", "sidebarClients": "Clients", + "sidebarUserDevices": "Benutzer", + "sidebarMachineClients": "Maschinen", "sidebarDomains": "Domänen", + "sidebarGeneral": "Allgemein", + "sidebarLogAndAnalytics": "Log & Analytik", "sidebarBluePrints": "Baupläne", + "sidebarOrganization": "Organisation", + "sidebarLogsAnalytics": "Analytik", "blueprints": "Baupläne", "blueprintsDescription": "Deklarative Konfigurationen anwenden und vorherige Abläufe anzeigen", - "blueprintAdd": "Blaupause hinzufügen", - "blueprintGoBack": "Alle Blaupausen ansehen", - "blueprintCreate": "Blaupause erstellen", - "blueprintCreateDescription2": "Folge den Schritten unten, um eine neue Blaupause zu erstellen und anzuwenden", - "blueprintDetails": "Blaupausendetails", - "blueprintDetailsDescription": "Siehe das Ergebnis der angewendeten Blaupause und alle aufgetretenen Fehler", - "blueprintInfo": "Blaupauseninformation", + "blueprintAdd": "Blueprint hinzufügen", + "blueprintGoBack": "Alle Blueprints ansehen", + "blueprintCreate": "Blueprint erstellen", + "blueprintCreateDescription2": "Folge den unten aufgeführten Schritten, um einen neuen Blueprint zu erstellen und anzuwenden", + "blueprintDetails": "Blueprint Detailinformationen", + "blueprintDetailsDescription": "Siehe das Ergebnis des angewendeten Blueprints und alle aufgetretenen Fehler", + "blueprintInfo": "Blueprint Informationen", "message": "Nachricht", - "blueprintContentsDescription": "Definieren Sie den YAML-Inhalt, der Ihre Infrastruktur beschreibt", - "blueprintErrorCreateDescription": "Fehler beim Anwenden der Blaupause", - "blueprintErrorCreate": "Fehler beim Erstellen der Blaupause", - "searchBlueprintProgress": "Blaupausen suchen...", + "blueprintContentsDescription": "Den YAML-Inhalt definieren, der die Infrastruktur beschreibt", + "blueprintErrorCreateDescription": "Fehler beim Anwenden des Blueprints", + "blueprintErrorCreate": "Fehler beim Erstellen des Blueprints", + "searchBlueprintProgress": "Blueprints suchen...", "appliedAt": "Angewandt am", "source": "Quelle", "contents": "Inhalt", "parsedContents": "Analysierte Inhalte (Nur lesen)", - "enableDockerSocket": "Docker Blaupause aktivieren", - "enableDockerSocketDescription": "Aktiviere Docker-Socket-Label-Scraping für Blaupausenbeschriftungen. Der Socket-Pfad muss neu angegeben werden.", + "enableDockerSocket": "Docker Blueprint aktivieren", + "enableDockerSocketDescription": "Aktiviere Docker-Socket-Label-Scraping für Blueprintbeschriftungen. Der Socket-Pfad muss neu angegeben werden.", "enableDockerSocketLink": "Mehr erfahren", "viewDockerContainers": "Docker Container anzeigen", "containersIn": "Container in {siteName}", @@ -1230,15 +1265,15 @@ "loading": "Laden", "restart": "Neustart", "domains": "Domänen", - "domainsDescription": "Domains für Ihre Organisation verwalten", + "domainsDescription": "Erstellen und verwalten der in der Organisation verfügbaren Domänen", "domainsSearch": "Domains durchsuchen...", "domainAdd": "Domain hinzufügen", - "domainAddDescription": "Eine neue Domain in Ihrer Organisation registrieren", + "domainAddDescription": "Registrieren Sie eine neue Domäne mit der Organisation", "domainCreate": "Domain erstellen", "domainCreatedDescription": "Domain erfolgreich erstellt", "domainDeletedDescription": "Domain erfolgreich gelöscht", - "domainQuestionRemove": "Sind Sie sicher, dass Sie die Domain von Ihrem Konto entfernen möchten?", - "domainMessageRemove": "Nach dem Entfernen wird die Domain nicht mehr mit Ihrem Konto verknüpft.", + "domainQuestionRemove": "Sind Sie sicher, dass Sie die Domain entfernen möchten?", + "domainMessageRemove": "Nach der Entfernung wird die Domain nicht mehr mit der Organisation verknüpft.", "domainConfirmDelete": "Domain-Löschung bestätigen", "domainDelete": "Domain löschen", "domain": "Domäne", @@ -1257,7 +1292,7 @@ "pending": "Ausstehend", "sidebarBilling": "Abrechnung", "billing": "Abrechnung", - "orgBillingDescription": "Verwalten Sie Ihre Rechnungsinformationen und Abonnements", + "orgBillingDescription": "Zahlungsinformationen und Abonnements verwalten", "github": "GitHub", "pangolinHosted": "Pangolin Hosted", "fossorial": "Fossorial", @@ -1285,7 +1320,7 @@ "productUpdateTitle": "Produkt-Updates", "productUpdateEmpty": "Keine Updates", "dismissAll": "Alle verwerfen", - "pangolinUpdateAvailable": "Neue Version verfügbar", + "pangolinUpdateAvailable": "Update verfügbar", "pangolinUpdateAvailableInfo": "Version {version} ist bereit zur Installation", "pangolinUpdateAvailableReleaseNotes": "Versionshinweise anzeigen", "newtUpdateAvailable": "Update verfügbar", @@ -1300,7 +1335,7 @@ "domainPickerSortAsc": "A-Z", "domainPickerSortDesc": "Z-A", "domainPickerCheckingAvailability": "Verfügbarkeit prüfen...", - "domainPickerNoMatchingDomains": "Keine passenden Domains gefunden. Versuchen Sie es mit einer anderen Domain oder überprüfen Sie die Domain-Einstellungen Ihrer Organisation.", + "domainPickerNoMatchingDomains": "Keine passenden Domains gefunden. Versuchen Sie eine andere Domain oder überprüfen Sie die Domain-Einstellungen der Organisation.", "domainPickerOrganizationDomains": "Organisations-Domains", "domainPickerProvidedDomains": "Bereitgestellte Domains", "domainPickerSubdomain": "Subdomain: {subdomain}", @@ -1334,7 +1369,7 @@ "billingModifySubscription": "Abonnement ändern", "billingStartSubscription": "Abonnement starten", "billingRecurringCharge": "Wiederkehrende Kosten", - "billingManageSubscriptionSettings": "Verwalten Sie Ihre Abonnement-Einstellungen und Präferenzen", + "billingManageSubscriptionSettings": "Abonnementeinstellungen und -einstellungen verwalten", "billingNoActiveSubscription": "Sie haben kein aktives Abonnement. Starten Sie Ihr Abonnement, um Nutzungslimits zu erhöhen.", "billingFailedToLoadSubscription": "Fehler beim Laden des Abonnements", "billingFailedToLoadUsage": "Fehler beim Laden der Nutzung", @@ -1345,9 +1380,9 @@ "billingPortalError": "Portalfehler", "billingDataUsageInfo": "Wenn Sie mit der Cloud verbunden sind, werden alle Daten über Ihre sicheren Tunnel belastet. Dies schließt eingehenden und ausgehenden Datenverkehr über alle Ihre Websites ein. Wenn Sie Ihr Limit erreichen, werden Ihre Seiten die Verbindung trennen, bis Sie Ihr Paket upgraden oder die Nutzung verringern. Daten werden nicht belastet, wenn Sie Knoten verwenden.", "billingOnlineTimeInfo": "Sie werden belastet, abhängig davon, wie lange Ihre Seiten mit der Cloud verbunden bleiben. Zum Beispiel 44.640 Minuten entspricht einer Site, die 24 Stunden am Tag des Monats läuft. Wenn Sie Ihr Limit erreichen, werden Ihre Seiten die Verbindung trennen, bis Sie Ihr Paket upgraden oder die Nutzung verringern. Die Zeit wird nicht belastet, wenn Sie Knoten verwenden.", - "billingUsersInfo": "Ihnen wird für jeden Benutzer in Ihrer Organisation berechnet. Die Abrechnung erfolgt täglich basierend auf der Anzahl der aktiven Benutzerkonten in Ihrer Organisation.", - "billingDomainInfo": "Ihnen wird jede Domain in Ihrer Organisation berechnet. Die Abrechnung erfolgt täglich, basierend auf der Anzahl der aktiven Domain-Konten in Ihrer Organisation.", - "billingRemoteExitNodesInfo": "Ihnen wird für jeden verwalteten Node in Ihrer Organisation berechnet. Die Abrechnung erfolgt täglich basierend auf der Anzahl der aktiven verwalteten Nodes in Ihrer Organisation.", + "billingUsersInfo": "Sie werden für jeden Benutzer in der Organisation berechnet. Die Abrechnung wird täglich anhand der Anzahl der aktiven Benutzerkonten in Ihrer Org berechnet.", + "billingDomainInfo": "Sie werden für jede Domain in der Organisation berechnet. Die Abrechnung wird täglich anhand der Anzahl der aktiven Domain-Konten in Ihrer Org berechnet.", + "billingRemoteExitNodesInfo": "Sie werden für jeden verwalteten Knoten in der Organisation berechnet. Die Abrechnung wird täglich anhand der Anzahl der aktiven verwalteten Knoten in Ihrer Org berechnet.", "domainNotFound": "Domain nicht gefunden", "domainNotFoundDescription": "Diese Ressource ist deaktiviert, weil die Domain nicht mehr in unserem System existiert. Bitte setzen Sie eine neue Domain für diese Ressource.", "failed": "Fehlgeschlagen", @@ -1430,29 +1465,32 @@ "and": "und", "privacyPolicy": "Datenschutzrichtlinie" }, + "signUpMarketing": { + "keepMeInTheLoop": "Halten Sie mich auf dem Laufenden mit Neuigkeiten, Updates und neuen Funktionen per E-Mail." + }, "siteRequired": "Standort ist erforderlich.", "olmTunnel": "Olm-Tunnel", - "olmTunnelDescription": "Nutzen Sie Olm für die Kundenverbindung", + "olmTunnelDescription": "Nutzen Sie Olm für die Client-Verbindung", "errorCreatingClient": "Fehler beim Erstellen des Clients", "clientDefaultsNotFound": "Standardeinstellungen des Clients nicht gefunden", "createClient": "Client erstellen", - "createClientDescription": "Erstellen Sie einen neuen Client für die Verbindung zu Ihren Standorten.", + "createClientDescription": "Neuen Client erstellen um auf private Ressourcen zuzugreifen", "seeAllClients": "Alle Clients anzeigen", - "clientInformation": "Client Informationen", - "clientNamePlaceholder": "Client Name", + "clientInformation": "Client-Informationen", + "clientNamePlaceholder": "Client-Name", "address": "Adresse", "subnetPlaceholder": "Subnetz", - "addressDescription": "Die Adresse, die dieser Client für die Verbindung verwenden wird.", + "addressDescription": "Die interne Adresse des Clients. Muss in das Subnetz der Organisation fallen.", "selectSites": "Standorte auswählen", "sitesDescription": "Der Client wird zu den ausgewählten Standorten eine Verbindung haben.", "clientInstallOlm": "Olm installieren", "clientInstallOlmDescription": "Olm auf Ihrem System zum Laufen bringen", - "clientOlmCredentials": "Olm-Zugangsdaten", - "clientOlmCredentialsDescription": "So authentifiziert sich Olm beim Server", - "olmEndpoint": "Olm-Endpunkt", - "olmId": "Olm-ID", - "olmSecretKey": "Olm-Geheimschlüssel", - "clientCredentialsSave": "Speichern Sie Ihre Zugangsdaten", + "clientOlmCredentials": "Zugangsdaten", + "clientOlmCredentialsDescription": "So wird sich der Client mit dem Server authentifizieren", + "olmEndpoint": "Endpunkt", + "olmId": "ID", + "olmSecretKey": "Geheimnis", + "clientCredentialsSave": "Anmeldedaten speichern", "clientCredentialsSaveDescription": "Sie können dies nur einmal sehen. Kopieren Sie es an einen sicheren Ort.", "generalSettingsDescription": "Konfigurieren Sie die allgemeinen Einstellungen für diesen Client", "clientUpdated": "Client aktualisiert", @@ -1463,9 +1501,7 @@ "sitesFetchError": "Beim Abrufen von Standorten ist ein Fehler aufgetreten.", "olmErrorFetchReleases": "Beim Abrufen von Olm-Veröffentlichungen ist ein Fehler aufgetreten.", "olmErrorFetchLatest": "Beim Abrufen der neuesten Olm-Veröffentlichung ist ein Fehler aufgetreten.", - "remoteSubnets": "Remote-Subnetze", "enterCidrRange": "Geben Sie den CIDR-Bereich ein", - "remoteSubnetsDescription": "Fügen Sie CIDR-Bereiche hinzu, die über Clients von dieser Site aus remote zugänglich sind. Verwenden Sie ein Format wie 10.0.0.0/24. Dies gilt NUR für die VPN-Client-Konnektivität.", "resourceEnableProxy": "Öffentlichen Proxy aktivieren", "resourceEnableProxyDescription": "Ermöglichen Sie öffentliches Proxieren zu dieser Ressource. Dies ermöglicht den Zugriff auf die Ressource von außerhalb des Netzwerks durch die Cloud über einen offenen Port. Erfordert Traefik-Config.", "externalProxyEnabled": "Externer Proxy aktiviert", @@ -1483,14 +1519,15 @@ "enableHealthChecksDescription": "Überwachen Sie die Gesundheit dieses Ziels. Bei Bedarf können Sie einen anderen Endpunkt als das Ziel überwachen.", "healthScheme": "Methode", "healthSelectScheme": "Methode auswählen", + "healthCheckPortInvalid": "Der Gesundheitskontroll-Port muss zwischen 1 und 65535 liegen", "healthCheckPath": "Pfad", "healthHostname": "IP / Host", "healthPort": "Port", "healthCheckPathDescription": "Der Pfad zum Überprüfen des Gesundheitszustands.", - "healthyIntervalSeconds": "Gesunder Intervall", - "unhealthyIntervalSeconds": "Ungesunder Intervall", + "healthyIntervalSeconds": "Gesundes Intervall (Sek.)", + "unhealthyIntervalSeconds": "Ungesundes Intervall (Sek)", "IntervalSeconds": "Gesunder Intervall", - "timeoutSeconds": "Timeout", + "timeoutSeconds": "Timeout (Sek.)", "timeIsInSeconds": "Zeit ist in Sekunden", "retryAttempts": "Wiederholungsversuche", "expectedResponseCodes": "Erwartete Antwortcodes", @@ -1506,7 +1543,7 @@ "healthCheckPathRequired": "Gesundheits-Check-Pfad ist erforderlich", "healthCheckMethodRequired": "HTTP-Methode ist erforderlich", "healthCheckIntervalMin": "Prüfintervall muss mindestens 5 Sekunden betragen", - "healthCheckTimeoutMin": "Timeout muss mindestens 1 Sekunde betragen", + "healthCheckTimeoutMin": "Zeitüberschreitung muss mindestens 1 Sekunde betragen", "healthCheckRetryMin": "Wiederholungsversuche müssen mindestens 1 betragen", "httpMethod": "HTTP-Methode", "selectHttpMethod": "HTTP-Methode auswählen", @@ -1526,12 +1563,12 @@ "resourceEditDomain": "Domain bearbeiten", "siteName": "Site-Name", "proxyPort": "Port", - "resourcesTableProxyResources": "Proxy-Ressourcen", - "resourcesTableClientResources": "Client-Ressourcen", + "resourcesTableProxyResources": "Öffentlich", + "resourcesTableClientResources": "Privat", "resourcesTableNoProxyResourcesFound": "Keine Proxy-Ressourcen gefunden.", "resourcesTableNoInternalResourcesFound": "Keine internen Ressourcen gefunden.", "resourcesTableDestination": "Ziel", - "resourcesTableTheseResourcesForUseWith": "Diese Ressourcen sind zur Verwendung mit", + "resourcesTableAlias": "Alias", "resourcesTableClients": "Clients", "resourcesTableAndOnlyAccessibleInternally": "und sind nur intern zugänglich, wenn mit einem Client verbunden.", "resourcesTableNoTargets": "Keine Ziele", @@ -1540,8 +1577,8 @@ "resourcesTableOffline": "Offline", "resourcesTableUnknown": "Unbekannt", "resourcesTableNotMonitored": "Nicht überwacht", - "editInternalResourceDialogEditClientResource": "Client-Ressource bearbeiten", - "editInternalResourceDialogUpdateResourceProperties": "Aktualisieren Sie die Ressourceneigenschaften und die Zielkonfiguration für {resourceName}.", + "editInternalResourceDialogEditClientResource": "Private Ressource bearbeiten", + "editInternalResourceDialogUpdateResourceProperties": "Ressourcen-Konfiguration und Zugriffssteuerung für {resourceName} aktualisieren", "editInternalResourceDialogResourceProperties": "Ressourceneigenschaften", "editInternalResourceDialogName": "Name", "editInternalResourceDialogProtocol": "Protokoll", @@ -1560,11 +1597,22 @@ "editInternalResourceDialogInvalidIPAddressFormat": "Ungültiges IP-Adressformat", "editInternalResourceDialogDestinationPortMin": "Ziel-Port muss mindestens 1 sein", "editInternalResourceDialogDestinationPortMax": "Ziel-Port muss kleiner als 65536 sein", + "editInternalResourceDialogPortModeRequired": "Protokolle, Proxyport und Zielport werden für den Port-Modus benötigt", + "editInternalResourceDialogMode": "Modus", + "editInternalResourceDialogModePort": "Port", + "editInternalResourceDialogModeHost": "Host", + "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogDestination": "Ziel", + "editInternalResourceDialogDestinationHostDescription": "Die IP-Adresse oder der Hostname der Ressource im Netzwerk der Website.", + "editInternalResourceDialogDestinationIPDescription": "Die IP-Adresse oder Hostname Adresse der Ressource im Netzwerk der Website.", + "editInternalResourceDialogDestinationCidrDescription": "Der CIDR-Bereich der Ressource im Netzwerk der Website.", + "editInternalResourceDialogAlias": "Alias", + "editInternalResourceDialogAliasDescription": "Ein optionaler interner DNS-Alias für diese Ressource.", "createInternalResourceDialogNoSitesAvailable": "Keine Sites verfügbar", "createInternalResourceDialogNoSitesAvailableDescription": "Sie müssen mindestens eine Newt-Site mit einem konfigurierten Subnetz haben, um interne Ressourcen zu erstellen.", "createInternalResourceDialogClose": "Schließen", - "createInternalResourceDialogCreateClientResource": "Ressource erstellen", - "createInternalResourceDialogCreateClientResourceDescription": "Erstellen Sie eine neue Ressource, die für Clients zugänglich ist, die mit der ausgewählten Site verbunden sind.", + "createInternalResourceDialogCreateClientResource": "Private Ressource erstellen", + "createInternalResourceDialogCreateClientResourceDescription": "Erstelle eine neue Ressource, die nur für Clients zugänglich ist, die mit der Organisation verbunden sind", "createInternalResourceDialogResourceProperties": "Ressourceneigenschaften", "createInternalResourceDialogName": "Name", "createInternalResourceDialogSite": "Standort", @@ -1593,11 +1641,22 @@ "createInternalResourceDialogInvalidIPAddressFormat": "Ungültiges IP-Adressformat", "createInternalResourceDialogDestinationPortMin": "Ziel-Port muss mindestens 1 sein", "createInternalResourceDialogDestinationPortMax": "Ziel-Port muss kleiner als 65536 sein", + "createInternalResourceDialogPortModeRequired": "Protokolle, Proxyport und Zielport werden für den Port-Modus benötigt", + "createInternalResourceDialogMode": "Modus", + "createInternalResourceDialogModePort": "Port", + "createInternalResourceDialogModeHost": "Host", + "createInternalResourceDialogModeCidr": "CIDR", + "createInternalResourceDialogDestination": "Ziel", + "createInternalResourceDialogDestinationHostDescription": "Die IP-Adresse oder der Hostname der Ressource im Netzwerk der Website.", + "createInternalResourceDialogDestinationCidrDescription": "Der CIDR-Bereich der Ressource im Netzwerk der Website.", + "createInternalResourceDialogAlias": "Alias", + "createInternalResourceDialogAliasDescription": "Ein optionaler interner DNS-Alias für diese Ressource.", "siteConfiguration": "Konfiguration", "siteAcceptClientConnections": "Clientverbindungen akzeptieren", - "siteAcceptClientConnectionsDescription": "Erlauben Sie anderen Geräten, über diese Newt-Instanz mit Clients als Gateway zu verbinden.", - "siteAddress": "Site-Adresse", - "siteAddressDescription": "Geben Sie die IP-Adresse des Hosts an, mit dem sich die Clients verbinden sollen. Dies ist die interne Adresse der Site im Pangolin-Netzwerk, die von Clients angesprochen werden muss. Muss innerhalb des Unternehmens-Subnetzes liegen.", + "siteAcceptClientConnectionsDescription": "Erlaube Benutzer-Geräten und Clients Zugriff auf Ressourcen auf dieser Website. Dies kann später geändert werden.", + "siteAddress": "Site-Adresse (Erweitert)", + "siteAddressDescription": "Die interne Adresse der Website. Muss in das Subnetz der Organisation fallen.", + "siteNameDescription": "Der Anzeigename der Site, der später geändert werden kann.", "autoLoginExternalIdp": "Automatische Anmeldung mit externem IDP", "autoLoginExternalIdpDescription": "Leiten Sie den Benutzer sofort zur Authentifizierung an den externen IDP weiter.", "selectIdp": "IDP auswählen", @@ -1611,7 +1670,7 @@ "autoLoginErrorNoRedirectUrl": "Keine Weiterleitungs-URL vom Identitätsanbieter erhalten.", "autoLoginErrorGeneratingUrl": "Fehler beim Generieren der Authentifizierungs-URL.", "remoteExitNodeManageRemoteExitNodes": "Entfernte Knoten", - "remoteExitNodeDescription": "Self-Hosten Sie einen oder mehrere entfernte Knoten, um Ihr Netzwerk zu erweitern und die Abhängigkeit von der Cloud zu verringern", + "remoteExitNodeDescription": "Self-Hoster einen oder mehrere entfernte Knoten, um die Netzwerkverbindung zu erweitern und die Abhängigkeit von der Cloud zu verringern", "remoteExitNodes": "Knoten", "searchRemoteExitNodes": "Knoten suchen...", "remoteExitNodeAdd": "Knoten hinzufügen", @@ -1623,11 +1682,11 @@ "sidebarRemoteExitNodes": "Entfernte Knoten", "remoteExitNodeCreate": { "title": "Knoten erstellen", - "description": "Erstellen Sie einen neuen Knoten, um Ihr Netzwerk zu erweitern", + "description": "Erstelle einen neuen Knoten, um die Netzwerkverbindung zu erweitern", "viewAllButton": "Alle Knoten anzeigen", "strategy": { "title": "Erstellungsstrategie", - "description": "Wählen Sie diese Option, um Ihren Knoten manuell zu konfigurieren oder neue Zugangsdaten zu generieren.", + "description": "Wählen Sie diese Option, um den Knoten manuell zu konfigurieren oder neue Zugangsdaten zu generieren.", "adopt": { "title": "Node übernehmen", "description": "Wählen Sie dies, wenn Sie bereits die Anmeldedaten für den Knoten haben." @@ -1648,7 +1707,7 @@ }, "generate": { "title": "Generierte Anmeldedaten", - "description": "Verwenden Sie diese generierten Anmeldeinformationen, um Ihren Knoten zu konfigurieren", + "description": "Diese generierten Anmeldeinformationen verwenden, um den Knoten zu konfigurieren", "nodeIdTitle": "Knoten-ID", "secretTitle": "Geheimnis", "saveCredentialsTitle": "Anmeldedaten zur Konfiguration hinzufügen", @@ -1724,16 +1783,16 @@ "idpTypeLabel": "Identitätsanbietertyp", "roleMappingExpressionPlaceholder": "z. B. enthalten(Gruppen, 'admin') && 'Admin' || 'Mitglied'", "idpGoogleConfiguration": "Google-Konfiguration", - "idpGoogleConfigurationDescription": "Konfigurieren Sie Ihre Google OAuth2 Zugangsdaten", - "idpGoogleClientIdDescription": "Ihre Google OAuth2 Client-ID", - "idpGoogleClientSecretDescription": "Ihr Google OAuth2 Client Secret", + "idpGoogleConfigurationDescription": "Google OAuth2 Zugangsdaten konfigurieren", + "idpGoogleClientIdDescription": "Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Google OAuth2 Client Geheimnis", "idpAzureConfiguration": "Azure Entra ID Konfiguration", - "idpAzureConfigurationDescription": "Konfigurieren Sie Ihre Azure Entra ID OAuth2 Zugangsdaten", + "idpAzureConfigurationDescription": "Azure Entra ID OAuth2 Zugangsdaten konfigurieren", "idpTenantId": "Mandanten-ID", - "idpTenantIdPlaceholder": "deine Mandant-ID", - "idpAzureTenantIdDescription": "Ihre Azure Tenant-ID (gefunden in Azure Active Directory Übersicht)", - "idpAzureClientIdDescription": "Ihre Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Ihr Azure App Registration Client Secret", + "idpTenantIdPlaceholder": "tenant-id", + "idpAzureTenantIdDescription": "Azure Tenant ID (gefunden in Azure Active Directory Übersicht)", + "idpAzureClientIdDescription": "Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Azure App Registration Client Geheimnis", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", @@ -1741,14 +1800,14 @@ "idpGoogleConfigurationTitle": "Google-Konfiguration", "idpAzureConfigurationTitle": "Azure Entra ID Konfiguration", "idpTenantIdLabel": "Mandanten-ID", - "idpAzureClientIdDescription2": "Ihre Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Ihr Azure App Registration Client Secret", + "idpAzureClientIdDescription2": "Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Azure App Registration Client Geheimnis", "idpGoogleDescription": "Google OAuth2/OIDC Provider", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", "subnet": "Subnetz", "subnetDescription": "Das Subnetz für die Netzwerkkonfiguration dieser Organisation.", "authPage": "Auth Seite", - "authPageDescription": "Konfigurieren Sie die Auth-Seite für Ihre Organisation", + "authPageDescription": "Konfigurieren Sie die Authentifizierungsseite für die Organisation", "authPageDomain": "Domain der Auth Seite", "noDomainSet": "Keine Domain gesetzt", "changeDomain": "Domain ändern", @@ -1758,7 +1817,7 @@ "setAuthPageDomain": "Domain der Auth Seite festlegen", "failedToFetchCertificate": "Zertifikat konnte nicht abgerufen werden", "failedToRestartCertificate": "Zertifikat konnte nicht neu gestartet werden", - "addDomainToEnableCustomAuthPages": "Fügen Sie eine Domain hinzu, um benutzerdefinierte Authentifizierungsseiten für Ihre Organisation zu aktivieren", + "addDomainToEnableCustomAuthPages": "Füge eine Domain hinzu, um benutzerdefinierte Authentifizierungsseiten für die Organisation zu aktivieren", "selectDomainForOrgAuthPage": "Wählen Sie eine Domain für die Authentifizierungsseite der Organisation", "domainPickerProvidedDomain": "Angegebene Domain", "domainPickerFreeProvidedDomain": "Kostenlose Domain", @@ -1773,7 +1832,7 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" konnte nicht für {domain} gültig gemacht werden.", "domainPickerSubdomainSanitized": "Subdomain bereinigt", "domainPickerSubdomainCorrected": "\"{sub}\" wurde korrigiert zu \"{sanitized}\"", - "orgAuthSignInTitle": "Bei Ihrer Organisation anmelden", + "orgAuthSignInTitle": "In der Organisation anmelden", "orgAuthChooseIdpDescription": "Wähle deinen Identitätsanbieter um fortzufahren", "orgAuthNoIdpConfigured": "Diese Organisation hat keine Identitätsanbieter konfiguriert. Sie können sich stattdessen mit Ihrer Pangolin-Identität anmelden.", "orgAuthSignInWithPangolin": "Mit Pangolin anmelden", @@ -1791,7 +1850,7 @@ "enableTwoFactorAuthentication": "Zwei-Faktor-Authentifizierung aktivieren", "completeSecuritySteps": "Schließe Sicherheitsschritte ab", "securitySettings": "Sicherheitseinstellungen", - "securitySettingsDescription": "Konfigurieren Sie Sicherheitsrichtlinien für Ihre Organisation", + "securitySettingsDescription": "Sicherheitsrichtlinien für die Organisation konfigurieren", "requireTwoFactorForAllUsers": "Zwei-Faktor-Authentifizierung für alle Benutzer erforderlich", "requireTwoFactorDescription": "Wenn aktiviert, müssen alle internen Benutzer in dieser Organisation die Zwei-Faktor-Authentifizierung aktiviert haben, um auf die Organisation zuzugreifen.", "requireTwoFactorDisabledDescription": "Diese Funktion erfordert eine gültige Lizenz (Unternehmen) oder ein aktives Abonnement (SaaS)", @@ -1854,8 +1913,12 @@ "enterpriseEdition": "Enterprise Edition", "unlicensed": "Nicht lizenziert", "beta": "Beta", - "manageClients": "Clients verwalten", - "manageClientsDescription": "Clients sind Geräte, die sich mit Ihren Websites verbinden können", + "manageUserDevices": "Benutzer-Geräte", + "manageUserDevicesDescription": "Geräte anschauen und verwalten, die Benutzer für private Verbindungen zu Ressourcen verwenden", + "manageMachineClients": "Maschinen-Clients verwalten", + "manageMachineClientsDescription": "Erstelle und verwalte Clients, die Server und Systeme nutzen, um privat mit Ressourcen zu verbinden", + "clientsTableUserClients": "Benutzer", + "clientsTableMachineClients": "Maschine", "licenseTableValidUntil": "Gültig bis", "saasLicenseKeysSettingsTitle": "Enterprise-Lizenzen", "saasLicenseKeysSettingsDescription": "Erstelle und verwalte Enterprise-Lizenzschlüssel für selbst gehostete Pangolin-Instanzen", @@ -1990,11 +2053,12 @@ "pathRewriteStripLabel": "entfernen", "sidebarEnableEnterpriseLicense": "Enterprise-Lizenz aktivieren", "cannotbeUndone": "Dies kann nicht rückgängig gemacht werden.", - "toConfirm": "bestätigen", + "toConfirm": "bestätigen.", "deleteClientQuestion": "Sind Sie sicher, dass Sie den Client von der Website und der Organisation entfernen möchten?", "clientMessageRemove": "Nach dem Entfernen kann sich der Client nicht mehr mit der Website verbinden.", "sidebarLogs": "Logs", "request": "Anfrage", + "requests": "Anfragen", "logs": "Logs", "logsSettingsDescription": "Aus dieser Orginisierung gesammelte Logs überwachen", "searchLogs": "Logs suchen...", @@ -2020,6 +2084,7 @@ "ip": "IP", "reason": "Grund", "requestLogs": "Logs anfordern", + "requestAnalytics": "Analytik anfordern", "host": "Host", "location": "Standort", "actionLogs": "Aktionsprotokolle", @@ -2029,6 +2094,7 @@ "logRetention": "Log-Speicherung", "logRetentionDescription": "Verwalten, wie lange verschiedene Logs für diese Organisation gespeichert werden oder deaktivieren", "requestLogsDescription": "Detaillierte Request-Logs für Ressourcen in dieser Organisation anzeigen", + "requestAnalyticsDescription": "Detaillierte Anfrageanalytik für Ressourcen in dieser Organisation anzeigen", "logRetentionRequestLabel": "Log-Speicherung anfordern", "logRetentionRequestDescription": "Wie lange sollen Request-Logs gespeichert werden", "logRetentionAccessLabel": "Zugriffsprotokoll-Speicherung", @@ -2042,6 +2108,7 @@ "logRetention30Days": "30 Tage", "logRetention90Days": "90 Tage", "logRetentionForever": "Für immer", + "logRetentionEndOfFollowingYear": "Ende des folgenden Jahres", "actionLogsDescription": "Verlauf der in dieser Organisation durchgeführten Aktionen anzeigen", "accessLogsDescription": "Zugriffsauth-Anfragen für Ressourcen in dieser Organisation anzeigen", "licenseRequiredToUse": "Um diese Funktion nutzen zu können, ist eine Enterprise-Lizenz erforderlich.", @@ -2052,7 +2119,7 @@ "preferWildcardCert": "Wildcard-Zertifikat bevorzugen", "unverified": "Nicht verifiziert", "domainSetting": "Domänen-Einstellungen", - "domainSettingDescription": "Einstellungen für Ihre Domain konfigurieren", + "domainSettingDescription": "Einstellungen für die Domain konfigurieren", "preferWildcardCertDescription": "Versuch ein Platzhalterzertifikat zu generieren (erfordert einen richtig konfigurierten Zertifikatslöser).", "recordName": "Name des Datensatzes", "auto": "Auto", @@ -2066,15 +2133,15 @@ "olmUpdateAvailableInfo": "Eine aktualisierte Version von Olm ist verfügbar. Bitte aktualisieren Sie auf die neueste Version für die beste Erfahrung.", "client": "Client", "proxyProtocol": "Proxy-Protokoll-Einstellungen", - "proxyProtocolDescription": "Konfigurieren Sie das Proxy-Protokoll, um die IP-Adressen des Clients für TCP/UDP-Dienste zu erhalten.", + "proxyProtocolDescription": "Konfigurieren Sie das Proxy-Protokoll, um die IP-Adressen des Clients für TCP-Dienste zu erhalten.", "enableProxyProtocol": "Proxy-Protokoll aktivieren", - "proxyProtocolInfo": "Client-IP-Adressen für TCP/UDP Backends beibehalten", + "proxyProtocolInfo": "Client-IP-Adressen für TCP-Backends beibehalten", "proxyProtocolVersion": "Proxy-Protokollversion", "version1": " Version 1 (empfohlen)", "version2": "Version 2", "versionDescription": "Die Version 1 ist textbasiert und unterstützt die Version 2, ist binär und effizienter, aber weniger kompatibel.", "warning": "Warnung", - "proxyProtocolWarning": "Ihre Backend-Anwendung muss so konfiguriert sein, dass sie Proxy-Protokoll-Verbindungen akzeptiert. Wenn Ihr Backend das Proxy-Protokoll nicht unterstützt, wird die Aktivierung dieser Option alle Verbindungen zerstören. Stellen Sie sicher, dass Sie Ihr Backend so konfigurieren, dass es Proxy-Protokoll-Header von Traefik vertraut.", + "proxyProtocolWarning": "Die Backend-Anwendung muss so konfiguriert sein, dass Proxy-Protokoll-Verbindungen akzeptiert werden. Wenn Ihr Backend das Proxy-Protokoll nicht unterstützt, wird das Aktivieren aller Verbindungen unterbrochen, so dass Sie dies nur aktivieren, wenn Sie wissen, was Sie tun. Stellen Sie sicher, dass Sie Ihr Backend so konfigurieren, dass es Proxy-Protokoll-Header von Traefik vertraut.", "restarting": "Neustarten...", "manual": "Manuell", "messageSupport": "Nachrichtenunterstützung", @@ -2097,6 +2164,43 @@ "supportMessageSent": "Nachricht gesendet!", "supportWillContact": "Wir werden in Kürze kontaktieren!", "selectLogRetention": "Log-Speicherung auswählen", + "terms": "Begriffe", + "privacy": "Privatsphäre", + "security": "Sicherheit", + "docs": "Texte", + "deviceActivation": "Geräte-Aktivierung", + "deviceCodeInvalidFormat": "Code muss 9 Zeichen lang sein (z.B. A1AJ-N5JD)", + "deviceCodeInvalidOrExpired": "Ungültiger oder abgelaufener Code", + "deviceCodeVerifyFailed": "Fehler beim Überprüfen des Gerätecodes", + "signedInAs": "Angemeldet als", + "deviceCodeEnterPrompt": "Geben Sie den auf dem Gerät angezeigten Code ein", + "continue": "Weiter", + "deviceUnknownLocation": "Unbekannter Ort", + "deviceAuthorizationRequested": "Diese Autorisierung wurde von {location} auf {date}angefordert. Stellen Sie sicher, dass Sie diesem Gerät vertrauen, da es Zugriff auf das Konto erhält.", + "deviceLabel": "Gerät: {deviceName}", + "deviceWantsAccess": "möchte auf Ihr Konto zugreifen", + "deviceExistingAccess": "Existierender Zugriff:", + "deviceFullAccess": "Voller Zugriff auf Ihr Konto", + "deviceOrganizationsAccess": "Zugriff auf alle Organisationen, auf die Ihr Konto Zugriff hat", + "deviceAuthorize": "{applicationName} autorisieren", + "deviceConnected": "Gerät verbunden!", + "deviceAuthorizedMessage": "Gerät ist berechtigt, auf Ihr Konto zuzugreifen.", + "pangolinCloud": "Pangolin Cloud", + "viewDevices": "Geräte anzeigen", + "viewDevicesDescription": "Verwalten Sie Ihre verbundenen Geräte", + "noDevices": "Keine Geräte gefunden", + "dateCreated": "Erstellungsdatum", + "unnamedDevice": "Unbenanntes Gerät", + "deviceQuestionRemove": "Sind Sie sicher, dass Sie dieses Gerät löschen möchten?", + "deviceMessageRemove": "Diese Aktion kann nicht rückgängig gemacht werden.", + "deviceDeleteConfirm": "Gerät löschen", + "deleteDevice": "Gerät löschen", + "errorLoadingDevices": "Fehler beim Laden der Geräte", + "failedToLoadDevices": "Fehler beim Laden der Geräte", + "deviceDeleted": "Gerät gelöscht", + "deviceDeletedDescription": "Das Gerät wurde erfolgreich gelöscht.", + "errorDeletingDevice": "Fehler beim Löschen des Geräts", + "failedToDeleteDevice": "Gerät konnte nicht gelöscht werden", "showColumns": "Spalten anzeigen", "hideColumns": "Spalten ausblenden", "columnVisibility": "Spaltensichtbarkeit", @@ -2111,10 +2215,14 @@ "enableSelected": "Ausgewählte aktivieren", "disableSelected": "Ausgewählte deaktivieren", "checkSelectedStatus": "Status der Auswahl überprüfen", + "clients": "Clients", + "accessClientSelect": "Maschinen-Clients auswählen", + "resourceClientDescription": "Maschinelle Clients die auf diese Ressource zugreifen können", + "regenerate": "Neu generieren", "credentials": "Zugangsdaten", "savecredentials": "Zugangsdaten speichern", - "regeneratecredentials": "Re-Key", - "regenerateCredentials": "Regenerieren und speichern Sie Ihre Zugangsdaten", + "regenerateCredentialsButton": "Zugangsdaten neu generieren", + "regenerateCredentials": "Zugangsdaten neu generieren", "generatedcredentials": "Generierte Zugangsdaten", "copyandsavethesecredentials": "Diese Zugangsdaten kopieren und speichern", "copyandsavethesecredentialsdescription": "Diese Zugangsdaten werden nach dem Verlassen dieser Seite nicht mehr angezeigt. Speichern Sie sie jetzt sicher.", @@ -2122,13 +2230,12 @@ "credentialsSavedDescription": "Zugangsdaten wurden neu erstellt und erfolgreich gespeichert.", "credentialsSaveError": "Fehler beim Speichern der Zugangsdaten", "credentialsSaveErrorDescription": "Beim Erneuern und Speichern der Zugangsdaten ist ein Fehler aufgetreten.", - "regenerateCredentialsWarning": "Das Regenerieren von Zugangsdaten wird die vorhergehenden ungültig machen. Bitte aktualisieren die Konfigurationen, welche diese Zugangsdaten verwenden.", + "regenerateCredentialsWarning": "Das erneute Erzeugen von Anmeldedaten wird die vorhergehenden ungültig machen und eine Trennung der Verbindung verursachen. Stellen Sie sicher, dass Sie Konfigurationen aktualisieren, die diese Zugangsdaten verwenden.", "confirm": "Bestätigen", "regenerateCredentialsConfirmation": "Sind Sie sicher, dass Sie die Zugangsdaten neu generieren möchten?", "endpoint": "Endpunkt", "Id": "ID", "SecretKey": "Geheimer Schlüssel", - "featureDisabledTooltip": "Diese Funktion ist nur im Enterprise-Plan verfügbar und erfordert eine Lizenz, um sie zu nutzen.", "niceId": "Schöne ID", "niceIdUpdated": "Schöne ID aktualisiert", "niceIdUpdatedSuccessfully": "Nice ID erfolgreich aktualisiert", @@ -2136,5 +2243,32 @@ "niceIdUpdateErrorDescription": "Beim Aktualisieren der Nizza-ID ist ein Fehler aufgetreten.", "niceIdCannotBeEmpty": "Nizza-ID darf nicht leer sein", "enterIdentifier": "Identifikator eingeben", - "identifier": "Identifier" + "identifier": "Identifier", + "deviceLoginUseDifferentAccount": "Nicht du? Verwenden Sie ein anderes Konto.", + "deviceLoginDeviceRequestingAccessToAccount": "Ein Gerät fordert Zugriff auf dieses Konto an.", + "noData": "Keine Daten", + "machineClients": "Maschinen-Clients", + "install": "Installieren", + "run": "Ausführen", + "clientNameDescription": "Der Anzeigename des Clients, der später geändert werden kann.", + "clientAddress": "Clientadresse (Erweitert)", + "setupFailedToFetchSubnet": "Fehler beim Abrufen des Standard-Subnetzes", + "setupSubnetAdvanced": "Subnetz (Fortgeschritten)", + "setupSubnetDescription": "Das Subnetz für das interne Netzwerk dieser Organisation.", + "siteRegenerateAndDisconnect": "Regenerieren und trennen", + "siteRegenerateAndDisconnectConfirmation": "Sind Sie sicher, dass Sie die Anmeldedaten neu generieren und diese Website trennen möchten?", + "siteRegenerateAndDisconnectWarning": "Dies wird die Anmeldeinformationen neu generieren und die Website sofort trennen. Die Seite muss mit den neuen Anmeldeinformationen neu gestartet werden.", + "siteRegenerateCredentialsConfirmation": "Sind Sie sicher, dass Sie die Zugangsdaten für diese Seite neu generieren möchten?", + "siteRegenerateCredentialsWarning": "Dies wird die Anmeldeinformationen neu generieren. Die Seite bleibt verbunden, bis Sie sie manuell neu starten und die neuen Anmeldeinformationen verwenden.", + "clientRegenerateAndDisconnect": "Regenerieren und trennen", + "clientRegenerateAndDisconnectConfirmation": "Sind Sie sicher, dass Sie die Zugangsdaten neu generieren und diesen Client trennen möchten?", + "clientRegenerateAndDisconnectWarning": "Dies wird die Anmeldeinformationen neu generieren und den Client sofort trennen. Der Client muss mit den neuen Anmeldeinformationen neu gestartet werden.", + "clientRegenerateCredentialsConfirmation": "Sind Sie sicher, dass Sie die Zugangsdaten für diesen Client neu generieren möchten?", + "clientRegenerateCredentialsWarning": "Dies wird die Anmeldeinformationen neu generieren. Der Client bleibt verbunden, bis Sie ihn manuell neu starten und die neuen Anmeldeinformationen verwenden.", + "remoteExitNodeRegenerateAndDisconnect": "Regenerieren und trennen", + "remoteExitNodeRegenerateAndDisconnectConfirmation": "Sind Sie sicher, dass Sie die Zugangsdaten neu generieren und diesen Remote-Exit-Knoten trennen möchten?", + "remoteExitNodeRegenerateAndDisconnectWarning": "Dies wird die Anmeldeinformationen neu generieren und den Remote-Exit-Knoten sofort trennen. Der Remote-Exit-Knoten muss mit den neuen Anmeldeinformationen neu gestartet werden.", + "remoteExitNodeRegenerateCredentialsConfirmation": "Sind Sie sicher, dass Sie die Zugangsdaten für diesen Remote-Exit-Knoten neu generieren möchten?", + "remoteExitNodeRegenerateCredentialsWarning": "Dies wird die Anmeldeinformationen neu generieren. Der Remote-Exit-Knoten bleibt verbunden, bis Sie ihn manuell neu starten und die neuen Anmeldeinformationen verwenden.", + "agent": "Agent" } diff --git a/messages/en-US.json b/messages/en-US.json index cf066c3d7..b023ac754 100644 --- a/messages/en-US.json +++ b/messages/en-US.json @@ -1,12 +1,12 @@ { - "setupCreate": "Create your organization, site, and resources", + "setupCreate": "Create the organization, site, and resources", "setupNewOrg": "New Organization", "setupCreateOrg": "Create Organization", "setupCreateResources": "Create Resources", "setupOrgName": "Organization Name", - "orgDisplayName": "This is the display name of your organization.", + "orgDisplayName": "This is the display name of the organization.", "orgId": "Organization ID", - "setupIdentifierMessage": "This is the unique identifier for your organization. This is separate from the display name.", + "setupIdentifierMessage": "This is the unique identifier for the organization.", "setupErrorIdentifier": "Organization ID is already taken. Please choose a different one.", "componentsErrorNoMemberCreate": "You are not currently a member of any organizations. Create an organization to get started.", "componentsErrorNoMember": "You are not currently a member of any organizations.", @@ -50,10 +50,10 @@ "siteMessageRemove": "Once removed the site will no longer be accessible. All targets associated with the site will also be removed.", "siteQuestionRemove": "Are you sure you want to remove the site from the organization?", "siteManageSites": "Manage Sites", - "siteDescription": "Allow connectivity to your network through secure tunnels", + "siteDescription": "Create and manage sites to enable connectivity to private networks", "siteCreate": "Create Site", "siteCreateDescription2": "Follow the steps below to create and connect a new site", - "siteCreateDescription": "Create a new site to start connecting your resources", + "siteCreateDescription": "Create a new site to start connecting resources", "close": "Close", "siteErrorCreate": "Error creating site", "siteErrorCreateKeyPair": "Key pair or site defaults not found", @@ -74,7 +74,7 @@ "siteInstallNewt": "Install Newt", "siteInstallNewtDescription": "Get Newt running on your system", "WgConfiguration": "WireGuard Configuration", - "WgConfigurationDescription": "Use the following configuration to connect to your network", + "WgConfigurationDescription": "Use the following configuration to connect to the network", "operatingSystem": "Operating System", "commands": "Commands", "recommended": "Recommended", @@ -87,32 +87,32 @@ "siteUpdated": "Site updated", "siteUpdatedDescription": "The site has been updated.", "siteGeneralDescription": "Configure the general settings for this site", - "siteSettingDescription": "Configure the settings on your site", + "siteSettingDescription": "Configure the settings on the site", "siteSetting": "{siteName} Settings", - "siteNewtTunnel": "Newt Tunnel (Recommended)", - "siteNewtTunnelDescription": "Easiest way to create an entrypoint into your network. No extra setup.", + "siteNewtTunnel": "Newt Site (Recommended)", + "siteNewtTunnelDescription": "Easiest way to create an entrypoint into any network. No extra setup.", "siteWg": "Basic WireGuard", "siteWgDescription": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteLocalDescription": "Local resources only. No tunneling.", "siteLocalDescriptionSaas": "Local resources only. No tunneling. Only available on remote nodes.", "siteSeeAll": "See All Sites", - "siteTunnelDescription": "Determine how you want to connect to your site", - "siteNewtCredentials": "Newt Credentials", - "siteNewtCredentialsDescription": "This is how Newt will authenticate with the server", - "siteCredentialsSave": "Save Your Credentials", + "siteTunnelDescription": "Determine how you want to connect to the site", + "siteNewtCredentials": "Credentials", + "siteNewtCredentialsDescription": "This is how the site will authenticate with the server", + "siteCredentialsSave": "Save the Credentials", "siteCredentialsSaveDescription": "You will only be able to see this once. Make sure to copy it to a secure place.", "siteInfo": "Site Information", "status": "Status", "shareTitle": "Manage Share Links", - "shareDescription": "Create shareable links to grant temporary or permanent access to your resources", + "shareDescription": "Create shareable links to grant temporary or permanent access to proxy resources", "shareSearch": "Search share links...", "shareCreate": "Create Share Link", "shareErrorDelete": "Failed to delete link", "shareErrorDeleteMessage": "An error occurred deleting link", "shareDeleted": "Link deleted", "shareDeletedDescription": "The link has been deleted", - "shareTokenDescription": "Your access token can be passed in two ways: as a query parameter or in the request headers. These must be passed from the client on every request for authenticated access.", + "shareTokenDescription": "The access token can be passed in two ways: as a query parameter or in the request headers. These must be passed from the client on every request for authenticated access.", "accessToken": "Access Token", "usageExamples": "Usage Examples", "tokenId": "Token ID", @@ -121,7 +121,7 @@ "importantNote": "Important Note", "shareImportantDescription": "For security reasons, using headers is recommended over query parameters when possible, as query parameters may be logged in server logs or browser history.", "token": "Token", - "shareTokenSecurety": "Keep your access token secure. Do not share it in publicly accessible areas or client-side code.", + "shareTokenSecurety": "Keep the access token secure. Do not share it in publicly accessible areas or client-side code.", "shareErrorFetchResource": "Failed to fetch resources", "shareErrorFetchResourceDescription": "An error occurred while fetching the resources", "shareErrorCreate": "Failed to create share link", @@ -144,8 +144,10 @@ "expires": "Expires", "never": "Never", "shareErrorSelectResource": "Please select a resource", - "resourceTitle": "Manage Resources", - "resourceDescription": "Create secure proxies to your private applications", + "proxyResourceTitle": "Manage Public Resources", + "proxyResourceDescription": "Create and manage resources that are publicly accessible through a web browser", + "clientResourceTitle": "Manage Private Resources", + "clientResourceDescription": "Create and manage resources that are only accessible through a connected client", "resourcesSearch": "Search resources...", "resourceAdd": "Add Resource", "resourceErrorDelte": "Error deleting resource", @@ -155,9 +157,9 @@ "resourceMessageRemove": "Once removed, the resource will no longer be accessible. All targets associated with the resource will also be removed.", "resourceQuestionRemove": "Are you sure you want to remove the resource from the organization?", "resourceHTTP": "HTTPS Resource", - "resourceHTTPDescription": "Proxy requests to your app over HTTPS using a subdomain or base domain.", + "resourceHTTPDescription": "Proxy requests to the app over HTTPS using a subdomain or base domain.", "resourceRaw": "Raw TCP/UDP Resource", - "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", + "resourceRawDescription": "Proxy requests to the app over TCP/UDP using a port number. This only works when sites are connected to nodes.", "resourceCreate": "Create Resource", "resourceCreateDescription": "Follow the steps below to create a new resource", "resourceSeeAll": "See All Resources", @@ -171,22 +173,22 @@ "noCountryFound": "No country found.", "siteSelectionDescription": "This site will provide connectivity to the target.", "resourceType": "Resource Type", - "resourceTypeDescription": "Determine how you want to access your resource", + "resourceTypeDescription": "Determine how to access the resource", "resourceHTTPSSettings": "HTTPS Settings", - "resourceHTTPSSettingsDescription": "Configure how your resource will be accessed over HTTPS", + "resourceHTTPSSettingsDescription": "Configure how the resource will be accessed over HTTPS", "domainType": "Domain Type", "subdomain": "Subdomain", "baseDomain": "Base Domain", - "subdomnainDescription": "The subdomain where your resource will be accessible.", + "subdomnainDescription": "The subdomain where the resource will be accessible.", "resourceRawSettings": "TCP/UDP Settings", - "resourceRawSettingsDescription": "Configure how your resource will be accessed over TCP/UDP. You map the resource to a port on the host Pangolin server, so you can access the resource from server-public-ip:mapped-port.", + "resourceRawSettingsDescription": "Configure how the resource will be accessed over TCP/UDP", "protocol": "Protocol", "protocolSelect": "Select a protocol", "resourcePortNumber": "Port Number", "resourcePortNumberDescription": "The external port number to proxy requests.", "cancel": "Cancel", "resourceConfig": "Configuration Snippets", - "resourceConfigDescription": "Copy and paste these configuration snippets to set up your TCP/UDP resource", + "resourceConfigDescription": "Copy and paste these configuration snippets to set up the TCP/UDP resource", "resourceAddEntrypoints": "Traefik: Add Entrypoints", "resourceExposePorts": "Gerbil: Expose Ports in Docker Compose", "resourceLearnRaw": "Learn how to configure TCP/UDP resources", @@ -202,14 +204,14 @@ "proxy": "Proxy", "internal": "Internal", "rules": "Rules", - "resourceSettingDescription": "Configure the settings on your resource", + "resourceSettingDescription": "Configure the settings on the resource", "resourceSetting": "{resourceName} Settings", - "alwaysAllow": "Always Allow", - "alwaysDeny": "Always Deny", + "alwaysAllow": "Bypass Auth", + "alwaysDeny": "Block Access", "passToAuth": "Pass to Auth", - "orgSettingsDescription": "Configure your organization's settings", + "orgSettingsDescription": "Configure the organization's settings", "orgGeneralSettings": "Organization Settings", - "orgGeneralSettingsDescription": "Manage your organization details and configuration", + "orgGeneralSettingsDescription": "Manage the organization's details and configuration", "saveGeneralSettings": "Save General Settings", "saveSettings": "Save Settings", "orgDangerZone": "Danger Zone", @@ -232,7 +234,7 @@ "orgMissing": "Organization ID Missing", "orgMissingMessage": "Unable to regenerate invitation without an organization ID.", "accessUsersManage": "Manage Users", - "accessUsersDescription": "Invite users and add them to roles to manage access to your organization", + "accessUsersDescription": "Invite and manage users with access to this organization", "accessUsersSearch": "Search users...", "accessUserCreate": "Create User", "accessUserRemove": "Remove User", @@ -241,13 +243,13 @@ "role": "Role", "nameRequired": "Name is required", "accessRolesManage": "Manage Roles", - "accessRolesDescription": "Configure roles to manage access to your organization", + "accessRolesDescription": "Create and manage roles for users in the organization", "accessRolesSearch": "Search roles...", "accessRolesAdd": "Add Role", "accessRoleDelete": "Delete Role", "description": "Description", "inviteTitle": "Open Invitations", - "inviteDescription": "Manage your invitations to other users", + "inviteDescription": "Manage invitations for other users to join the organization", "inviteSearch": "Search invitations...", "minutes": "Minutes", "hours": "Hours", @@ -261,13 +263,13 @@ "apiKeysErrorCreate": "Error creating API key", "apiKeysErrorSetPermission": "Error setting permissions", "apiKeysCreate": "Generate API Key", - "apiKeysCreateDescription": "Generate a new API key for your organization", + "apiKeysCreateDescription": "Generate a new API key for the organization", "apiKeysGeneralSettings": "Permissions", "apiKeysGeneralSettingsDescription": "Determine what this API key can do", - "apiKeysList": "Your API Key", - "apiKeysSave": "Save Your API Key", + "apiKeysList": "New API Key", + "apiKeysSave": "Save the API Key", "apiKeysSaveDescription": "You will only be able to see this once. Make sure to copy it to a secure place.", - "apiKeysInfo": "Your API key is:", + "apiKeysInfo": "The API key is:", "apiKeysConfirmCopy": "I have copied the API key", "generate": "Generate", "done": "Done", @@ -424,7 +426,7 @@ "userCreated": "User created", "userCreatedDescription": "The user has been successfully created.", "userTypeInternal": "Internal User", - "userTypeInternalDescription": "Invite a user to join your organization directly.", + "userTypeInternalDescription": "Invite a user to join the organization directly.", "userTypeExternal": "External User", "userTypeExternalDescription": "Create a user with an external identity provider.", "accessUserCreateDescription": "Follow the steps below to create a new user", @@ -436,6 +438,16 @@ "inviteEmailSent": "Send invite email to user", "inviteValid": "Valid For", "selectDuration": "Select duration", + "selectResource": "Select Resource", + "filterByResource": "Filter By Resource", + "resetFilters": "Reset Filters", + "totalBlocked": "Requests Blocked By Pangolin", + "totalRequests": "Total Requests", + "requestsByCountry": "Requests By Country", + "requestsByDay": "Requests By Day", + "blocked": "Blocked", + "allowed": "Allowed", + "topCountries": "Top Countries", "accessRoleSelect": "Select role", "inviteEmailSentDescription": "An email has been sent to the user with the access link below. They must access the link to accept the invitation.", "inviteSentDescription": "The user has been invited. They must access the link below to accept the invitation.", @@ -458,13 +470,13 @@ "accessControlsSubmit": "Save Access Controls", "roles": "Roles", "accessUsersRoles": "Manage Users & Roles", - "accessUsersRolesDescription": "Invite users and add them to roles to manage access to your organization", + "accessUsersRolesDescription": "Invite users and add them to roles to manage access to the organization", "key": "Key", "createdAt": "Created At", "proxyErrorInvalidHeader": "Invalid custom Host Header value. Use domain name format, or save empty to unset custom Host Header.", "proxyErrorTls": "Invalid TLS Server Name. Use domain name format, or save empty to remove the TLS Server Name.", "proxyEnableSSL": "Enable SSL", - "proxyEnableSSLDescription": "Enable SSL/TLS encryption for secure HTTPS connections to your targets.", + "proxyEnableSSLDescription": "Enable SSL/TLS encryption for secure HTTPS connections to the targets.", "target": "Target", "configureTarget": "Configure Targets", "targetErrorFetch": "Failed to fetch targets", @@ -480,29 +492,29 @@ "targetsErrorUpdate": "Failed to update targets", "targetsErrorUpdateDescription": "An error occurred while updating targets", "targetTlsUpdate": "TLS settings updated", - "targetTlsUpdateDescription": "Your TLS settings have been updated successfully", + "targetTlsUpdateDescription": "TLS settings have been updated successfully", "targetErrorTlsUpdate": "Failed to update TLS settings", "targetErrorTlsUpdateDescription": "An error occurred while updating TLS settings", "proxyUpdated": "Proxy settings updated", - "proxyUpdatedDescription": "Your proxy settings have been updated successfully", + "proxyUpdatedDescription": "Proxy settings have been updated successfully", "proxyErrorUpdate": "Failed to update proxy settings", "proxyErrorUpdateDescription": "An error occurred while updating proxy settings", - "targetAddr": "IP / Hostname", + "targetAddr": "Host", "targetPort": "Port", "targetProtocol": "Protocol", "targetTlsSettings": "Secure Connection Configuration", - "targetTlsSettingsDescription": "Configure SSL/TLS settings for your resource", + "targetTlsSettingsDescription": "Configure SSL/TLS settings for the resource", "targetTlsSettingsAdvanced": "Advanced TLS Settings", "targetTlsSni": "TLS Server Name", "targetTlsSniDescription": "The TLS Server Name to use for SNI. Leave empty to use the default.", "targetTlsSubmit": "Save Settings", "targets": "Targets Configuration", - "targetsDescription": "Set up targets to route traffic to your backend services", + "targetsDescription": "Set up targets to route traffic to backend services", "targetStickySessions": "Enable Sticky Sessions", "targetStickySessionsDescription": "Keep connections on the same backend target for their entire session.", "methodSelect": "Select method", "targetSubmit": "Add Target", - "targetNoOne": "This resource doesn't have any targets. Add a target to configure where to send requests to your backend.", + "targetNoOne": "This resource doesn't have any targets. Add a target to configure where to send requests to the backend.", "targetNoOneDescription": "Adding more than one target above will enable load balancing.", "targetsSubmit": "Save Targets", "addTarget": "Add Target", @@ -516,9 +528,11 @@ "targetCreatedDescription": "Target has been created successfully", "targetErrorCreate": "Failed to create target", "targetErrorCreateDescription": "An error occurred while creating the target", + "tlsServerName": "TLS Server Name", + "tlsServerNameDescription": "The TLS server name to use for SNI", "save": "Save", "proxyAdditional": "Additional Proxy Settings", - "proxyAdditionalDescription": "Configure how your resource handles proxy settings", + "proxyAdditionalDescription": "Configure how the resource handles proxy settings", "proxyCustomHeader": "Custom Host Header", "proxyCustomHeaderDescription": "The host header to set when proxying requests. Leave empty to use the default.", "proxyAdditionalSubmit": "Save Proxy Settings", @@ -558,7 +572,7 @@ "rulesMatchType": "Match Type", "value": "Value", "rulesAbout": "About Rules", - "rulesAboutDescription": "Rules allow you to control access to your resource based on a set of criteria. You can create rules to allow or deny access based on IP address or URL path.", + "rulesAboutDescription": "Rules allow you to control access to the resource based on a set of criteria. You can create rules to allow or deny access based on IP address or URL path.", "rulesActions": "Actions", "rulesActionAlwaysAllow": "Always Allow: Bypass all authentication methods", "rulesActionAlwaysDeny": "Always Deny: Block all requests; no authentication can be attempted", @@ -570,7 +584,7 @@ "rulesEnable": "Enable Rules", "rulesEnableDescription": "Enable or disable rule evaluation for this resource", "rulesResource": "Resource Rules Configuration", - "rulesResourceDescription": "Configure rules to control access to your resource", + "rulesResourceDescription": "Configure rules to control access to the resource", "ruleSubmit": "Add Rule", "rulesNoOne": "No rules. Add a rule using the form.", "rulesOrder": "Rules are evaluated by priority in ascending order.", @@ -586,7 +600,7 @@ "none": "None", "unknown": "Unknown", "resources": "Resources", - "resourcesDescription": "Resources are proxies to applications running on your private network. Create a resource for any HTTP/HTTPS or raw TCP/UDP service on your private network. Each resource must be connected to a site to enable private, secure connectivity through an encrypted WireGuard tunnel.", + "resourcesDescription": "Resources are proxies to applications running on the private network. Create a resource for any HTTP/HTTPS or raw TCP/UDP service on your private network. Each resource must be connected to a site to enable private, secure connectivity through an encrypted WireGuard tunnel.", "resourcesWireGuardConnect": "Secure connectivity with WireGuard encryption", "resourcesMultipleAuthenticationMethods": "Configure multiple authentication methods", "resourcesUsersRolesAccess": "User and role-based access control", @@ -597,7 +611,7 @@ "resourceSelect": "Select resource", "shareLinks": "Share Links", "share": "Shareable Links", - "shareDescription2": "Create shareable links to your resources. Links provide temporary or unlimited access to your resource. You can configure the expiration duration of the link when you create one.", + "shareDescription2": "Create shareable links to resources. Links provide temporary or unlimited access to your resource. You can configure the expiration duration of the link when you create one.", "shareEasyCreate": "Easy to create and share", "shareConfigurableExpirationDuration": "Configurable expiration duration", "shareSecureAndRevocable": "Secure and revocable", @@ -607,19 +621,19 @@ "unknownCommand": "Unknown command", "newtErrorFetchReleases": "Failed to fetch release info: {err}", "newtErrorFetchLatest": "Error fetching latest release: {err}", - "newtEndpoint": "Newt Endpoint", - "newtId": "Newt ID", - "newtSecretKey": "Newt Secret Key", + "newtEndpoint": "Endpoint", + "newtId": "ID", + "newtSecretKey": "Secret", "architecture": "Architecture", "sites": "Sites", - "siteWgAnyClients": "Use any WireGuard client to connect. You will have to address your internal resources using the peer IP.", + "siteWgAnyClients": "Use any WireGuard client to connect. You will have to address internal resources using the peer IP.", "siteWgCompatibleAllClients": "Compatible with all WireGuard clients", "siteWgManualConfigurationRequired": "Manual configuration required", "userErrorNotAdminOrOwner": "User is not an admin or owner", "pangolinSettings": "Settings - Pangolin", "accessRoleYour": "Your role:", - "accessRoleSelect2": "Select a role", - "accessUserSelect": "Select a user", + "accessRoleSelect2": "Select roles", + "accessUserSelect": "Select users", "otpEmailEnter": "Enter an email", "otpEmailEnterDescription": "Press enter to add an email after typing it in the input field.", "otpEmailErrorInvalid": "Invalid email address. Wildcard (*) must be the entire local part.", @@ -671,7 +685,7 @@ "resourcePincodeSetupTitle": "Set Pincode", "resourcePincodeSetupTitleDescription": "Set a pincode to protect this resource", "resourceRoleDescription": "Admins can always access this resource.", - "resourceUsersRoles": "Users & Roles", + "resourceUsersRoles": "Access Controls", "resourceUsersRolesDescription": "Configure which users and roles can visit this resource", "resourceUsersRolesSubmit": "Save Users & Roles", "resourceWhitelistSave": "Saved successfully", @@ -702,6 +716,7 @@ "resourceTransferSubmit": "Transfer Resource", "siteDestination": "Destination Site", "searchSites": "Search sites", + "countries": "Countries", "accessRoleCreate": "Create Role", "accessRoleCreateDescription": "Create a new role to group users and manage their permissions.", "accessRoleCreateSubmit": "Create Role", @@ -766,15 +781,15 @@ "idpOidcConfigure": "OAuth2/OIDC Configuration", "idpOidcConfigureDescription": "Configure the OAuth2/OIDC provider endpoints and credentials", "idpClientId": "Client ID", - "idpClientIdDescription": "The OAuth2 client ID from your identity provider", + "idpClientIdDescription": "The OAuth2 client ID from the identity provider", "idpClientSecret": "Client Secret", - "idpClientSecretDescription": "The OAuth2 client secret from your identity provider", + "idpClientSecretDescription": "The OAuth2 client secret from the identity provider", "idpAuthUrl": "Authorization URL", "idpAuthUrlDescription": "The OAuth2 authorization endpoint URL", "idpTokenUrl": "Token URL", "idpTokenUrlDescription": "The OAuth2 token endpoint URL", "idpOidcConfigureAlert": "Important Information", - "idpOidcConfigureAlertDescription": "After creating the identity provider, you will need to configure the callback URL in your identity provider's settings. The callback URL will be provided after successful creation.", + "idpOidcConfigureAlertDescription": "After creating the identity provider, you will need to configure the callback URL in the identity provider's settings. The callback URL will be provided after successful creation.", "idpToken": "Token Configuration", "idpTokenDescription": "Configure how to extract user information from the ID token", "idpJmespathAbout": "About JMESPath", @@ -791,7 +806,7 @@ "idpSubmit": "Create Identity Provider", "orgPolicies": "Organization Policies", "idpSettings": "{idpName} Settings", - "idpCreateSettingsDescription": "Configure the settings for your identity provider", + "idpCreateSettingsDescription": "Configure the settings for the identity provider", "roleMapping": "Role Mapping", "orgMapping": "Organization Mapping", "orgPoliciesSearch": "Search organization policies...", @@ -826,7 +841,7 @@ "idpUpdatedDescription": "Identity provider updated successfully", "redirectUrl": "Redirect URL", "redirectUrlAbout": "About Redirect URL", - "redirectUrlAboutDescription": "This is the URL to which users will be redirected after authentication. You need to configure this URL in your identity provider settings.", + "redirectUrlAboutDescription": "This is the URL to which users will be redirected after authentication. You need to configure this URL in the identity provider's settings.", "pangolinAuth": "Auth - Pangolin", "verificationCodeLengthRequirements": "Your verification code must be 8 characters.", "errorOccurred": "An error occurred", @@ -909,6 +924,10 @@ "passwordResetSent": "We'll send a password reset code to this email address.", "passwordResetCode": "Reset Code", "passwordResetCodeDescription": "Check your email for the reset code.", + "generatePasswordResetCode": "Generate Password Reset Code", + "passwordResetCodeGenerated": "Password Reset Code Generated", + "passwordResetCodeGeneratedDescription": "Share this code with the user. They can use it to reset their password.", + "passwordResetUrl": "Reset URL", "passwordNew": "New Password", "passwordNewConfirm": "Confirm New Password", "changePassword": "Change Password", @@ -926,6 +945,9 @@ "pincodeAuth": "Authenticator Code", "pincodeSubmit2": "Submit Code", "passwordResetSubmit": "Request Reset", + "passwordResetAlreadyHaveCode": "Enter Password Reset Code", + "passwordResetSmtpRequired": "Please contact your administrator", + "passwordResetSmtpRequiredDescription": "A password reset code is required to reset your password. Please contact your administrator for assistance.", "passwordBack": "Back to Password", "loginBack": "Go back to log in", "signup": "Sign up", @@ -1091,12 +1113,15 @@ "actionListSiteResources": "List Site Resources", "actionUpdateSiteResource": "Update Site Resource", "actionListInvitations": "List Invitations", + "actionExportLogs": "Export Logs", + "actionViewLogs": "View Logs", "noneSelected": "None selected", "orgNotFound2": "No organizations found.", "searchProgress": "Search...", "create": "Create", "orgs": "Organizations", "loginError": "An error occurred while logging in", + "loginRequiredForDevice": "Login is required to authenticate your device.", "passwordForgot": "Forgot your password?", "otpAuth": "Two-Factor Authentication", "otpAuthDescription": "Enter the code from your authenticator app or one of your single-use backup codes.", @@ -1151,19 +1176,29 @@ "sidebarHome": "Home", "sidebarSites": "Sites", "sidebarResources": "Resources", + "sidebarProxyResources": "Public", + "sidebarClientResources": "Private", "sidebarAccessControl": "Access Control", + "sidebarLogsAndAnalytics": "Logs & Analytics", "sidebarUsers": "Users", + "sidebarAdmin": "Admin", "sidebarInvitations": "Invitations", "sidebarRoles": "Roles", - "sidebarShareableLinks": "Shareable Links", + "sidebarShareableLinks": "Links", "sidebarApiKeys": "API Keys", "sidebarSettings": "Settings", "sidebarAllUsers": "All Users", "sidebarIdentityProviders": "Identity Providers", "sidebarLicense": "License", "sidebarClients": "Clients", + "sidebarUserDevices": "Users", + "sidebarMachineClients": "Machines", "sidebarDomains": "Domains", + "sidebarGeneral": "General", + "sidebarLogAndAnalytics": "Log & Analytics", "sidebarBluePrints": "Blueprints", + "sidebarOrganization": "Organization", + "sidebarLogsAnalytics": "Analytics", "blueprints": "Blueprints", "blueprintsDescription": "Apply declarative configurations and view previous runs", "blueprintAdd": "Add Blueprint", @@ -1174,7 +1209,7 @@ "blueprintDetailsDescription": "See the result of the applied blueprint and any errors that occurred", "blueprintInfo": "Blueprint Information", "message": "Message", - "blueprintContentsDescription": "Define the YAML content describing your infrastructure", + "blueprintContentsDescription": "Define the YAML content describing the infrastructure", "blueprintErrorCreateDescription": "An error occurred when applying the blueprint", "blueprintErrorCreate": "Error creating blueprint", "searchBlueprintProgress": "Search blueprints...", @@ -1230,15 +1265,15 @@ "loading": "Loading", "restart": "Restart", "domains": "Domains", - "domainsDescription": "Manage domains for your organization", + "domainsDescription": "Create and manage domains available in the organization", "domainsSearch": "Search domains...", "domainAdd": "Add Domain", - "domainAddDescription": "Register a new domain with your organization", + "domainAddDescription": "Register a new domain with to the organization", "domainCreate": "Create Domain", "domainCreatedDescription": "Domain created successfully", "domainDeletedDescription": "Domain deleted successfully", - "domainQuestionRemove": "Are you sure you want to remove the domain from your account?", - "domainMessageRemove": "Once removed, the domain will no longer be associated with your account.", + "domainQuestionRemove": "Are you sure you want to remove the domain?", + "domainMessageRemove": "Once removed, the domain will no longer be associated with the organization.", "domainConfirmDelete": "Confirm Delete Domain", "domainDelete": "Delete Domain", "domain": "Domain", @@ -1257,7 +1292,7 @@ "pending": "Pending", "sidebarBilling": "Billing", "billing": "Billing", - "orgBillingDescription": "Manage your billing information and subscriptions", + "orgBillingDescription": "Manage billing information and subscriptions", "github": "GitHub", "pangolinHosted": "Pangolin Hosted", "fossorial": "Fossorial", @@ -1285,9 +1320,9 @@ "productUpdateTitle": "Product Updates", "productUpdateEmpty": "No updates", "dismissAll": "Dismiss all", - "pangolinUpdateAvailable": "New version available", + "pangolinUpdateAvailable": "Update Available", "pangolinUpdateAvailableInfo": "Version {version} is ready to install", - "pangolinUpdateAvailableReleaseNotes": "View release notes", + "pangolinUpdateAvailableReleaseNotes": "View Release Notes", "newtUpdateAvailable": "Update Available", "newtUpdateAvailableInfo": "A new version of Newt is available. Please update to the latest version for the best experience.", "domainPickerEnterDomain": "Domain", @@ -1300,7 +1335,7 @@ "domainPickerSortAsc": "A-Z", "domainPickerSortDesc": "Z-A", "domainPickerCheckingAvailability": "Checking availability...", - "domainPickerNoMatchingDomains": "No matching domains found. Try a different domain or check your organization's domain settings.", + "domainPickerNoMatchingDomains": "No matching domains found. Try a different domain or check the organization's domain settings.", "domainPickerOrganizationDomains": "Organization Domains", "domainPickerProvidedDomains": "Provided Domains", "domainPickerSubdomain": "Subdomain: {subdomain}", @@ -1334,7 +1369,7 @@ "billingModifySubscription": "Modify Subscription", "billingStartSubscription": "Start Subscription", "billingRecurringCharge": "Recurring Charge", - "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", + "billingManageSubscriptionSettings": "Manage subscription settings and preferences", "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", "billingFailedToLoadSubscription": "Failed to load subscription", "billingFailedToLoadUsage": "Failed to load usage", @@ -1345,9 +1380,9 @@ "billingPortalError": "Portal Error", "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", - "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", - "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", - "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", + "billingUsersInfo": "You're charged for each user in the organization. Billing is calculated daily based on the number of active user accounts in your org.", + "billingDomainInfo": "You're charged for each domain in the organization. Billing is calculated daily based on the number of active domain accounts in your org.", + "billingRemoteExitNodesInfo": "You're charged for each managed Node in the organization. Billing is calculated daily based on the number of active managed Nodes in your org.", "domainNotFound": "Domain Not Found", "domainNotFoundDescription": "This resource is disabled because the domain no longer exists our system. Please set a new domain for this resource.", "failed": "Failed", @@ -1439,23 +1474,23 @@ "errorCreatingClient": "Error creating client", "clientDefaultsNotFound": "Client defaults not found", "createClient": "Create Client", - "createClientDescription": "Create a new client for connecting to your sites", + "createClientDescription": "Create a new client to access private resources", "seeAllClients": "See All Clients", "clientInformation": "Client Information", "clientNamePlaceholder": "Client name", "address": "Address", "subnetPlaceholder": "Subnet", - "addressDescription": "The address that this client will use for connectivity", + "addressDescription": "The internal address of the client. Must fall within the organization's subnet.", "selectSites": "Select sites", "sitesDescription": "The client will have connectivity to the selected sites", "clientInstallOlm": "Install Olm", "clientInstallOlmDescription": "Get Olm running on your system", - "clientOlmCredentials": "Olm Credentials", - "clientOlmCredentialsDescription": "This is how Olm will authenticate with the server", - "olmEndpoint": "Olm Endpoint", - "olmId": "Olm ID", - "olmSecretKey": "Olm Secret Key", - "clientCredentialsSave": "Save Your Credentials", + "clientOlmCredentials": "Credentials", + "clientOlmCredentialsDescription": "This is how the client will authenticate with the server", + "olmEndpoint": "Endpoint", + "olmId": "ID", + "olmSecretKey": "Secret", + "clientCredentialsSave": "Save the Credentials", "clientCredentialsSaveDescription": "You will only be able to see this once. Make sure to copy it to a secure place.", "generalSettingsDescription": "Configure the general settings for this client", "clientUpdated": "Client updated", @@ -1466,9 +1501,7 @@ "sitesFetchError": "An error occurred while fetching sites.", "olmErrorFetchReleases": "An error occurred while fetching Olm releases.", "olmErrorFetchLatest": "An error occurred while fetching the latest Olm release.", - "remoteSubnets": "Remote Subnets", "enterCidrRange": "Enter CIDR range", - "remoteSubnetsDescription": "Add CIDR ranges that can be accessed from this site remotely using clients. Use format like 10.0.0.0/24. This ONLY applies to VPN client connectivity.", "resourceEnableProxy": "Enable Public Proxy", "resourceEnableProxyDescription": "Enable public proxying to this resource. This allows access to the resource from outside the network through the cloud on an open port. Requires Traefik config.", "externalProxyEnabled": "External Proxy Enabled", @@ -1486,14 +1519,15 @@ "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", "healthScheme": "Method", "healthSelectScheme": "Select Method", + "healthCheckPortInvalid": "Health check port must be between 1 and 65535", "healthCheckPath": "Path", "healthHostname": "IP / Host", "healthPort": "Port", "healthCheckPathDescription": "The path to check for health status.", - "healthyIntervalSeconds": "Healthy Interval", - "unhealthyIntervalSeconds": "Unhealthy Interval", + "healthyIntervalSeconds": "Healthy Interval (sec)", + "unhealthyIntervalSeconds": "Unhealthy Interval (sec)", "IntervalSeconds": "Healthy Interval", - "timeoutSeconds": "Timeout", + "timeoutSeconds": "Timeout (sec)", "timeIsInSeconds": "Time is in seconds", "retryAttempts": "Retry Attempts", "expectedResponseCodes": "Expected Response Codes", @@ -1529,12 +1563,12 @@ "resourceEditDomain": "Edit Domain", "siteName": "Site Name", "proxyPort": "Port", - "resourcesTableProxyResources": "Proxy Resources", - "resourcesTableClientResources": "Client Resources", + "resourcesTableProxyResources": "Public", + "resourcesTableClientResources": "Private", "resourcesTableNoProxyResourcesFound": "No proxy resources found.", "resourcesTableNoInternalResourcesFound": "No internal resources found.", "resourcesTableDestination": "Destination", - "resourcesTableTheseResourcesForUseWith": "These resources are for use with", + "resourcesTableAlias": "Alias", "resourcesTableClients": "Clients", "resourcesTableAndOnlyAccessibleInternally": "and are only accessible internally when connected with a client.", "resourcesTableNoTargets": "No targets", @@ -1543,8 +1577,8 @@ "resourcesTableOffline": "Offline", "resourcesTableUnknown": "Unknown", "resourcesTableNotMonitored": "Not monitored", - "editInternalResourceDialogEditClientResource": "Edit Client Resource", - "editInternalResourceDialogUpdateResourceProperties": "Update the resource properties and target configuration for {resourceName}.", + "editInternalResourceDialogEditClientResource": "Edit Private Resource", + "editInternalResourceDialogUpdateResourceProperties": "Update the resource configuration and access controls for {resourceName}", "editInternalResourceDialogResourceProperties": "Resource Properties", "editInternalResourceDialogName": "Name", "editInternalResourceDialogProtocol": "Protocol", @@ -1563,11 +1597,22 @@ "editInternalResourceDialogInvalidIPAddressFormat": "Invalid IP address format", "editInternalResourceDialogDestinationPortMin": "Destination port must be at least 1", "editInternalResourceDialogDestinationPortMax": "Destination port must be less than 65536", + "editInternalResourceDialogPortModeRequired": "Protocol, proxy port, and destination port are required for port mode", + "editInternalResourceDialogMode": "Mode", + "editInternalResourceDialogModePort": "Port", + "editInternalResourceDialogModeHost": "Host", + "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogDestination": "Destination", + "editInternalResourceDialogDestinationHostDescription": "The IP address or hostname of the resource on the site's network.", + "editInternalResourceDialogDestinationIPDescription": "The IP or hostname address of the resource on the site's network.", + "editInternalResourceDialogDestinationCidrDescription": "The CIDR range of the resource on the site's network.", + "editInternalResourceDialogAlias": "Alias", + "editInternalResourceDialogAliasDescription": "An optional internal DNS alias for this resource.", "createInternalResourceDialogNoSitesAvailable": "No Sites Available", "createInternalResourceDialogNoSitesAvailableDescription": "You need to have at least one Newt site with a subnet configured to create internal resources.", "createInternalResourceDialogClose": "Close", - "createInternalResourceDialogCreateClientResource": "Create Client Resource", - "createInternalResourceDialogCreateClientResourceDescription": "Create a new resource that will be accessible to clients connected to the selected site.", + "createInternalResourceDialogCreateClientResource": "Create Private Resource", + "createInternalResourceDialogCreateClientResourceDescription": "Create a new resource that will only be accessible to clients connected to the organization", "createInternalResourceDialogResourceProperties": "Resource Properties", "createInternalResourceDialogName": "Name", "createInternalResourceDialogSite": "Site", @@ -1596,11 +1641,22 @@ "createInternalResourceDialogInvalidIPAddressFormat": "Invalid IP address format", "createInternalResourceDialogDestinationPortMin": "Destination port must be at least 1", "createInternalResourceDialogDestinationPortMax": "Destination port must be less than 65536", + "createInternalResourceDialogPortModeRequired": "Protocol, proxy port, and destination port are required for port mode", + "createInternalResourceDialogMode": "Mode", + "createInternalResourceDialogModePort": "Port", + "createInternalResourceDialogModeHost": "Host", + "createInternalResourceDialogModeCidr": "CIDR", + "createInternalResourceDialogDestination": "Destination", + "createInternalResourceDialogDestinationHostDescription": "The IP address or hostname of the resource on the site's network.", + "createInternalResourceDialogDestinationCidrDescription": "The CIDR range of the resource on the site's network.", + "createInternalResourceDialogAlias": "Alias", + "createInternalResourceDialogAliasDescription": "An optional internal DNS alias for this resource.", "siteConfiguration": "Configuration", "siteAcceptClientConnections": "Accept Client Connections", - "siteAcceptClientConnectionsDescription": "Allow other devices to connect through this Newt instance as a gateway using clients.", - "siteAddress": "Site Address", - "siteAddressDescription": "Specify the IP address of the host for clients to connect to. This is the internal address of the site in the Pangolin network for clients to address. Must fall within the Org subnet.", + "siteAcceptClientConnectionsDescription": "Allow user devices and clients to access resources on this site. This can be changed later.", + "siteAddress": "Site Address (Advanced)", + "siteAddressDescription": "The internal address of the site. Must fall within the organization's subnet.", + "siteNameDescription": "The display name of the site that can be changed later.", "autoLoginExternalIdp": "Auto Login with External IDP", "autoLoginExternalIdpDescription": "Immediately redirect the user to the external IDP for authentication.", "selectIdp": "Select IDP", @@ -1614,7 +1670,7 @@ "autoLoginErrorNoRedirectUrl": "No redirect URL received from the identity provider.", "autoLoginErrorGeneratingUrl": "Failed to generate authentication URL.", "remoteExitNodeManageRemoteExitNodes": "Remote Nodes", - "remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud", + "remoteExitNodeDescription": "Self-host one or more remote nodes to extend network connectivity and reduce reliance on the cloud", "remoteExitNodes": "Nodes", "searchRemoteExitNodes": "Search nodes...", "remoteExitNodeAdd": "Add Node", @@ -1626,11 +1682,11 @@ "sidebarRemoteExitNodes": "Remote Nodes", "remoteExitNodeCreate": { "title": "Create Node", - "description": "Create a new node to extend your network connectivity", + "description": "Create a new node to extend network connectivity", "viewAllButton": "View All Nodes", "strategy": { "title": "Creation Strategy", - "description": "Choose this to manually configure your node or generate new credentials.", + "description": "Choose this to manually configure the node or generate new credentials.", "adopt": { "title": "Adopt Node", "description": "Choose this if you already have the credentials for the node." @@ -1651,7 +1707,7 @@ }, "generate": { "title": "Generated Credentials", - "description": "Use these generated credentials to configure your node", + "description": "Use these generated credentials to configure the node", "nodeIdTitle": "Node ID", "secretTitle": "Secret", "saveCredentialsTitle": "Add Credentials to Config", @@ -1727,16 +1783,16 @@ "idpTypeLabel": "Identity Provider Type", "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", "idpGoogleConfiguration": "Google Configuration", - "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", - "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", - "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", + "idpGoogleConfigurationDescription": "Configure the Google OAuth2 credentials", + "idpGoogleClientIdDescription": "Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Google OAuth2 Client Secret", "idpAzureConfiguration": "Azure Entra ID Configuration", - "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", + "idpAzureConfigurationDescription": "Configure Azure Entra ID OAuth2 credentials", "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", - "idpAzureClientIdDescription": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", + "idpTenantIdPlaceholder": "tenant-id", + "idpAzureTenantIdDescription": "Azure tenant ID (found in Azure Active Directory overview)", + "idpAzureClientIdDescription": "Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Azure App Registration Client Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", @@ -1744,14 +1800,14 @@ "idpGoogleConfigurationTitle": "Google Configuration", "idpAzureConfigurationTitle": "Azure Entra ID Configuration", "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", + "idpAzureClientIdDescription2": "Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Azure App Registration Client Secret", "idpGoogleDescription": "Google OAuth2/OIDC provider", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", "subnet": "Subnet", "subnetDescription": "The subnet for this organization's network configuration.", "authPage": "Auth Page", - "authPageDescription": "Configure the auth page for your organization", + "authPageDescription": "Configure the auth page for the organization", "authPageDomain": "Auth Page Domain", "noDomainSet": "No domain set", "changeDomain": "Change Domain", @@ -1761,7 +1817,7 @@ "setAuthPageDomain": "Set Auth Page Domain", "failedToFetchCertificate": "Failed to fetch certificate", "failedToRestartCertificate": "Failed to restart certificate", - "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", + "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for the organization", "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", "domainPickerProvidedDomain": "Provided Domain", "domainPickerFreeProvidedDomain": "Free Provided Domain", @@ -1776,7 +1832,7 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" could not be made valid for {domain}.", "domainPickerSubdomainSanitized": "Subdomain sanitized", "domainPickerSubdomainCorrected": "\"{sub}\" was corrected to \"{sanitized}\"", - "orgAuthSignInTitle": "Sign in to your organization", + "orgAuthSignInTitle": "Sign in to the organization", "orgAuthChooseIdpDescription": "Choose your identity provider to continue", "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", "orgAuthSignInWithPangolin": "Sign in with Pangolin", @@ -1794,7 +1850,7 @@ "enableTwoFactorAuthentication": "Enable two-factor authentication", "completeSecuritySteps": "Complete Security Steps", "securitySettings": "Security Settings", - "securitySettingsDescription": "Configure security policies for your organization", + "securitySettingsDescription": "Configure security policies for the organization", "requireTwoFactorForAllUsers": "Require Two-Factor Authentication for All Users", "requireTwoFactorDescription": "When enabled, all internal users in this organization must have two-factor authentication enabled to access the organization.", "requireTwoFactorDisabledDescription": "This feature requires a valid license (Enterprise) or active subscription (SaaS)", @@ -1857,8 +1913,12 @@ "enterpriseEdition": "Enterprise Edition", "unlicensed": "Unlicensed", "beta": "Beta", - "manageClients": "Manage Clients", - "manageClientsDescription": "Clients are devices that can connect to your sites", + "manageUserDevices": "User Devices", + "manageUserDevicesDescription": "View and manage devices that users use to privately connect to resources", + "manageMachineClients": "Manage Machine Clients", + "manageMachineClientsDescription": "Create and manage clients that servers and systems use to privately connect to resources", + "clientsTableUserClients": "User", + "clientsTableMachineClients": "Machine", "licenseTableValidUntil": "Valid Until", "saasLicenseKeysSettingsTitle": "Enterprise Licenses", "saasLicenseKeysSettingsDescription": "Generate and manage Enterprise license keys for self-hosted Pangolin instances", @@ -1993,11 +2053,12 @@ "pathRewriteStripLabel": "strip", "sidebarEnableEnterpriseLicense": "Enable Enterprise License", "cannotbeUndone": "This can not be undone.", - "toConfirm": "to confirm", + "toConfirm": "to confirm.", "deleteClientQuestion": "Are you sure you want to remove the client from the site and organization?", "clientMessageRemove": "Once removed, the client will no longer be able to connect to the site.", "sidebarLogs": "Logs", "request": "Request", + "requests": "Requests", "logs": "Logs", "logsSettingsDescription": "Monitor logs collected from this orginization", "searchLogs": "Search logs...", @@ -2006,6 +2067,8 @@ "timestamp": "Timestamp", "accessLogs": "Access Logs", "exportCsv": "Export CSV", + "exportError": "Unknown error when exporting CSV", + "exportCsvTooltip": "Within Time Range", "actorId": "Actor ID", "allowedByRule": "Allowed by Rule", "allowedNoAuth": "Allowed No Auth", @@ -2023,6 +2086,7 @@ "ip": "IP", "reason": "Reason", "requestLogs": "Request Logs", + "requestAnalytics": "Request Analytics", "host": "Host", "location": "Location", "actionLogs": "Action Logs", @@ -2032,6 +2096,7 @@ "logRetention": "Log Retention", "logRetentionDescription": "Manage how long different types of logs are retained for this organization or disable them", "requestLogsDescription": "View detailed request logs for resources in this organization", + "requestAnalyticsDescription": "View detailed request analytics for resources in this organization", "logRetentionRequestLabel": "Request Log Retention", "logRetentionRequestDescription": "How long to retain request logs", "logRetentionAccessLabel": "Access Log Retention", @@ -2045,6 +2110,7 @@ "logRetention30Days": "30 days", "logRetention90Days": "90 days", "logRetentionForever": "Forever", + "logRetentionEndOfFollowingYear": "End of following year", "actionLogsDescription": "View a history of actions performed in this organization", "accessLogsDescription": "View access auth requests for resources in this organization", "licenseRequiredToUse": "An Enterprise license is required to use this feature.", @@ -2055,7 +2121,7 @@ "preferWildcardCert": "Prefer Wildcard Certificate", "unverified": "Unverified", "domainSetting": "Domain Settings", - "domainSettingDescription": "Configure settings for your domain", + "domainSettingDescription": "Configure settings for the domain", "preferWildcardCertDescription": "Attempt to generate a wildcard certificate (require a properly configured certificate resolver).", "recordName": "Record Name", "auto": "Auto", @@ -2069,15 +2135,15 @@ "olmUpdateAvailableInfo": "An updated version of Olm is available. Please update to the latest version for the best experience.", "client": "Client", "proxyProtocol": "Proxy Protocol Settings", - "proxyProtocolDescription": "Configure Proxy Protocol to preserve client IP addresses for TCP/UDP services.", + "proxyProtocolDescription": "Configure Proxy Protocol to preserve client IP addresses for TCP services.", "enableProxyProtocol": "Enable Proxy Protocol", - "proxyProtocolInfo": "Preserve client IP addresses for TCP/UDP backends", + "proxyProtocolInfo": "Preserve client IP addresses for TCP backends", "proxyProtocolVersion": "Proxy Protocol Version", "version1": " Version 1 (Recommended)", "version2": "Version 2", "versionDescription": "Version 1 is text-based and widely supported. Version 2 is binary and more efficient but less compatible. Make sure servers transport is added to dynamic config.", "warning": "Warning", - "proxyProtocolWarning": "Your backend application must be configured to accept Proxy Protocol connections. If your backend doesn't support Proxy Protocol, enabling this will break all connections so only enable this if you know what you're doing. Make sure to configure your backend to trust Proxy Protocol headers from Traefik.", + "proxyProtocolWarning": "The backend application must be configured to accept Proxy Protocol connections. If your backend doesn't support Proxy Protocol, enabling this will break all connections so only enable this if you know what you're doing. Make sure to configure your backend to trust Proxy Protocol headers from Traefik.", "restarting": "Restarting...", "manual": "Manual", "messageSupport": "Message Support", @@ -2100,6 +2166,43 @@ "supportMessageSent": "Message Sent!", "supportWillContact": "We'll be in touch shortly!", "selectLogRetention": "Select log retention", + "terms": "Terms", + "privacy": "Privacy", + "security": "Security", + "docs": "Docs", + "deviceActivation": "Device activation", + "deviceCodeInvalidFormat": "Code must be 9 characters (e.g., A1AJ-N5JD)", + "deviceCodeInvalidOrExpired": "Invalid or expired code", + "deviceCodeVerifyFailed": "Failed to verify device code", + "signedInAs": "Signed in as", + "deviceCodeEnterPrompt": "Enter the code displayed on the device", + "continue": "Continue", + "deviceUnknownLocation": "Unknown location", + "deviceAuthorizationRequested": "This authorization was requested from {location} on {date}. Make sure you trust this device as it will get access to the account.", + "deviceLabel": "Device: {deviceName}", + "deviceWantsAccess": "wants to access your account", + "deviceExistingAccess": "Existing access:", + "deviceFullAccess": "Full access to your account", + "deviceOrganizationsAccess": "Access to all organizations your account has access to", + "deviceAuthorize": "Authorize {applicationName}", + "deviceConnected": "Device Connected!", + "deviceAuthorizedMessage": "Device is authorized to access your account.", + "pangolinCloud": "Pangolin Cloud", + "viewDevices": "View Devices", + "viewDevicesDescription": "Manage your connected devices", + "noDevices": "No devices found", + "dateCreated": "Date Created", + "unnamedDevice": "Unnamed Device", + "deviceQuestionRemove": "Are you sure you want to delete this device?", + "deviceMessageRemove": "This action cannot be undone.", + "deviceDeleteConfirm": "Delete Device", + "deleteDevice": "Delete Device", + "errorLoadingDevices": "Error loading devices", + "failedToLoadDevices": "Failed to load devices", + "deviceDeleted": "Device deleted", + "deviceDeletedDescription": "The device has been successfully deleted.", + "errorDeletingDevice": "Error deleting device", + "failedToDeleteDevice": "Failed to delete device", "showColumns": "Show Columns", "hideColumns": "Hide Columns", "columnVisibility": "Column Visibility", @@ -2114,24 +2217,27 @@ "enableSelected": "Enable Selected", "disableSelected": "Disable Selected", "checkSelectedStatus": "Check Status of Selected", + "clients": "Clients", + "accessClientSelect": "Select machine clients", + "resourceClientDescription": "Machine clients that can access this resource", + "regenerate": "Regenerate", "credentials": "Credentials", "savecredentials": "Save Credentials", - "regeneratecredentials": "Re-key", - "regenerateCredentials": "Regenerate and save your credentials", + "regenerateCredentialsButton": "Regenerate Credentials", + "regenerateCredentials": "Regenerate Credentials", "generatedcredentials": "Generated Credentials", "copyandsavethesecredentials": "Copy and save these credentials", "copyandsavethesecredentialsdescription": "These credentials will not be shown again after you leave this page. Save them securely now.", - "credentialsSaved" : "Credentials Saved", + "credentialsSaved": "Credentials Saved", "credentialsSavedDescription": "Credentials have been regenerated and saved successfully.", "credentialsSaveError": "Credentials Save Error", "credentialsSaveErrorDescription": "An error occurred while regenerating and saving the credentials.", - "regenerateCredentialsWarning": "Regenerating credentials will invalidate the previous ones. Make sure to update any configurations that use these credentials.", + "regenerateCredentialsWarning": "Regenerating credentials will invalidate the previous ones and cause a disconnection. Make sure to update any configurations that use these credentials.", "confirm": "Confirm", "regenerateCredentialsConfirmation": "Are you sure you want to regenerate the credentials?", "endpoint": "Endpoint", "Id": "Id", "SecretKey": "Secret Key", - "featureDisabledTooltip": "This feature is only available in the enterprise plan and require a license to use it.", "niceId": "Nice ID", "niceIdUpdated": "Nice ID Updated", "niceIdUpdatedSuccessfully": "Nice ID Updated Successfully", @@ -2139,5 +2245,35 @@ "niceIdUpdateErrorDescription": "An error occurred while updating the Nice ID.", "niceIdCannotBeEmpty": "Nice ID cannot be empty", "enterIdentifier": "Enter identifier", - "identifier": "Identifier" + "identifier": "Identifier", + "deviceLoginUseDifferentAccount": "Not you? Use a different account.", + "deviceLoginDeviceRequestingAccessToAccount": "A device is requesting access to this account.", + "noData": "No Data", + "machineClients": "Machine Clients", + "install": "Install", + "run": "Run", + "clientNameDescription": "The display name of the client that can be changed later.", + "clientAddress": "Client Address (Advanced)", + "setupFailedToFetchSubnet": "Failed to fetch default subnet", + "setupSubnetAdvanced": "Subnet (Advanced)", + "setupSubnetDescription": "The subnet for this organization's internal network.", + "siteRegenerateAndDisconnect": "Regenerate and Disconnect", + "siteRegenerateAndDisconnectConfirmation": "Are you sure you want to regenerate the credentials and disconnect this site?", + "siteRegenerateAndDisconnectWarning": "This will regenerate the credentials and immediately disconnect the site. The site will need to be restarted with the new credentials.", + "siteRegenerateCredentialsConfirmation": "Are you sure you want to regenerate the credentials for this site?", + "siteRegenerateCredentialsWarning": "This will regenerate the credentials. The site will stay connected until you manually restart it and use the new credentials.", + "clientRegenerateAndDisconnect": "Regenerate and Disconnect", + "clientRegenerateAndDisconnectConfirmation": "Are you sure you want to regenerate the credentials and disconnect this client?", + "clientRegenerateAndDisconnectWarning": "This will regenerate the credentials and immediately disconnect the client. The client will need to be restarted with the new credentials.", + "clientRegenerateCredentialsConfirmation": "Are you sure you want to regenerate the credentials for this client?", + "clientRegenerateCredentialsWarning": "This will regenerate the credentials. The client will stay connected until you manually restart it and use the new credentials.", + "remoteExitNodeRegenerateAndDisconnect": "Regenerate and Disconnect", + "remoteExitNodeRegenerateAndDisconnectConfirmation": "Are you sure you want to regenerate the credentials and disconnect this remote exit node?", + "remoteExitNodeRegenerateAndDisconnectWarning": "This will regenerate the credentials and immediately disconnect the remote exit node. The remote exit node will need to be restarted with the new credentials.", + "remoteExitNodeRegenerateCredentialsConfirmation": "Are you sure you want to regenerate the credentials for this remote exit node?", + "remoteExitNodeRegenerateCredentialsWarning": "This will regenerate the credentials. The remote exit node will stay connected until you manually restart it and use the new credentials.", + "agent": "Agent", + "personalUseOnly": "Personal Use Only", + "loginPageLicenseWatermark": "This instance is licensed for personal use only.", + "instanceIsUnlicensed": "This instance is unlicensed." } diff --git a/messages/es-ES.json b/messages/es-ES.json index 1b33c928e..1ff02bca4 100644 --- a/messages/es-ES.json +++ b/messages/es-ES.json @@ -1,12 +1,12 @@ { - "setupCreate": "Crea tu organización, sitio y recursos", + "setupCreate": "Crear la organización, el sitio y los recursos", "setupNewOrg": "Nueva organización", "setupCreateOrg": "Crear organización", "setupCreateResources": "Crear Recursos", "setupOrgName": "Nombre de la organización", - "orgDisplayName": "Este es el nombre mostrado de su organización.", + "orgDisplayName": "Este es el nombre mostrado de la organización.", "orgId": "ID de la organización", - "setupIdentifierMessage": "Este es el identificador único para su organización. Esto es independiente del nombre de la pantalla.", + "setupIdentifierMessage": "Este es el identificador único para la organización.", "setupErrorIdentifier": "El ID de la organización ya está en uso. Por favor, elija uno diferente.", "componentsErrorNoMemberCreate": "Actualmente no eres miembro de ninguna organización. Crea una organización para empezar.", "componentsErrorNoMember": "Actualmente no eres miembro de ninguna organización.", @@ -50,10 +50,10 @@ "siteMessageRemove": "Una vez eliminado, el sitio ya no será accesible. Todos los objetivos asociados con el sitio también serán eliminados.", "siteQuestionRemove": "¿Está seguro que desea eliminar el sitio de la organización?", "siteManageSites": "Administrar Sitios", - "siteDescription": "Permitir conectividad a tu red a través de túneles seguros", + "siteDescription": "Crear y administrar sitios para permitir la conectividad a redes privadas", "siteCreate": "Crear sitio", "siteCreateDescription2": "Siga los pasos siguientes para crear y conectar un nuevo sitio", - "siteCreateDescription": "Crear un nuevo sitio para comenzar a conectar sus recursos", + "siteCreateDescription": "Crear un nuevo sitio para empezar a conectar recursos", "close": "Cerrar", "siteErrorCreate": "Error al crear el sitio", "siteErrorCreateKeyPair": "Por defecto no se encuentra el par de claves o el sitio", @@ -74,7 +74,7 @@ "siteInstallNewt": "Instalar Newt", "siteInstallNewtDescription": "Recibe Newt corriendo en tu sistema", "WgConfiguration": "Configuración de Wirex Guard", - "WgConfigurationDescription": "Utilice la siguiente configuración para conectarse a su red", + "WgConfigurationDescription": "Utilice la siguiente configuración para conectarse a la red", "operatingSystem": "Sistema operativo", "commands": "Comandos", "recommended": "Recomendado", @@ -87,32 +87,32 @@ "siteUpdated": "Sitio actualizado", "siteUpdatedDescription": "El sitio ha sido actualizado.", "siteGeneralDescription": "Configurar la configuración general de este sitio", - "siteSettingDescription": "Configurar la configuración de su sitio", + "siteSettingDescription": "Configurar los ajustes en el sitio", "siteSetting": "Ajustes {siteName}", - "siteNewtTunnel": "Túnel Nuevo (Recomendado)", - "siteNewtTunnelDescription": "La forma más fácil de crear un punto de entrada en tu red. Sin configuración adicional.", + "siteNewtTunnel": "Sitio nuevo (recomendado)", + "siteNewtTunnelDescription": "La forma más fácil de crear un punto de entrada en cualquier red. Sin configuración extra.", "siteWg": "Wirex Guardia Básica", "siteWgDescription": "Utilice cualquier cliente Wirex Guard para establecer un túnel. Se requiere una configuración manual de NAT.", "siteWgDescriptionSaas": "Utilice cualquier cliente de WireGuard para establecer un túnel. Se requiere configuración manual de NAT. SOLO FUNCIONA EN NODOS AUTOGESTIONADOS", "siteLocalDescription": "Solo recursos locales. Sin túneles.", "siteLocalDescriptionSaas": "Solo recursos locales. No hay túneles. Sólo disponible en nodos remotos.", "siteSeeAll": "Ver todos los sitios", - "siteTunnelDescription": "Determina cómo quieres conectarte a tu sitio", - "siteNewtCredentials": "Credenciales nuevas", - "siteNewtCredentialsDescription": "Así es como Newt se autentificará con el servidor", - "siteCredentialsSave": "Guarda tus credenciales", + "siteTunnelDescription": "Determina cómo quieres conectarte al sitio", + "siteNewtCredentials": "Credenciales", + "siteNewtCredentialsDescription": "Así es como el sitio se autentificará con el servidor", + "siteCredentialsSave": "Guardar las credenciales", "siteCredentialsSaveDescription": "Sólo podrás verlo una vez. Asegúrate de copiarlo a un lugar seguro.", "siteInfo": "Información del sitio", "status": "Estado", "shareTitle": "Administrar Enlaces de Compartir", - "shareDescription": "Crear enlaces compartidos para conceder acceso temporal o permanente a tus recursos", + "shareDescription": "Crear enlaces compartidos para conceder acceso temporal o permanente a recursos proxy", "shareSearch": "Buscar enlaces compartidos...", "shareCreate": "Crear enlace Compartir", "shareErrorDelete": "Error al eliminar el enlace", "shareErrorDeleteMessage": "Se ha producido un error al eliminar el enlace", "shareDeleted": "Enlace eliminado", "shareDeletedDescription": "El enlace ha sido eliminado", - "shareTokenDescription": "Su token de acceso puede ser pasado de dos maneras: como parámetro de consulta o en las cabeceras de solicitud. Estos deben ser pasados del cliente en cada solicitud de acceso autenticado.", + "shareTokenDescription": "El token de acceso puede ser pasado de dos maneras: como parámetro de consulta o en las cabeceras de solicitud. Estos deben ser pasados del cliente en cada solicitud de acceso autenticado.", "accessToken": "Token de acceso", "usageExamples": "Ejemplos de uso", "tokenId": "ID de token", @@ -121,7 +121,7 @@ "importantNote": "Nota Importante", "shareImportantDescription": "Por razones de seguridad, el uso de cabeceras se recomienda sobre parámetros de consulta cuando sea posible, ya que los parámetros de consulta pueden ser registrados en los registros del servidor o en el historial del navegador.", "token": "Token", - "shareTokenSecurety": "Mantenga su token de acceso seguro. No lo comparta en áreas de acceso público o código del lado del cliente.", + "shareTokenSecurety": "Mantenga seguro el token de acceso. No lo comparta en áreas de acceso público o código del lado del cliente.", "shareErrorFetchResource": "No se pudo obtener recursos", "shareErrorFetchResourceDescription": "Se ha producido un error al recuperar los recursos", "shareErrorCreate": "Error al crear el enlace compartir", @@ -144,8 +144,10 @@ "expires": "Caduca", "never": "Nunca", "shareErrorSelectResource": "Por favor, seleccione un recurso", - "resourceTitle": "Administrar recursos", - "resourceDescription": "Crea proxies seguros para tus aplicaciones privadas", + "proxyResourceTitle": "Administrar recursos públicos", + "proxyResourceDescription": "Crear y administrar recursos que sean accesibles públicamente a través de un navegador web", + "clientResourceTitle": "Administrar recursos privados", + "clientResourceDescription": "Crear y administrar recursos que sólo son accesibles a través de un cliente conectado", "resourcesSearch": "Buscar recursos...", "resourceAdd": "Añadir Recurso", "resourceErrorDelte": "Error al eliminar el recurso", @@ -155,9 +157,9 @@ "resourceMessageRemove": "Una vez eliminado, el recurso ya no será accesible. Todos los objetivos asociados con el recurso también serán eliminados.", "resourceQuestionRemove": "¿Está seguro que desea eliminar el recurso de la organización?", "resourceHTTP": "HTTPS Recurso", - "resourceHTTPDescription": "Solicitudes de proxy a tu aplicación sobre HTTPS usando un subdominio o dominio base.", + "resourceHTTPDescription": "Solicitudes de proxy a la aplicación sobre HTTPS usando un subdominio o dominio base.", "resourceRaw": "Recurso TCP/UDP sin procesar", - "resourceRawDescription": "Solicitudes de proxy a tu aplicación a través de TCP/UDP usando un número de puerto.", + "resourceRawDescription": "Solicitudes de proxy a la aplicación a través de TCP/UDP usando un número de puerto. Esto solo funciona cuando los sitios están conectados a nodos.", "resourceCreate": "Crear Recurso", "resourceCreateDescription": "Siga los siguientes pasos para crear un nuevo recurso", "resourceSeeAll": "Ver todos los recursos", @@ -171,22 +173,22 @@ "noCountryFound": "Ningún país encontrado.", "siteSelectionDescription": "Este sitio proporcionará conectividad al objetivo.", "resourceType": "Tipo de recurso", - "resourceTypeDescription": "Determina cómo quieres acceder a tu recurso", + "resourceTypeDescription": "Determina cómo acceder al recurso", "resourceHTTPSSettings": "Configuración HTTPS", - "resourceHTTPSSettingsDescription": "Configurar cómo se accederá a tu recurso a través de HTTPS", + "resourceHTTPSSettingsDescription": "Configurar cómo se accederá al recurso a través de HTTPS", "domainType": "Tipo de dominio", "subdomain": "Subdominio", "baseDomain": "Dominio base", - "subdomnainDescription": "El subdominio al que su recurso será accesible.", + "subdomnainDescription": "El subdominio al que el recurso será accesible.", "resourceRawSettings": "Configuración TCP/UDP", - "resourceRawSettingsDescription": "Configure cómo se accederá a su recurso a través de TCP/UDP. Mapeas el recurso a un puerto en el servidor Pangolin host, así puedes acceder al recurso desde el servidor-public-ip:mapped-port.", + "resourceRawSettingsDescription": "Configurar cómo se accederá al recurso a través de TCP/UDP", "protocol": "Protocolo", "protocolSelect": "Seleccionar un protocolo", "resourcePortNumber": "Número de puerto", "resourcePortNumberDescription": "El número de puerto externo a las solicitudes de proxy.", "cancel": "Cancelar", "resourceConfig": "Fragmentos de configuración", - "resourceConfigDescription": "Copia y pega estos fragmentos de configuración para configurar tu recurso TCP/UDP", + "resourceConfigDescription": "Copia y pega estos fragmentos de configuración para configurar el recurso TCP/UDP", "resourceAddEntrypoints": "Traefik: Añadir puntos de entrada", "resourceExposePorts": "Gerbil: Exponer puertos en Docker Compose", "resourceLearnRaw": "Aprende cómo configurar los recursos TCP/UDP", @@ -202,14 +204,14 @@ "proxy": "Proxy", "internal": "Interno", "rules": "Reglas", - "resourceSettingDescription": "Configure la configuración de su recurso", + "resourceSettingDescription": "Configurar la configuración del recurso", "resourceSetting": "Ajustes {resourceName}", - "alwaysAllow": "Permitir siempre", - "alwaysDeny": "Denegar siempre", + "alwaysAllow": "Autorización Bypass", + "alwaysDeny": "Bloquear acceso", "passToAuth": "Pasar a Autenticación", - "orgSettingsDescription": "Configurar la configuración general de su organización", + "orgSettingsDescription": "Configurar la configuración de la organización", "orgGeneralSettings": "Configuración de la organización", - "orgGeneralSettingsDescription": "Administra los detalles y la configuración de tu organización", + "orgGeneralSettingsDescription": "Administrar los detalles y la configuración de la organización", "saveGeneralSettings": "Guardar ajustes generales", "saveSettings": "Guardar ajustes", "orgDangerZone": "Zona de peligro", @@ -232,7 +234,7 @@ "orgMissing": "Falta el ID de la organización", "orgMissingMessage": "No se puede regenerar la invitación sin el ID de la organización.", "accessUsersManage": "Administrar usuarios", - "accessUsersDescription": "Invitar usuarios y añadirlos a roles para administrar el acceso a su organización", + "accessUsersDescription": "Invitar y administrar usuarios con acceso a esta organización", "accessUsersSearch": "Buscar usuarios...", "accessUserCreate": "Crear usuario", "accessUserRemove": "Eliminar usuario", @@ -241,13 +243,13 @@ "role": "Rol", "nameRequired": "Se requiere nombre", "accessRolesManage": "Administrar roles", - "accessRolesDescription": "Configurar roles para administrar el acceso a su organización", + "accessRolesDescription": "Crear y administrar roles para usuarios en la organización", "accessRolesSearch": "Buscar roles...", "accessRolesAdd": "Añadir rol", "accessRoleDelete": "Eliminar rol", "description": "Descripción", "inviteTitle": "Invitaciones abiertas", - "inviteDescription": "Administra tus invitaciones a otros usuarios", + "inviteDescription": "Administrar invitaciones para que otros usuarios se unan a la organización", "inviteSearch": "Buscar invitaciones...", "minutes": "Minutos", "hours": "Horas", @@ -261,13 +263,13 @@ "apiKeysErrorCreate": "Error al crear la clave API", "apiKeysErrorSetPermission": "Error al establecer permisos", "apiKeysCreate": "Generar clave API", - "apiKeysCreateDescription": "Generar una nueva clave API para su organización", + "apiKeysCreateDescription": "Generar una nueva clave API para la organización", "apiKeysGeneralSettings": "Permisos", "apiKeysGeneralSettingsDescription": "Determinar qué puede hacer esta clave API", - "apiKeysList": "Tu clave API", - "apiKeysSave": "Guarda tu clave API", + "apiKeysList": "Nueva Clave API", + "apiKeysSave": "Guardar la clave API", "apiKeysSaveDescription": "Sólo podrás verlo una vez. Asegúrate de copiarlo a un lugar seguro.", - "apiKeysInfo": "Tu clave API es:", + "apiKeysInfo": "La clave API es:", "apiKeysConfirmCopy": "He copiado la clave API", "generate": "Generar", "done": "Hecho", @@ -424,7 +426,7 @@ "userCreated": "Usuario creado", "userCreatedDescription": "El usuario se ha creado correctamente.", "userTypeInternal": "Usuario interno", - "userTypeInternalDescription": "Invita a un usuario a unirse a tu organización directamente.", + "userTypeInternalDescription": "Invitar a un usuario a unirse a la organización directamente.", "userTypeExternal": "Usuario externo", "userTypeExternalDescription": "Crear un usuario con un proveedor de identidad externo.", "accessUserCreateDescription": "Siga los pasos siguientes para crear un nuevo usuario", @@ -436,6 +438,16 @@ "inviteEmailSent": "Enviar correo de invitación al usuario", "inviteValid": "Válido para", "selectDuration": "Seleccionar duración", + "selectResource": "Seleccionar Recurso", + "filterByResource": "Filtrar por Recurso", + "resetFilters": "Reiniciar filtros", + "totalBlocked": "Solicitudes bloqueadas por Pangolin", + "totalRequests": "Solicitudes totales", + "requestsByCountry": "Solicitudes por país", + "requestsByDay": "Solicitudes por día", + "blocked": "Bloqueado", + "allowed": "Permitido", + "topCountries": "Top Países", "accessRoleSelect": "Seleccionar rol", "inviteEmailSentDescription": "Se ha enviado un correo electrónico al usuario con el siguiente enlace de acceso. Debe acceder al enlace para aceptar la invitación.", "inviteSentDescription": "El usuario ha sido invitado. Debe acceder al enlace de abajo para aceptar la invitación.", @@ -458,13 +470,13 @@ "accessControlsSubmit": "Guardar controles de acceso", "roles": "Roles", "accessUsersRoles": "Administrar usuarios y roles", - "accessUsersRolesDescription": "Invitar usuarios y añadirlos a roles para administrar el acceso a su organización", + "accessUsersRolesDescription": "Invitar usuarios y añadirlos a roles para administrar el acceso a la organización", "key": "Clave", "createdAt": "Creado el", "proxyErrorInvalidHeader": "Valor de cabecera de host personalizado no válido. Utilice el formato de nombre de dominio, o guarde en blanco para desestablecer cabecera de host personalizada.", "proxyErrorTls": "Nombre de servidor TLS inválido. Utilice el formato de nombre de dominio o guarde en blanco para eliminar el nombre de servidor TLS.", "proxyEnableSSL": "Activar SSL", - "proxyEnableSSLDescription": "Activa el cifrado SSL/TLS para conexiones seguras HTTPS a tus objetivos.", + "proxyEnableSSLDescription": "Habilita el cifrado SSL/TLS para conexiones seguras HTTPS a los objetivos.", "target": "Target", "configureTarget": "Configurar objetivos", "targetErrorFetch": "Error al recuperar los objetivos", @@ -480,24 +492,24 @@ "targetsErrorUpdate": "Error al actualizar los objetivos", "targetsErrorUpdateDescription": "Se ha producido un error al actualizar los objetivos", "targetTlsUpdate": "Ajustes TLS actualizados", - "targetTlsUpdateDescription": "La configuración de TLS se ha actualizado correctamente", + "targetTlsUpdateDescription": "Los ajustes de TLS se han actualizado correctamente", "targetErrorTlsUpdate": "Error al actualizar los ajustes de TLS", "targetErrorTlsUpdateDescription": "Ocurrió un error mientras se actualizaban los ajustes de TLS", "proxyUpdated": "Configuración del proxy actualizada", "proxyUpdatedDescription": "La configuración del proxy se ha actualizado correctamente", "proxyErrorUpdate": "Error al actualizar la configuración del proxy", "proxyErrorUpdateDescription": "Se ha producido un error al actualizar la configuración del proxy", - "targetAddr": "IP / Nombre del host", + "targetAddr": "Anfitrión", "targetPort": "Puerto", "targetProtocol": "Protocolo", "targetTlsSettings": "Configuración de conexión segura", - "targetTlsSettingsDescription": "Configurar ajustes SSL/TLS para su recurso", + "targetTlsSettingsDescription": "Configurar ajustes SSL/TLS para el recurso", "targetTlsSettingsAdvanced": "Ajustes avanzados de TLS", "targetTlsSni": "Nombre del servidor TLS", "targetTlsSniDescription": "El nombre del servidor TLS a usar para SNI. Deje en blanco para usar el valor predeterminado.", "targetTlsSubmit": "Guardar ajustes", "targets": "Configuración de objetivos", - "targetsDescription": "Configurar objetivos para enrutar tráfico a sus servicios", + "targetsDescription": "Establecer objetivos para enrutar tráfico a servicios de backend", "targetStickySessions": "Activar Sesiones Pegadas", "targetStickySessionsDescription": "Mantener conexiones en el mismo objetivo de backend para toda su sesión.", "methodSelect": "Seleccionar método", @@ -516,9 +528,11 @@ "targetCreatedDescription": "El objetivo se ha creado correctamente", "targetErrorCreate": "Error al crear el objetivo", "targetErrorCreateDescription": "Se ha producido un error al crear el objetivo", + "tlsServerName": "Nombre del servidor TLS", + "tlsServerNameDescription": "El nombre del servidor TLS a usar para SNI", "save": "Guardar", "proxyAdditional": "Ajustes adicionales del proxy", - "proxyAdditionalDescription": "Configura cómo tu recurso maneja la configuración del proxy", + "proxyAdditionalDescription": "Configurar cómo maneja el recurso la configuración del proxy", "proxyCustomHeader": "Cabecera de host personalizada", "proxyCustomHeaderDescription": "La cabecera del host a establecer cuando se realizan peticiones de reemplazo. Deje en blanco para usar el valor predeterminado.", "proxyAdditionalSubmit": "Guardar ajustes de proxy", @@ -558,7 +572,7 @@ "rulesMatchType": "Tipo de partida", "value": "Valor", "rulesAbout": "Sobre Reglas", - "rulesAboutDescription": "Las reglas le permiten controlar el acceso a su recurso basado en un conjunto de criterios. Puede crear reglas para permitir o denegar el acceso basándose en la dirección IP o ruta de la URL.", + "rulesAboutDescription": "Las reglas permiten controlar el acceso al recurso basado en un conjunto de criterios. Puede crear reglas para permitir o denegar el acceso basándose en la dirección IP o ruta de la URL.", "rulesActions": "Acciones", "rulesActionAlwaysAllow": "Permitir siempre: pasar todos los métodos de autenticación", "rulesActionAlwaysDeny": "Denegar siempre: Bloquear todas las peticiones; no se puede intentar autenticación", @@ -570,7 +584,7 @@ "rulesEnable": "Activar Reglas", "rulesEnableDescription": "Activar o desactivar la evaluación de reglas para este recurso", "rulesResource": "Configuración de reglas de recursos", - "rulesResourceDescription": "Configurar reglas para controlar el acceso a su recurso", + "rulesResourceDescription": "Configurar reglas para controlar el acceso al recurso", "ruleSubmit": "Añadir Regla", "rulesNoOne": "No hay reglas. Agregue una regla usando el formulario.", "rulesOrder": "Las reglas son evaluadas por prioridad en orden ascendente.", @@ -586,7 +600,7 @@ "none": "Ninguna", "unknown": "Desconocido", "resources": "Recursos", - "resourcesDescription": "Los recursos son proxies para aplicaciones que se ejecutan en su red privada. Cree un recurso para cualquier servicio HTTP/HTTPS o TCP/UDP crudo en su red privada. Cada recurso debe estar conectado a un sitio para permitir una conectividad privada y segura a través de un túnel encriptado de WireGuard.", + "resourcesDescription": "Los recursos son proxies a las aplicaciones que se ejecutan en la red privada. Crea un recurso para cualquier servicio HTTP/HTTPS o TCP/UDP crudo en tu red privada. Cada recurso debe estar conectado a un sitio para permitir una conectividad privada y segura a través de un túnel encriptado de WireGuard.", "resourcesWireGuardConnect": "Conectividad segura con cifrado de Wirex Guard", "resourcesMultipleAuthenticationMethods": "Configurar múltiples métodos de autenticación", "resourcesUsersRolesAccess": "Control de acceso basado en usuarios y roles", @@ -597,7 +611,7 @@ "resourceSelect": "Seleccionar recurso", "shareLinks": "Compartir enlaces", "share": "Enlaces compartibles", - "shareDescription2": "Crea enlaces compartidos con tus recursos. Los enlaces proporcionan acceso temporal o ilimitado a tu recurso. Puede configurar la duración de caducidad del enlace cuando cree uno.", + "shareDescription2": "Crea enlaces compartidos a recursos. Los enlaces proporcionan acceso temporal o ilimitado a tu recurso. Puede configurar la duración de caducidad del enlace cuando cree uno.", "shareEasyCreate": "Fácil de crear y compartir", "shareConfigurableExpirationDuration": "Duración de caducidad configurable", "shareSecureAndRevocable": "Seguro y revocable", @@ -607,19 +621,19 @@ "unknownCommand": "Comando desconocido", "newtErrorFetchReleases": "No se pudo obtener la información del lanzamiento: {err}", "newtErrorFetchLatest": "Error obteniendo la última versión: {err}", - "newtEndpoint": "Punto final de Newt", - "newtId": "ID de Newt", - "newtSecretKey": "Clave secreta de Newt", + "newtEndpoint": "Endpoint", + "newtId": "ID", + "newtSecretKey": "Secreto", "architecture": "Arquitectura", "sites": "Sitios", - "siteWgAnyClients": "Usa cualquier cliente de Wirex para conectarte. Tendrás que dirigirte a tus recursos internos usando la IP de compañeros.", + "siteWgAnyClients": "Usa cualquier cliente de Wirex para conectarte. Tendrás que dirigirte a los recursos internos usando la IP de compañeros.", "siteWgCompatibleAllClients": "Compatible con todos los clientes de Wirex Guard", "siteWgManualConfigurationRequired": "Configuración manual requerida", "userErrorNotAdminOrOwner": "El usuario no es un administrador o propietario", "pangolinSettings": "Ajustes - Pangolin", "accessRoleYour": "Tu rol:", - "accessRoleSelect2": "Seleccione un rol", - "accessUserSelect": "Seleccione un usuario", + "accessRoleSelect2": "Seleccionar roles", + "accessUserSelect": "Seleccionar usuarios", "otpEmailEnter": "Escribe un email", "otpEmailEnterDescription": "Pulse Enter para añadir un correo electrónico después de teclearlo en el campo de entrada.", "otpEmailErrorInvalid": "Dirección de correo electrónico no válida. El comodín (*) debe ser la parte local completa.", @@ -671,7 +685,7 @@ "resourcePincodeSetupTitle": "Definir Pincode", "resourcePincodeSetupTitleDescription": "Establecer un pincode para proteger este recurso", "resourceRoleDescription": "Los administradores siempre pueden acceder a este recurso.", - "resourceUsersRoles": "Usuarios y roles", + "resourceUsersRoles": "Controles de acceso", "resourceUsersRolesDescription": "Configurar qué usuarios y roles pueden visitar este recurso", "resourceUsersRolesSubmit": "Guardar usuarios y roles", "resourceWhitelistSave": "Guardado correctamente", @@ -702,6 +716,7 @@ "resourceTransferSubmit": "Transferir recursos", "siteDestination": "Sitio de destino", "searchSites": "Buscar sitios", + "countries": "Países", "accessRoleCreate": "Crear rol", "accessRoleCreateDescription": "Crear un nuevo rol para agrupar usuarios y administrar sus permisos.", "accessRoleCreateSubmit": "Crear rol", @@ -766,15 +781,15 @@ "idpOidcConfigure": "Configuración OAuth2/OIDC", "idpOidcConfigureDescription": "Configurar los puntos finales y credenciales del proveedor OAuth2/OIDC", "idpClientId": "ID de cliente", - "idpClientIdDescription": "El ID del cliente OAuth2 de su proveedor de identidad", + "idpClientIdDescription": "El ID del cliente OAuth2 del proveedor de identidad", "idpClientSecret": "Cliente secreto", - "idpClientSecretDescription": "El secreto del cliente OAuth2 de su proveedor de identidad", + "idpClientSecretDescription": "El secreto del cliente OAuth2 del proveedor de identidad", "idpAuthUrl": "URL de autorización", "idpAuthUrlDescription": "La URL final de autorización de OAuth2", "idpTokenUrl": "URL del token", "idpTokenUrlDescription": "La URL del endpoint del token OAuth2", "idpOidcConfigureAlert": "Información importante", - "idpOidcConfigureAlertDescription": "Después de crear el proveedor de identidad, necesitará configurar la URL de callback en la configuración de su proveedor de identidad. La URL de devolución de llamada se proporcionará después de la creación exitosa.", + "idpOidcConfigureAlertDescription": "Después de crear el proveedor de identidad, necesitará configurar la URL de callback en la configuración del proveedor de identidad. La URL de devolución de llamada se proporcionará después de la creación exitosa.", "idpToken": "Configuración del token", "idpTokenDescription": "Configurar cómo extraer la información del usuario del token de ID", "idpJmespathAbout": "Acerca de JMESPath", @@ -791,7 +806,7 @@ "idpSubmit": "Crear proveedor de identidad", "orgPolicies": "Políticas de organización", "idpSettings": "Ajustes {idpName}", - "idpCreateSettingsDescription": "Configurar la configuración de su proveedor de identidad", + "idpCreateSettingsDescription": "Configurar la configuración del proveedor de identidad", "roleMapping": "Mapeo de Rol", "orgMapping": "Mapeo de organización", "orgPoliciesSearch": "Buscar políticas de organización...", @@ -826,7 +841,7 @@ "idpUpdatedDescription": "Proveedor de identidad actualizado correctamente", "redirectUrl": "URL de redirección", "redirectUrlAbout": "Acerca de la URL de redirección", - "redirectUrlAboutDescription": "Esta es la URL a la que los usuarios serán redireccionados después de la autenticación. Necesitas configurar esta URL en la configuración de tu proveedor de identidad.", + "redirectUrlAboutDescription": "Esta es la URL a la que los usuarios serán redireccionados después de la autenticación. Necesitas configurar esta URL en la configuración del proveedor de identidad.", "pangolinAuth": "Autenticación - Pangolin", "verificationCodeLengthRequirements": "Tu código de verificación debe tener 8 caracteres.", "errorOccurred": "Se ha producido un error", @@ -909,6 +924,10 @@ "passwordResetSent": "Enviaremos un código para restablecer la contraseña a esta dirección de correo electrónico.", "passwordResetCode": "Código de restablecimiento", "passwordResetCodeDescription": "Revisa tu correo electrónico para ver el código de restablecimiento.", + "generatePasswordResetCode": "Generar código de restablecimiento de contraseña", + "passwordResetCodeGenerated": "Código de restablecimiento de contraseña generado", + "passwordResetCodeGeneratedDescription": "Comparte este código con el usuario. Pueden usarlo para restablecer su contraseña.", + "passwordResetUrl": "Reset URL", "passwordNew": "Nueva contraseña", "passwordNewConfirm": "Confirmar nueva contraseña", "changePassword": "Cambiar Contraseña", @@ -926,6 +945,9 @@ "pincodeAuth": "Código de autenticación", "pincodeSubmit2": "Enviar código", "passwordResetSubmit": "Reiniciar Solicitud", + "passwordResetAlreadyHaveCode": "Introduzca el código de restablecimiento de contraseña", + "passwordResetSmtpRequired": "Póngase en contacto con su administrador", + "passwordResetSmtpRequiredDescription": "Se requiere un código de restablecimiento de contraseña para restablecer su contraseña. Póngase en contacto con su administrador para obtener asistencia.", "passwordBack": "Volver a la contraseña", "loginBack": "Volver a iniciar sesión", "signup": "Regístrate", @@ -1091,12 +1113,15 @@ "actionListSiteResources": "Listar recursos del sitio", "actionUpdateSiteResource": "Actualizar recurso del sitio", "actionListInvitations": "Listar invitaciones", + "actionExportLogs": "Exportar registros", + "actionViewLogs": "Ver registros", "noneSelected": "Ninguno seleccionado", "orgNotFound2": "No se encontraron organizaciones.", "searchProgress": "Buscar...", "create": "Crear", "orgs": "Organizaciones", "loginError": "Se ha producido un error al iniciar sesión", + "loginRequiredForDevice": "Es necesario iniciar sesión para autenticar tu dispositivo.", "passwordForgot": "¿Olvidaste tu contraseña?", "otpAuth": "Autenticación de dos factores", "otpAuthDescription": "Introduzca el código de su aplicación de autenticación o uno de sus códigos de copia de seguridad de un solo uso.", @@ -1151,19 +1176,29 @@ "sidebarHome": "Inicio", "sidebarSites": "Sitios", "sidebarResources": "Recursos", + "sidebarProxyResources": "Público", + "sidebarClientResources": "Privado", "sidebarAccessControl": "Control de acceso", + "sidebarLogsAndAnalytics": "Registros y análisis", "sidebarUsers": "Usuarios", + "sidebarAdmin": "Admin", "sidebarInvitations": "Invitaciones", "sidebarRoles": "Roles", - "sidebarShareableLinks": "Enlaces compartibles", + "sidebarShareableLinks": "Enlaces", "sidebarApiKeys": "Claves API", "sidebarSettings": "Ajustes", "sidebarAllUsers": "Todos los usuarios", "sidebarIdentityProviders": "Proveedores de identidad", "sidebarLicense": "Licencia", "sidebarClients": "Clientes", + "sidebarUserDevices": "Usuarios", + "sidebarMachineClients": "Máquinas", "sidebarDomains": "Dominios", + "sidebarGeneral": "General", + "sidebarLogAndAnalytics": "Registro y análisis", "sidebarBluePrints": "Planos", + "sidebarOrganization": "Organización", + "sidebarLogsAnalytics": "Analíticas", "blueprints": "Planos", "blueprintsDescription": "Aplicar configuraciones declarativas y ver ejecuciones anteriores", "blueprintAdd": "Añadir plano", @@ -1174,7 +1209,7 @@ "blueprintDetailsDescription": "Ver el resultado del plano aplicado y cualquier error que haya ocurrido", "blueprintInfo": "Información del plano", "message": "Mensaje", - "blueprintContentsDescription": "Defina el contenido YAML describiendo su infraestructura", + "blueprintContentsDescription": "Definir el contenido YAML describiendo la infraestructura", "blueprintErrorCreateDescription": "Se ha producido un error al aplicar el plano", "blueprintErrorCreate": "Error al crear el plano", "searchBlueprintProgress": "Buscar planos...", @@ -1230,15 +1265,15 @@ "loading": "Cargando", "restart": "Reiniciar", "domains": "Dominios", - "domainsDescription": "Administrar dominios de tu organización", + "domainsDescription": "Crear y administrar dominios disponibles en la organización", "domainsSearch": "Buscar dominios...", "domainAdd": "Agregar dominio", - "domainAddDescription": "Registrar un nuevo dominio con tu organización", + "domainAddDescription": "Registrar un nuevo dominio con la organización", "domainCreate": "Crear dominio", "domainCreatedDescription": "Dominio creado con éxito", "domainDeletedDescription": "Dominio eliminado exitosamente", - "domainQuestionRemove": "¿Está seguro que desea eliminar el dominio de su cuenta?", - "domainMessageRemove": "Una vez eliminado, el dominio ya no estará asociado con su cuenta.", + "domainQuestionRemove": "¿Está seguro que desea eliminar el dominio?", + "domainMessageRemove": "Una vez eliminado, el dominio ya no estará asociado a la organización.", "domainConfirmDelete": "Confirmar eliminación del dominio", "domainDelete": "Eliminar dominio", "domain": "Dominio", @@ -1257,7 +1292,7 @@ "pending": "Pendiente", "sidebarBilling": "Facturación", "billing": "Facturación", - "orgBillingDescription": "Gestiona tu información de facturación y suscripciones", + "orgBillingDescription": "Administrar información de facturación y suscripciones", "github": "GitHub", "pangolinHosted": "Pangolin Alojado", "fossorial": "Fossorial", @@ -1285,9 +1320,9 @@ "productUpdateTitle": "Actualizaciones de producto", "productUpdateEmpty": "Sin actualizaciones", "dismissAll": "Descartar todo", - "pangolinUpdateAvailable": "Nueva versión disponible", + "pangolinUpdateAvailable": "Actualización disponible", "pangolinUpdateAvailableInfo": "La versión {version} está lista para instalar", - "pangolinUpdateAvailableReleaseNotes": "Ver notas del lanzamiento", + "pangolinUpdateAvailableReleaseNotes": "Ver notas de lanzamiento", "newtUpdateAvailable": "Nueva actualización disponible", "newtUpdateAvailableInfo": "Hay una nueva versión de Newt disponible. Actualice a la última versión para la mejor experiencia.", "domainPickerEnterDomain": "Dominio", @@ -1300,7 +1335,7 @@ "domainPickerSortAsc": "A-Z", "domainPickerSortDesc": "Z-A", "domainPickerCheckingAvailability": "Comprobando disponibilidad...", - "domainPickerNoMatchingDomains": "No se encontraron dominios que coincidan. Intente con un dominio diferente o verifique la configuración de dominios de su organización.", + "domainPickerNoMatchingDomains": "No se han encontrado dominios coincidentes. Prueba un dominio diferente o comprueba la configuración de dominio de la organización.", "domainPickerOrganizationDomains": "Dominios de la organización", "domainPickerProvidedDomains": "Dominios proporcionados", "domainPickerSubdomain": "Subdominio: {subdomain}", @@ -1334,7 +1369,7 @@ "billingModifySubscription": "Modificar Suscripción", "billingStartSubscription": "Iniciar Suscripción", "billingRecurringCharge": "Cargo Recurrente", - "billingManageSubscriptionSettings": "Administra la configuración y preferencias de tu suscripción", + "billingManageSubscriptionSettings": "Administrar ajustes y preferencias de suscripción", "billingNoActiveSubscription": "No tienes una suscripción activa. Inicia tu suscripción para aumentar los límites de uso.", "billingFailedToLoadSubscription": "Error al cargar la suscripción", "billingFailedToLoadUsage": "Error al cargar el uso", @@ -1345,9 +1380,9 @@ "billingPortalError": "Error del portal", "billingDataUsageInfo": "Se le cobran todos los datos transferidos a través de sus túneles seguros cuando se conectan a la nube. Esto incluye tanto tráfico entrante como saliente a través de todos sus sitios. Cuando alcance su límite, sus sitios se desconectarán hasta que actualice su plan o reduzca el uso. Los datos no se cargan cuando se usan nodos.", "billingOnlineTimeInfo": "Se te cobrará en función del tiempo que tus sitios permanezcan conectados a la nube. Por ejemplo, 44.640 minutos equivale a un sitio que funciona 24/7 durante un mes completo. Cuando alcance su límite, sus sitios se desconectarán hasta que mejore su plan o reduzca el uso. No se cargará el tiempo al usar nodos.", - "billingUsersInfo": "Se te cobra por cada usuario en tu organización. La facturación se calcula diariamente según la cantidad de cuentas de usuario activas en tu organización.", - "billingDomainInfo": "Se te cobra por cada dominio en tu organización. La facturación se calcula diariamente según la cantidad de cuentas de dominio activas en tu organización.", - "billingRemoteExitNodesInfo": "Se te cobra por cada nodo gestionado en tu organización. La facturación se calcula diariamente según la cantidad de nodos gestionados activos en tu organización.", + "billingUsersInfo": "Se le cobra por cada usuario en la organización. La facturación se calcula diariamente según el número de cuentas de usuario activas en su órgano.", + "billingDomainInfo": "Se le cobra por cada dominio en la organización. La facturación se calcula diariamente en función del número de cuentas de dominio activas en su órgano.", + "billingRemoteExitNodesInfo": "Se le cobra por cada nodo administrado en la organización. La facturación se calcula diariamente en función del número de nodos activos gestionados en su órgano.", "domainNotFound": "Dominio no encontrado", "domainNotFoundDescription": "Este recurso está deshabilitado porque el dominio ya no existe en nuestro sistema. Por favor, establece un nuevo dominio para este recurso.", "failed": "Fallido", @@ -1430,29 +1465,32 @@ "and": "y", "privacyPolicy": "política de privacidad" }, + "signUpMarketing": { + "keepMeInTheLoop": "Mantenerme en el bucle con noticias, actualizaciones y nuevas características por correo electrónico." + }, "siteRequired": "El sitio es requerido.", "olmTunnel": "Túnel Olm", "olmTunnelDescription": "Usar Olm para la conectividad del cliente", "errorCreatingClient": "Error al crear el cliente", "clientDefaultsNotFound": "Configuración predeterminada del cliente no encontrada", "createClient": "Crear cliente", - "createClientDescription": "Crear un cliente nuevo para conectar a sus sitios", + "createClientDescription": "Crear un nuevo cliente para acceder a recursos privados", "seeAllClients": "Ver todos los clientes", "clientInformation": "Información del cliente", "clientNamePlaceholder": "Nombre del cliente", "address": "Dirección", "subnetPlaceholder": "Subred", - "addressDescription": "La dirección que este cliente utilizará para la conectividad", + "addressDescription": "La dirección interna del cliente. Debe estar dentro de la subred de la organización.", "selectSites": "Seleccionar sitios", "sitesDescription": "El cliente tendrá conectividad con los sitios seleccionados", "clientInstallOlm": "Instalar Olm", "clientInstallOlmDescription": "Obtén Olm funcionando en tu sistema", - "clientOlmCredentials": "Credenciales Olm", - "clientOlmCredentialsDescription": "Así es como Olm se autentificará con el servidor", - "olmEndpoint": "Punto final Olm", - "olmId": "ID de Olm", - "olmSecretKey": "Clave secreta de Olm", - "clientCredentialsSave": "Guarda tus credenciales", + "clientOlmCredentials": "Credenciales", + "clientOlmCredentialsDescription": "Así es como el cliente se autentificará con el servidor", + "olmEndpoint": "Endpoint", + "olmId": "ID", + "olmSecretKey": "Secreto", + "clientCredentialsSave": "Guardar las credenciales", "clientCredentialsSaveDescription": "Sólo podrás verlo una vez. Asegúrate de copiarlo a un lugar seguro.", "generalSettingsDescription": "Configura la configuración general para este cliente", "clientUpdated": "Cliente actualizado", @@ -1463,9 +1501,7 @@ "sitesFetchError": "Se ha producido un error al recuperar los sitios.", "olmErrorFetchReleases": "Se ha producido un error al recuperar las versiones de Olm.", "olmErrorFetchLatest": "Se ha producido un error al recuperar la última versión de Olm.", - "remoteSubnets": "Subredes remotas", "enterCidrRange": "Ingresa el rango CIDR", - "remoteSubnetsDescription": "Agregue rangos CIDR que se puedan acceder desde este sitio de forma remota usando clientes. Utilice el formato como 10.0.0.0/24. Esto SOLO se aplica a la conectividad del cliente VPN.", "resourceEnableProxy": "Habilitar proxy público", "resourceEnableProxyDescription": "Habilite el proxy público para este recurso. Esto permite el acceso al recurso desde fuera de la red a través de la nube en un puerto abierto. Requiere configuración de Traefik.", "externalProxyEnabled": "Proxy externo habilitado", @@ -1483,14 +1519,15 @@ "enableHealthChecksDescription": "Controlar la salud de este objetivo. Puedes supervisar un punto final diferente al objetivo si es necesario.", "healthScheme": "Método", "healthSelectScheme": "Seleccionar método", + "healthCheckPortInvalid": "El puerto de chequeo de salud debe estar entre 1 y 65535", "healthCheckPath": "Ruta", "healthHostname": "IP / Nombre del host", "healthPort": "Puerto", "healthCheckPathDescription": "La ruta para comprobar el estado de salud.", - "healthyIntervalSeconds": "Intervalo Saludable", - "unhealthyIntervalSeconds": "Intervalo No Saludable", + "healthyIntervalSeconds": "Intervalo saludable (seg)", + "unhealthyIntervalSeconds": "Intervalo poco saludable (seg)", "IntervalSeconds": "Intervalo Saludable", - "timeoutSeconds": "Tiempo de Espera", + "timeoutSeconds": "Tiempo agotado (seg)", "timeIsInSeconds": "El tiempo está en segundos", "retryAttempts": "Intentos de Reintento", "expectedResponseCodes": "Códigos de respuesta esperados", @@ -1526,12 +1563,12 @@ "resourceEditDomain": "Editar dominio", "siteName": "Nombre del sitio", "proxyPort": "Puerto", - "resourcesTableProxyResources": "Recursos de proxy", - "resourcesTableClientResources": "Recursos del cliente", + "resourcesTableProxyResources": "Público", + "resourcesTableClientResources": "Privado", "resourcesTableNoProxyResourcesFound": "No se encontraron recursos de proxy.", "resourcesTableNoInternalResourcesFound": "No se encontraron recursos internos.", "resourcesTableDestination": "Destino", - "resourcesTableTheseResourcesForUseWith": "Estos recursos son para uso con", + "resourcesTableAlias": "Alias", "resourcesTableClients": "Clientes", "resourcesTableAndOnlyAccessibleInternally": "y solo son accesibles internamente cuando se conectan con un cliente.", "resourcesTableNoTargets": "Sin objetivos", @@ -1540,8 +1577,8 @@ "resourcesTableOffline": "Desconectado", "resourcesTableUnknown": "Desconocido", "resourcesTableNotMonitored": "No supervisado", - "editInternalResourceDialogEditClientResource": "Editar recurso del cliente", - "editInternalResourceDialogUpdateResourceProperties": "Actualizar las propiedades del recurso y la configuración del objetivo para {resourceName}.", + "editInternalResourceDialogEditClientResource": "Editar recurso privado", + "editInternalResourceDialogUpdateResourceProperties": "Actualizar la configuración del recurso y los controles de acceso para {resourceName}", "editInternalResourceDialogResourceProperties": "Propiedades del recurso", "editInternalResourceDialogName": "Nombre", "editInternalResourceDialogProtocol": "Protocolo", @@ -1560,11 +1597,22 @@ "editInternalResourceDialogInvalidIPAddressFormat": "Formato de dirección IP inválido", "editInternalResourceDialogDestinationPortMin": "El puerto de destino debe ser al menos 1", "editInternalResourceDialogDestinationPortMax": "El puerto de destino debe ser menor de 65536", + "editInternalResourceDialogPortModeRequired": "Protocolos, puerto proxy y puerto de destino son necesarios para el modo puerto", + "editInternalResourceDialogMode": "Modo", + "editInternalResourceDialogModePort": "Puerto", + "editInternalResourceDialogModeHost": "Anfitrión", + "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogDestination": "Destino", + "editInternalResourceDialogDestinationHostDescription": "La dirección IP o nombre de host del recurso en la red del sitio.", + "editInternalResourceDialogDestinationIPDescription": "La dirección IP o nombre de host del recurso en la red del sitio.", + "editInternalResourceDialogDestinationCidrDescription": "El rango CIDR del recurso en la red del sitio.", + "editInternalResourceDialogAlias": "Alias", + "editInternalResourceDialogAliasDescription": "Un alias DNS interno opcional para este recurso.", "createInternalResourceDialogNoSitesAvailable": "No hay sitios disponibles", "createInternalResourceDialogNoSitesAvailableDescription": "Necesita tener al menos un sitio de Newt con una subred configurada para crear recursos internos.", "createInternalResourceDialogClose": "Cerrar", - "createInternalResourceDialogCreateClientResource": "Crear recurso del cliente", - "createInternalResourceDialogCreateClientResourceDescription": "Crear un nuevo recurso que será accesible para los clientes conectados al sitio seleccionado.", + "createInternalResourceDialogCreateClientResource": "Crear recurso privado", + "createInternalResourceDialogCreateClientResourceDescription": "Crear un nuevo recurso que sólo será accesible a los clientes conectados a la organización", "createInternalResourceDialogResourceProperties": "Propiedades del recurso", "createInternalResourceDialogName": "Nombre", "createInternalResourceDialogSite": "Sitio", @@ -1593,11 +1641,22 @@ "createInternalResourceDialogInvalidIPAddressFormat": "Formato de dirección IP inválido", "createInternalResourceDialogDestinationPortMin": "El puerto de destino debe ser al menos 1", "createInternalResourceDialogDestinationPortMax": "El puerto de destino debe ser menor de 65536", + "createInternalResourceDialogPortModeRequired": "Protocolos, puerto proxy y puerto de destino son necesarios para el modo puerto", + "createInternalResourceDialogMode": "Modo", + "createInternalResourceDialogModePort": "Puerto", + "createInternalResourceDialogModeHost": "Anfitrión", + "createInternalResourceDialogModeCidr": "CIDR", + "createInternalResourceDialogDestination": "Destino", + "createInternalResourceDialogDestinationHostDescription": "La dirección IP o nombre de host del recurso en la red del sitio.", + "createInternalResourceDialogDestinationCidrDescription": "El rango CIDR del recurso en la red del sitio.", + "createInternalResourceDialogAlias": "Alias", + "createInternalResourceDialogAliasDescription": "Un alias DNS interno opcional para este recurso.", "siteConfiguration": "Configuración", "siteAcceptClientConnections": "Aceptar conexiones de clientes", - "siteAcceptClientConnectionsDescription": "Permitir que otros dispositivos se conecten a través de esta instancia Newt como una puerta de enlace utilizando clientes.", - "siteAddress": "Dirección del sitio", - "siteAddressDescription": "Especifique la dirección IP del host que los clientes deben usar para conectarse. Esta es la dirección interna del sitio en la red de Pangolín para que los clientes dirijan. Debe estar dentro de la subred de la organización.", + "siteAcceptClientConnectionsDescription": "Permitir a los dispositivos de usuario y clientes acceder a los recursos de este sitio. Esto se puede cambiar más tarde.", + "siteAddress": "Dirección del sitio (Avanzado)", + "siteAddressDescription": "La dirección interna del sitio. Debe estar dentro de la subred de la organización.", + "siteNameDescription": "El nombre mostrado del sitio que se puede cambiar más adelante.", "autoLoginExternalIdp": "Inicio de sesión automático con IDP externo", "autoLoginExternalIdpDescription": "Redirigir inmediatamente al usuario al IDP externo para autenticación.", "selectIdp": "Seleccionar IDP", @@ -1627,7 +1686,7 @@ "viewAllButton": "Ver todos los nodos", "strategy": { "title": "Estrategia de Creación", - "description": "Elija esto para configurar manualmente su nodo o generar nuevas credenciales.", + "description": "Elija esto para configurar manualmente el nodo o generar nuevas credenciales.", "adopt": { "title": "Adoptar Nodo", "description": "Elija esto si ya tiene las credenciales para el nodo." @@ -1648,7 +1707,7 @@ }, "generate": { "title": "Credenciales Generadas", - "description": "Utilice estas credenciales generadas para configurar su nodo", + "description": "Utilice estas credenciales generadas para configurar el nodo", "nodeIdTitle": "ID del nodo", "secretTitle": "Secreto", "saveCredentialsTitle": "Agregar Credenciales a la Configuración", @@ -1724,16 +1783,16 @@ "idpTypeLabel": "Tipo de proveedor de identidad", "roleMappingExpressionPlaceholder": "e.g., contiene(grupos, 'administrador') && 'administrador' || 'miembro'", "idpGoogleConfiguration": "Configuración de Google", - "idpGoogleConfigurationDescription": "Configura tus credenciales de Google OAuth2", - "idpGoogleClientIdDescription": "Tu ID de cliente de Google OAuth2", - "idpGoogleClientSecretDescription": "Tu secreto de cliente de Google OAuth2", + "idpGoogleConfigurationDescription": "Configurar las credenciales de Google OAuth2", + "idpGoogleClientIdDescription": "Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Secreto del cliente de Google OAuth2", "idpAzureConfiguration": "Configuración de Azure Entra ID", - "idpAzureConfigurationDescription": "Configure sus credenciales de Azure Entra ID OAuth2", + "idpAzureConfigurationDescription": "Configurar credenciales de Azure Entra ID OAuth2", "idpTenantId": "ID del inquilino", - "idpTenantIdPlaceholder": "su-inquilino-id", - "idpAzureTenantIdDescription": "Su ID de inquilino de Azure (encontrado en el resumen de Azure Active Directory)", - "idpAzureClientIdDescription": "Tu ID de Cliente de Registro de Azure App", - "idpAzureClientSecretDescription": "Tu Azure App Registro Cliente secreto", + "idpTenantIdPlaceholder": "tenant-id", + "idpAzureTenantIdDescription": "ID de inquilino Azure (encontrado en la descripción de Azure Active Directory)", + "idpAzureClientIdDescription": "ID de cliente de registro de Azure App", + "idpAzureClientSecretDescription": "Azure App Registro Cliente secreto", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", @@ -1741,14 +1800,14 @@ "idpGoogleConfigurationTitle": "Configuración de Google", "idpAzureConfigurationTitle": "Configuración de Azure Entra ID", "idpTenantIdLabel": "ID del inquilino", - "idpAzureClientIdDescription2": "Tu ID de Cliente de Registro de Azure App", - "idpAzureClientSecretDescription2": "Tu Azure App Registro Cliente secreto", + "idpAzureClientIdDescription2": "ID de cliente de registro de Azure App", + "idpAzureClientSecretDescription2": "Azure App Registro Cliente secreto", "idpGoogleDescription": "Proveedor OAuth2/OIDC de Google", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", "subnet": "Subred", "subnetDescription": "La subred para la configuración de red de esta organización.", "authPage": "Página Auth", - "authPageDescription": "Configurar la página de autenticación de su organización", + "authPageDescription": "Configurar la página de autenticación para la organización", "authPageDomain": "Dominio de la página Auth", "noDomainSet": "Ningún dominio establecido", "changeDomain": "Cambiar dominio", @@ -1758,7 +1817,7 @@ "setAuthPageDomain": "Establecer dominio Auth Page", "failedToFetchCertificate": "Error al obtener el certificado", "failedToRestartCertificate": "Error al reiniciar el certificado", - "addDomainToEnableCustomAuthPages": "Añadir un dominio para habilitar páginas de autenticación personalizadas para su organización", + "addDomainToEnableCustomAuthPages": "Añadir un dominio para habilitar páginas de autenticación personalizadas para la organización", "selectDomainForOrgAuthPage": "Seleccione un dominio para la página de autenticación de la organización", "domainPickerProvidedDomain": "Dominio proporcionado", "domainPickerFreeProvidedDomain": "Dominio proporcionado gratis", @@ -1773,7 +1832,7 @@ "domainPickerInvalidSubdomainCannotMakeValid": "No se ha podido hacer válido \"{sub}\" para {domain}.", "domainPickerSubdomainSanitized": "Subdominio saneado", "domainPickerSubdomainCorrected": "\"{sub}\" fue corregido a \"{sanitized}\"", - "orgAuthSignInTitle": "Inicia sesión en tu organización", + "orgAuthSignInTitle": "Iniciar sesión en la organización", "orgAuthChooseIdpDescription": "Elige tu proveedor de identidad para continuar", "orgAuthNoIdpConfigured": "Esta organización no tiene ningún proveedor de identidad configurado. En su lugar puedes iniciar sesión con tu identidad de Pangolin.", "orgAuthSignInWithPangolin": "Iniciar sesión con Pangolin", @@ -1791,7 +1850,7 @@ "enableTwoFactorAuthentication": "Habilitar autenticación de doble factor", "completeSecuritySteps": "Pasos de seguridad completos", "securitySettings": "Ajustes de seguridad", - "securitySettingsDescription": "Configurar políticas de seguridad para su organización", + "securitySettingsDescription": "Configurar políticas de seguridad para la organización", "requireTwoFactorForAllUsers": "Requiere autenticación de doble factor para todos los usuarios", "requireTwoFactorDescription": "Cuando está activado, todos los usuarios internos de esta organización deben tener habilitada la autenticación de dos factores para acceder a la organización.", "requireTwoFactorDisabledDescription": "Esta característica requiere una licencia válida (Enterprise) o una suscripción activa (SaBudget)", @@ -1854,8 +1913,12 @@ "enterpriseEdition": "Edición corporativa", "unlicensed": "Sin licencia", "beta": "Beta", - "manageClients": "Administrar clientes", - "manageClientsDescription": "Los clientes son dispositivos que pueden conectarse a sus sitios", + "manageUserDevices": "Dispositivos de usuario", + "manageUserDevicesDescription": "Ver y administrar dispositivos que los usuarios utilizan para conectarse a recursos privados", + "manageMachineClients": "Administrar clientes de máquinas", + "manageMachineClientsDescription": "Crear y administrar clientes que servidores y sistemas utilizan para conectarse de forma privada a recursos", + "clientsTableUserClients": "Usuario", + "clientsTableMachineClients": "Maquina", "licenseTableValidUntil": "Válido hasta", "saasLicenseKeysSettingsTitle": "Licencias empresariales", "saasLicenseKeysSettingsDescription": "Generar y administrar claves de licencia Enterprise para instancias Pangolin autoalojadas", @@ -1990,11 +2053,12 @@ "pathRewriteStripLabel": "clip", "sidebarEnableEnterpriseLicense": "Activar licencia corporativa", "cannotbeUndone": "Esto no se puede deshacer.", - "toConfirm": "confirmar", + "toConfirm": "confirmar.", "deleteClientQuestion": "¿Está seguro que desea eliminar el cliente del sitio y la organización?", "clientMessageRemove": "Una vez eliminado, el cliente ya no podrá conectarse al sitio.", "sidebarLogs": "Registros", "request": "Solicitud", + "requests": "Solicitudes", "logs": "Registros", "logsSettingsDescription": "Monitorear registros recogidos de esta orginización", "searchLogs": "Buscar registros...", @@ -2020,6 +2084,7 @@ "ip": "IP", "reason": "Razón", "requestLogs": "Registros de Solicitud", + "requestAnalytics": "Analítica de Solicitud", "host": "Anfitrión", "location": "Ubicación", "actionLogs": "Registros de acción", @@ -2029,6 +2094,7 @@ "logRetention": "Retención de Log", "logRetentionDescription": "Administrar cuánto tiempo se conservan los diferentes tipos de registros para esta organización o desactivarlos", "requestLogsDescription": "Ver registros de solicitudes detallados para los recursos de esta organización", + "requestAnalyticsDescription": "Ver análisis de solicitudes detalladas de recursos en esta organización", "logRetentionRequestLabel": "Retención de Registro de Solicitud", "logRetentionRequestDescription": "Cuánto tiempo conservar los registros de solicitudes", "logRetentionAccessLabel": "Retención de Log de Acceso", @@ -2042,6 +2108,7 @@ "logRetention30Days": "30 días", "logRetention90Days": "90 días", "logRetentionForever": "Para siempre", + "logRetentionEndOfFollowingYear": "Fin del año siguiente", "actionLogsDescription": "Ver un historial de acciones realizadas en esta organización", "accessLogsDescription": "Ver solicitudes de acceso a los recursos de esta organización", "licenseRequiredToUse": "Se requiere una licencia Enterprise para utilizar esta función.", @@ -2052,7 +2119,7 @@ "preferWildcardCert": "Certificado de comodín preferido", "unverified": "Sin verificar", "domainSetting": "Ajustes de dominio", - "domainSettingDescription": "Configurar ajustes para tu dominio", + "domainSettingDescription": "Configurar ajustes para el dominio", "preferWildcardCertDescription": "Intento de generar un certificado comodín (requiere una resolución de certificados correctamente configurada).", "recordName": "Nombre del registro", "auto": "Auto", @@ -2066,15 +2133,15 @@ "olmUpdateAvailableInfo": "Una versión actualizada de Olm está disponible. Por favor, actualice a la última versión para obtener la mejor experiencia.", "client": "Cliente", "proxyProtocol": "Configuración del Protocolo Proxy", - "proxyProtocolDescription": "Configurar el protocolo de proxy para preservar las direcciones IP del cliente para los servicios TCP/UDP.", + "proxyProtocolDescription": "Configurar el protocolo de proxy para preservar las direcciones IP del cliente para los servicios TCP.", "enableProxyProtocol": "Habilitar protocolo proxy", - "proxyProtocolInfo": "Conservar direcciones IP del cliente para backends TCP/UDP", + "proxyProtocolInfo": "Conservar direcciones IP del cliente para backends TCP", "proxyProtocolVersion": "Versión del Protocolo Proxy", "version1": " Versión 1 (Recomendado)", "version2": "Versión 2", "versionDescription": "La versión 1 está basada en texto y es ampliamente soportada. La versión 2 es binaria y más eficiente pero menos compatible.", "warning": "Advertencia", - "proxyProtocolWarning": "Su aplicación de backend debe estar configurada para aceptar conexiones Proxy Protocol. Si su backend no soporta Proxy Protocol, habilitando esto romperá todas las conexiones. Asegúrese de configurar su backend para que confíe en las cabeceras del protocolo Proxy de Traefik.", + "proxyProtocolWarning": "La aplicación backend debe configurarse para aceptar conexiones Proxy Protocol. Si el backend no soporta Proxy Protocol, activarlo romperá todas las conexiones, así que sólo habilítelo si sabe lo que está haciendo. Asegúrese de configurar su backend para que confíe en las cabeceras del protocolo Proxy de Traefik.", "restarting": "Reiniciando...", "manual": "Manual", "messageSupport": "Soporte de mensajes", @@ -2097,6 +2164,43 @@ "supportMessageSent": "¡Mensaje enviado!", "supportWillContact": "¡Estaremos en contacto en breve!", "selectLogRetention": "Seleccionar retención de registro", + "terms": "Términos", + "privacy": "Privacidad", + "security": "Seguridad", + "docs": "Documentos", + "deviceActivation": "Activación del dispositivo", + "deviceCodeInvalidFormat": "El código debe tener 9 caracteres (por ejemplo, A1AJ-N5JD)", + "deviceCodeInvalidOrExpired": "Código no válido o caducado", + "deviceCodeVerifyFailed": "Error al verificar el código del dispositivo", + "signedInAs": "Conectado como", + "deviceCodeEnterPrompt": "Introduzca el código mostrado en el dispositivo", + "continue": "Continuar", + "deviceUnknownLocation": "Ubicación desconocida", + "deviceAuthorizationRequested": "Esta autorización fue solicitada a {location} el {date}. Asegúrate de confiar en este dispositivo ya que tendrá acceso a la cuenta.", + "deviceLabel": "Dispositivo: {deviceName}", + "deviceWantsAccess": "quiere acceder a su cuenta", + "deviceExistingAccess": "Acceso existente:", + "deviceFullAccess": "Acceso total a tu cuenta", + "deviceOrganizationsAccess": "Acceso a todas las organizaciones a las que su cuenta tiene acceso", + "deviceAuthorize": "Autorizar a {applicationName}", + "deviceConnected": "¡Dispositivo conectado!", + "deviceAuthorizedMessage": "El dispositivo está autorizado para acceder a su cuenta.", + "pangolinCloud": "Nube de Pangolin", + "viewDevices": "Ver dispositivos", + "viewDevicesDescription": "Administra tus dispositivos conectados", + "noDevices": "No hay dispositivos", + "dateCreated": "Fecha de creación", + "unnamedDevice": "Dispositivo sin nombre", + "deviceQuestionRemove": "¿Está seguro que desea eliminar este dispositivo?", + "deviceMessageRemove": "Esta acción no se puede deshacer.", + "deviceDeleteConfirm": "Eliminar dispositivo", + "deleteDevice": "Eliminar dispositivo", + "errorLoadingDevices": "Error al cargar dispositivos", + "failedToLoadDevices": "Error al cargar dispositivos", + "deviceDeleted": "Dispositivo eliminado", + "deviceDeletedDescription": "El dispositivo se ha eliminado correctamente.", + "errorDeletingDevice": "Error al eliminar el dispositivo", + "failedToDeleteDevice": "Error al eliminar el dispositivo", "showColumns": "Mostrar columnas", "hideColumns": "Ocultar columnas", "columnVisibility": "Visibilidad de la columna", @@ -2111,10 +2215,14 @@ "enableSelected": "Habilitar seleccionados", "disableSelected": "Desactivar Seleccionado", "checkSelectedStatus": "Comprobar el estado de selección", + "clients": "Clientes", + "accessClientSelect": "Seleccionar clientes de máquina", + "resourceClientDescription": "Clientes de máquina que pueden acceder a este recurso", + "regenerate": "Regenerar", "credentials": "Credenciales", "savecredentials": "Guardar credenciales", - "regeneratecredentials": "Re-clave", - "regenerateCredentials": "Regenerar y guardar tus credenciales", + "regenerateCredentialsButton": "Regenerar credenciales", + "regenerateCredentials": "Regenerar credenciales", "generatedcredentials": "Credenciales generadas", "copyandsavethesecredentials": "Copiar y guardar estas credenciales", "copyandsavethesecredentialsdescription": "Estas credenciales no se mostrarán de nuevo después de salir de esta página. Guárdelas de forma segura ahora.", @@ -2122,13 +2230,12 @@ "credentialsSavedDescription": "Las credenciales se han regenerado y guardado correctamente.", "credentialsSaveError": "Error al guardar las credenciales", "credentialsSaveErrorDescription": "Se ha producido un error al regenerar y guardar las credenciales.", - "regenerateCredentialsWarning": "Regenerar las credenciales invalidará las anteriores. Asegúrese de actualizar cualquier configuración que use estas credenciales.", + "regenerateCredentialsWarning": "Regenerar las credenciales invalidará las anteriores y causará una desconexión. Asegúrese de actualizar cualquier configuración que use estas credenciales.", "confirm": "Confirmar", "regenerateCredentialsConfirmation": "¿Está seguro que desea regenerar las credenciales?", "endpoint": "Endpoint", "Id": "Id", "SecretKey": "Clave secreta", - "featureDisabledTooltip": "Esta característica sólo está disponible en el plan empresarial y requiere una licencia para usarla.", "niceId": "ID bonita", "niceIdUpdated": "Bonito ID actualizado", "niceIdUpdatedSuccessfully": "Bonito ID actualizado correctamente", @@ -2136,5 +2243,32 @@ "niceIdUpdateErrorDescription": "Se ha producido un error al actualizar el ID de Niza.", "niceIdCannotBeEmpty": "El ID de Niza no puede estar vacío", "enterIdentifier": "Introducir identificador", - "identifier": "Identifier" + "identifier": "Identifier", + "deviceLoginUseDifferentAccount": "¿No tú? Utilice una cuenta diferente.", + "deviceLoginDeviceRequestingAccessToAccount": "Un dispositivo está solicitando acceso a esta cuenta.", + "noData": "Sin datos", + "machineClients": "Clientes de la máquina", + "install": "Instalar", + "run": "Ejecutar", + "clientNameDescription": "El nombre mostrado del cliente que se puede cambiar más adelante.", + "clientAddress": "Dirección del cliente (Avanzado)", + "setupFailedToFetchSubnet": "No se pudo obtener la subred por defecto", + "setupSubnetAdvanced": "Subred (Avanzado)", + "setupSubnetDescription": "La subred de la red interna de esta organización.", + "siteRegenerateAndDisconnect": "Regenerar y desconectar", + "siteRegenerateAndDisconnectConfirmation": "¿Está seguro que desea regenerar las credenciales y desconectar este sitio?", + "siteRegenerateAndDisconnectWarning": "Esto regenerará las credenciales y desconectará inmediatamente el sitio. El sitio tendrá que reiniciarse con las nuevas credenciales.", + "siteRegenerateCredentialsConfirmation": "¿Está seguro de que desea regenerar las credenciales de este sitio?", + "siteRegenerateCredentialsWarning": "Esto regenerará las credenciales. El sitio permanecerá conectado hasta que lo reinicie manualmente y utilice las nuevas credenciales.", + "clientRegenerateAndDisconnect": "Regenerar y desconectar", + "clientRegenerateAndDisconnectConfirmation": "¿Está seguro que desea regenerar las credenciales y desconectar este cliente?", + "clientRegenerateAndDisconnectWarning": "Esto regenerará las credenciales y desconectará inmediatamente al cliente. El cliente tendrá que reiniciarse con las nuevas credenciales.", + "clientRegenerateCredentialsConfirmation": "¿Está seguro que desea regenerar las credenciales para este cliente?", + "clientRegenerateCredentialsWarning": "Esto regenerará las credenciales. El cliente permanecerá conectado hasta que lo reinicie manualmente y utilice las nuevas credenciales.", + "remoteExitNodeRegenerateAndDisconnect": "Regenerar y desconectar", + "remoteExitNodeRegenerateAndDisconnectConfirmation": "¿Estás seguro de que quieres regenerar las credenciales y desconectar este nodo de salida remoto?", + "remoteExitNodeRegenerateAndDisconnectWarning": "Esto regenerará las credenciales y desconectará inmediatamente el nodo de salida remoto. El nodo de salida remoto tendrá que reiniciarse con las nuevas credenciales.", + "remoteExitNodeRegenerateCredentialsConfirmation": "¿Estás seguro de que quieres regenerar las credenciales para este nodo de salida remoto?", + "remoteExitNodeRegenerateCredentialsWarning": "Esto regenerará las credenciales. El nodo de salida remoto permanecerá conectado hasta que lo reinicie manualmente y utilice las nuevas credenciales.", + "agent": "Agente" } diff --git a/messages/fr-FR.json b/messages/fr-FR.json index 276fa9bdb..63e2b5d8c 100644 --- a/messages/fr-FR.json +++ b/messages/fr-FR.json @@ -1,12 +1,12 @@ { - "setupCreate": "Créez votre organisation, vos nœuds et vos ressources", + "setupCreate": "Créer l'organisation, le site et les ressources", "setupNewOrg": "Nouvelle organisation", "setupCreateOrg": "Créer une organisation", "setupCreateResources": "Créer des ressources", "setupOrgName": "Nom de l'organisation", - "orgDisplayName": "Ceci est le nom affiché de votre organisation.", + "orgDisplayName": "Ceci est le nom d'affichage de l'organisation.", "orgId": "ID de l'organisation", - "setupIdentifierMessage": "Ceci est l'identifiant unique de votre organisation. Il est différent du nom.", + "setupIdentifierMessage": "C'est l'identifiant unique de l'organisation.", "setupErrorIdentifier": "Cet ID est déjà utilisé. Veuillez en choisir un autre.", "componentsErrorNoMemberCreate": "Vous n'êtes actuellement membre d'aucune organisation. Créez une organisation pour commencer.", "componentsErrorNoMember": "Vous n'êtes actuellement membre d'aucune organisation.", @@ -50,10 +50,10 @@ "siteMessageRemove": "Une fois supprimé, le nœud ne sera plus accessible. Toutes les cibles associées au nœud seront également supprimées.", "siteQuestionRemove": "Êtes-vous sûr de vouloir supprimer ce nœud de l'organisation ?", "siteManageSites": "Gérer les nœuds", - "siteDescription": "Autoriser la connexion à votre réseau via des tunnels sécurisés", + "siteDescription": "Créer et gérer des sites pour activer la connectivité aux réseaux privés", "siteCreate": "Créer un nœud", "siteCreateDescription2": "Suivez les étapes ci-dessous pour créer et connecter un nouveau nœud", - "siteCreateDescription": "Créez un nouveau nœud pour commencer à connecter vos ressources", + "siteCreateDescription": "Créer un nouveau site pour commencer à connecter des ressources", "close": "Fermer", "siteErrorCreate": "Erreur lors de la création du nœud", "siteErrorCreateKeyPair": "Clés ou nœud par défaut introuvable", @@ -74,7 +74,7 @@ "siteInstallNewt": "Installer Newt", "siteInstallNewtDescription": "Faites fonctionner Newt sur votre système", "WgConfiguration": "Configuration WireGuard", - "WgConfigurationDescription": "Utilisez la configuration suivante pour vous connecter à votre réseau", + "WgConfigurationDescription": "Utilisez la configuration suivante pour vous connecter au réseau", "operatingSystem": "Système d'exploitation", "commands": "Commandes", "recommended": "Recommandé", @@ -87,32 +87,32 @@ "siteUpdated": "Nœud mis à jour", "siteUpdatedDescription": "Le nœud a été mis à jour.", "siteGeneralDescription": "Configurer les paramètres par défaut de ce nœud", - "siteSettingDescription": "Configurer les paramètres de votre nœud", + "siteSettingDescription": "Configurer les paramètres du site", "siteSetting": "Paramètres de {siteName}", - "siteNewtTunnel": "Tunnel Newt (Recommandé)", - "siteNewtTunnelDescription": "La façon la plus simple de créer un point d'entrée dans votre réseau. Pas de configuration supplémentaire.", + "siteNewtTunnel": "Site Newt (Recommandé)", + "siteNewtTunnelDescription": "La façon la plus simple de créer un point d'entrée dans n'importe quel réseau. Pas de configuration supplémentaire.", "siteWg": "WireGuard basique", "siteWgDescription": "Utilisez n'importe quel client WireGuard pour établir un tunnel. Configuration NAT manuelle requise.", "siteWgDescriptionSaas": "Utilisez n'importe quel client WireGuard pour établir un tunnel. Configuration NAT manuelle requise.", "siteLocalDescription": "Ressources locales seulement. Pas de tunneling.", "siteLocalDescriptionSaas": "Ressources locales uniquement. Pas de tunneling. Disponible uniquement sur les nœuds distants.", "siteSeeAll": "Voir tous les nœuds", - "siteTunnelDescription": "Déterminez comment vous voulez vous connecter à votre nœud", - "siteNewtCredentials": "Identifiants Newt", - "siteNewtCredentialsDescription": "C'est comme ça que Newt s'authentifiera avec le serveur", - "siteCredentialsSave": "Enregistrez vos identifiants", + "siteTunnelDescription": "Déterminer comment vous voulez vous connecter au site", + "siteNewtCredentials": "Identifiants", + "siteNewtCredentialsDescription": "Voici comment le site s'authentifiera avec le serveur", + "siteCredentialsSave": "Enregistrer les informations d'identification", "siteCredentialsSaveDescription": "Vous ne pourrez voir cela qu'une seule fois. Assurez-vous de l'enregistrer dans un endroit sécurisé.", "siteInfo": "Informations du nœud", "status": "Statut", "shareTitle": "Gérer les liens partageables", - "shareDescription": "Créez des liens partageables pour accorder un accès temporaire ou permanent à vos ressources", + "shareDescription": "Créez des liens partageables pour accorder un accès temporaire ou permanent aux ressources de proxy", "shareSearch": "Rechercher des liens partageables...", "shareCreate": "Créer un lien partageable", "shareErrorDelete": "Impossible de supprimer le lien", "shareErrorDeleteMessage": "Une erreur s'est produite lors de la suppression du lien", "shareDeleted": "Lien supprimé", "shareDeletedDescription": "Le lien a été supprimé", - "shareTokenDescription": "Votre jeton d'accès peut être fourni de deux façons : en tant que paramètre de requête ou dans les en-têtes de la requête. Il doit être transmis par le client à chaque demande d'accès authentifié.", + "shareTokenDescription": "Le jeton d'accès peut être passé de deux façons : en tant que paramètre de requête ou dans les en-têtes de la requête. Elles doivent être transmises par le client à chaque demande d'accès authentifié.", "accessToken": "Jeton d'accès", "usageExamples": "Exemples d'utilisation", "tokenId": "ID du jeton", @@ -121,7 +121,7 @@ "importantNote": "Note importante", "shareImportantDescription": "Pour des raisons de sécurité, l'utilisation des en-têtes est recommandée par rapport aux paramètres de la requête, dans la mesure du possible, car les paramètres de requête peuvent être enregistrés dans les journaux du serveur ou dans l'historique du navigateur.", "token": "Jeton", - "shareTokenSecurety": "Gardez votre jeton d'accès sécurisé. Ne le partagez pas dans des zones accessibles au public ou dans du code côté client.", + "shareTokenSecurety": "Gardez le jeton d'accès sécurisé. Ne le partagez pas dans des zones accessibles au public ou dans du code côté client.", "shareErrorFetchResource": "Impossible de récupérer les ressources", "shareErrorFetchResourceDescription": "Une erreur est survenue lors de la récupération des ressources", "shareErrorCreate": "Impossible de créer le lien partageable", @@ -144,8 +144,10 @@ "expires": "Expire", "never": "Jamais", "shareErrorSelectResource": "Veuillez sélectionner une ressource", - "resourceTitle": "Gérer les ressources", - "resourceDescription": "Créez des proxys sécurisés pour vos applications privées", + "proxyResourceTitle": "Gérer les ressources publiques", + "proxyResourceDescription": "Créer et gérer des ressources accessibles au public via un navigateur web", + "clientResourceTitle": "Gérer les ressources privées", + "clientResourceDescription": "Créer et gérer des ressources qui ne sont accessibles que via un client connecté", "resourcesSearch": "Chercher des ressources...", "resourceAdd": "Ajouter une ressource", "resourceErrorDelte": "Erreur lors de la de suppression de la ressource", @@ -155,9 +157,9 @@ "resourceMessageRemove": "Une fois supprimée, la ressource ne sera plus accessible. Toutes les cibles associées à la ressource seront également supprimées.", "resourceQuestionRemove": "Êtes-vous sûr de vouloir retirer la ressource de l'organisation ?", "resourceHTTP": "Ressource HTTPS", - "resourceHTTPDescription": "Requêtes de proxy vers votre application via HTTPS en utilisant un sous-domaine ou un domaine racine.", + "resourceHTTPDescription": "Requêtes de proxy à l'application via HTTPS en utilisant un sous-domaine ou un domaine de base.", "resourceRaw": "Ressource TCP/UDP brute", - "resourceRawDescription": "Demandes de proxy vers votre application via TCP/UDP en utilisant un port.", + "resourceRawDescription": "Demandes de proxy à l'application via TCP/UDP en utilisant un numéro de port. Cela ne fonctionne que lorsque les sites sont connectés à des nœuds.", "resourceCreate": "Créer une ressource", "resourceCreateDescription": "Suivez les étapes ci-dessous pour créer une nouvelle ressource", "resourceSeeAll": "Voir toutes les ressources", @@ -171,22 +173,22 @@ "noCountryFound": "Aucun pays trouvé.", "siteSelectionDescription": "Ce site fournira la connectivité à la cible.", "resourceType": "Type de ressource", - "resourceTypeDescription": "Détermine comment vous voulez accéder à votre ressource", + "resourceTypeDescription": "Déterminer comment accéder à la ressource", "resourceHTTPSSettings": "Paramètres HTTPS", - "resourceHTTPSSettingsDescription": "Configure comment votre ressource sera accédée via HTTPS", + "resourceHTTPSSettingsDescription": "Configurer comment la ressource sera accédée via HTTPS", "domainType": "Type de domaine", "subdomain": "Sous-domaine", "baseDomain": "Domaine racine", - "subdomnainDescription": "Le sous-domaine depuis lequel cette ressource sera accessible.", + "subdomnainDescription": "Le sous-domaine où la ressource sera accessible.", "resourceRawSettings": "Paramètres TCP/UDP", - "resourceRawSettingsDescription": "Configurer comment votre ressource sera accédée via TCP/UDP. Vous mappez la ressource à un port sur le serveur Pangolin, de sorte que vous puissiez accéder à la ressource depuis ip-publique-du-serveur:port-mappé.", + "resourceRawSettingsDescription": "Configurer comment la ressource sera accédée via TCP/UDP", "protocol": "Protocole", "protocolSelect": "Choisir un protocole", "resourcePortNumber": "Numéro de port", "resourcePortNumberDescription": "Le numéro de port externe pour les requêtes de proxy.", "cancel": "Abandonner", "resourceConfig": "Snippets de configuration", - "resourceConfigDescription": "Copiez et collez ces modules de configuration pour configurer votre ressource TCP/UDP", + "resourceConfigDescription": "Copiez et collez ces extraits de configuration pour configurer la ressource TCP/UDP", "resourceAddEntrypoints": "Traefik: Ajouter des points d'entrée", "resourceExposePorts": "Gerbil: Exposer des ports dans Docker Compose", "resourceLearnRaw": "Apprenez à configurer les ressources TCP/UDP", @@ -202,14 +204,14 @@ "proxy": "Proxy", "internal": "Interne", "rules": "Règles", - "resourceSettingDescription": "Configurer les paramètres de votre ressource", + "resourceSettingDescription": "Configurer les paramètres de la ressource", "resourceSetting": "Réglages de {resourceName}", - "alwaysAllow": "Toujours autoriser", - "alwaysDeny": "Toujours refuser", + "alwaysAllow": "Outrepasser l'authentification", + "alwaysDeny": "Bloquer l'accès", "passToAuth": "Passer à l'authentification", - "orgSettingsDescription": "Configurer les paramètres de votre organisation", + "orgSettingsDescription": "Configurer les paramètres de l'organisation", "orgGeneralSettings": "Paramètres de l'organisation", - "orgGeneralSettingsDescription": "Gérer les détails et la configuration de votre organisation", + "orgGeneralSettingsDescription": "Gérer les détails et la configuration de l'organisation", "saveGeneralSettings": "Enregistrer les paramètres généraux", "saveSettings": "Enregistrer les paramètres", "orgDangerZone": "Zone dangereuse", @@ -232,7 +234,7 @@ "orgMissing": "ID d'organisation manquant", "orgMissingMessage": "Impossible de régénérer l'invitation sans un ID d'organisation.", "accessUsersManage": "Gérer les utilisateurs", - "accessUsersDescription": "Invitez des utilisateurs et ajoutez-les aux rôles pour gérer l'accès à votre organisation", + "accessUsersDescription": "Inviter et gérer les utilisateurs ayant accès à cette organisation", "accessUsersSearch": "Chercher des utilisateurs...", "accessUserCreate": "Créer un utilisateur", "accessUserRemove": "Supprimer un utilisateur", @@ -241,13 +243,13 @@ "role": "Rôle", "nameRequired": "Le nom est requis", "accessRolesManage": "Gérer les rôles", - "accessRolesDescription": "Configurer les rôles pour gérer l'accès à votre organisation", + "accessRolesDescription": "Créer et gérer des rôles pour les utilisateurs de l'organisation", "accessRolesSearch": "Chercher des rôles...", "accessRolesAdd": "Ajouter un rôle", "accessRoleDelete": "Supprimer le rôle", "description": "Libellé", "inviteTitle": "Invitations actives", - "inviteDescription": "Gérez les invitations des autres utilisateurs", + "inviteDescription": "Gérer les invitations des autres utilisateurs à rejoindre l'organisation", "inviteSearch": "Rechercher des invitations...", "minutes": "Minutes", "hours": "Heures", @@ -261,13 +263,13 @@ "apiKeysErrorCreate": "Erreur lors de la création de la clé API", "apiKeysErrorSetPermission": "Erreur lors de la définition des permissions", "apiKeysCreate": "Générer une clé d'API", - "apiKeysCreateDescription": "Générer une nouvelle clé d'API pour votre organisation", + "apiKeysCreateDescription": "Générer une nouvelle clé API pour l'organisation", "apiKeysGeneralSettings": "Permissions", "apiKeysGeneralSettingsDescription": "Déterminez ce que cette clé d\"API peut faire", - "apiKeysList": "Votre clé d\"API", - "apiKeysSave": "Enregistrer votre clé API", + "apiKeysList": "Nouvelle clé API", + "apiKeysSave": "Enregistrer la clé API", "apiKeysSaveDescription": "Vous ne pourrez la voir qu'une seule fois. Assurez-vous de la copier dans un endroit sécurisé.", - "apiKeysInfo": "Votre clé d'API est :", + "apiKeysInfo": "La clé API est :", "apiKeysConfirmCopy": "J'ai copié la clé d\"API", "generate": "Générer", "done": "Terminé", @@ -424,7 +426,7 @@ "userCreated": "Utilisateur créé", "userCreatedDescription": "L'utilisateur a été créé avec succès.", "userTypeInternal": "Utilisateur interne", - "userTypeInternalDescription": "Inviter un utilisateur à rejoindre votre organisation directement.", + "userTypeInternalDescription": "Invitez un utilisateur à rejoindre l'organisation directement.", "userTypeExternal": "Utilisateur externe", "userTypeExternalDescription": "Créer un utilisateur avec un fournisseur d'identité externe.", "accessUserCreateDescription": "Suivez les étapes ci-dessous pour créer un nouvel utilisateur", @@ -436,6 +438,16 @@ "inviteEmailSent": "Envoyer un e-mail d'invitation à l'utilisateur", "inviteValid": "Valide pour", "selectDuration": "Sélectionner la durée", + "selectResource": "Sélectionner une ressource", + "filterByResource": "Filtrer par ressource", + "resetFilters": "Réinitialiser les filtres", + "totalBlocked": "Demandes bloquées par le Pangolin", + "totalRequests": "Total des demandes", + "requestsByCountry": "Requêtes par pays", + "requestsByDay": "Requêtes par jour", + "blocked": "Bloqué", + "allowed": "Autorisé", + "topCountries": "Meilleurs pays", "accessRoleSelect": "Sélectionner un rôle", "inviteEmailSentDescription": "Un e-mail a été envoyé à l'utilisateur avec le lien d'accès ci-dessous. Ils doivent accéder au lien pour accepter l'invitation.", "inviteSentDescription": "L'utilisateur a été invité. Ils doivent accéder au lien ci-dessous pour accepter l'invitation.", @@ -458,13 +470,13 @@ "accessControlsSubmit": "Enregistrer les contrôles d'accès", "roles": "Rôles", "accessUsersRoles": "Gérer les utilisateurs et les rôles", - "accessUsersRolesDescription": "Invitez des utilisateurs et ajoutez-les aux rôles pour gérer l'accès à votre organisation", + "accessUsersRolesDescription": "Invitez des utilisateurs et ajoutez-les aux rôles pour gérer l'accès à l'organisation", "key": "Clé", "createdAt": "Créé le", "proxyErrorInvalidHeader": "Valeur d'en-tête Host personnalisée invalide. Utilisez le format de nom de domaine, ou laissez vide pour désactiver l'en-tête Host personnalisé.", "proxyErrorTls": "Nom de serveur TLS invalide. Utilisez le format de nom de domaine, ou laissez vide pour supprimer le nom de serveur TLS.", "proxyEnableSSL": "Activer SSL", - "proxyEnableSSLDescription": "Activez le cryptage SSL/TLS pour des connexions HTTPS sécurisées vers vos cibles.", + "proxyEnableSSLDescription": "Activer le cryptage SSL/TLS pour des connexions HTTPS sécurisées vers les cibles.", "target": "Cible", "configureTarget": "Configurer les cibles", "targetErrorFetch": "Échec de la récupération des cibles", @@ -480,29 +492,29 @@ "targetsErrorUpdate": "Échec de la mise à jour des cibles", "targetsErrorUpdateDescription": "Une erreur s'est produite lors de la mise à jour des cibles", "targetTlsUpdate": "Paramètres TLS mis à jour", - "targetTlsUpdateDescription": "Vos paramètres TLS ont été mis à jour avec succès", + "targetTlsUpdateDescription": "Les paramètres TLS ont été mis à jour avec succès", "targetErrorTlsUpdate": "Échec de la mise à jour des paramètres TLS", "targetErrorTlsUpdateDescription": "Une erreur s'est produite lors de la mise à jour des paramètres TLS", "proxyUpdated": "Paramètres du proxy mis à jour", - "proxyUpdatedDescription": "Vos paramètres de proxy ont été mis à jour avec succès", + "proxyUpdatedDescription": "Les paramètres du proxy ont été mis à jour avec succès", "proxyErrorUpdate": "Échec de la mise à jour des paramètres du proxy", "proxyErrorUpdateDescription": "Une erreur s'est produite lors de la mise à jour des paramètres du proxy", - "targetAddr": "IP / Nom d'hôte", + "targetAddr": "Hôte", "targetPort": "Port", "targetProtocol": "Protocole", "targetTlsSettings": "Configuration sécurisée de connexion", - "targetTlsSettingsDescription": "Configurer les paramètres SSL/TLS pour votre ressource", + "targetTlsSettingsDescription": "Configurer les paramètres SSL/TLS pour la ressource", "targetTlsSettingsAdvanced": "Paramètres TLS avancés", "targetTlsSni": "Nom du serveur TLS", "targetTlsSniDescription": "Le nom de serveur TLS à utiliser pour SNI. Laissez vide pour utiliser la valeur par défaut.", "targetTlsSubmit": "Enregistrer les paramètres", "targets": "Configuration des cibles", - "targetsDescription": "Configurez les cibles pour router le trafic vers vos services.", + "targetsDescription": "Définir des cibles pour acheminer le trafic vers les services backend", "targetStickySessions": "Activer les sessions persistantes", "targetStickySessionsDescription": "Maintenir les connexions sur la même cible backend pendant toute leur session.", "methodSelect": "Sélectionner la méthode", "targetSubmit": "Ajouter une cible", - "targetNoOne": "Cette ressource n'a aucune cible. Ajoutez une cible pour configurer où envoyer des requêtes à votre backend.", + "targetNoOne": "Cette ressource n'a aucune cible. Ajoutez une cible pour configurer où envoyer des requêtes à l'arrière-plan.", "targetNoOneDescription": "L'ajout de plus d'une cible ci-dessus activera l'équilibrage de charge.", "targetsSubmit": "Enregistrer les cibles", "addTarget": "Ajouter une cible", @@ -516,9 +528,11 @@ "targetCreatedDescription": "La cible a été créée avec succès", "targetErrorCreate": "Impossible de créer la cible", "targetErrorCreateDescription": "Une erreur s'est produite lors de la création de la cible", + "tlsServerName": "Nom du serveur TLS", + "tlsServerNameDescription": "Le nom du serveur TLS à utiliser pour la SNI", "save": "Enregistrer", "proxyAdditional": "Paramètres de proxy supplémentaires", - "proxyAdditionalDescription": "Configurer la façon dont votre ressource gère les paramètres de proxy", + "proxyAdditionalDescription": "Configurer comment la ressource gère les paramètres du proxy", "proxyCustomHeader": "En-tête Host personnalisé", "proxyCustomHeaderDescription": "L'en-tête host à définir lors du proxy des requêtes. Laissez vide pour utiliser la valeur par défaut.", "proxyAdditionalSubmit": "Enregistrer les paramètres de proxy", @@ -558,7 +572,7 @@ "rulesMatchType": "Type de correspondance", "value": "Valeur", "rulesAbout": "À propos des règles", - "rulesAboutDescription": "Les règles vous permettent de contrôler l'accès à votre ressource en fonction d'un ensemble de critères. Vous pouvez créer des règles pour autoriser ou refuser l'accès basé sur l'adresse IP ou le chemin URL.", + "rulesAboutDescription": "Les règles vous permettent de contrôler l'accès à la ressource en fonction d'un ensemble de critères. Vous pouvez créer des règles pour autoriser ou refuser l'accès en fonction de l'adresse IP ou du chemin d'URL.", "rulesActions": "Actions", "rulesActionAlwaysAllow": "Toujours autoriser : Contourner toutes les méthodes d'authentification", "rulesActionAlwaysDeny": "Toujours refuser : Bloquer toutes les requêtes ; aucune authentification ne peut être tentée", @@ -570,7 +584,7 @@ "rulesEnable": "Activer les règles", "rulesEnableDescription": "Activer ou désactiver l'évaluation des règles pour cette ressource", "rulesResource": "Configuration des règles de ressource", - "rulesResourceDescription": "Configurer les règles pour contrôler l'accès à votre ressource", + "rulesResourceDescription": "Configurer les règles pour contrôler l'accès à la ressource", "ruleSubmit": "Ajouter une règle", "rulesNoOne": "Aucune règle. Ajoutez une règle en utilisant le formulaire.", "rulesOrder": "Les règles sont évaluées par priorité dans l'ordre croissant.", @@ -586,7 +600,7 @@ "none": "Aucun", "unknown": "Inconnu", "resources": "Ressources", - "resourcesDescription": "Les ressources sont des proxys vers des applications exécutées sur votre réseau privé. Créez une ressource pour tout service HTTP/HTTPS ou TCP/UDP brut sur votre réseau privé. Chaque ressource doit être connectée à un site pour permettre une connectivité privée et sécurisée via un tunnel WireGuard chiffré.", + "resourcesDescription": "Les ressources sont des proxy pour les applications exécutées sur le réseau privé. Créez une ressource pour tous les services HTTP/HTTPS ou TCP/UDP bruts sur votre réseau privé. Chaque ressource doit être connectée à un site pour permettre une connectivité privée et sécurisée via un tunnel WireGuard chiffré.", "resourcesWireGuardConnect": "Connectivité sécurisée avec chiffrement WireGuard", "resourcesMultipleAuthenticationMethods": "Configurer plusieurs méthodes d'authentification", "resourcesUsersRolesAccess": "Contrôle d'accès basé sur les utilisateurs et les rôles", @@ -597,7 +611,7 @@ "resourceSelect": "Sélectionner une ressource", "shareLinks": "Liens de partage", "share": "Liens partageables", - "shareDescription2": "Créez des liens partageables vers vos ressources. Les liens fournissent un accès temporaire ou illimité à votre ressource. Vous pouvez configurer la durée d'expiration du lien lors de sa création.", + "shareDescription2": "Créez des liens partageables vers des ressources. Les liens fournissent un accès temporaire ou illimité à votre ressource. Vous pouvez configurer la durée d'expiration du lien lorsque vous en créez un.", "shareEasyCreate": "Facile à créer et à partager", "shareConfigurableExpirationDuration": "Durée d'expiration configurable", "shareSecureAndRevocable": "Sécurisé et révocable", @@ -607,19 +621,19 @@ "unknownCommand": "Commande inconnue", "newtErrorFetchReleases": "Échec de la récupération des informations de version : {err}", "newtErrorFetchLatest": "Erreur lors de la récupération de la dernière version : {err}", - "newtEndpoint": "Point de terminaison Newt", - "newtId": "ID Newt", - "newtSecretKey": "Clé secrète Newt", + "newtEndpoint": "Endpoint", + "newtId": "ID", + "newtSecretKey": "Secrète", "architecture": "Architecture", "sites": "Nœuds", - "siteWgAnyClients": "Utilisez n'importe quel client WireGuard pour vous connecter. Vous devrez adresser vos ressources internes en utilisant l'IP du pair.", + "siteWgAnyClients": "Utilisez n'importe quel client WireGuard pour vous connecter. Vous devrez adresser des ressources internes en utilisant l'adresse IP du pair.", "siteWgCompatibleAllClients": "Compatible avec tous les clients WireGuard", "siteWgManualConfigurationRequired": "Configuration manuelle requise", "userErrorNotAdminOrOwner": "L'utilisateur n'est pas un administrateur ou un propriétaire", "pangolinSettings": "Paramètres - Pangolin", "accessRoleYour": "Votre rôle :", - "accessRoleSelect2": "Sélectionner un rôle", - "accessUserSelect": "Sélectionner un utilisateur", + "accessRoleSelect2": "Sélectionner les rôles", + "accessUserSelect": "Sélectionner les utilisateurs", "otpEmailEnter": "Entrer un e-mail", "otpEmailEnterDescription": "Appuyez sur Entrée pour ajouter un e-mail après l'avoir saisi dans le champ.", "otpEmailErrorInvalid": "Adresse e-mail invalide. Le caractère générique (*) doit être la partie locale entière.", @@ -671,7 +685,7 @@ "resourcePincodeSetupTitle": "Définir le code PIN", "resourcePincodeSetupTitleDescription": "Définir un code PIN pour protéger cette ressource", "resourceRoleDescription": "Les administrateurs peuvent toujours accéder à cette ressource.", - "resourceUsersRoles": "Utilisateurs et rôles", + "resourceUsersRoles": "Contrôles d'accès", "resourceUsersRolesDescription": "Configurer quels utilisateurs et rôles peuvent visiter cette ressource", "resourceUsersRolesSubmit": "Enregistrer les utilisateurs et les rôles", "resourceWhitelistSave": "Enregistré avec succès", @@ -702,6 +716,7 @@ "resourceTransferSubmit": "Transférer la ressource", "siteDestination": "Site de destination", "searchSites": "Rechercher des sites", + "countries": "Pays", "accessRoleCreate": "Créer un rôle", "accessRoleCreateDescription": "Créer un nouveau rôle pour regrouper les utilisateurs et gérer leurs permissions.", "accessRoleCreateSubmit": "Créer un rôle", @@ -766,15 +781,15 @@ "idpOidcConfigure": "Configuration OAuth2/OIDC", "idpOidcConfigureDescription": "Configurer les points de terminaison et les identifiants du fournisseur OAuth2/OIDC", "idpClientId": "ID Client", - "idpClientIdDescription": "L'ID client OAuth2 de votre fournisseur d'identité", + "idpClientIdDescription": "L'identifiant client OAuth2 du fournisseur d'identité", "idpClientSecret": "Secret Client", - "idpClientSecretDescription": "Le secret client OAuth2 de votre fournisseur d'identité", + "idpClientSecretDescription": "Le secret du client OAuth2 du fournisseur d'identité", "idpAuthUrl": "URL d'autorisation", "idpAuthUrlDescription": "L'URL du point de terminaison d'autorisation OAuth2", "idpTokenUrl": "URL du jeton", "idpTokenUrlDescription": "L'URL du point de terminaison du jeton OAuth2", "idpOidcConfigureAlert": "Information importante", - "idpOidcConfigureAlertDescription": "Après avoir créé le fournisseur d'identité, vous devrez configurer l'URL de rappel dans les paramètres de votre fournisseur d'identité. L'URL de rappel sera fournie après la création réussie.", + "idpOidcConfigureAlertDescription": "Après avoir créé le fournisseur d'identité, vous devrez configurer l'URL de rappel dans les paramètres du fournisseur d'identité. L'URL de rappel sera fournie après la création réussie.", "idpToken": "Configuration du jeton", "idpTokenDescription": "Configurer comment extraire les informations utilisateur du jeton ID", "idpJmespathAbout": "À propos de JMESPath", @@ -791,7 +806,7 @@ "idpSubmit": "Créer le fournisseur d'identité", "orgPolicies": "Politiques d'organisation", "idpSettings": "Paramètres de {idpName}", - "idpCreateSettingsDescription": "Configurer les paramètres de votre fournisseur d'identité", + "idpCreateSettingsDescription": "Configurer les paramètres du fournisseur d'identité", "roleMapping": "Mappage des rôles", "orgMapping": "Mappage d'organisation", "orgPoliciesSearch": "Rechercher des politiques d'organisation...", @@ -826,7 +841,7 @@ "idpUpdatedDescription": "Fournisseur d'identité mis à jour avec succès", "redirectUrl": "URL de redirection", "redirectUrlAbout": "À propos de l'URL de redirection", - "redirectUrlAboutDescription": "C'est l'URL vers laquelle les utilisateurs seront redirigés après l'authentification. Vous devez configurer cette URL dans les paramètres de votre fournisseur d'identité.", + "redirectUrlAboutDescription": "C'est l'URL vers laquelle les utilisateurs seront redirigés après l'authentification. Vous devez configurer cette URL dans les paramètres du fournisseur d'identité.", "pangolinAuth": "Auth - Pangolin", "verificationCodeLengthRequirements": "Votre code de vérification doit comporter 8 caractères.", "errorOccurred": "Une erreur s'est produite", @@ -909,6 +924,10 @@ "passwordResetSent": "Nous allons envoyer un code de réinitialisation à cette adresse e-mail.", "passwordResetCode": "Code de réinitialisation", "passwordResetCodeDescription": "Vérifiez votre e-mail pour le code de réinitialisation.", + "generatePasswordResetCode": "Générer le code de réinitialisation du mot de passe", + "passwordResetCodeGenerated": "Code de réinitialisation du mot de passe généré", + "passwordResetCodeGeneratedDescription": "Partagez ce code avec l'utilisateur. Il peut l'utiliser pour réinitialiser son mot de passe.", + "passwordResetUrl": "Reset URL", "passwordNew": "Nouveau mot de passe", "passwordNewConfirm": "Confirmer le nouveau mot de passe", "changePassword": "Changer le mot de passe", @@ -926,6 +945,9 @@ "pincodeAuth": "Code d'authentification", "pincodeSubmit2": "Soumettre le code", "passwordResetSubmit": "Demander la réinitialisation", + "passwordResetAlreadyHaveCode": "Entrez le code de réinitialisation du mot de passe", + "passwordResetSmtpRequired": "Veuillez contacter votre administrateur", + "passwordResetSmtpRequiredDescription": "Un code de réinitialisation du mot de passe est requis pour réinitialiser votre mot de passe. Veuillez contacter votre administrateur pour obtenir de l'aide.", "passwordBack": "Retour au mot de passe", "loginBack": "Retour à la connexion", "signup": "S'inscrire", @@ -1091,12 +1113,15 @@ "actionListSiteResources": "Lister les ressources de site", "actionUpdateSiteResource": "Mettre à jour une ressource de site", "actionListInvitations": "Lister les invitations", + "actionExportLogs": "Exporter les journaux", + "actionViewLogs": "Voir les logs", "noneSelected": "Aucune sélection", "orgNotFound2": "Aucune organisation trouvée.", "searchProgress": "Rechercher...", "create": "Créer", "orgs": "Organisations", "loginError": "Une erreur s'est produite lors de la connexion", + "loginRequiredForDevice": "La connexion est requise pour authentifier votre appareil.", "passwordForgot": "Mot de passe oublié ?", "otpAuth": "Authentification à deux facteurs", "otpAuthDescription": "Entrez le code de votre application d'authentification ou l'un de vos codes de secours à usage unique.", @@ -1151,19 +1176,29 @@ "sidebarHome": "Domicile", "sidebarSites": "Nœuds", "sidebarResources": "Ressource", + "sidebarProxyResources": "Publique", + "sidebarClientResources": "Privé", "sidebarAccessControl": "Contrôle d'accès", + "sidebarLogsAndAnalytics": "Journaux & Analytiques", "sidebarUsers": "Utilisateurs", + "sidebarAdmin": "Administrateur", "sidebarInvitations": "Invitations", "sidebarRoles": "Rôles", - "sidebarShareableLinks": "Liens partagables", + "sidebarShareableLinks": "Liens", "sidebarApiKeys": "Clés API", "sidebarSettings": "Réglages", "sidebarAllUsers": "Tous les utilisateurs", "sidebarIdentityProviders": "Fournisseurs d'identité", "sidebarLicense": "Licence", "sidebarClients": "Clients", + "sidebarUserDevices": "Utilisateurs", + "sidebarMachineClients": "Machines", "sidebarDomains": "Domaines", + "sidebarGeneral": "Généraux", + "sidebarLogAndAnalytics": "Journaux & Analytiques", "sidebarBluePrints": "Configs", + "sidebarOrganization": "Organisation", + "sidebarLogsAnalytics": "Analyses", "blueprints": "Configs", "blueprintsDescription": "Appliquer les configurations déclaratives et afficher les exécutions précédentes", "blueprintAdd": "Ajouter une Config", @@ -1174,7 +1209,7 @@ "blueprintDetailsDescription": "Voir le résultat du plan appliqué et les erreurs qui se sont produites", "blueprintInfo": "Informations sur la Config", "message": "Message", - "blueprintContentsDescription": "Définissez le contenu YAML décrivant votre infrastructure", + "blueprintContentsDescription": "Définir le contenu YAML décrivant l'infrastructure", "blueprintErrorCreateDescription": "Une erreur s'est produite lors de l'application de la config", "blueprintErrorCreate": "Erreur lors de la création de la config", "searchBlueprintProgress": "Rechercher des configs...", @@ -1230,15 +1265,15 @@ "loading": "Chargement", "restart": "Redémarrer", "domains": "Domaines", - "domainsDescription": "Gérer les domaines de votre organisation", + "domainsDescription": "Créer et gérer les domaines disponibles dans l'organisation", "domainsSearch": "Rechercher des domaines...", "domainAdd": "Ajouter un domaine", - "domainAddDescription": "Enregistrez un nouveau domaine avec votre organisation", + "domainAddDescription": "Inscrire un nouveau domaine à l'organisation", "domainCreate": "Créer un domaine", "domainCreatedDescription": "Domaine créé avec succès", "domainDeletedDescription": "Domaine supprimé avec succès", - "domainQuestionRemove": "Êtes-vous sûr de vouloir supprimer le domaine de votre compte ?", - "domainMessageRemove": "Une fois supprimé, le domaine ne sera plus associé à votre compte.", + "domainQuestionRemove": "Êtes-vous sûr de vouloir supprimer le domaine ?", + "domainMessageRemove": "Une fois supprimé, le domaine ne sera plus associé à l'organisation.", "domainConfirmDelete": "Confirmer la suppression du domaine", "domainDelete": "Supprimer le domaine", "domain": "Domaine", @@ -1257,7 +1292,7 @@ "pending": "En attente", "sidebarBilling": "Facturation", "billing": "Facturation", - "orgBillingDescription": "Gérez vos informations de facturation et vos abonnements", + "orgBillingDescription": "Gérer les informations de facturation et les abonnements", "github": "GitHub", "pangolinHosted": "Pangolin Hébergement", "fossorial": "Fossorial", @@ -1287,7 +1322,7 @@ "dismissAll": "Tout cacher", "pangolinUpdateAvailable": "Mise à jour disponible", "pangolinUpdateAvailableInfo": "La version {version} est prête à être installée", - "pangolinUpdateAvailableReleaseNotes": "Voir les notes de version", + "pangolinUpdateAvailableReleaseNotes": "Voir les notes de publication", "newtUpdateAvailable": "Mise à jour disponible", "newtUpdateAvailableInfo": "Une nouvelle version de Newt est disponible. Veuillez mettre à jour vers la dernière version pour une meilleure expérience.", "domainPickerEnterDomain": "Domaine", @@ -1300,7 +1335,7 @@ "domainPickerSortAsc": "A-Z", "domainPickerSortDesc": "Z-A", "domainPickerCheckingAvailability": "Vérification de la disponibilité...", - "domainPickerNoMatchingDomains": "Aucun domaine correspondant trouvé. Essayez un autre domaine ou vérifiez les paramètres de domaine de votre organisation.", + "domainPickerNoMatchingDomains": "Aucun domaine correspondant trouvé. Essayez un autre domaine ou vérifiez les paramètres de domaine de l'organisation.", "domainPickerOrganizationDomains": "Domaines de l'organisation", "domainPickerProvidedDomains": "Domaines fournis", "domainPickerSubdomain": "Sous-domaine : {subdomain}", @@ -1334,7 +1369,7 @@ "billingModifySubscription": "Modifier l'abonnement", "billingStartSubscription": "Démarrer l'abonnement", "billingRecurringCharge": "Frais récurrents", - "billingManageSubscriptionSettings": "Gérez les paramètres et préférences de votre abonnement", + "billingManageSubscriptionSettings": "Gérer les paramètres et préférences d'abonnement", "billingNoActiveSubscription": "Vous n'avez pas d'abonnement actif. Commencez votre abonnement pour augmenter les limites d'utilisation.", "billingFailedToLoadSubscription": "Échec du chargement de l'abonnement", "billingFailedToLoadUsage": "Échec du chargement de l'utilisation", @@ -1345,9 +1380,9 @@ "billingPortalError": "Erreur du portail", "billingDataUsageInfo": "Vous êtes facturé pour toutes les données transférées via vos tunnels sécurisés lorsque vous êtes connecté au cloud. Cela inclut le trafic entrant et sortant sur tous vos sites. Lorsque vous atteignez votre limite, vos sites se déconnecteront jusqu'à ce que vous mettiez à niveau votre plan ou réduisiez l'utilisation. Les données ne sont pas facturées lors de l'utilisation de nœuds.", "billingOnlineTimeInfo": "Vous êtes facturé en fonction de la durée de connexion de vos sites au cloud. Par exemple, 44 640 minutes équivaut à un site fonctionnant 24/7 pendant un mois complet. Lorsque vous atteignez votre limite, vos sites se déconnecteront jusqu'à ce que vous mettiez à niveau votre forfait ou réduisiez votre consommation. Le temps n'est pas facturé lors de l'utilisation de nœuds.", - "billingUsersInfo": "Vous êtes facturé pour chaque utilisateur dans votre organisation. La facturation est calculée quotidiennement en fonction du nombre de comptes utilisateurs actifs dans votre organisation.", - "billingDomainInfo": "Vous êtes facturé pour chaque domaine dans votre organisation. La facturation est calculée quotidiennement en fonction du nombre de comptes de domaine actifs dans votre organisation.", - "billingRemoteExitNodesInfo": "Vous êtes facturé pour chaque nœud géré dans votre organisation. La facturation est calculée quotidiennement en fonction du nombre de nœuds gérés actifs dans votre organisation.", + "billingUsersInfo": "Vous êtes facturé pour chaque utilisateur de l'organisation. La facturation est calculée quotidiennement en fonction du nombre de comptes d'utilisateurs actifs dans votre organisation.", + "billingDomainInfo": "Vous êtes facturé pour chaque domaine de l'organisation. La facturation est calculée quotidiennement en fonction du nombre de comptes de domaine actifs dans votre organisation.", + "billingRemoteExitNodesInfo": "Vous êtes facturé pour chaque noeud géré dans l'organisation. La facturation est calculée quotidiennement en fonction du nombre de nœuds gérés actifs dans votre organisation.", "domainNotFound": "Domaine introuvable", "domainNotFoundDescription": "Cette ressource est désactivée car le domaine n'existe plus dans notre système. Veuillez définir un nouveau domaine pour cette ressource.", "failed": "Échec", @@ -1430,29 +1465,32 @@ "and": "et", "privacyPolicy": "la politique de confidentialité" }, + "signUpMarketing": { + "keepMeInTheLoop": "Gardez-moi dans la boucle avec des nouvelles, des mises à jour et de nouvelles fonctionnalités par courriel." + }, "siteRequired": "Le site est requis.", "olmTunnel": "Tunnel Olm", "olmTunnelDescription": "Utilisez Olm pour la connectivité client", "errorCreatingClient": "Erreur lors de la création du client", "clientDefaultsNotFound": "Les paramètres par défaut du client sont introuvables", "createClient": "Créer un client", - "createClientDescription": "Créez un nouveau client pour vous connecter à vos sites", + "createClientDescription": "Créer un nouveau client pour accéder aux ressources privées", "seeAllClients": "Voir tous les clients", "clientInformation": "Informations client", "clientNamePlaceholder": "Nom du client", "address": "Adresse", "subnetPlaceholder": "Sous-réseau", - "addressDescription": "L'adresse que ce client utilisera pour la connectivité", + "addressDescription": "L'adresse interne du client. Doit être dans le sous-réseau de l'organisation.", "selectSites": "Sélectionner des sites", "sitesDescription": "Le client aura une connectivité vers les sites sélectionnés", "clientInstallOlm": "Installer Olm", "clientInstallOlmDescription": "Faites fonctionner Olm sur votre système", - "clientOlmCredentials": "Identifiants Olm", - "clientOlmCredentialsDescription": "C'est ainsi qu'Olm s'authentifiera auprès du serveur", - "olmEndpoint": "Point de terminaison Olm", - "olmId": "ID Olm", - "olmSecretKey": "Clé secrète Olm", - "clientCredentialsSave": "Enregistrez vos identifiants", + "clientOlmCredentials": "Identifiants", + "clientOlmCredentialsDescription": "C'est ainsi que le client s'authentifie avec le serveur", + "olmEndpoint": "Endpoint", + "olmId": "ID", + "olmSecretKey": "Secrète", + "clientCredentialsSave": "Enregistrer les informations d'identification", "clientCredentialsSaveDescription": "Vous ne pourrez voir cela qu'une seule fois. Assurez-vous de la copier dans un endroit sécurisé.", "generalSettingsDescription": "Configurez les paramètres généraux pour ce client", "clientUpdated": "Client mis à jour", @@ -1463,9 +1501,7 @@ "sitesFetchError": "Une erreur s'est produite lors de la récupération des sites.", "olmErrorFetchReleases": "Une erreur s'est produite lors de la récupération des versions d'Olm.", "olmErrorFetchLatest": "Une erreur s'est produite lors de la récupération de la dernière version d'Olm.", - "remoteSubnets": "Sous-réseaux distants", "enterCidrRange": "Entrez la plage CIDR", - "remoteSubnetsDescription": "Ajoutez des plages CIDR accessibles à distance depuis ce site à l'aide de clients. Utilisez le format comme 10.0.0.0/24. Cela s'applique UNIQUEMENT à la connectivité des clients VPN.", "resourceEnableProxy": "Activer le proxy public", "resourceEnableProxyDescription": "Activez le proxy public vers cette ressource. Cela permet d'accéder à la ressource depuis l'extérieur du réseau via le cloud sur un port ouvert. Nécessite la configuration de Traefik.", "externalProxyEnabled": "Proxy externe activé", @@ -1483,14 +1519,15 @@ "enableHealthChecksDescription": "Surveiller la vie de cette cible. Vous pouvez surveiller un point de terminaison différent de la cible si nécessaire.", "healthScheme": "Méthode", "healthSelectScheme": "Sélectionnez la méthode", + "healthCheckPortInvalid": "Le port du bilan de santé doit être compris entre 1 et 65535", "healthCheckPath": "Chemin d'accès", "healthHostname": "IP / Hôte", "healthPort": "Port", "healthCheckPathDescription": "Le chemin à vérifier pour le statut de santé.", - "healthyIntervalSeconds": "Intervalle sain", - "unhealthyIntervalSeconds": "Intervalle en mauvaise santé", + "healthyIntervalSeconds": "Intervalle de santé (sec)", + "unhealthyIntervalSeconds": "Intervalle malsain (sec)", "IntervalSeconds": "Intervalle sain", - "timeoutSeconds": "Délai", + "timeoutSeconds": "Délai d'attente (sec)", "timeIsInSeconds": "Le temps est exprimé en secondes", "retryAttempts": "Tentatives de réessai", "expectedResponseCodes": "Codes de réponse attendus", @@ -1526,12 +1563,12 @@ "resourceEditDomain": "Modifier le domaine", "siteName": "Nom du site", "proxyPort": "Port", - "resourcesTableProxyResources": "Ressources proxy", - "resourcesTableClientResources": "Ressources client", + "resourcesTableProxyResources": "Publique", + "resourcesTableClientResources": "Privé", "resourcesTableNoProxyResourcesFound": "Aucune ressource proxy trouvée.", "resourcesTableNoInternalResourcesFound": "Aucune ressource interne trouvée.", "resourcesTableDestination": "Destination", - "resourcesTableTheseResourcesForUseWith": "Ces ressources sont à utiliser avec", + "resourcesTableAlias": "Alias", "resourcesTableClients": "Clients", "resourcesTableAndOnlyAccessibleInternally": "et sont uniquement accessibles en interne lorsqu'elles sont connectées avec un client.", "resourcesTableNoTargets": "Aucune cible", @@ -1540,8 +1577,8 @@ "resourcesTableOffline": "Hors ligne", "resourcesTableUnknown": "Inconnu", "resourcesTableNotMonitored": "Non-monitoré", - "editInternalResourceDialogEditClientResource": "Modifier la ressource client", - "editInternalResourceDialogUpdateResourceProperties": "Mettez à jour les propriétés de la ressource et la configuration de la cible pour {resourceName}.", + "editInternalResourceDialogEditClientResource": "Modifier une ressource privée", + "editInternalResourceDialogUpdateResourceProperties": "Mettre à jour la configuration de la ressource et les contrôles d'accès pour {resourceName}", "editInternalResourceDialogResourceProperties": "Propriétés de la ressource", "editInternalResourceDialogName": "Nom", "editInternalResourceDialogProtocol": "Protocole", @@ -1560,11 +1597,22 @@ "editInternalResourceDialogInvalidIPAddressFormat": "Format d'adresse IP invalide", "editInternalResourceDialogDestinationPortMin": "Le port de destination doit être d'au moins 1", "editInternalResourceDialogDestinationPortMax": "Le port de destination doit être inférieur à 65536", + "editInternalResourceDialogPortModeRequired": "Protocole, port proxy et port de destination sont requis pour le mode port", + "editInternalResourceDialogMode": "Mode", + "editInternalResourceDialogModePort": "Port", + "editInternalResourceDialogModeHost": "Hôte", + "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogDestination": "Destination", + "editInternalResourceDialogDestinationHostDescription": "L'adresse IP ou le nom d'hôte de la ressource sur le réseau du site.", + "editInternalResourceDialogDestinationIPDescription": "L'adresse IP ou le nom d'hôte de la ressource sur le réseau du site.", + "editInternalResourceDialogDestinationCidrDescription": "La gamme CIDR de la ressource sur le réseau du site.", + "editInternalResourceDialogAlias": "Alias", + "editInternalResourceDialogAliasDescription": "Un alias DNS interne optionnel pour cette ressource.", "createInternalResourceDialogNoSitesAvailable": "Aucun site disponible", "createInternalResourceDialogNoSitesAvailableDescription": "Vous devez avoir au moins un site Newt avec un sous-réseau configuré pour créer des ressources internes.", "createInternalResourceDialogClose": "Fermer", - "createInternalResourceDialogCreateClientResource": "Créer une ressource client", - "createInternalResourceDialogCreateClientResourceDescription": "Créez une ressource accessible aux clients connectés au site sélectionné.", + "createInternalResourceDialogCreateClientResource": "Créer une ressource privée", + "createInternalResourceDialogCreateClientResourceDescription": "Créer une nouvelle ressource qui ne sera accessible qu'aux clients connectés à l'organisation", "createInternalResourceDialogResourceProperties": "Propriétés de la ressource", "createInternalResourceDialogName": "Nom", "createInternalResourceDialogSite": "Site", @@ -1593,11 +1641,22 @@ "createInternalResourceDialogInvalidIPAddressFormat": "Format d'adresse IP invalide", "createInternalResourceDialogDestinationPortMin": "Le port de destination doit être d'au moins 1", "createInternalResourceDialogDestinationPortMax": "Le port de destination doit être inférieur à 65536", + "createInternalResourceDialogPortModeRequired": "Protocole, port proxy et port de destination sont requis pour le mode port", + "createInternalResourceDialogMode": "Mode", + "createInternalResourceDialogModePort": "Port", + "createInternalResourceDialogModeHost": "Hôte", + "createInternalResourceDialogModeCidr": "CIDR", + "createInternalResourceDialogDestination": "Destination", + "createInternalResourceDialogDestinationHostDescription": "L'adresse IP ou le nom d'hôte de la ressource sur le réseau du site.", + "createInternalResourceDialogDestinationCidrDescription": "La gamme CIDR de la ressource sur le réseau du site.", + "createInternalResourceDialogAlias": "Alias", + "createInternalResourceDialogAliasDescription": "Un alias DNS interne optionnel pour cette ressource.", "siteConfiguration": "Configuration", "siteAcceptClientConnections": "Accepter les connexions client", - "siteAcceptClientConnectionsDescription": "Permet à d'autres appareils de se connecter via cette instance de Newt en tant que passerelle utilisant des clients.", - "siteAddress": "Adresse du site", - "siteAddressDescription": "Spécifiez l'adresse IP de l'hôte pour que les clients puissent s'y connecter. C'est l'adresse interne du site dans le réseau Pangolin pour que les clients puissent s'adresser. Doit être dans le sous-réseau de l'organisation.", + "siteAcceptClientConnectionsDescription": "Autoriser les utilisateurs et les clients à accéder aux ressources de ce site. Cela peut être modifié plus tard.", + "siteAddress": "Adresse du site (Avancé)", + "siteAddressDescription": "L'adresse interne du site. Doit être dans le sous-réseau de l'organisation.", + "siteNameDescription": "Le nom d'affichage du site qui peut être modifié plus tard.", "autoLoginExternalIdp": "Connexion automatique avec IDP externe", "autoLoginExternalIdpDescription": "Rediriger immédiatement l'utilisateur vers l'IDP externe pour l'authentification.", "selectIdp": "Sélectionner l'IDP", @@ -1611,7 +1670,7 @@ "autoLoginErrorNoRedirectUrl": "Aucune URL de redirection reçue du fournisseur d'identité.", "autoLoginErrorGeneratingUrl": "Échec de la génération de l'URL d'authentification.", "remoteExitNodeManageRemoteExitNodes": "Nœuds distants", - "remoteExitNodeDescription": "Héberger un ou plusieurs nœuds distants pour étendre votre connectivité réseau et réduire la dépendance sur le cloud", + "remoteExitNodeDescription": "Héberger un ou plusieurs nœuds distants pour étendre la connectivité réseau et réduire la dépendance sur le cloud", "remoteExitNodes": "Nœuds", "searchRemoteExitNodes": "Rechercher des nœuds...", "remoteExitNodeAdd": "Ajouter un noeud", @@ -1623,11 +1682,11 @@ "sidebarRemoteExitNodes": "Nœuds distants", "remoteExitNodeCreate": { "title": "Créer un noeud", - "description": "Créer un nouveau nœud pour étendre votre connectivité réseau", + "description": "Créer un nouveau nœud pour étendre la connectivité réseau", "viewAllButton": "Voir tous les nœuds", "strategy": { "title": "Stratégie de création", - "description": "Choisissez ceci pour configurer manuellement votre nœud ou générer de nouveaux identifiants.", + "description": "Choisissez ceci pour configurer manuellement le noeud ou générer de nouveaux identifiants.", "adopt": { "title": "Adopter un nœud", "description": "Choisissez ceci si vous avez déjà les identifiants pour le noeud." @@ -1648,7 +1707,7 @@ }, "generate": { "title": "Informations d'identification générées", - "description": "Utilisez ces identifiants générés pour configurer votre noeud", + "description": "Utilisez ces identifiants générés pour configurer le noeud", "nodeIdTitle": "Nœud ID", "secretTitle": "Secret", "saveCredentialsTitle": "Ajouter des identifiants à la config", @@ -1724,16 +1783,16 @@ "idpTypeLabel": "Type de fournisseur d'identité", "roleMappingExpressionPlaceholder": "ex: contenu(groupes) && 'admin' || 'membre'", "idpGoogleConfiguration": "Configuration Google", - "idpGoogleConfigurationDescription": "Configurer vos identifiants Google OAuth2", - "idpGoogleClientIdDescription": "Votre identifiant client Google OAuth2", - "idpGoogleClientSecretDescription": "Votre secret client Google OAuth2", + "idpGoogleConfigurationDescription": "Configurer les identifiants Google OAuth2", + "idpGoogleClientIdDescription": "Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Secret client OAuth2 de Google", "idpAzureConfiguration": "Configuration de l'entra ID Azure", - "idpAzureConfigurationDescription": "Configurer vos identifiants OAuth2 Azure Entra", + "idpAzureConfigurationDescription": "Configurer les identifiants OAuth2 Azure Entra ID", "idpTenantId": "ID du locataire", - "idpTenantIdPlaceholder": "votre-locataire-id", - "idpAzureTenantIdDescription": "Votre ID de locataire Azure (trouvé dans l'aperçu Azure Active Directory)", - "idpAzureClientIdDescription": "Votre ID client d'enregistrement de l'application Azure", - "idpAzureClientSecretDescription": "Le secret de votre client d'enregistrement Azure App", + "idpTenantIdPlaceholder": "tenant-id", + "idpAzureTenantIdDescription": "ID du locataire Azure (trouvé dans l'aperçu Azure Active Directory)", + "idpAzureClientIdDescription": "ID client d'enregistrement de l'application Azure", + "idpAzureClientSecretDescription": "Secret du client d'enregistrement de l'application Azure", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", @@ -1741,14 +1800,14 @@ "idpGoogleConfigurationTitle": "Configuration Google", "idpAzureConfigurationTitle": "Configuration de l'entra ID Azure", "idpTenantIdLabel": "ID du locataire", - "idpAzureClientIdDescription2": "Votre ID client d'enregistrement de l'application Azure", - "idpAzureClientSecretDescription2": "Le secret de votre client d'enregistrement Azure App", + "idpAzureClientIdDescription2": "ID client d'enregistrement de l'application Azure", + "idpAzureClientSecretDescription2": "Secret du client d'enregistrement de l'application Azure", "idpGoogleDescription": "Fournisseur Google OAuth2/OIDC", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", "subnet": "Sous-réseau", "subnetDescription": "Le sous-réseau de la configuration réseau de cette organisation.", "authPage": "Page d'authentification", - "authPageDescription": "Configurer la page d'authentification de votre organisation", + "authPageDescription": "Configurer la page d'authentification de l'organisation", "authPageDomain": "Domaine de la page d'authentification", "noDomainSet": "Aucun domaine défini", "changeDomain": "Changer de domaine", @@ -1758,7 +1817,7 @@ "setAuthPageDomain": "Définir le domaine de la page d'authentification", "failedToFetchCertificate": "Impossible de récupérer le certificat", "failedToRestartCertificate": "Échec du redémarrage du certificat", - "addDomainToEnableCustomAuthPages": "Ajouter un domaine pour activer les pages d'authentification personnalisées pour votre organisation", + "addDomainToEnableCustomAuthPages": "Ajouter un domaine pour activer les pages d'authentification personnalisées pour l'organisation", "selectDomainForOrgAuthPage": "Sélectionnez un domaine pour la page d'authentification de l'organisation", "domainPickerProvidedDomain": "Domaine fourni", "domainPickerFreeProvidedDomain": "Domaine fourni gratuitement", @@ -1773,7 +1832,7 @@ "domainPickerInvalidSubdomainCannotMakeValid": "La «{sub}» n'a pas pu être validée pour {domain}.", "domainPickerSubdomainSanitized": "Sous-domaine nettoyé", "domainPickerSubdomainCorrected": "\"{sub}\" a été corrigé à \"{sanitized}\"", - "orgAuthSignInTitle": "Connectez-vous à votre organisation", + "orgAuthSignInTitle": "Se connecter à l'organisation", "orgAuthChooseIdpDescription": "Choisissez votre fournisseur d'identité pour continuer", "orgAuthNoIdpConfigured": "Cette organisation n'a aucun fournisseur d'identité configuré. Vous pouvez vous connecter avec votre identité Pangolin à la place.", "orgAuthSignInWithPangolin": "Se connecter avec Pangolin", @@ -1791,7 +1850,7 @@ "enableTwoFactorAuthentication": "Activer l'authentification à deux facteurs", "completeSecuritySteps": "Compléter les étapes de sécurité", "securitySettings": "Paramètres de sécurité", - "securitySettingsDescription": "Configurer les politiques de sécurité de votre organisation", + "securitySettingsDescription": "Configurer les politiques de sécurité de l'organisation", "requireTwoFactorForAllUsers": "Exiger une authentification à deux facteurs pour tous les utilisateurs", "requireTwoFactorDescription": "Lorsque cette option est activée, tous les utilisateurs internes de cette organisation doivent avoir l'authentification à deux facteurs pour accéder à l'organisation.", "requireTwoFactorDisabledDescription": "Cette fonctionnalité nécessite une licence valide (Entreprise) ou un abonnement actif (SaaS)", @@ -1854,8 +1913,12 @@ "enterpriseEdition": "Édition Entreprise", "unlicensed": "Sans licence", "beta": "Bêta", - "manageClients": "Gérer les clients", - "manageClientsDescription": "Les clients sont des appareils qui peuvent se connecter à vos sites", + "manageUserDevices": "Périphériques utilisateur", + "manageUserDevicesDescription": "Voir et gérer les appareils que les utilisateurs utilisent pour se connecter en privé aux ressources", + "manageMachineClients": "Gérer les clients de la machine", + "manageMachineClientsDescription": "Créer et gérer des clients que les serveurs et les systèmes utilisent pour se connecter en privé aux ressources", + "clientsTableUserClients": "Utilisateur", + "clientsTableMachineClients": "Machine", "licenseTableValidUntil": "Valable jusqu'au", "saasLicenseKeysSettingsTitle": "Licences Entreprise", "saasLicenseKeysSettingsDescription": "Générer et gérer les clés de licence Entreprise pour les instances Pangolin auto-hébergées", @@ -1990,11 +2053,12 @@ "pathRewriteStripLabel": "bande", "sidebarEnableEnterpriseLicense": "Activer la licence Entreprise", "cannotbeUndone": "Cela ne peut pas être annulé.", - "toConfirm": "pour confirmer", + "toConfirm": "pour confirmer.", "deleteClientQuestion": "Êtes-vous sûr de vouloir supprimer le client du site et de l'organisation ?", "clientMessageRemove": "Une fois supprimé, le client ne pourra plus se connecter au site.", "sidebarLogs": "Journaux", "request": "Demander", + "requests": "Requêtes", "logs": "Journaux", "logsSettingsDescription": "Surveiller les logs collectés à partir de cette organisation", "searchLogs": "Rechercher dans les journaux...", @@ -2020,6 +2084,7 @@ "ip": "IP", "reason": "Raison", "requestLogs": "Journal des requêtes", + "requestAnalytics": "Demander des analyses", "host": "Hôte", "location": "Localisation", "actionLogs": "Journaux des actions", @@ -2029,6 +2094,7 @@ "logRetention": "Journaliser la rétention", "logRetentionDescription": "Gérer la durée de conservation des différents types de logs pour cette organisation ou les désactiver", "requestLogsDescription": "Voir les journaux détaillés des requêtes pour les ressources de cette organisation", + "requestAnalyticsDescription": "Voir les analyses détaillées des demandes pour les ressources de cette organisation", "logRetentionRequestLabel": "Demander la rétention des journaux", "logRetentionRequestDescription": "Durée de conservation des journaux de requêtes", "logRetentionAccessLabel": "Rétention du journal d'accès", @@ -2042,6 +2108,7 @@ "logRetention30Days": "30 jours", "logRetention90Days": "90 jours", "logRetentionForever": "Pour toujours", + "logRetentionEndOfFollowingYear": "Fin de l'année suivante", "actionLogsDescription": "Voir l'historique des actions effectuées dans cette organisation", "accessLogsDescription": "Voir les demandes d'authentification d'accès aux ressources de cette organisation", "licenseRequiredToUse": "Une licence Entreprise est nécessaire pour utiliser cette fonctionnalité.", @@ -2052,7 +2119,7 @@ "preferWildcardCert": "Préférez le certificat Wildcard", "unverified": "Non vérifié", "domainSetting": "Paramètres de domaine", - "domainSettingDescription": "Configurer les paramètres de votre domaine", + "domainSettingDescription": "Configurer les paramètres du domaine", "preferWildcardCertDescription": "Tentative de génération d'un certificat générique (nécessite un résolveur de certificat correctement configuré).", "recordName": "Nom de l'enregistrement", "auto": "Automatique", @@ -2066,15 +2133,15 @@ "olmUpdateAvailableInfo": "Une version mise à jour de Olm est disponible. Veuillez mettre à jour vers la dernière version pour la meilleure expérience.", "client": "Client", "proxyProtocol": "Paramètres du protocole proxy", - "proxyProtocolDescription": "Configurer le protocole Proxy pour préserver les adresses IP du client pour les services TCP/UDP.", + "proxyProtocolDescription": "Configurer le protocole Proxy pour préserver les adresses IP du client pour les services TCP.", "enableProxyProtocol": "Activer le protocole Proxy", - "proxyProtocolInfo": "Conserver les adresses IP du client pour les backends TCP/UDP", + "proxyProtocolInfo": "Conserver les adresses IP du client pour les backends TCP", "proxyProtocolVersion": "Version du protocole proxy", "version1": " Version 1 (Recommandé)", "version2": "Version 2", "versionDescription": "La version 1 est basée sur du texte et est largement supportée. La version 2 est binaire et plus efficace mais moins compatible.", "warning": "Avertissement", - "proxyProtocolWarning": "Votre application backend doit être configurée pour accepter les connexions Proxy Protocol. Si votre backend ne prend pas en charge le protocole Proxy, activer ceci va casser toutes les connexions. Assurez-vous de configurer votre backend pour faire confiance aux en-têtes du protocole Proxy de Traefik.", + "proxyProtocolWarning": "L'application backend doit être configurée pour accepter les connexions Proxy Protocol. Si votre backend ne prend pas en charge le protocole Proxy, l'activation de cette option va perturber toutes les connexions, donc n'activez cette option que si vous savez ce que vous faites. Assurez-vous de configurer votre backend pour faire confiance aux en-têtes du protocole Proxy de Traefik.", "restarting": "Redémarrage...", "manual": "Manuel", "messageSupport": "Soutien aux messages", @@ -2097,6 +2164,43 @@ "supportMessageSent": "Message envoyé !", "supportWillContact": "Nous vous contacterons sous peu!", "selectLogRetention": "Sélectionner la durée de rétention des logs", + "terms": "Conditions générales de vente", + "privacy": "Confidentialité", + "security": "Sécurité", + "docs": "Documents", + "deviceActivation": "Activation de l'appareil", + "deviceCodeInvalidFormat": "Le code doit contenir 9 caractères (par exemple, A1AJ-N5JD)", + "deviceCodeInvalidOrExpired": "Code invalide ou expiré", + "deviceCodeVerifyFailed": "Impossible de vérifier le code de l'appareil", + "signedInAs": "Connecté en tant que", + "deviceCodeEnterPrompt": "Entrez le code affiché sur l'appareil", + "continue": "Continuer", + "deviceUnknownLocation": "Lieu inconnu", + "deviceAuthorizationRequested": "Cette autorisation a été demandée à {location} sur {date}. Assurez-vous que vous faites confiance à cet appareil car il aura accès au compte.", + "deviceLabel": "Appareil : {deviceName}", + "deviceWantsAccess": "veut accéder à votre compte", + "deviceExistingAccess": "Accès existant:", + "deviceFullAccess": "Accès complet à votre compte", + "deviceOrganizationsAccess": "Accès à toutes les organisations auxquelles votre compte a accès", + "deviceAuthorize": "Autoriser {applicationName}", + "deviceConnected": "Appareil connecté !", + "deviceAuthorizedMessage": "L'appareil est autorisé à accéder à votre compte.", + "pangolinCloud": "Nuage de Pangolin", + "viewDevices": "Voir les appareils", + "viewDevicesDescription": "Gérer vos appareils connectés", + "noDevices": "Aucun appareil trouvé", + "dateCreated": "Date de création", + "unnamedDevice": "Appareil sans nom", + "deviceQuestionRemove": "Êtes-vous sûr de vouloir supprimer cet appareil ?", + "deviceMessageRemove": "Cette action ne peut être annulée.", + "deviceDeleteConfirm": "Supprimer l'appareil", + "deleteDevice": "Supprimer l'appareil", + "errorLoadingDevices": "Erreur lors du chargement des appareils", + "failedToLoadDevices": "Impossible de charger les appareils", + "deviceDeleted": "Appareil supprimé", + "deviceDeletedDescription": "L'appareil a été supprimé avec succès.", + "errorDeletingDevice": "Erreur lors de la suppression de l'appareil", + "failedToDeleteDevice": "Échec de la suppression de l'appareil", "showColumns": "Afficher les colonnes", "hideColumns": "Cacher les colonnes", "columnVisibility": "Visibilité des colonnes", @@ -2111,10 +2215,14 @@ "enableSelected": "Activer la sélection", "disableSelected": "Désactiver la sélection", "checkSelectedStatus": "Vérifier le statut de la sélection", + "clients": "Clients", + "accessClientSelect": "Sélectionnez les clients de machine", + "resourceClientDescription": "Les clients qui peuvent accéder à cette ressource", + "regenerate": "Régénérer", "credentials": "Identifiants", "savecredentials": "Enregistrer les identifiants", - "regeneratecredentials": "Re-claver", - "regenerateCredentials": "Régénérer et enregistrer les identifiants", + "regenerateCredentialsButton": "Régénérer les identifiants", + "regenerateCredentials": "Régénérer les identifiants", "generatedcredentials": "Identifiants générés", "copyandsavethesecredentials": "Copier et enregistrer ces identifiants", "copyandsavethesecredentialsdescription": "Ces identifiants ne seront pas affichés à nouveaux une fois cette page fermée. Enregistrez-les maintenant.", @@ -2122,13 +2230,12 @@ "credentialsSavedDescription": "Les identifiants ont été régénérés et enregistrés avec succès.", "credentialsSaveError": "Erreur lors de l'enregistrement des identifiants", "credentialsSaveErrorDescription": "Une erreur s'est produite lors de la régénération et l'enregistrement des identifiants.", - "regenerateCredentialsWarning": "La régénération de ces identifiants invalidera ceux actuellement utilisés. Assurez-vous de mettre à jour toutes les configurations qui les utilisent.", + "regenerateCredentialsWarning": "La régénération des identifiants invalidera les identifiants précédents et provoquera une déconnexion. Assurez-vous de mettre à jour toutes les configurations qui utilisent ces identifiants.", "confirm": "Confirmer", "regenerateCredentialsConfirmation": "Voulez-vous vraiment régénérer les identifiants ?", "endpoint": "Endpoint", "Id": "Id", "SecretKey": "Clé privée", - "featureDisabledTooltip": "Cette fonctionnalité n'est disponible que dans la version entreprise et nécessite une licence pour être utilisée.", "niceId": "Joli ID", "niceIdUpdated": "Joli ID mis à jour", "niceIdUpdatedSuccessfully": "Joli ID mis à jour avec succès", @@ -2136,5 +2243,32 @@ "niceIdUpdateErrorDescription": "Erreur lors de la mise à jour du joli ID.", "niceIdCannotBeEmpty": "Merci de renseigner un joli ID", "enterIdentifier": "Entrez l'identifiant", - "identifier": "Identifiant" + "identifier": "Identifiant", + "deviceLoginUseDifferentAccount": "Pas vous ? Utilisez un autre compte.", + "deviceLoginDeviceRequestingAccessToAccount": "Un appareil demande l'accès à ce compte.", + "noData": "Aucune donnée", + "machineClients": "Clients Machines", + "install": "Installer", + "run": "Exécuter", + "clientNameDescription": "Le nom d'affichage du client qui peut être modifié plus tard.", + "clientAddress": "Adresse du client (Avancé)", + "setupFailedToFetchSubnet": "Impossible de récupérer le sous-réseau par défaut", + "setupSubnetAdvanced": "Sous-réseau (Avancé)", + "setupSubnetDescription": "Le sous-réseau du réseau interne de cette organisation.", + "siteRegenerateAndDisconnect": "Régénérer et déconnecter", + "siteRegenerateAndDisconnectConfirmation": "Êtes-vous sûr de vouloir régénérer les identifiants et déconnecter ce site ?", + "siteRegenerateAndDisconnectWarning": "Cela va régénérer les identifiants et déconnecter immédiatement le site. Le site devra être redémarré avec les nouveaux identifiants.", + "siteRegenerateCredentialsConfirmation": "Êtes-vous sûr de vouloir régénérer les identifiants pour ce site ?", + "siteRegenerateCredentialsWarning": "Cela va régénérer les identifiants. Le site restera connecté jusqu'à ce que vous le redémarriez manuellement et utilisez les nouveaux identifiants.", + "clientRegenerateAndDisconnect": "Régénérer et déconnecter", + "clientRegenerateAndDisconnectConfirmation": "Êtes-vous sûr de vouloir régénérer les identifiants et déconnecter ce client?", + "clientRegenerateAndDisconnectWarning": "Cela va régénérer les identifiants et déconnecter immédiatement le client. Le client devra être redémarré avec les nouveaux identifiants.", + "clientRegenerateCredentialsConfirmation": "Êtes-vous sûr de vouloir régénérer les identifiants pour ce client ?", + "clientRegenerateCredentialsWarning": "Cela va régénérer les identifiants. Le client restera connecté jusqu'à ce que vous le redémarriez manuellement et utilisiez les nouveaux identifiants.", + "remoteExitNodeRegenerateAndDisconnect": "Régénérer et déconnecter", + "remoteExitNodeRegenerateAndDisconnectConfirmation": "Êtes-vous sûr de vouloir régénérer les identifiants et déconnecter ce noeud de sortie distant ?", + "remoteExitNodeRegenerateAndDisconnectWarning": "Cela va régénérer les identifiants et déconnecter immédiatement le noeud de sortie distant. Le noeud de sortie distant devra être redémarré avec les nouveaux identifiants.", + "remoteExitNodeRegenerateCredentialsConfirmation": "Êtes-vous sûr de vouloir régénérer les informations d'identification pour ce noeud de sortie distant ?", + "remoteExitNodeRegenerateCredentialsWarning": "Cela va régénérer les identifiants. Le noeud de sortie distant restera connecté jusqu'à ce que vous le redémarriez manuellement et utilisez les nouveaux identifiants.", + "agent": "Agent" } diff --git a/messages/it-IT.json b/messages/it-IT.json index 08f1e4053..441c96769 100644 --- a/messages/it-IT.json +++ b/messages/it-IT.json @@ -1,12 +1,12 @@ { - "setupCreate": "Crea la tua organizzazione, sito e risorse", + "setupCreate": "Creare l'organizzazione, il sito e le risorse", "setupNewOrg": "Nuova Organizzazione", "setupCreateOrg": "Crea Organizzazione", "setupCreateResources": "Crea Risorse", "setupOrgName": "Nome Dell'Organizzazione", - "orgDisplayName": "Questo è il nome visualizzato della tua organizzazione.", + "orgDisplayName": "Questo è il nome visualizzato dell'organizzazione.", "orgId": "Id Organizzazione", - "setupIdentifierMessage": "Questo è l' identificatore univoco della tua organizzazione. Questo è separato dal nome del display.", + "setupIdentifierMessage": "Questo è l'identificatore univoco per l'organizzazione.", "setupErrorIdentifier": "L'ID dell'organizzazione è già utilizzato. Si prega di sceglierne uno diverso.", "componentsErrorNoMemberCreate": "Al momento non sei un membro di nessuna organizzazione. Crea un'organizzazione per iniziare.", "componentsErrorNoMember": "Attualmente non sei membro di nessuna organizzazione.", @@ -50,10 +50,10 @@ "siteMessageRemove": "Una volta rimosso il sito non sarà più accessibile. Tutti gli obiettivi associati al sito verranno rimossi.", "siteQuestionRemove": "Sei sicuro di voler rimuovere il sito dall'organizzazione?", "siteManageSites": "Gestisci Siti", - "siteDescription": "Consenti la connettività alla rete attraverso tunnel sicuri", + "siteDescription": "Creare e gestire siti per abilitare la connettività a reti private", "siteCreate": "Crea Sito", "siteCreateDescription2": "Segui i passaggi qui sotto per creare e collegare un nuovo sito", - "siteCreateDescription": "Crea un nuovo sito per iniziare a connettere le tue risorse", + "siteCreateDescription": "Crea un nuovo sito per iniziare a connettere le risorse", "close": "Chiudi", "siteErrorCreate": "Errore nella creazione del sito", "siteErrorCreateKeyPair": "Coppia di chiavi o valori predefiniti del sito non trovati", @@ -74,7 +74,7 @@ "siteInstallNewt": "Installa Newt", "siteInstallNewtDescription": "Esegui Newt sul tuo sistema", "WgConfiguration": "Configurazione WireGuard", - "WgConfigurationDescription": "Usa la seguente configurazione per connetterti alla tua rete", + "WgConfigurationDescription": "Utilizzare la seguente configurazione per connettersi alla rete", "operatingSystem": "Sistema Operativo", "commands": "Comandi", "recommended": "Consigliato", @@ -87,25 +87,25 @@ "siteUpdated": "Sito aggiornato", "siteUpdatedDescription": "Il sito è stato aggiornato.", "siteGeneralDescription": "Configura le impostazioni generali per questo sito", - "siteSettingDescription": "Configura le impostazioni sul tuo sito", + "siteSettingDescription": "Configura le impostazioni del sito", "siteSetting": "Impostazioni {siteName}", - "siteNewtTunnel": "Tunnel Newt (Consigliato)", - "siteNewtTunnelDescription": "Modo più semplice per creare un entrypoint nella rete. Nessuna configurazione aggiuntiva.", + "siteNewtTunnel": "Nuovo Sito (Consigliato)", + "siteNewtTunnelDescription": "Modo più semplice per creare un entrypoint in qualsiasi rete. Nessuna configurazione aggiuntiva.", "siteWg": "WireGuard Base", "siteWgDescription": "Usa qualsiasi client WireGuard per stabilire un tunnel. Impostazione NAT manuale richiesta.", "siteWgDescriptionSaas": "Usa qualsiasi client WireGuard per stabilire un tunnel. Impostazione NAT manuale richiesta. FUNZIONA SOLO SU NODI AUTO-OSPITATI", "siteLocalDescription": "Solo risorse locali. Nessun tunneling.", "siteLocalDescriptionSaas": "Solo risorse locali. Nessun tunneling. Disponibile solo su nodi remoti.", "siteSeeAll": "Vedi Tutti I Siti", - "siteTunnelDescription": "Determina come vuoi connetterti al tuo sito", - "siteNewtCredentials": "Credenziali Newt", - "siteNewtCredentialsDescription": "Questo è come Newt si autenticerà con il server", - "siteCredentialsSave": "Salva Le Tue Credenziali", + "siteTunnelDescription": "Determinare come si desidera connettersi al sito", + "siteNewtCredentials": "Credenziali", + "siteNewtCredentialsDescription": "Questo è come il sito si autenticerà con il server", + "siteCredentialsSave": "Salva le credenziali", "siteCredentialsSaveDescription": "Potrai vederlo solo una volta. Assicurati di copiarlo in un luogo sicuro.", "siteInfo": "Informazioni Sito", "status": "Stato", "shareTitle": "Gestisci Collegamenti Di Condivisione", - "shareDescription": "Crea link condivisibili per concedere un accesso temporaneo o permanente alle tue risorse", + "shareDescription": "Crea link condivisibili per concedere accesso temporaneo o permanente alle risorse proxy", "shareSearch": "Cerca link condivisi...", "shareCreate": "Crea Link Di Condivisione", "shareErrorDelete": "Impossibile eliminare il link", @@ -121,7 +121,7 @@ "importantNote": "Nota Importante", "shareImportantDescription": "Per motivi di sicurezza, si consiglia di utilizzare le intestazioni su parametri di query quando possibile, in quanto i parametri di query possono essere registrati in log server o cronologia browser.", "token": "Token", - "shareTokenSecurety": "Mantieni sicuro il tuo token di accesso. Non condividerlo in aree accessibili al pubblico o codice lato client.", + "shareTokenSecurety": "Mantenere sicuro il token di accesso. Non condividerlo in aree accessibili al pubblico o codice lato client.", "shareErrorFetchResource": "Recupero delle risorse non riuscito", "shareErrorFetchResourceDescription": "Si è verificato un errore durante il recupero delle risorse", "shareErrorCreate": "Impossibile creare il link di condivisione", @@ -144,8 +144,10 @@ "expires": "Scade", "never": "Mai", "shareErrorSelectResource": "Seleziona una risorsa", - "resourceTitle": "Gestisci Risorse", - "resourceDescription": "Crea proxy sicuri per le tue applicazioni private", + "proxyResourceTitle": "Gestisci Risorse Pubbliche", + "proxyResourceDescription": "Creare e gestire risorse accessibili al pubblico tramite un browser web", + "clientResourceTitle": "Gestisci Risorse Private", + "clientResourceDescription": "Crea e gestisci risorse accessibili solo tramite un client connesso", "resourcesSearch": "Cerca risorse...", "resourceAdd": "Aggiungi Risorsa", "resourceErrorDelte": "Errore nell'eliminare la risorsa", @@ -155,9 +157,9 @@ "resourceMessageRemove": "Una volta rimossa, la risorsa non sarà più accessibile. Tutti gli obiettivi associati alla risorsa saranno rimossi.", "resourceQuestionRemove": "Sei sicuro di voler rimuovere la risorsa dall'organizzazione?", "resourceHTTP": "Risorsa HTTPS", - "resourceHTTPDescription": "Richieste proxy alla tua app tramite HTTPS utilizzando un sottodominio o un dominio di base.", + "resourceHTTPDescription": "Richieste proxy per l'applicazione tramite HTTPS utilizzando un sottodominio o un dominio base.", "resourceRaw": "Risorsa Raw TCP/UDP", - "resourceRawDescription": "Richieste proxy alla tua app tramite TCP/UDP utilizzando un numero di porta.", + "resourceRawDescription": "Le richieste proxy all'app tramite TCP/UDP utilizzando un numero di porta. Funziona solo quando i siti sono connessi ai nodi.", "resourceCreate": "Crea Risorsa", "resourceCreateDescription": "Segui i passaggi seguenti per creare una nuova risorsa", "resourceSeeAll": "Vedi Tutte Le Risorse", @@ -171,22 +173,22 @@ "noCountryFound": "Nessun paese trovato.", "siteSelectionDescription": "Questo sito fornirà connettività all'obiettivo.", "resourceType": "Tipo Di Risorsa", - "resourceTypeDescription": "Determina come vuoi accedere alla tua risorsa", + "resourceTypeDescription": "Determinare come accedere alla risorsa", "resourceHTTPSSettings": "Impostazioni HTTPS", - "resourceHTTPSSettingsDescription": "Configura come sarà possibile accedere alla tua risorsa su HTTPS", + "resourceHTTPSSettingsDescription": "Configura come sarà possibile accedere alla risorsa su HTTPS", "domainType": "Tipo Di Dominio", "subdomain": "Sottodominio", "baseDomain": "Dominio Base", - "subdomnainDescription": "Il sottodominio in cui la tua risorsa sarà accessibile.", + "subdomnainDescription": "Il sottodominio in cui la risorsa sarà accessibile.", "resourceRawSettings": "Impostazioni TCP/UDP", - "resourceRawSettingsDescription": "Configura come sarà possibile accedere alla tua risorsa tramite TCP/UDP. Mappare la risorsa a una porta sul server host Pangolin, in modo da poter accedere alla risorsa dal server-public ip:mapped-port.", + "resourceRawSettingsDescription": "Configura come accedere alla risorsa tramite TCP/UDP", "protocol": "Protocollo", "protocolSelect": "Seleziona un protocollo", "resourcePortNumber": "Numero Porta", "resourcePortNumberDescription": "Il numero di porta esterna per le richieste di proxy.", "cancel": "Annulla", "resourceConfig": "Snippet Di Configurazione", - "resourceConfigDescription": "Copia e incolla questi snippet di configurazione per configurare la tua risorsa TCP/UDP", + "resourceConfigDescription": "Copia e incolla questi snippet di configurazione per configurare la risorsa TCP/UDP", "resourceAddEntrypoints": "Traefik: Aggiungi Ingresso", "resourceExposePorts": "Gerbil: espone le porte in Docker componi", "resourceLearnRaw": "Scopri come configurare le risorse TCP/UDP", @@ -202,14 +204,14 @@ "proxy": "Proxy", "internal": "Interno", "rules": "Regole", - "resourceSettingDescription": "Configura le impostazioni sulla tua risorsa", + "resourceSettingDescription": "Configura le impostazioni sulla risorsa", "resourceSetting": "Impostazioni {resourceName}", - "alwaysAllow": "Consenti Sempre", - "alwaysDeny": "Nega Sempre", + "alwaysAllow": "Autenticazione Bypass", + "alwaysDeny": "Blocca Accesso", "passToAuth": "Passa all'autenticazione", - "orgSettingsDescription": "Configura le impostazioni generali della tua organizzazione", + "orgSettingsDescription": "Configura le impostazioni dell'organizzazione", "orgGeneralSettings": "Impostazioni Organizzazione", - "orgGeneralSettingsDescription": "Gestisci i dettagli dell'organizzazione e la configurazione", + "orgGeneralSettingsDescription": "Gestisci i dettagli e la configurazione dell'organizzazione", "saveGeneralSettings": "Salva Impostazioni Generali", "saveSettings": "Salva Impostazioni", "orgDangerZone": "Zona Pericolosa", @@ -232,7 +234,7 @@ "orgMissing": "ID Organizzazione Mancante", "orgMissingMessage": "Impossibile rigenerare l'invito senza un ID organizzazione.", "accessUsersManage": "Gestisci Utenti", - "accessUsersDescription": "Invita gli utenti e aggiungili ai ruoli per gestire l'accesso alla tua organizzazione", + "accessUsersDescription": "Invita e gestisci gli utenti con accesso a questa organizzazione", "accessUsersSearch": "Cerca utenti...", "accessUserCreate": "Crea Utente", "accessUserRemove": "Rimuovi Utente", @@ -241,13 +243,13 @@ "role": "Ruolo", "nameRequired": "Il nome è obbligatorio", "accessRolesManage": "Gestisci Ruoli", - "accessRolesDescription": "Configura i ruoli per gestire l'accesso alla tua organizzazione", + "accessRolesDescription": "Creare e gestire ruoli per gli utenti nell'organizzazione", "accessRolesSearch": "Ricerca ruoli...", "accessRolesAdd": "Aggiungi Ruolo", "accessRoleDelete": "Elimina Ruolo", "description": "Descrizione", "inviteTitle": "Inviti Aperti", - "inviteDescription": "Gestisci i tuoi inviti ad altri utenti", + "inviteDescription": "Gestisci gli inviti per gli altri utenti a unirsi all'organizzazione", "inviteSearch": "Cerca inviti...", "minutes": "Minuti", "hours": "Ore", @@ -261,13 +263,13 @@ "apiKeysErrorCreate": "Errore nella creazione della chiave API", "apiKeysErrorSetPermission": "Errore nell'impostazione dei permessi", "apiKeysCreate": "Genera Chiave API", - "apiKeysCreateDescription": "Genera una nuova chiave API per la tua organizzazione", + "apiKeysCreateDescription": "Genera una nuova chiave API per l'organizzazione", "apiKeysGeneralSettings": "Permessi", "apiKeysGeneralSettingsDescription": "Determina cosa può fare questa chiave API", - "apiKeysList": "La Tua Chiave API", - "apiKeysSave": "Salva La Tua Chiave API", + "apiKeysList": "Nuova Chiave Api", + "apiKeysSave": "Salva la chiave API", "apiKeysSaveDescription": "Potrai vederla solo una volta. Assicurati di copiarla in un luogo sicuro.", - "apiKeysInfo": "La tua chiave API è:", + "apiKeysInfo": "La chiave API è:", "apiKeysConfirmCopy": "Ho copiato la chiave API", "generate": "Genera", "done": "Fatto", @@ -424,7 +426,7 @@ "userCreated": "Utente creato", "userCreatedDescription": "L'utente è stato creato con successo.", "userTypeInternal": "Utente Interno", - "userTypeInternalDescription": "Invita un utente a unirsi direttamente alla tua organizzazione.", + "userTypeInternalDescription": "Invita un utente a unirsi direttamente all'organizzazione.", "userTypeExternal": "Utente Esterno", "userTypeExternalDescription": "Crea un utente con un provider di identità esterno.", "accessUserCreateDescription": "Segui i passaggi seguenti per creare un nuovo utente", @@ -436,6 +438,16 @@ "inviteEmailSent": "Invia email di invito all'utente", "inviteValid": "Valido Per", "selectDuration": "Seleziona durata", + "selectResource": "Seleziona Risorsa", + "filterByResource": "Filtra Per Risorsa", + "resetFilters": "Ripristina Filtri", + "totalBlocked": "Richieste Bloccate Da Pangolino", + "totalRequests": "Totale Richieste", + "requestsByCountry": "Richieste Per Paese", + "requestsByDay": "Richieste Per Giorno", + "blocked": "Bloccato", + "allowed": "Consentito", + "topCountries": "Paesi Principali", "accessRoleSelect": "Seleziona ruolo", "inviteEmailSentDescription": "È stata inviata un'email all'utente con il link di accesso qui sotto. Devono accedere al link per accettare l'invito.", "inviteSentDescription": "L'utente è stato invitato. Deve accedere al link qui sotto per accettare l'invito.", @@ -458,13 +470,13 @@ "accessControlsSubmit": "Salva Controlli di Accesso", "roles": "Ruoli", "accessUsersRoles": "Gestisci Utenti e Ruoli", - "accessUsersRolesDescription": "Invita utenti e aggiungili ai ruoli per gestire l'accesso alla tua organizzazione", + "accessUsersRolesDescription": "Invita gli utenti e aggiungili ai ruoli per gestire l'accesso all'organizzazione", "key": "Chiave", "createdAt": "Creato Il", "proxyErrorInvalidHeader": "Valore dell'intestazione Host personalizzata non valido. Usa il formato nome dominio o salva vuoto per rimuovere l'intestazione Host personalizzata.", "proxyErrorTls": "Nome Server TLS non valido. Usa il formato nome dominio o salva vuoto per rimuovere il Nome Server TLS.", "proxyEnableSSL": "Abilita SSL", - "proxyEnableSSLDescription": "Abilita la crittografia SSL/TLS per connessioni HTTPS sicure ai tuoi obiettivi.", + "proxyEnableSSLDescription": "Abilita la crittografia SSL/TLS per connessioni HTTPS sicure agli obiettivi.", "target": "Target", "configureTarget": "Configura Obiettivi", "targetErrorFetch": "Impossibile recuperare i target", @@ -480,29 +492,29 @@ "targetsErrorUpdate": "Impossibile aggiornare i target", "targetsErrorUpdateDescription": "Si è verificato un errore durante l'aggiornamento dei target", "targetTlsUpdate": "Impostazioni TLS aggiornate", - "targetTlsUpdateDescription": "Le tue impostazioni TLS sono state aggiornate con successo", + "targetTlsUpdateDescription": "Le impostazioni TLS sono state aggiornate correttamente", "targetErrorTlsUpdate": "Impossibile aggiornare le impostazioni TLS", "targetErrorTlsUpdateDescription": "Si è verificato un errore durante l'aggiornamento delle impostazioni TLS", "proxyUpdated": "Impostazioni proxy aggiornate", - "proxyUpdatedDescription": "Le tue impostazioni proxy sono state aggiornate con successo", + "proxyUpdatedDescription": "Le impostazioni del proxy sono state aggiornate con successo", "proxyErrorUpdate": "Impossibile aggiornare le impostazioni proxy", "proxyErrorUpdateDescription": "Si è verificato un errore durante l'aggiornamento delle impostazioni proxy", - "targetAddr": "IP / Nome host", + "targetAddr": "Host", "targetPort": "Porta", "targetProtocol": "Protocollo", "targetTlsSettings": "Configurazione Connessione Sicura", - "targetTlsSettingsDescription": "Configura le impostazioni SSL/TLS per la tua risorsa", + "targetTlsSettingsDescription": "Configura le impostazioni SSL/TLS per la risorsa", "targetTlsSettingsAdvanced": "Impostazioni TLS Avanzate", "targetTlsSni": "Nome Server Tls", "targetTlsSniDescription": "Il Nome Server TLS da usare per SNI. Lascia vuoto per usare quello predefinito.", "targetTlsSubmit": "Salva Impostazioni", "targets": "Configurazione Target", - "targetsDescription": "Configura i target per instradare il traffico ai tuoi servizi backend", + "targetsDescription": "Impostare obiettivi per instradare il traffico verso i servizi di backend", "targetStickySessions": "Abilita Sessioni Persistenti", "targetStickySessionsDescription": "Mantieni le connessioni sullo stesso target backend per l'intera sessione.", "methodSelect": "Seleziona metodo", "targetSubmit": "Aggiungi Target", - "targetNoOne": "Questa risorsa non ha bersagli. Aggiungi un obiettivo per configurare dove inviare le richieste al tuo backend.", + "targetNoOne": "Questa risorsa non ha destinazioni. Aggiungi un obiettivo per configurare dove inviare richieste al backend.", "targetNoOneDescription": "L'aggiunta di più di un target abiliterà il bilanciamento del carico.", "targetsSubmit": "Salva Target", "addTarget": "Aggiungi Target", @@ -516,9 +528,11 @@ "targetCreatedDescription": "L'obiettivo è stato creato con successo", "targetErrorCreate": "Impossibile creare l'obiettivo", "targetErrorCreateDescription": "Si è verificato un errore durante la creazione del target", + "tlsServerName": "Nome Server Tls", + "tlsServerNameDescription": "Il nome del server TLS da usare per SNI", "save": "Salva", "proxyAdditional": "Impostazioni Proxy Aggiuntive", - "proxyAdditionalDescription": "Configura come la tua risorsa gestisce le impostazioni proxy", + "proxyAdditionalDescription": "Configura come la risorsa gestisce le impostazioni del proxy", "proxyCustomHeader": "Intestazione Host Personalizzata", "proxyCustomHeaderDescription": "L'intestazione host da impostare durante il proxy delle richieste. Lascia vuoto per usare quella predefinita.", "proxyAdditionalSubmit": "Salva Impostazioni Proxy", @@ -558,7 +572,7 @@ "rulesMatchType": "Tipo di Corrispondenza", "value": "Valore", "rulesAbout": "Informazioni sulle Regole", - "rulesAboutDescription": "Le regole ti permettono di controllare l'accesso alla tua risorsa in base a una serie di criteri. Puoi creare regole per consentire o negare l'accesso basato su indirizzo IP o percorso URL.", + "rulesAboutDescription": "Le regole consentono di controllare l'accesso alla risorsa in base a una serie di criteri. È possibile creare regole per consentire o negare l'accesso in base all'indirizzo IP o al percorso URL.", "rulesActions": "Azioni", "rulesActionAlwaysAllow": "Consenti Sempre: Ignora tutti i metodi di autenticazione", "rulesActionAlwaysDeny": "Nega Sempre: Blocca tutte le richieste; nessuna autenticazione può essere tentata", @@ -570,7 +584,7 @@ "rulesEnable": "Abilita Regole", "rulesEnableDescription": "Abilita o disabilita la valutazione delle regole per questa risorsa", "rulesResource": "Configurazione Regole Risorsa", - "rulesResourceDescription": "Configura le regole per controllare l'accesso alla tua risorsa", + "rulesResourceDescription": "Configura le regole per controllare l'accesso alla risorsa", "ruleSubmit": "Aggiungi Regola", "rulesNoOne": "Nessuna regola. Aggiungi una regola usando il modulo.", "rulesOrder": "Le regole sono valutate per priorità in ordine crescente.", @@ -586,7 +600,7 @@ "none": "Nessuno", "unknown": "Sconosciuto", "resources": "Risorse", - "resourcesDescription": "Le risorse sono proxy per le applicazioni in esecuzione sulla tua rete privata. Crea una risorsa per qualsiasi servizio HTTP/HTTPS o TCP/UDP raw sulla tua rete privata. Ogni risorsa deve essere collegata a un sito per abilitare la connettività privata e sicura attraverso un tunnel WireGuard crittografato.", + "resourcesDescription": "Le risorse sono proxy per applicazioni in esecuzione sulla rete privata. Crea una risorsa per qualsiasi servizio HTTP/HTTPS o TCP/UDP grezzo sulla tua rete privata. Ogni risorsa deve essere collegata a un sito per abilitare una connettività privata e sicura attraverso un tunnel WireGuard crittografato.", "resourcesWireGuardConnect": "Connettività sicura con crittografia WireGuard", "resourcesMultipleAuthenticationMethods": "Configura molteplici metodi di autenticazione", "resourcesUsersRolesAccess": "Controllo accessi basato su utenti e ruoli", @@ -597,7 +611,7 @@ "resourceSelect": "Seleziona risorsa", "shareLinks": "Link di Condivisione", "share": "Link Condivisibili", - "shareDescription2": "Crea link condivisibili per le tue risorse. I link forniscono accesso temporaneo o illimitato alla tua risorsa. Puoi configurare la durata di scadenza del link quando lo crei.", + "shareDescription2": "Crea link condivisibili alle risorse. I link forniscono un accesso temporaneo o illimitato alla tua risorsa. È possibile configurare la durata di scadenza del collegamento quando ne viene creato uno.", "shareEasyCreate": "Facile da creare e condividere", "shareConfigurableExpirationDuration": "Durata di scadenza configurabile", "shareSecureAndRevocable": "Sicuro e revocabile", @@ -607,19 +621,19 @@ "unknownCommand": "Comando sconosciuto", "newtErrorFetchReleases": "Impossibile recuperare le informazioni sulla versione: {err}", "newtErrorFetchLatest": "Errore nel recupero dell'ultima versione: {err}", - "newtEndpoint": "Endpoint Newt", - "newtId": "ID Newt", - "newtSecretKey": "Chiave Segreta Newt", + "newtEndpoint": "Endpoint", + "newtId": "ID", + "newtSecretKey": "Segreto", "architecture": "Architettura", "sites": "Siti", - "siteWgAnyClients": "Usa qualsiasi client WireGuard per connetterti. Dovrai indirizzare le tue risorse interne usando l'IP del peer.", + "siteWgAnyClients": "Usa qualsiasi client WireGuard per connetterti. Dovrai indirizzare le risorse interne utilizzando l'IP del peer.", "siteWgCompatibleAllClients": "Compatibile con tutti i client WireGuard", "siteWgManualConfigurationRequired": "Configurazione manuale richiesta", "userErrorNotAdminOrOwner": "L'utente non è un amministratore o proprietario", "pangolinSettings": "Impostazioni - Pangolin", "accessRoleYour": "Il tuo ruolo:", - "accessRoleSelect2": "Seleziona un ruolo", - "accessUserSelect": "Seleziona un utente", + "accessRoleSelect2": "Seleziona ruoli", + "accessUserSelect": "Seleziona utenti", "otpEmailEnter": "Inserisci un'email", "otpEmailEnterDescription": "Premi invio per aggiungere un'email dopo averla digitata nel campo di input.", "otpEmailErrorInvalid": "Indirizzo email non valido. Il carattere jolly (*) deve essere l'intera parte locale.", @@ -671,7 +685,7 @@ "resourcePincodeSetupTitle": "Imposta Codice PIN", "resourcePincodeSetupTitleDescription": "Imposta un codice PIN per proteggere questa risorsa", "resourceRoleDescription": "Gli amministratori possono sempre accedere a questa risorsa.", - "resourceUsersRoles": "Utenti e Ruoli", + "resourceUsersRoles": "Controlli di Accesso", "resourceUsersRolesDescription": "Configura quali utenti e ruoli possono visitare questa risorsa", "resourceUsersRolesSubmit": "Salva Utenti e Ruoli", "resourceWhitelistSave": "Salvato con successo", @@ -702,6 +716,7 @@ "resourceTransferSubmit": "Trasferisci Risorsa", "siteDestination": "Sito Di Destinazione", "searchSites": "Cerca siti", + "countries": "Paesi", "accessRoleCreate": "Crea Ruolo", "accessRoleCreateDescription": "Crea un nuovo ruolo per raggruppare gli utenti e gestire i loro permessi.", "accessRoleCreateSubmit": "Crea Ruolo", @@ -766,15 +781,15 @@ "idpOidcConfigure": "Configurazione OAuth2/OIDC", "idpOidcConfigureDescription": "Configura gli endpoint e le credenziali del provider OAuth2/OIDC", "idpClientId": "ID Client", - "idpClientIdDescription": "L'ID client OAuth2 dal tuo provider di identità", + "idpClientIdDescription": "L'ID client OAuth2 dal provider di identità", "idpClientSecret": "Segreto Client", - "idpClientSecretDescription": "Il segreto client OAuth2 dal tuo provider di identità", + "idpClientSecretDescription": "Il segreto del client OAuth2 dal provider di identità", "idpAuthUrl": "URL di Autorizzazione", "idpAuthUrlDescription": "L'URL dell'endpoint di autorizzazione OAuth2", "idpTokenUrl": "URL del Token", "idpTokenUrlDescription": "L'URL dell'endpoint del token OAuth2", "idpOidcConfigureAlert": "Informazioni Importanti", - "idpOidcConfigureAlertDescription": "Dopo aver creato il provider di identità, dovrai configurare l'URL di callback nelle impostazioni del tuo provider di identità. L'URL di callback verrà fornito dopo la creazione riuscita.", + "idpOidcConfigureAlertDescription": "Dopo aver creato il provider di identità, è necessario configurare l'URL di callback nelle impostazioni del provider di identità. L'URL di callback verrà fornito dopo la creazione riuscita.", "idpToken": "Configurazione Token", "idpTokenDescription": "Configura come estrarre le informazioni dell'utente dal token ID", "idpJmespathAbout": "Informazioni su JMESPath", @@ -791,7 +806,7 @@ "idpSubmit": "Crea Provider di Identità", "orgPolicies": "Politiche Organizzazione", "idpSettings": "Impostazioni {idpName}", - "idpCreateSettingsDescription": "Configura le impostazioni per il tuo provider di identità", + "idpCreateSettingsDescription": "Configura le impostazioni per il provider di identità", "roleMapping": "Mappatura Ruoli", "orgMapping": "Mappatura Organizzazione", "orgPoliciesSearch": "Cerca politiche organizzazione...", @@ -826,7 +841,7 @@ "idpUpdatedDescription": "Provider di identità aggiornato con successo", "redirectUrl": "URL di Reindirizzamento", "redirectUrlAbout": "Informazioni sull'URL di Reindirizzamento", - "redirectUrlAboutDescription": "Questo è l'URL a cui gli utenti verranno reindirizzati dopo l'autenticazione. Devi configurare questo URL nelle impostazioni del tuo provider di identità.", + "redirectUrlAboutDescription": "Questo è l'URL a cui gli utenti saranno reindirizzati dopo l'autenticazione. È necessario configurare questo URL nelle impostazioni del provider di identità.", "pangolinAuth": "Autenticazione - Pangolina", "verificationCodeLengthRequirements": "Il tuo codice di verifica deve essere di 8 caratteri.", "errorOccurred": "Si è verificato un errore", @@ -909,6 +924,10 @@ "passwordResetSent": "Invieremo un codice di reset della password a questo indirizzo email.", "passwordResetCode": "Codice di Reset", "passwordResetCodeDescription": "Controlla la tua email per il codice di reset.", + "generatePasswordResetCode": "Genera Codice Di Ripristino Password", + "passwordResetCodeGenerated": "Codice Di Reimpostazione Password Generato", + "passwordResetCodeGeneratedDescription": "Condividi questo codice con l'utente. Possono usarlo per reimpostare la password.", + "passwordResetUrl": "Reset URL", "passwordNew": "Nuova Password", "passwordNewConfirm": "Conferma Nuova Password", "changePassword": "Cambia Password", @@ -926,6 +945,9 @@ "pincodeAuth": "Codice Autenticatore", "pincodeSubmit2": "Invia Codice", "passwordResetSubmit": "Richiedi Reset", + "passwordResetAlreadyHaveCode": "Inserisci Il Codice Di Ripristino Della Password", + "passwordResetSmtpRequired": "Si prega di contattare l'amministratore", + "passwordResetSmtpRequiredDescription": "Per reimpostare la password è necessario un codice di reimpostazione della password. Si prega di contattare l'amministratore per assistenza.", "passwordBack": "Torna alla Password", "loginBack": "Torna al login", "signup": "Registrati", @@ -1091,12 +1113,15 @@ "actionListSiteResources": "Elenca Risorse del Sito", "actionUpdateSiteResource": "Aggiorna Risorsa del Sito", "actionListInvitations": "Elenco Inviti", + "actionExportLogs": "Esporta Log", + "actionViewLogs": "Visualizza Log", "noneSelected": "Nessuna selezione", "orgNotFound2": "Nessuna organizzazione trovata.", "searchProgress": "Ricerca...", "create": "Crea", "orgs": "Organizzazioni", "loginError": "Si è verificato un errore durante l'accesso", + "loginRequiredForDevice": "È richiesto il login per autenticare il dispositivo.", "passwordForgot": "Password dimenticata?", "otpAuth": "Autenticazione a Due Fattori", "otpAuthDescription": "Inserisci il codice dalla tua app di autenticazione o uno dei tuoi codici di backup monouso.", @@ -1151,19 +1176,29 @@ "sidebarHome": "Home", "sidebarSites": "Siti", "sidebarResources": "Risorse", + "sidebarProxyResources": "Pubblico", + "sidebarClientResources": "Privato", "sidebarAccessControl": "Controllo Accesso", + "sidebarLogsAndAnalytics": "Registri E Analisi", "sidebarUsers": "Utenti", + "sidebarAdmin": "Amministratore", "sidebarInvitations": "Inviti", "sidebarRoles": "Ruoli", - "sidebarShareableLinks": "Collegamenti Condividibili", + "sidebarShareableLinks": "Collegamenti", "sidebarApiKeys": "Chiavi API", "sidebarSettings": "Impostazioni", "sidebarAllUsers": "Tutti Gli Utenti", "sidebarIdentityProviders": "Fornitori Di Identità", "sidebarLicense": "Licenza", "sidebarClients": "Client", + "sidebarUserDevices": "Utenti", + "sidebarMachineClients": "Macchine", "sidebarDomains": "Domini", + "sidebarGeneral": "Generale", + "sidebarLogAndAnalytics": "Log & Analytics", "sidebarBluePrints": "Progetti", + "sidebarOrganization": "Organizzazione", + "sidebarLogsAnalytics": "Analisi", "blueprints": "Progetti", "blueprintsDescription": "Applica le configurazioni dichiarative e visualizza le partite precedenti", "blueprintAdd": "Aggiungi Progetto", @@ -1174,7 +1209,7 @@ "blueprintDetailsDescription": "Vedere il risultato del progetto applicato e gli eventuali errori verificatisi", "blueprintInfo": "Informazioni Sul Progetto", "message": "Messaggio", - "blueprintContentsDescription": "Definisci il contenuto di YAML che descrive la tua infrastruttura", + "blueprintContentsDescription": "Definire il contenuto YAML che descrive l'infrastruttura", "blueprintErrorCreateDescription": "Si è verificato un errore durante l'applicazione del progetto", "blueprintErrorCreate": "Errore nella creazione del progetto", "searchBlueprintProgress": "Cerca progetti...", @@ -1230,15 +1265,15 @@ "loading": "Caricamento", "restart": "Riavvia", "domains": "Domini", - "domainsDescription": "Gestisci domini per la tua organizzazione", + "domainsDescription": "Creare e gestire i domini disponibili nell'organizzazione", "domainsSearch": "Cerca domini...", "domainAdd": "Aggiungi Dominio", - "domainAddDescription": "Registra un nuovo dominio con la tua organizzazione", + "domainAddDescription": "Registra un nuovo dominio con all'organizzazione", "domainCreate": "Crea Dominio", "domainCreatedDescription": "Dominio creato con successo", "domainDeletedDescription": "Dominio eliminato con successo", - "domainQuestionRemove": "Sei sicuro di voler rimuovere il dominio dal tuo account?", - "domainMessageRemove": "Una volta rimosso, il dominio non sarà più associato al tuo account.", + "domainQuestionRemove": "Sei sicuro di voler rimuovere il dominio?", + "domainMessageRemove": "Una volta rimosso, il dominio non sarà più associato all'organizzazione.", "domainConfirmDelete": "Conferma Eliminazione Dominio", "domainDelete": "Elimina Dominio", "domain": "Dominio", @@ -1257,7 +1292,7 @@ "pending": "In attesa", "sidebarBilling": "Fatturazione", "billing": "Fatturazione", - "orgBillingDescription": "Gestisci le tue informazioni di fatturazione e abbonamenti", + "orgBillingDescription": "Gestisci le informazioni di fatturazione e gli abbonamenti", "github": "GitHub", "pangolinHosted": "Pangolin Hosted", "fossorial": "Fossoriale", @@ -1285,9 +1320,9 @@ "productUpdateTitle": "Aggiornamenti Prodotto", "productUpdateEmpty": "Nessun aggiornamento", "dismissAll": "Ignora tutto", - "pangolinUpdateAvailable": "Nuova versione disponibile", + "pangolinUpdateAvailable": "Aggiornamento Disponibile", "pangolinUpdateAvailableInfo": "La versione {version} è pronta per l'installazione", - "pangolinUpdateAvailableReleaseNotes": "Visualizza note di rilascio", + "pangolinUpdateAvailableReleaseNotes": "Visualizza Note Di Rilascio", "newtUpdateAvailable": "Aggiornamento Disponibile", "newtUpdateAvailableInfo": "È disponibile una nuova versione di Newt. Si prega di aggiornare all'ultima versione per la migliore esperienza.", "domainPickerEnterDomain": "Dominio", @@ -1300,7 +1335,7 @@ "domainPickerSortAsc": "A-Z", "domainPickerSortDesc": "Z-A", "domainPickerCheckingAvailability": "Controllando la disponibilità...", - "domainPickerNoMatchingDomains": "Nessun dominio corrispondente trovato. Prova un dominio diverso o verifica le impostazioni del dominio della tua organizzazione.", + "domainPickerNoMatchingDomains": "Nessun dominio corrispondente trovato. Prova un dominio diverso o controlla le impostazioni del dominio dell'organizzazione.", "domainPickerOrganizationDomains": "Domini dell'Organizzazione", "domainPickerProvidedDomains": "Domini Forniti", "domainPickerSubdomain": "Sottodominio: {subdomain}", @@ -1345,9 +1380,9 @@ "billingPortalError": "Errore del Portale", "billingDataUsageInfo": "Hai addebitato tutti i dati trasferiti attraverso i tunnel sicuri quando sei connesso al cloud. Questo include sia il traffico in entrata e in uscita attraverso tutti i siti. Quando si raggiunge il limite, i siti si disconnetteranno fino a quando non si aggiorna il piano o si riduce l'utilizzo. I dati non vengono caricati quando si utilizzano nodi.", "billingOnlineTimeInfo": "Ti viene addebitato in base al tempo in cui i tuoi siti rimangono connessi al cloud. Ad esempio, 44,640 minuti è uguale a un sito in esecuzione 24/7 per un mese intero. Quando raggiungi il tuo limite, i tuoi siti si disconnetteranno fino a quando non aggiorni il tuo piano o riduci l'utilizzo. Il tempo non viene caricato quando si usano i nodi.", - "billingUsersInfo": "Sei addebitato per ogni utente nella tua organizzazione. La fatturazione viene calcolata giornalmente in base al numero di account utente attivi nella tua organizzazione.", - "billingDomainInfo": "Sei addebitato per ogni dominio nella tua organizzazione. La fatturazione viene calcolata giornalmente in base al numero di account dominio attivi nella tua organizzazione.", - "billingRemoteExitNodesInfo": "Sei addebitato per ogni nodo gestito nella tua organizzazione. La fatturazione viene calcolata giornalmente in base al numero di nodi gestiti attivi nella tua organizzazione.", + "billingUsersInfo": "Sei addebitato per ogni utente nell'organizzazione. La fatturazione viene calcolata quotidianamente in base al numero di account utente attivi nel tuo org.", + "billingDomainInfo": "Sei addebitato per ogni dominio nell'organizzazione. La fatturazione viene calcolata quotidianamente in base al numero di account di dominio attivi nel tuo org.", + "billingRemoteExitNodesInfo": "Sei addebitato per ogni nodo gestito nell'organizzazione. La fatturazione viene calcolata quotidianamente in base al numero di nodi gestiti attivi nel tuo org.", "domainNotFound": "Domini Non Trovati", "domainNotFoundDescription": "Questa risorsa è disabilitata perché il dominio non esiste più nel nostro sistema. Si prega di impostare un nuovo dominio per questa risorsa.", "failed": "Fallito", @@ -1430,29 +1465,32 @@ "and": "e", "privacyPolicy": "informativa sulla privacy" }, + "signUpMarketing": { + "keepMeInTheLoop": "Tienimi in loop con notizie, aggiornamenti e nuove funzionalità via e-mail." + }, "siteRequired": "Il sito è richiesto.", "olmTunnel": "Tunnel Olm", "olmTunnelDescription": "Usa Olm per la connettività client", "errorCreatingClient": "Errore nella creazione del client", "clientDefaultsNotFound": "Impostazioni predefinite del client non trovate", "createClient": "Crea Cliente", - "createClientDescription": "Crea un nuovo cliente per connettersi ai tuoi siti", + "createClientDescription": "Crea un nuovo client per accedere alle risorse private", "seeAllClients": "Vedi Tutti i Clienti", "clientInformation": "Informazioni sul Cliente", "clientNamePlaceholder": "Nome Cliente", "address": "Indirizzo", "subnetPlaceholder": "Sottorete", - "addressDescription": "L'indirizzo che questo cliente utilizzerà per la connettività", + "addressDescription": "L'indirizzo interno del client. Deve rientrare nella sottorete dell'organizzazione.", "selectSites": "Seleziona siti", "sitesDescription": "Il cliente avrà connettività ai siti selezionati", "clientInstallOlm": "Installa Olm", "clientInstallOlmDescription": "Avvia Olm sul tuo sistema", - "clientOlmCredentials": "Credenziali Olm", - "clientOlmCredentialsDescription": "Ecco come Olm si autenticherà con il server", - "olmEndpoint": "Endpoint Olm", - "olmId": "ID Olm", - "olmSecretKey": "Chiave Segreta Olm", - "clientCredentialsSave": "Salva le Tue Credenziali", + "clientOlmCredentials": "Credenziali", + "clientOlmCredentialsDescription": "Questo è il modo in cui il client si autenticerà con il server", + "olmEndpoint": "Endpoint", + "olmId": "ID", + "olmSecretKey": "Segreto", + "clientCredentialsSave": "Salva le credenziali", "clientCredentialsSaveDescription": "Potrai vederlo solo una volta. Assicurati di copiarlo in un luogo sicuro.", "generalSettingsDescription": "Configura le impostazioni generali per questo cliente", "clientUpdated": "Cliente aggiornato", @@ -1463,9 +1501,7 @@ "sitesFetchError": "Si è verificato un errore durante il recupero dei siti.", "olmErrorFetchReleases": "Si è verificato un errore durante il recupero delle versioni di Olm.", "olmErrorFetchLatest": "Si è verificato un errore durante il recupero dell'ultima versione di Olm.", - "remoteSubnets": "Sottoreti Remote", "enterCidrRange": "Inserisci l'intervallo CIDR", - "remoteSubnetsDescription": "Aggiungi intervalli CIDR che possono essere accessibili da questo sito in remoto utilizzando i client. Usa il formato come 10.0.0.0/24. Questo si applica SOLO alla connettività del client VPN.", "resourceEnableProxy": "Abilita Proxy Pubblico", "resourceEnableProxyDescription": "Abilita il proxy pubblico a questa risorsa. Consente l'accesso alla risorsa dall'esterno della rete tramite il cloud su una porta aperta. Richiede la configurazione di Traefik.", "externalProxyEnabled": "Proxy Esterno Abilitato", @@ -1483,14 +1519,15 @@ "enableHealthChecksDescription": "Monitorare lo stato di salute di questo obiettivo. Se necessario, è possibile monitorare un endpoint diverso da quello del bersaglio.", "healthScheme": "Metodo", "healthSelectScheme": "Seleziona Metodo", + "healthCheckPortInvalid": "La porta di controllo dello stato di salute deve essere compresa tra 1 e 65535", "healthCheckPath": "Percorso", "healthHostname": "IP / Nome host", "healthPort": "Porta", "healthCheckPathDescription": "Percorso per verificare lo stato di salute.", - "healthyIntervalSeconds": "Intervallo Sano", - "unhealthyIntervalSeconds": "Intervallo Non Sano", + "healthyIntervalSeconds": "Intervallo Sano (Sec)", + "unhealthyIntervalSeconds": "Intervallo Non Sano (Sec)", "IntervalSeconds": "Intervallo Sano", - "timeoutSeconds": "Timeout", + "timeoutSeconds": "Timeout (sec)", "timeIsInSeconds": "Il tempo è in secondi", "retryAttempts": "Tentativi di Riprova", "expectedResponseCodes": "Codici di Risposta Attesi", @@ -1526,12 +1563,12 @@ "resourceEditDomain": "Modifica Dominio", "siteName": "Nome del Sito", "proxyPort": "Porta", - "resourcesTableProxyResources": "Risorse Proxy", - "resourcesTableClientResources": "Risorse Client", + "resourcesTableProxyResources": "Pubblico", + "resourcesTableClientResources": "Privato", "resourcesTableNoProxyResourcesFound": "Nessuna risorsa proxy trovata.", "resourcesTableNoInternalResourcesFound": "Nessuna risorsa interna trovata.", "resourcesTableDestination": "Destinazione", - "resourcesTableTheseResourcesForUseWith": "Queste risorse sono per uso con", + "resourcesTableAlias": "Alias", "resourcesTableClients": "Client", "resourcesTableAndOnlyAccessibleInternally": "e sono accessibili solo internamente quando connessi con un client.", "resourcesTableNoTargets": "Nessun obiettivo", @@ -1540,8 +1577,8 @@ "resourcesTableOffline": "Offline", "resourcesTableUnknown": "Sconosciuto", "resourcesTableNotMonitored": "Non monitorato", - "editInternalResourceDialogEditClientResource": "Modifica Risorsa Client", - "editInternalResourceDialogUpdateResourceProperties": "Aggiorna le proprietà della risorsa e la configurazione del target per {resourceName}.", + "editInternalResourceDialogEditClientResource": "Modifica Risorse Private", + "editInternalResourceDialogUpdateResourceProperties": "Aggiorna la configurazione delle risorse e i controlli di accesso per {resourceName}", "editInternalResourceDialogResourceProperties": "Proprietà della Risorsa", "editInternalResourceDialogName": "Nome", "editInternalResourceDialogProtocol": "Protocollo", @@ -1560,11 +1597,22 @@ "editInternalResourceDialogInvalidIPAddressFormat": "Formato dell'indirizzo IP non valido", "editInternalResourceDialogDestinationPortMin": "La porta di destinazione deve essere almeno 1", "editInternalResourceDialogDestinationPortMax": "La porta di destinazione deve essere inferiore a 65536", + "editInternalResourceDialogPortModeRequired": "Protocollo, porta proxy e porta di destinazione sono richiesti per la modalità porta", + "editInternalResourceDialogMode": "Modalità", + "editInternalResourceDialogModePort": "Porta", + "editInternalResourceDialogModeHost": "Host", + "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogDestination": "Destinazione", + "editInternalResourceDialogDestinationHostDescription": "L'indirizzo IP o il nome host della risorsa nella rete del sito.", + "editInternalResourceDialogDestinationIPDescription": "L'indirizzo IP o hostname della risorsa nella rete del sito.", + "editInternalResourceDialogDestinationCidrDescription": "La gamma CIDR della risorsa sulla rete del sito.", + "editInternalResourceDialogAlias": "Alias", + "editInternalResourceDialogAliasDescription": "Un alias DNS interno opzionale per questa risorsa.", "createInternalResourceDialogNoSitesAvailable": "Nessun Sito Disponibile", "createInternalResourceDialogNoSitesAvailableDescription": "Devi avere almeno un sito Newt con una subnet configurata per creare risorse interne.", "createInternalResourceDialogClose": "Chiudi", - "createInternalResourceDialogCreateClientResource": "Crea Risorsa Client", - "createInternalResourceDialogCreateClientResourceDescription": "Crea una nuova risorsa che sarà accessibile ai client connessi al sito selezionato.", + "createInternalResourceDialogCreateClientResource": "Crea Risorsa Privata", + "createInternalResourceDialogCreateClientResourceDescription": "Crea una nuova risorsa che sarà accessibile solo ai client connessi all'organizzazione", "createInternalResourceDialogResourceProperties": "Proprietà della Risorsa", "createInternalResourceDialogName": "Nome", "createInternalResourceDialogSite": "Sito", @@ -1593,11 +1641,22 @@ "createInternalResourceDialogInvalidIPAddressFormat": "Formato dell'indirizzo IP non valido", "createInternalResourceDialogDestinationPortMin": "La porta di destinazione deve essere almeno 1", "createInternalResourceDialogDestinationPortMax": "La porta di destinazione deve essere inferiore a 65536", + "createInternalResourceDialogPortModeRequired": "Protocollo, porta proxy e porta di destinazione sono richiesti per la modalità porta", + "createInternalResourceDialogMode": "Modalità", + "createInternalResourceDialogModePort": "Porta", + "createInternalResourceDialogModeHost": "Host", + "createInternalResourceDialogModeCidr": "CIDR", + "createInternalResourceDialogDestination": "Destinazione", + "createInternalResourceDialogDestinationHostDescription": "L'indirizzo IP o il nome host della risorsa nella rete del sito.", + "createInternalResourceDialogDestinationCidrDescription": "La gamma CIDR della risorsa sulla rete del sito.", + "createInternalResourceDialogAlias": "Alias", + "createInternalResourceDialogAliasDescription": "Un alias DNS interno opzionale per questa risorsa.", "siteConfiguration": "Configurazione", "siteAcceptClientConnections": "Accetta Connessioni Client", - "siteAcceptClientConnectionsDescription": "Permetti ad altri dispositivi di connettersi attraverso questa istanza Newt come gateway utilizzando i client.", - "siteAddress": "Indirizzo del Sito", - "siteAddressDescription": "Specifica l'indirizzo IP dell'host a cui i client si collegano. Questo è l'indirizzo interno del sito nella rete Pangolin per indirizzare i client. Deve rientrare nella subnet dell'Organizzazione.", + "siteAcceptClientConnectionsDescription": "Consenti ai dispositivi utente e ai client di accedere alle risorse di questo sito. Questo può essere modificato in seguito.", + "siteAddress": "Indirizzo Del Sito (Avanzato)", + "siteAddressDescription": "L'indirizzo interno del sito. Deve rientrare nella sottorete dell'organizzazione.", + "siteNameDescription": "Il nome visualizzato del sito che può essere modificato in seguito.", "autoLoginExternalIdp": "Accesso Automatico con IDP Esterno", "autoLoginExternalIdpDescription": "Reindirizzare immediatamente l'utente all'IDP esterno per l'autenticazione.", "selectIdp": "Seleziona IDP", @@ -1724,16 +1783,16 @@ "idpTypeLabel": "Tipo Provider Identità", "roleMappingExpressionPlaceholder": "es. contiene(gruppi, 'admin') && 'Admin' 'Membro'", "idpGoogleConfiguration": "Configurazione Google", - "idpGoogleConfigurationDescription": "Configura le tue credenziali di Google OAuth2", - "idpGoogleClientIdDescription": "Il Tuo Client Id Google OAuth2", - "idpGoogleClientSecretDescription": "Il Tuo Client Google OAuth2 Secret", + "idpGoogleConfigurationDescription": "Configura le credenziali di Google OAuth2", + "idpGoogleClientIdDescription": "Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Google OAuth2 Client Secret", "idpAzureConfiguration": "Configurazione Azure Entra ID", "idpAzureConfigurationDescription": "Configura le credenziali OAuth2 di Azure Entra ID", "idpTenantId": "ID Tenant", - "idpTenantIdPlaceholder": "iltuo-inquilino-id", - "idpAzureTenantIdDescription": "Il tuo ID del tenant Azure (trovato nella panoramica di Azure Active Directory)", - "idpAzureClientIdDescription": "Il Tuo Id Client Registrazione App Azure", - "idpAzureClientSecretDescription": "Il Tuo Client Di Registrazione App Azure Secret", + "idpTenantIdPlaceholder": "tenant-id", + "idpAzureTenantIdDescription": "Azure tenant ID (trovato nella panoramica Azure Active Directory)", + "idpAzureClientIdDescription": "Azure App Id Registrazione Client", + "idpAzureClientSecretDescription": "Azure App Registrazione Client Segreto", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", @@ -1741,14 +1800,14 @@ "idpGoogleConfigurationTitle": "Configurazione Google", "idpAzureConfigurationTitle": "Configurazione Azure Entra ID", "idpTenantIdLabel": "ID Tenant", - "idpAzureClientIdDescription2": "Il Tuo Id Client Registrazione App Azure", - "idpAzureClientSecretDescription2": "Il Tuo Client Di Registrazione App Azure Secret", + "idpAzureClientIdDescription2": "Azure App Id Registrazione Client", + "idpAzureClientSecretDescription2": "Azure App Registrazione Client Segreto", "idpGoogleDescription": "Google OAuth2/OIDC provider", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", "subnet": "Sottorete", "subnetDescription": "La sottorete per la configurazione di rete di questa organizzazione.", "authPage": "Pagina Autenticazione", - "authPageDescription": "Configura la pagina di autenticazione per la tua organizzazione", + "authPageDescription": "Configura la pagina di autenticazione per l'organizzazione", "authPageDomain": "Dominio Pagina Auth", "noDomainSet": "Nessun dominio impostato", "changeDomain": "Cambia Dominio", @@ -1758,7 +1817,7 @@ "setAuthPageDomain": "Imposta Dominio Pagina Autenticazione", "failedToFetchCertificate": "Recupero del certificato non riuscito", "failedToRestartCertificate": "Riavvio del certificato non riuscito", - "addDomainToEnableCustomAuthPages": "Aggiungi un dominio per abilitare le pagine di autenticazione personalizzate per la tua organizzazione", + "addDomainToEnableCustomAuthPages": "Aggiungi un dominio per abilitare le pagine di autenticazione personalizzate per l'organizzazione", "selectDomainForOrgAuthPage": "Seleziona un dominio per la pagina di autenticazione dell'organizzazione", "domainPickerProvidedDomain": "Dominio Fornito", "domainPickerFreeProvidedDomain": "Dominio Fornito Gratuito", @@ -1773,7 +1832,7 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" non può essere reso valido per {domain}.", "domainPickerSubdomainSanitized": "Sottodominio igienizzato", "domainPickerSubdomainCorrected": "\"{sub}\" è stato corretto in \"{sanitized}\"", - "orgAuthSignInTitle": "Accedi alla tua organizzazione", + "orgAuthSignInTitle": "Accedi all'organizzazione", "orgAuthChooseIdpDescription": "Scegli il tuo provider di identità per continuare", "orgAuthNoIdpConfigured": "Questa organizzazione non ha nessun provider di identità configurato. Puoi accedere con la tua identità Pangolin.", "orgAuthSignInWithPangolin": "Accedi con Pangolino", @@ -1791,7 +1850,7 @@ "enableTwoFactorAuthentication": "Abilita autenticazione a due fattori", "completeSecuritySteps": "Passi Di Sicurezza Completa", "securitySettings": "Impostazioni Di Sicurezza", - "securitySettingsDescription": "Configura i criteri di sicurezza per la tua organizzazione", + "securitySettingsDescription": "Configura i criteri di sicurezza per l'organizzazione", "requireTwoFactorForAllUsers": "Richiede l'autenticazione a due fattori per tutti gli utenti", "requireTwoFactorDescription": "Se abilitata, tutti gli utenti interni di questa organizzazione devono avere un'autenticazione a due fattori abilitata per accedere all'organizzazione.", "requireTwoFactorDisabledDescription": "Questa funzione richiede una licenza valida (Enterprise) o un abbonamento attivo (SaaS)", @@ -1854,8 +1913,12 @@ "enterpriseEdition": "Enterprise Edition", "unlicensed": "Senza Licenza", "beta": "Beta", - "manageClients": "Gestisci Clienti", - "manageClientsDescription": "I client sono dispositivi che possono connettersi ai tuoi siti", + "manageUserDevices": "Dispositivi Utente", + "manageUserDevicesDescription": "Visualizza e gestisci i dispositivi che gli utenti utilizzano per connettersi privatamente alle risorse", + "manageMachineClients": "Gestisci Client Machine", + "manageMachineClientsDescription": "Creare e gestire client che server e sistemi utilizzano per connettersi privatamente alle risorse", + "clientsTableUserClients": "Utente", + "clientsTableMachineClients": "Macchina", "licenseTableValidUntil": "Valido Fino A", "saasLicenseKeysSettingsTitle": "Licenze Enterprise", "saasLicenseKeysSettingsDescription": "Genera e gestisci le chiavi di licenza Enterprise per le istanze di Pangolin self-hosted", @@ -1990,11 +2053,12 @@ "pathRewriteStripLabel": "striscia", "sidebarEnableEnterpriseLicense": "Abilita Licenza Enterprise", "cannotbeUndone": "Questo non può essere annullato.", - "toConfirm": "per confermare", + "toConfirm": "per confermare.", "deleteClientQuestion": "Sei sicuro di voler rimuovere il client dal sito e dall'organizzazione?", "clientMessageRemove": "Una volta rimosso, il client non sarà più in grado di connettersi al sito.", "sidebarLogs": "Registri", "request": "Richiesta", + "requests": "Richieste", "logs": "Registri", "logsSettingsDescription": "Monitora i registri raccolti da questa orginizzazione", "searchLogs": "Cerca registro...", @@ -2020,6 +2084,7 @@ "ip": "IP", "reason": "Motivo", "requestLogs": "Log Richiesta", + "requestAnalytics": "Richiedi Analisi", "host": "Host", "location": "Posizione", "actionLogs": "Log Azioni", @@ -2029,6 +2094,7 @@ "logRetention": "Ritenzione Registro", "logRetentionDescription": "Gestisci per quanto tempo i diversi tipi di log sono mantenuti per questa organizzazione o disabilitali", "requestLogsDescription": "Visualizza i registri di richiesta dettagliati per le risorse in questa organizzazione", + "requestAnalyticsDescription": "Visualizza le analisi dettagliate della richiesta per le risorse in questa organizzazione", "logRetentionRequestLabel": "Richiedi Ritenzione Log", "logRetentionRequestDescription": "Per quanto tempo conservare i log delle richieste", "logRetentionAccessLabel": "Ritenzione Registro Accesso", @@ -2042,6 +2108,7 @@ "logRetention30Days": "30 giorni", "logRetention90Days": "90 giorni", "logRetentionForever": "Per Sempre", + "logRetentionEndOfFollowingYear": "Fine dell'anno successivo", "actionLogsDescription": "Visualizza una cronologia delle azioni eseguite in questa organizzazione", "accessLogsDescription": "Visualizza le richieste di autenticazione di accesso per le risorse in questa organizzazione", "licenseRequiredToUse": "Per utilizzare questa funzione è necessaria una licenza Enterprise.", @@ -2052,7 +2119,7 @@ "preferWildcardCert": "Preferisci Certificato Wildcard", "unverified": "Non Verificato", "domainSetting": "Impostazioni Dominio", - "domainSettingDescription": "Configura le impostazioni per il tuo dominio", + "domainSettingDescription": "Configura le impostazioni per il dominio", "preferWildcardCertDescription": "Tentativo di generare un certificato jolly (richiede un risolutore di certificati correttamente configurato).", "recordName": "Nome Record", "auto": "Automatico", @@ -2066,15 +2133,15 @@ "olmUpdateAvailableInfo": "È disponibile una versione aggiornata di Olm. Si prega di aggiornare all'ultima versione per la migliore esperienza.", "client": "Client", "proxyProtocol": "Impostazioni Protocollo Proxy", - "proxyProtocolDescription": "Configurare il protocollo proxy per preservare gli indirizzi IP client per i servizi TCP/UDP.", + "proxyProtocolDescription": "Configurare il protocollo proxy per preservare gli indirizzi IP client per i servizi TCP.", "enableProxyProtocol": "Abilita Protocollo Proxy", - "proxyProtocolInfo": "Conserva gli indirizzi IP del client per i backend TCP/UDP", + "proxyProtocolInfo": "Conserva gli indirizzi IP del client per i backend TCP", "proxyProtocolVersion": "Versione Protocollo Proxy", "version1": " Versione 1 (Consigliato)", "version2": "Versione 2", "versionDescription": "La versione 1 è testuale e ampiamente supportata. La versione 2 è binaria e più efficiente, ma meno compatibile.", "warning": "Attenzione", - "proxyProtocolWarning": "La tua applicazione backend deve essere configurata per accettare le connessioni del protocollo proxy. Se il tuo backend non supporta il protocollo proxy, abilitando questa opzione si interromperanno tutte le connessioni. Assicurati di configurare il tuo backend per fidarti delle intestazioni del protocollo proxy da Traefik.", + "proxyProtocolWarning": "L'applicazione backend deve essere configurata per accettare le connessioni del protocollo proxy. Se il tuo backend non supporta il protocollo proxy, abilitarlo interromperà tutte le connessioni, quindi attivalo solo se sai cosa stai facendo. Assicurati di configurare il tuo backend per fidarti delle intestazioni del protocollo proxy da Traefik.", "restarting": "Riavvio...", "manual": "Manuale", "messageSupport": "Supporto Messaggio", @@ -2097,6 +2164,43 @@ "supportMessageSent": "Messaggio Inviato!", "supportWillContact": "Saremo in contatto a breve!", "selectLogRetention": "Seleziona ritenzione log", + "terms": "Termini", + "privacy": "Privacy", + "security": "Sicurezza", + "docs": "Documenti", + "deviceActivation": "Attivazione dispositivo", + "deviceCodeInvalidFormat": "Il codice deve contenere 9 caratteri (es. A1AJ-N5JD)", + "deviceCodeInvalidOrExpired": "Codice non valido o scaduto", + "deviceCodeVerifyFailed": "Impossibile verificare il codice del dispositivo", + "signedInAs": "Accesso come", + "deviceCodeEnterPrompt": "Inserisci il codice visualizzato sul dispositivo", + "continue": "Continua", + "deviceUnknownLocation": "Posizione sconosciuta", + "deviceAuthorizationRequested": "Questa autorizzazione è stata richiesta ad {location} su {date}. Assicurati di fidarti di questo dispositivo in quanto avrà accesso all'account.", + "deviceLabel": "Dispositivo: {deviceName}", + "deviceWantsAccess": "vuole accedere al tuo account", + "deviceExistingAccess": "Accesso esistente:", + "deviceFullAccess": "Accesso completo al tuo account", + "deviceOrganizationsAccess": "Accesso a tutte le organizzazioni a cui il tuo account ha accesso", + "deviceAuthorize": "Autorizza {applicationName}", + "deviceConnected": "Dispositivo Connesso!", + "deviceAuthorizedMessage": "Il dispositivo è autorizzato ad accedere al tuo account.", + "pangolinCloud": "Pangolin Cloud", + "viewDevices": "Visualizza Dispositivi", + "viewDevicesDescription": "Gestisci i tuoi dispositivi connessi", + "noDevices": "Nessun dispositivo trovato", + "dateCreated": "Data Di Creazione", + "unnamedDevice": "Dispositivo Senza Nome", + "deviceQuestionRemove": "Sei sicuro di voler eliminare questo dispositivo?", + "deviceMessageRemove": "Questa azione non può essere annullata.", + "deviceDeleteConfirm": "Elimina Dispositivo", + "deleteDevice": "Elimina Dispositivo", + "errorLoadingDevices": "Errore nel caricamento dei dispositivi", + "failedToLoadDevices": "Impossibile caricare i dispositivi", + "deviceDeleted": "Dispositivo eliminato", + "deviceDeletedDescription": "Il dispositivo è stato eliminato con successo.", + "errorDeletingDevice": "Errore nell'eliminare il dispositivo", + "failedToDeleteDevice": "Impossibile eliminare il dispositivo", "showColumns": "Mostra Colonne", "hideColumns": "Nascondi Colonne", "columnVisibility": "Visibilità Colonna", @@ -2111,10 +2215,14 @@ "enableSelected": "Abilita Selezionati", "disableSelected": "Disabilita Selezionati", "checkSelectedStatus": "Controlla lo stato dei selezionati", + "clients": "Client", + "accessClientSelect": "Seleziona client macchina", + "resourceClientDescription": "Clienti di macchine che possono accedere a questa risorsa", + "regenerate": "Rigenera", "credentials": "Credenziali", "savecredentials": "Salva Credenziali", - "regeneratecredentials": "Ri-chiave", - "regenerateCredentials": "Rigenera e salva le tue credenziali", + "regenerateCredentialsButton": "Rigenera Credenziali", + "regenerateCredentials": "Rigenera Credenziali", "generatedcredentials": "Credenziali Generate", "copyandsavethesecredentials": "Copia e salva queste credenziali", "copyandsavethesecredentialsdescription": "Queste credenziali non verranno mostrate di nuovo dopo aver lasciato questa pagina. Salvarle in modo sicuro ora.", @@ -2122,13 +2230,12 @@ "credentialsSavedDescription": "Le credenziali sono state rigenerate e salvate con successo.", "credentialsSaveError": "Errore Di Salvataggio Credenziali", "credentialsSaveErrorDescription": "Errore durante la rigenerazione e il salvataggio delle credenziali.", - "regenerateCredentialsWarning": "Rigenerare le credenziali invaliderà quelle precedenti. Assicurarsi di aggiornare le configurazioni che utilizzano queste credenziali.", + "regenerateCredentialsWarning": "Rigenerare le credenziali invaliderà quelle precedenti e causerà una disconnessione. Assicurarsi di aggiornare le configurazioni che utilizzano queste credenziali.", "confirm": "Conferma", "regenerateCredentialsConfirmation": "Sei sicuro di voler rigenerare le credenziali?", "endpoint": "Endpoint", "Id": "Id", "SecretKey": "Chiave Segreta", - "featureDisabledTooltip": "Questa funzione è disponibile solo nel piano aziendale e richiede una licenza per utilizzarla.", "niceId": "Simpatico ID", "niceIdUpdated": "Nice ID Aggiornato", "niceIdUpdatedSuccessfully": "Nizza Id Aggiornato Con Successo", @@ -2136,5 +2243,32 @@ "niceIdUpdateErrorDescription": "Si è verificato un errore durante l'aggiornamento del Nice ID.", "niceIdCannotBeEmpty": "Il Nice ID non può essere vuoto", "enterIdentifier": "Inserisci identificatore", - "identifier": "Identifier" + "identifier": "Identifier", + "deviceLoginUseDifferentAccount": "Non tu? Usa un account diverso.", + "deviceLoginDeviceRequestingAccessToAccount": "Un dispositivo sta richiedendo l'accesso a questo account.", + "noData": "Nessun Dato", + "machineClients": "Machine Clients", + "install": "Installa", + "run": "Esegui", + "clientNameDescription": "Il nome visualizzato del client che può essere modificato in seguito.", + "clientAddress": "Indirizzo Client (Avanzato)", + "setupFailedToFetchSubnet": "Recupero della sottorete predefinita non riuscito", + "setupSubnetAdvanced": "Subnet (avanzato)", + "setupSubnetDescription": "La subnet per la rete interna di questa organizzazione.", + "siteRegenerateAndDisconnect": "Rigenera e disconnetti", + "siteRegenerateAndDisconnectConfirmation": "Sei sicuro di voler rigenerare le credenziali e disconnettere questo sito?", + "siteRegenerateAndDisconnectWarning": "Questo rigenererà le credenziali e disconnetterà immediatamente il sito. Il sito dovrà essere riavviato con le nuove credenziali.", + "siteRegenerateCredentialsConfirmation": "Sei sicuro di voler rigenerare le credenziali per questo sito?", + "siteRegenerateCredentialsWarning": "Questo rigenererà le credenziali. Il sito rimarrà connesso finché non lo riavvierai manualmente e userai le nuove credenziali.", + "clientRegenerateAndDisconnect": "Rigenera e disconnetti", + "clientRegenerateAndDisconnectConfirmation": "Sei sicuro di voler rigenerare le credenziali e disconnettere questo client?", + "clientRegenerateAndDisconnectWarning": "Questo rigenererà le credenziali e disconnetterà immediatamente il client. Il client dovrà essere riavviato con le nuove credenziali.", + "clientRegenerateCredentialsConfirmation": "Sei sicuro di voler rigenerare le credenziali per questo client?", + "clientRegenerateCredentialsWarning": "Questo rigenererà le credenziali. Il client rimarrà connesso fino a quando non lo riavvierai manualmente e userai le nuove credenziali.", + "remoteExitNodeRegenerateAndDisconnect": "Rigenera e disconnetti", + "remoteExitNodeRegenerateAndDisconnectConfirmation": "Sei sicuro di voler rigenerare le credenziali e disconnettere questo nodo di uscita remoto?", + "remoteExitNodeRegenerateAndDisconnectWarning": "Questo rigenererà le credenziali e disconnetterà immediatamente il nodo di uscita remoto. Il nodo di uscita remoto dovrà essere riavviato con le nuove credenziali.", + "remoteExitNodeRegenerateCredentialsConfirmation": "Sei sicuro di voler rigenerare le credenziali per questo nodo di uscita remoto?", + "remoteExitNodeRegenerateCredentialsWarning": "Questo rigenererà le credenziali. Il nodo di uscita remoto rimarrà connesso finché non lo riavvierai manualmente e userai le nuove credenziali.", + "agent": "Agente" } diff --git a/messages/ko-KR.json b/messages/ko-KR.json index 2ce7f7e68..82a12e4e2 100644 --- a/messages/ko-KR.json +++ b/messages/ko-KR.json @@ -1,12 +1,12 @@ { - "setupCreate": "조직, 사이트 및 리소스를 생성하십시오.", + "setupCreate": "조직, 사이트 및 리소스를 생성합니다.", "setupNewOrg": "새 조직", "setupCreateOrg": "조직 생성", "setupCreateResources": "리소스 생성", "setupOrgName": "조직 이름", - "orgDisplayName": "이것은 귀하의 조직의 표시 이름입니다.", + "orgDisplayName": "이것은 조직의 표시 이름입니다.", "orgId": "조직 ID", - "setupIdentifierMessage": "이것은 귀하의 조직에 대한 고유 식별자입니다. 표시 이름과는 별개입니다.", + "setupIdentifierMessage": "이것은 조직의 고유 식별자입니다.", "setupErrorIdentifier": "조직 ID가 이미 사용 중입니다. 다른 것을 선택해 주세요.", "componentsErrorNoMemberCreate": "현재 어떤 조직의 구성원도 아닙니다. 시작하려면 조직을 생성하세요.", "componentsErrorNoMember": "현재 어떤 조직의 구성원도 아닙니다.", @@ -50,10 +50,10 @@ "siteMessageRemove": "삭제되면 사이트에 더 이상 액세스할 수 없습니다. 사이트와 연결된 모든 대상도 삭제됩니다.", "siteQuestionRemove": "조직에서 사이트를 제거하시겠습니까?", "siteManageSites": "사이트 관리", - "siteDescription": "안전한 터널을 통해 네트워크에 연결할 수 있도록 허용", + "siteDescription": "프라이빗 네트워크로의 연결을 활성화하려면 사이트를 생성하고 관리하세요.", "siteCreate": "사이트 생성", "siteCreateDescription2": "아래 단계를 따라 새 사이트를 생성하고 연결하십시오", - "siteCreateDescription": "리소스를 연결하기 위해 새 사이트를 생성하십시오.", + "siteCreateDescription": "리소스를 연결하기 위해 새 사이트를 생성하세요.", "close": "닫기", "siteErrorCreate": "사이트 생성 오류", "siteErrorCreateKeyPair": "키 쌍 또는 사이트 기본값을 찾을 수 없습니다", @@ -74,7 +74,7 @@ "siteInstallNewt": "Newt 설치", "siteInstallNewtDescription": "시스템에서 Newt 실행하기", "WgConfiguration": "WireGuard 구성", - "WgConfigurationDescription": "네트워크에 연결하기 위한 다음 구성을 사용하십시오.", + "WgConfigurationDescription": "네트워크에 연결하기 위한 다음 구성을 사용하세요.", "operatingSystem": "운영 체제", "commands": "명령", "recommended": "추천", @@ -87,25 +87,25 @@ "siteUpdated": "사이트가 업데이트되었습니다", "siteUpdatedDescription": "사이트가 업데이트되었습니다.", "siteGeneralDescription": "이 사이트에 대한 일반 설정을 구성하세요.", - "siteSettingDescription": "사이트에서 설정을 구성하세요", + "siteSettingDescription": "사이트에서 설정을 구성하세요.", "siteSetting": "{siteName} 설정", - "siteNewtTunnel": "뉴트 터널 (추천)", - "siteNewtTunnelDescription": "네트워크에 대한 진입점을 생성하는 가장 쉬운 방법입니다. 추가 설정이 필요 없습니다.", + "siteNewtTunnel": "뉴트 사이트 (추천)", + "siteNewtTunnelDescription": "네트워크의 진입점을 생성하는 가장 쉬운 방법입니다. 추가 설정이 필요 없습니다.", "siteWg": "기본 WireGuard", "siteWgDescription": "모든 WireGuard 클라이언트를 사용하여 터널을 설정하세요. 수동 NAT 설정이 필요합니다.", "siteWgDescriptionSaas": "모든 WireGuard 클라이언트를 사용하여 터널을 설정하세요. 수동 NAT 설정이 필요합니다. 자체 호스팅 노드에서만 작동합니다.", "siteLocalDescription": "로컬 리소스만 사용 가능합니다. 터널링이 없습니다.", "siteLocalDescriptionSaas": "로컬 리소스 전용. 터널링 금지. 원격 노드에서만 사용 가능합니다.", "siteSeeAll": "모든 사이트 보기", - "siteTunnelDescription": "사이트에 연결하는 방법을 결정하세요", - "siteNewtCredentials": "Newt 자격 증명", - "siteNewtCredentialsDescription": "이것이 Newt가 서버와 인증하는 방법입니다", + "siteTunnelDescription": "사이트에 연결하는 방법을 결정하세요.", + "siteNewtCredentials": "자격 증명", + "siteNewtCredentialsDescription": "이것이 사이트가 서버와 인증하는 방법입니다.", "siteCredentialsSave": "자격 증명 저장", "siteCredentialsSaveDescription": "이것은 한 번만 볼 수 있습니다. 안전한 장소에 복사해 두세요.", "siteInfo": "사이트 정보", "status": "상태", "shareTitle": "공유 링크 관리", - "shareDescription": "공유 가능한 링크를 생성하여 리소스에 대한 임시 또는 영구 액세스를 부여합니다.", + "shareDescription": "공유 가능한 링크를 생성하여 프록시 리소스에 임시 또는 영구적으로 액세스하세요.", "shareSearch": "공유 링크 검색...", "shareCreate": "공유 링크 생성", "shareErrorDelete": "링크 삭제에 실패했습니다.", @@ -144,8 +144,10 @@ "expires": "만료", "never": "절대", "shareErrorSelectResource": "리소스를 선택하세요", - "resourceTitle": "리소스 관리", - "resourceDescription": "개인 애플리케이션에 대한 보안 프록시 생성", + "proxyResourceTitle": "공개 리소스 관리", + "proxyResourceDescription": "웹 브라우저를 통해 공용으로 접근할 수 있는 리소스를 생성하고 관리하세요.", + "clientResourceTitle": "개인 리소스 관리", + "clientResourceDescription": "연결된 클라이언트를 통해서만 접근할 수 있는 리소스를 생성하고 관리하세요.", "resourcesSearch": "리소스 검색...", "resourceAdd": "리소스 추가", "resourceErrorDelte": "리소스 삭제 중 오류 발생", @@ -155,9 +157,9 @@ "resourceMessageRemove": "제거되면 리소스에 더 이상 접근할 수 없습니다. 리소스와 연결된 모든 대상도 제거됩니다.", "resourceQuestionRemove": "조직에서 리소스를 제거하시겠습니까?", "resourceHTTP": "HTTPS 리소스", - "resourceHTTPDescription": "서브도메인 또는 기본 도메인을 사용하여 HTTPS를 통해 앱에 대한 요청을 프록시합니다.", + "resourceHTTPDescription": "서브도메인이나 기본 도메인을 사용하여 HTTPS를 통해 앱에 대한 요청을 프록시합니다.", "resourceRaw": "원시 TCP/UDP 리소스", - "resourceRawDescription": "TCP/UDP를 통해 포트 번호를 사용하여 앱에 요청을 프록시합니다.", + "resourceRawDescription": "TCP/UDP를 사용하여 포트 번호를 통해 앱에 요청을 프록시합니다. 이 기능은 사이트가 노드에 연결될 때만 작동합니다.", "resourceCreate": "리소스 생성", "resourceCreateDescription": "아래 단계를 따라 새 리소스를 생성하세요.", "resourceSeeAll": "모든 리소스 보기", @@ -171,22 +173,22 @@ "noCountryFound": "국가를 찾을 수 없습니다.", "siteSelectionDescription": "이 사이트는 대상에 대한 연결을 제공합니다.", "resourceType": "리소스 유형", - "resourceTypeDescription": "리소스에 접근하는 방법을 결정하세요", + "resourceTypeDescription": "리소스에 액세스하는 방법을 결정하세요.", "resourceHTTPSSettings": "HTTPS 설정", - "resourceHTTPSSettingsDescription": "리소스에 대한 HTTPS 접근 방식을 구성하십시오.", + "resourceHTTPSSettingsDescription": "리소스가 HTTPS로 접근할 수 있는 방식을 구성합니다.", "domainType": "도메인 유형", "subdomain": "서브도메인", "baseDomain": "기본 도메인", "subdomnainDescription": "리소스에 접근할 수 있는 하위 도메인입니다.", "resourceRawSettings": "TCP/UDP 설정", - "resourceRawSettingsDescription": "리소스를 TCP/UDP를 통해 액세스하는 방법을 구성합니다. 리소스를 호스트 Pangolin 서버의 포트에 매핑하여 서버-public-ip:매핑된 포트에서 리소스에 액세스할 수 있습니다.", + "resourceRawSettingsDescription": "TCP/UDP를 통해 리소스에 접근하는 방법을 구성하세요.", "protocol": "프로토콜", "protocolSelect": "프로토콜 선택", "resourcePortNumber": "포트 번호", "resourcePortNumberDescription": "요청을 프록시하기 위한 외부 포트 번호입니다.", "cancel": "취소", "resourceConfig": "구성 스니펫", - "resourceConfigDescription": "TCP/UDP 리소스를 설정하기 위해 이 구성 스니펫을 복사하여 붙여넣으십시오.", + "resourceConfigDescription": "TCP/UDP 리소스를 설정하기 위해 이 구성 스니펫을 복사하여 붙여넣습니다.", "resourceAddEntrypoints": "Traefik: 엔트리포인트 추가", "resourceExposePorts": "Gerbil: Docker Compose에서 포트 노출", "resourceLearnRaw": "TCP/UDP 리소스 구성 방법 알아보기", @@ -204,10 +206,10 @@ "rules": "규칙", "resourceSettingDescription": "리소스의 설정을 구성하세요.", "resourceSetting": "{resourceName} 설정", - "alwaysAllow": "항상 허용", - "alwaysDeny": "항상 거부", + "alwaysAllow": "인증 우회", + "alwaysDeny": "접근 차단", "passToAuth": "인증으로 전달", - "orgSettingsDescription": "조직의 일반 설정을 구성하세요", + "orgSettingsDescription": "조직의 일반 설정을 구성하세요.", "orgGeneralSettings": "조직 설정", "orgGeneralSettingsDescription": "조직 세부정보 및 구성을 관리하세요.", "saveGeneralSettings": "일반 설정 저장", @@ -232,7 +234,7 @@ "orgMissing": "조직 ID가 누락되었습니다", "orgMissingMessage": "조직 ID 없이 초대장을 재생성할 수 없습니다.", "accessUsersManage": "사용자 관리", - "accessUsersDescription": "사용자를 초대하고 역할에 추가하여 조직에 대한 접근을 관리하세요", + "accessUsersDescription": "이 조직에 액세스할 사용자 초대 및 관리", "accessUsersSearch": "사용자 검색...", "accessUserCreate": "사용자 생성", "accessUserRemove": "사용자 제거", @@ -241,13 +243,13 @@ "role": "역할", "nameRequired": "이름은 필수입니다", "accessRolesManage": "역할 관리", - "accessRolesDescription": "조직에 대한 액세스를 관리할 역할 구성", + "accessRolesDescription": "조직의 사용자에 대한 역할을 생성하고 관리합니다.", "accessRolesSearch": "역할 검색...", "accessRolesAdd": "역할 추가", "accessRoleDelete": "역할 삭제", "description": "설명", "inviteTitle": "열린 초대", - "inviteDescription": "다른 사용자에 대한 초대를 관리하세요", + "inviteDescription": "다른 사용자가 조직에 참여하도록 초대장을 관리합니다.", "inviteSearch": "초대 검색...", "minutes": "분", "hours": "시간", @@ -264,10 +266,10 @@ "apiKeysCreateDescription": "조직을 위한 새로운 API 키 생성", "apiKeysGeneralSettings": "권한", "apiKeysGeneralSettingsDescription": "이 API 키가 수행할 수 있는 작업 결정", - "apiKeysList": "귀하의 API 키", + "apiKeysList": "새로운 API 키", "apiKeysSave": "API 키 저장", "apiKeysSaveDescription": "이것은 한 번만 볼 수 있습니다. 안전한 장소에 복사해 두세요.", - "apiKeysInfo": "귀하의 API 키는 다음과 같습니다:", + "apiKeysInfo": "API 키는 다음과 같습니다:", "apiKeysConfirmCopy": "API 키를 복사했습니다", "generate": "생성", "done": "완료", @@ -424,7 +426,7 @@ "userCreated": "사용자가 생성되었습니다.", "userCreatedDescription": "사용자가 성공적으로 생성되었습니다.", "userTypeInternal": "내부 사용자", - "userTypeInternalDescription": "사용자를 초대하여 귀하의 조직에 직접 참여하게 하세요.", + "userTypeInternalDescription": "사용자를 초대하여 조직에 직접 참여하게 하세요.", "userTypeExternal": "외부 사용자", "userTypeExternalDescription": "외부 신원 공급자를 사용하여 사용자를 생성하세요.", "accessUserCreateDescription": "새 사용자를 만들기 위한 아래 단계를 따르세요.", @@ -436,6 +438,16 @@ "inviteEmailSent": "사용자에게 초대 이메일 보내기", "inviteValid": "유효 기간", "selectDuration": "지속 시간 선택", + "selectResource": "리소스 선택", + "filterByResource": "리소스별 필터", + "resetFilters": "필터 재설정", + "totalBlocked": "Pangolin으로 차단된 요청", + "totalRequests": "총 요청 수", + "requestsByCountry": "국가별 요청 수", + "requestsByDay": "일자별 요청 수", + "blocked": "차단됨", + "allowed": "허용됨", + "topCountries": "상위 국가", "accessRoleSelect": "역할 선택", "inviteEmailSentDescription": "아래의 접근 링크와 함께 사용자에게 이메일이 전송되었습니다. 사용자는 초대를 수락하기 위해 링크에 접근해야 합니다.", "inviteSentDescription": "사용자가 초대되었습니다. 초대를 수락하려면 아래 링크에 접속해야 합니다.", @@ -464,7 +476,7 @@ "proxyErrorInvalidHeader": "잘못된 사용자 정의 호스트 헤더 값입니다. 도메인 이름 형식을 사용하거나 사용자 정의 호스트 헤더를 해제하려면 비워 두십시오.", "proxyErrorTls": "유효하지 않은 TLS 서버 이름입니다. 도메인 이름 형식을 사용하거나 비워 두어 TLS 서버 이름을 제거하십시오.", "proxyEnableSSL": "SSL 활성화", - "proxyEnableSSLDescription": "대상에 대한 안전한 HTTPS 연결을 위해 SSL/TLS 암호화를 활성화하세요.", + "proxyEnableSSLDescription": "타겟과의 안전한 HTTPS 연결을 위한 SSL/TLS 암호화를 활성화하세요.", "target": "대상", "configureTarget": "대상 구성", "targetErrorFetch": "대상 가져오는 데 실패했습니다.", @@ -480,14 +492,14 @@ "targetsErrorUpdate": "대상 업데이트 실패", "targetsErrorUpdateDescription": "대상 업데이트 중 오류가 발생했습니다.", "targetTlsUpdate": "TLS 설정이 업데이트되었습니다.", - "targetTlsUpdateDescription": "TLS 설정이 성공적으로 업데이트되었습니다.", + "targetTlsUpdateDescription": "TLS 설정이 성공적으로 업데이트되었습니다", "targetErrorTlsUpdate": "TLS 설정 업데이트에 실패했습니다.", "targetErrorTlsUpdateDescription": "TLS 설정을 업데이트하는 동안 오류가 발생했습니다", "proxyUpdated": "프록시 설정이 업데이트되었습니다.", "proxyUpdatedDescription": "프록시 설정이 성공적으로 업데이트되었습니다", "proxyErrorUpdate": "프록시 설정 업데이트에 실패했습니다.", "proxyErrorUpdateDescription": "프록시 설정을 업데이트하는 동안 오류가 발생했습니다", - "targetAddr": "IP / 호스트 이름", + "targetAddr": "호스트", "targetPort": "포트", "targetProtocol": "프로토콜", "targetTlsSettings": "보안 연결 구성", @@ -502,7 +514,7 @@ "targetStickySessionsDescription": "세션 전체 동안 동일한 백엔드 대상을 유지합니다.", "methodSelect": "선택 방법", "targetSubmit": "대상 추가", - "targetNoOne": "이 리소스에는 대상이 없습니다. 백엔드로 요청을 보내려면 대상을 추가하세요.", + "targetNoOne": "이 리소스에는 대상이 없습니다. 백엔드로 요청을 보낼 대상을 구성하려면 대상을 추가하세요.", "targetNoOneDescription": "위에 하나 이상의 대상을 추가하면 로드 밸런싱이 활성화됩니다.", "targetsSubmit": "대상 저장", "addTarget": "대상 추가", @@ -516,6 +528,8 @@ "targetCreatedDescription": "대상이 성공적으로 생성되었습니다.", "targetErrorCreate": "대상 생성 실패", "targetErrorCreateDescription": "대상 생성 중 오류가 발생했습니다.", + "tlsServerName": "TLS 서버 이름", + "tlsServerNameDescription": "SNI를 위한 TLS 서버 이름", "save": "저장", "proxyAdditional": "추가 프록시 설정", "proxyAdditionalDescription": "리소스가 프록시 설정을 처리하는 방법 구성", @@ -607,9 +621,9 @@ "unknownCommand": "알 수 없는 명령", "newtErrorFetchReleases": "릴리스 정보를 가져오는 데 실패했습니다: {err}", "newtErrorFetchLatest": "최신 릴리스를 가져오는 중 오류 발생: {err}", - "newtEndpoint": "Newt 엔드포인트", - "newtId": "뉴트 ID", - "newtSecretKey": "Newt 비밀 키", + "newtEndpoint": "엔드포인트", + "newtId": "ID", + "newtSecretKey": "비밀", "architecture": "아키텍처", "sites": "사이트", "siteWgAnyClients": "WireGuard 클라이언트를 사용하여 연결하십시오. 피어 IP를 사용하여 내부 리소스에 접근해야 합니다.", @@ -671,7 +685,7 @@ "resourcePincodeSetupTitle": "핀코드 설정", "resourcePincodeSetupTitleDescription": "이 리소스를 보호하기 위해 핀 코드를 설정하십시오.", "resourceRoleDescription": "관리자는 항상 이 리소스에 접근할 수 있습니다.", - "resourceUsersRoles": "사용자 및 역할", + "resourceUsersRoles": "접근 제어", "resourceUsersRolesDescription": "이 리소스를 방문할 수 있는 사용자 및 역할을 구성하십시오", "resourceUsersRolesSubmit": "사용자 및 역할 저장", "resourceWhitelistSave": "성공적으로 저장되었습니다.", @@ -702,6 +716,7 @@ "resourceTransferSubmit": "리소스 전송", "siteDestination": "대상 사이트", "searchSites": "사이트 검색", + "countries": "국가", "accessRoleCreate": "역할 생성", "accessRoleCreateDescription": "사용자를 그룹화하고 권한을 관리하기 위해 새 역할을 생성하세요.", "accessRoleCreateSubmit": "역할 생성", @@ -909,6 +924,10 @@ "passwordResetSent": "이 이메일 주소로 비밀번호 재설정 코드를 전송하겠습니다.", "passwordResetCode": "코드 재설정", "passwordResetCodeDescription": "재설정 코드를 확인하려면 이메일을 확인하세요.", + "generatePasswordResetCode": "비밀번호 초기화 코드 생성", + "passwordResetCodeGenerated": "비밀번호 초기화 코드 생성됨", + "passwordResetCodeGeneratedDescription": "이 코드를 사용자와 공유하세요. 사용자는 이를 사용하여 비밀번호를 재설정할 수 있습니다.", + "passwordResetUrl": "리디렉션 URL", "passwordNew": "새 비밀번호", "passwordNewConfirm": "새 비밀번호 확인", "changePassword": "비밀번호 변경", @@ -926,6 +945,9 @@ "pincodeAuth": "인증 코드", "pincodeSubmit2": "코드 제출", "passwordResetSubmit": "재설정 요청", + "passwordResetAlreadyHaveCode": "비밀번호 초기화 코드를 입력하세요", + "passwordResetSmtpRequired": "관리자에게 문의하십시오", + "passwordResetSmtpRequiredDescription": "비밀번호를 재설정하려면 비밀번호 초기화 코드가 필요합니다. 지원을 받으려면 관리자에게 문의하십시오.", "passwordBack": "비밀번호로 돌아가기", "loginBack": "로그인으로 돌아가기", "signup": "가입하기", @@ -1091,12 +1113,15 @@ "actionListSiteResources": "사이트 리소스 목록", "actionUpdateSiteResource": "사이트 리소스 업데이트", "actionListInvitations": "초대 목록", + "actionExportLogs": "로그 내보내기", + "actionViewLogs": "로그 보기", "noneSelected": "선택된 항목 없음", "orgNotFound2": "조직이 없습니다.", "searchProgress": "검색...", "create": "생성", "orgs": "조직", "loginError": "로그인 중 오류가 발생했습니다", + "loginRequiredForDevice": "장치를 인증하려면 로그인이 필요합니다.", "passwordForgot": "비밀번호를 잊으셨나요?", "otpAuth": "이중 인증", "otpAuthDescription": "인증 앱에서 코드를 입력하거나 단일 사용 백업 코드 중 하나를 입력하세요.", @@ -1151,19 +1176,29 @@ "sidebarHome": "홈", "sidebarSites": "사이트", "sidebarResources": "리소스", + "sidebarProxyResources": "공유", + "sidebarClientResources": "비공개", "sidebarAccessControl": "액세스 제어", + "sidebarLogsAndAnalytics": "로그 및 분석", "sidebarUsers": "사용자", + "sidebarAdmin": "관리자", "sidebarInvitations": "초대", "sidebarRoles": "역할", - "sidebarShareableLinks": "공유 가능한 링크", + "sidebarShareableLinks": "링크", "sidebarApiKeys": "API 키", "sidebarSettings": "설정", "sidebarAllUsers": "모든 사용자", "sidebarIdentityProviders": "신원 공급자", "sidebarLicense": "라이선스", "sidebarClients": "클라이언트", + "sidebarUserDevices": "사용자", + "sidebarMachineClients": "기계", "sidebarDomains": "도메인", + "sidebarGeneral": "일반", + "sidebarLogAndAnalytics": "로그 & 통계", "sidebarBluePrints": "청사진", + "sidebarOrganization": "조직", + "sidebarLogsAnalytics": "분석", "blueprints": "청사진", "blueprintsDescription": "선언적 구성을 적용하고 이전 실행을 봅니다", "blueprintAdd": "청사진 추가", @@ -1174,7 +1209,7 @@ "blueprintDetailsDescription": "적용된 청사진의 결과와 발생한 오류를 확인합니다", "blueprintInfo": "청사진 정보", "message": "메시지", - "blueprintContentsDescription": "인프라를 설명하는 YAML 콘텐츠를 정의하십시오", + "blueprintContentsDescription": "인프라를 설명하는 YAML 내용을 정의하십시오", "blueprintErrorCreateDescription": "청사진을 적용하는 중 오류가 발생했습니다", "blueprintErrorCreate": "청사진 생성 오류", "searchBlueprintProgress": "청사진 검색...", @@ -1230,14 +1265,14 @@ "loading": "로딩 중", "restart": "재시작", "domains": "도메인", - "domainsDescription": "조직의 도메인을 관리합니다", + "domainsDescription": "조직에서 사용 가능한 도메인 생성 및 관리", "domainsSearch": "도메인 검색...", "domainAdd": "도메인 추가", "domainAddDescription": "조직에 새로운 도메인을 등록하세요", "domainCreate": "도메인 생성", "domainCreatedDescription": "도메인이 성공적으로 생성되었습니다", "domainDeletedDescription": "도메인이 성공적으로 삭제되었습니다", - "domainQuestionRemove": "계정에서 도메인을 제거하시겠습니까?", + "domainQuestionRemove": "도메인을 제거하시겠습니까?", "domainMessageRemove": "제거되면 도메인이 더 이상 계정과 연관되지 않습니다.", "domainConfirmDelete": "도메인 삭제 확인", "domainDelete": "도메인 삭제", @@ -1285,7 +1320,7 @@ "productUpdateTitle": "제품 업데이트", "productUpdateEmpty": "업데이트 없음", "dismissAll": "모두 해제", - "pangolinUpdateAvailable": "새 버전 사용 가능", + "pangolinUpdateAvailable": "업데이트 가능", "pangolinUpdateAvailableInfo": "버전 {version}을(를) 설치할 준비가 되었습니다", "pangolinUpdateAvailableReleaseNotes": "릴리스 노트 보기", "newtUpdateAvailable": "업데이트 가능", @@ -1430,28 +1465,31 @@ "and": "및", "privacyPolicy": "개인 정보 보호 정책" }, + "signUpMarketing": { + "keepMeInTheLoop": "이메일을 통해 소식, 업데이트 및 새로운 기능을 받아보세요." + }, "siteRequired": "사이트가 필요합니다.", "olmTunnel": "Olm 터널", "olmTunnelDescription": "클라이언트 연결에 Olm 사용", "errorCreatingClient": "클라이언트 생성 오류", "clientDefaultsNotFound": "클라이언트 기본값을 찾을 수 없습니다.", "createClient": "클라이언트 생성", - "createClientDescription": "사이트에 연결하기 위한 새 클라이언트를 생성하십시오.", + "createClientDescription": "개인 리소스에 액세스할 새 클라이언트를 생성하십시오", "seeAllClients": "모든 클라이언트 보기", "clientInformation": "클라이언트 정보", "clientNamePlaceholder": "클라이언트 이름", "address": "주소", "subnetPlaceholder": "서브넷", - "addressDescription": "이 클라이언트가 연결에 사용할 주소", + "addressDescription": "클라이언트의 내부 주소. 조직의 서브넷 내에 있어야 합니다.", "selectSites": "사이트 선택", "sitesDescription": "클라이언트는 선택한 사이트에 연결됩니다.", "clientInstallOlm": "Olm 설치", "clientInstallOlmDescription": "시스템에서 Olm을 실행하기", "clientOlmCredentials": "Olm 자격 증명", - "clientOlmCredentialsDescription": "Olm이 서버와 인증하는 방법입니다.", + "clientOlmCredentialsDescription": "이것이 Newt가 서버와 인증하는 방법입니다", "olmEndpoint": "Olm 엔드포인트", - "olmId": "Olm ID", - "olmSecretKey": "Olm 비밀 키", + "olmId": "ID", + "olmSecretKey": "비밀", "clientCredentialsSave": "자격 증명 저장", "clientCredentialsSaveDescription": "이것은 한 번만 볼 수 있습니다. 안전한 장소에 복사해 두세요.", "generalSettingsDescription": "이 클라이언트에 대한 일반 설정을 구성하세요.", @@ -1463,9 +1501,7 @@ "sitesFetchError": "사이트 가져오는 중 오류가 발생했습니다.", "olmErrorFetchReleases": "Olm 릴리즈 가져오는 중 오류가 발생했습니다.", "olmErrorFetchLatest": "최신 Olm 릴리즈 가져오는 중 오류가 발생했습니다.", - "remoteSubnets": "원격 서브넷", "enterCidrRange": "CIDR 범위 입력", - "remoteSubnetsDescription": "이 사이트에서 원격으로 액세스할 수 있는 CIDR 범위를 추가하세요. 10.0.0.0/24와 같은 형식을 사용하세요. 이는 VPN 클라이언트 연결에만 적용됩니다.", "resourceEnableProxy": "공개 프록시 사용", "resourceEnableProxyDescription": "이 리소스에 대한 공개 프록시를 활성화하십시오. 이를 통해 네트워크 외부로부터 클라우드를 통해 열린 포트에서 리소스에 액세스할 수 있습니다. Traefik 구성이 필요합니다.", "externalProxyEnabled": "외부 프록시 활성화됨", @@ -1483,14 +1519,15 @@ "enableHealthChecksDescription": "이 대상을 모니터링하여 건강 상태를 확인하세요. 필요에 따라 대상과 다른 엔드포인트를 모니터링할 수 있습니다.", "healthScheme": "방법", "healthSelectScheme": "방법 선택", + "healthCheckPortInvalid": "올바르지 않은 서브넷 마스크입니다. 1에서 65535 사이여야 합니다", "healthCheckPath": "경로", "healthHostname": "IP / 호스트", "healthPort": "포트", "healthCheckPathDescription": "상태 확인을 위한 경로입니다.", - "healthyIntervalSeconds": "정상 간격", - "unhealthyIntervalSeconds": "비정상 간격", + "healthyIntervalSeconds": "정상 간격(초)", + "unhealthyIntervalSeconds": "비정상 간격(초)", "IntervalSeconds": "정상 간격", - "timeoutSeconds": "시간 초과", + "timeoutSeconds": "타임아웃(초)", "timeIsInSeconds": "시간은 초 단위입니다", "retryAttempts": "재시도 횟수", "expectedResponseCodes": "예상 응답 코드", @@ -1526,12 +1563,12 @@ "resourceEditDomain": "도메인 수정", "siteName": "사이트 이름", "proxyPort": "포트", - "resourcesTableProxyResources": "프록시 리소스", - "resourcesTableClientResources": "클라이언트 리소스", + "resourcesTableProxyResources": "공유", + "resourcesTableClientResources": "비공개", "resourcesTableNoProxyResourcesFound": "프록시 리소스를 찾을 수 없습니다.", "resourcesTableNoInternalResourcesFound": "내부 리소스를 찾을 수 없습니다.", "resourcesTableDestination": "대상지", - "resourcesTableTheseResourcesForUseWith": "이 리소스는 다음과 함께 사용하기 위한 것입니다.", + "resourcesTableAlias": "별칭", "resourcesTableClients": "클라이언트", "resourcesTableAndOnlyAccessibleInternally": "클라이언트와 연결되었을 때만 내부적으로 접근 가능합니다.", "resourcesTableNoTargets": "대상 없음", @@ -1540,8 +1577,8 @@ "resourcesTableOffline": "오프라인", "resourcesTableUnknown": "알 수 없음", "resourcesTableNotMonitored": "모니터링되지 않음", - "editInternalResourceDialogEditClientResource": "클라이언트 리소스 수정", - "editInternalResourceDialogUpdateResourceProperties": "{resourceName}의 리소스 속성과 대상 구성을 업데이트하세요.", + "editInternalResourceDialogEditClientResource": "비공개 리소스 수정", + "editInternalResourceDialogUpdateResourceProperties": "{resourceName}의 리소스 속성과 대상 구성을 업데이트하세요", "editInternalResourceDialogResourceProperties": "리소스 속성", "editInternalResourceDialogName": "이름", "editInternalResourceDialogProtocol": "프로토콜", @@ -1560,11 +1597,22 @@ "editInternalResourceDialogInvalidIPAddressFormat": "잘못된 IP 주소 형식", "editInternalResourceDialogDestinationPortMin": "대상 포트는 최소 1이어야 합니다.", "editInternalResourceDialogDestinationPortMax": "대상 포트는 65536 미만이어야 합니다.", + "editInternalResourceDialogPortModeRequired": "포트 모드에는 프로토콜, 프록시 포트 및 대상 포트가 필요합니다", + "editInternalResourceDialogMode": "모드", + "editInternalResourceDialogModePort": "포트", + "editInternalResourceDialogModeHost": "호스트", + "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogDestination": "대상지", + "editInternalResourceDialogDestinationHostDescription": "사이트 네트워크의 자원 IP 주소입니다.", + "editInternalResourceDialogDestinationIPDescription": "사이트 네트워크의 자원 IP 또는 호스트 네임 주소입니다.", + "editInternalResourceDialogDestinationCidrDescription": "사이트 네트워크의 자원 IP 주소입니다.", + "editInternalResourceDialogAlias": "별칭", + "editInternalResourceDialogAliasDescription": "이 리소스에 대한 선택적 내부 DNS 별칭입니다.", "createInternalResourceDialogNoSitesAvailable": "사용 가능한 사이트가 없습니다.", "createInternalResourceDialogNoSitesAvailableDescription": "내부 리소스를 생성하려면 서브넷이 구성된 최소 하나의 Newt 사이트가 필요합니다.", "createInternalResourceDialogClose": "닫기", - "createInternalResourceDialogCreateClientResource": "클라이언트 리소스 생성", - "createInternalResourceDialogCreateClientResourceDescription": "선택한 사이트에 연결된 클라이언트에 접근할 새 리소스를 생성합니다.", + "createInternalResourceDialogCreateClientResource": "사이트 리소스 생성", + "createInternalResourceDialogCreateClientResourceDescription": "선택한 사이트에 연결된 클라이언트에 접근할 새 리소스를 생성합니다", "createInternalResourceDialogResourceProperties": "리소스 속성", "createInternalResourceDialogName": "이름", "createInternalResourceDialogSite": "사이트", @@ -1593,11 +1641,22 @@ "createInternalResourceDialogInvalidIPAddressFormat": "잘못된 IP 주소 형식", "createInternalResourceDialogDestinationPortMin": "대상 포트는 최소 1이어야 합니다.", "createInternalResourceDialogDestinationPortMax": "대상 포트는 65536 미만이어야 합니다.", + "createInternalResourceDialogPortModeRequired": "포트 모드에는 프로토콜, 프록시 포트 및 대상 포트가 필요합니다", + "createInternalResourceDialogMode": "모드", + "createInternalResourceDialogModePort": "포트", + "createInternalResourceDialogModeHost": "호스트", + "createInternalResourceDialogModeCidr": "CIDR", + "createInternalResourceDialogDestination": "대상지", + "createInternalResourceDialogDestinationHostDescription": "사이트 네트워크의 자원 IP 주소입니다.", + "createInternalResourceDialogDestinationCidrDescription": "사이트 네트워크의 자원 IP 주소입니다.", + "createInternalResourceDialogAlias": "별칭", + "createInternalResourceDialogAliasDescription": "이 리소스에 대한 선택적 내부 DNS 별칭입니다.", "siteConfiguration": "설정", "siteAcceptClientConnections": "클라이언트 연결 허용", - "siteAcceptClientConnectionsDescription": "이 Newt 인스턴스를 게이트웨이로 사용하여 다른 장치가 연결될 수 있도록 허용합니다.", - "siteAddress": "사이트 주소", - "siteAddressDescription": "클라이언트가 연결하기 위한 호스트의 IP 주소를 지정합니다. 이는 클라이언트가 주소를 지정하기 위한 Pangolin 네트워크의 사이트 내부 주소입니다. 조직 서브넷 내에 있어야 합니다.", + "siteAcceptClientConnectionsDescription": "사용자 장치와 클라이언트가 이 사이트의 리소스에 접근할 수 있도록 허용하세요. 나중에 변경할 수 있습니다.", + "siteAddress": "사이트 주소(고급)", + "siteAddressDescription": "사이트의 내부 주소. 조직의 서브넷 내에 있어야 합니다.", + "siteNameDescription": "나중에 변경할 수 있는 사이트의 표시 이름입니다.", "autoLoginExternalIdp": "외부 IDP로 자동 로그인", "autoLoginExternalIdpDescription": "인증을 위해 외부 IDP로 사용자를 즉시 리디렉션합니다.", "selectIdp": "IDP 선택", @@ -1611,7 +1670,7 @@ "autoLoginErrorNoRedirectUrl": "ID 공급자로부터 리디렉션 URL을 받지 못했습니다.", "autoLoginErrorGeneratingUrl": "인증 URL 생성 실패.", "remoteExitNodeManageRemoteExitNodes": "원격 노드", - "remoteExitNodeDescription": "네트워크 연결성을 확장하고 클라우드 의존도를 줄이기 위해 하나 이상의 원격 노드를 자체 호스트하십시오.", + "remoteExitNodeDescription": "하나 이상의 원격 노드를 자체 호스팅하여 네트워크 연결을 확장하고 클라우드에 대한 의존도를 줄입니다.", "remoteExitNodes": "노드", "searchRemoteExitNodes": "노드 검색...", "remoteExitNodeAdd": "노드 추가", @@ -1730,7 +1789,7 @@ "idpAzureConfiguration": "Azure Entra ID 구성", "idpAzureConfigurationDescription": "Azure Entra ID OAuth2 자격 증명을 구성합니다.", "idpTenantId": "테넌트 ID", - "idpTenantIdPlaceholder": "your-tenant-id", + "idpTenantIdPlaceholder": "테넌트 ID", "idpAzureTenantIdDescription": "Azure 액티브 디렉터리 개요에서 찾은 Azure 테넌트 ID", "idpAzureClientIdDescription": "Azure 앱 등록 클라이언트 ID", "idpAzureClientSecretDescription": "Azure 앱 등록 클라이언트 비밀", @@ -1791,7 +1850,7 @@ "enableTwoFactorAuthentication": "이중 인증 활성화", "completeSecuritySteps": "보안 단계 완료", "securitySettings": "보안 설정", - "securitySettingsDescription": "조직에 대한 보안 정책을 구성합니다", + "securitySettingsDescription": "조직의 보안 정책을 구성하세요", "requireTwoFactorForAllUsers": "모든 사용자에 대해 이중 인증 요구", "requireTwoFactorDescription": "활성화되면, 이 조직의 모든 내부 사용자는 조직에 접근하기 위해 이중 인증을 활성화해야 합니다.", "requireTwoFactorDisabledDescription": "이 기능을 사용하려면 유효한 라이선스(Enterprise) 또는 활성 구독(SaaS)가 필요합니다.", @@ -1854,8 +1913,12 @@ "enterpriseEdition": "엔터프라이즈 에디션", "unlicensed": "라이선스 없음", "beta": "베타", - "manageClients": "클라이언트 관리", - "manageClientsDescription": "클라이언트는 당신의 사이트에 연결할 수 있는 디바이스입니다.", + "manageUserDevices": "사용자 초대를 제어", + "manageUserDevicesDescription": "리소스에 개인적으로 연결하기 위해 사용자가 사용하는 장치를 보고 관리하세요", + "manageMachineClients": "기계 클라이언트 관리", + "manageMachineClientsDescription": "서버와 시스템이 리소스에 개인적으로 연결하는 데 사용하는 클라이언트를 생성하고 관리하십시오", + "clientsTableUserClients": "사용자", + "clientsTableMachineClients": "기계", "licenseTableValidUntil": "유효 기한", "saasLicenseKeysSettingsTitle": "엔터프라이즈 라이선스", "saasLicenseKeysSettingsDescription": "자체 호스팅된 Pangolin 인스턴스를 위한 엔터프라이즈 라이선스 키를 생성하고 관리합니다.", @@ -1990,11 +2053,12 @@ "pathRewriteStripLabel": "제거", "sidebarEnableEnterpriseLicense": "엔터프라이즈 라이선스 활성화", "cannotbeUndone": "이 작업은 되돌릴 수 없습니다.", - "toConfirm": "확인하려면", + "toConfirm": "확인을 위해.", "deleteClientQuestion": "고객을 사이트와 조직에서 제거하시겠습니까?", "clientMessageRemove": "제거되면 클라이언트는 사이트에 더 이상 연결할 수 없습니다.", "sidebarLogs": "로그", "request": "요청", + "requests": "요청", "logs": "로그", "logsSettingsDescription": "이 조직에서 수집된 로그를 모니터링합니다", "searchLogs": "로그 검색...", @@ -2020,6 +2084,7 @@ "ip": "IP", "reason": "이유", "requestLogs": "요청 로그", + "requestAnalytics": "요청 분석", "host": "호스트", "location": "위치", "actionLogs": "작업 로그", @@ -2029,6 +2094,7 @@ "logRetention": "로그 보관", "logRetentionDescription": "다양한 유형의 로그를 이 조직에 대해 얼마나 오래 보관할지 관리하거나 비활성화합니다", "requestLogsDescription": "이 조직의 자원에 대한 상세한 요청 로그를 봅니다", + "requestAnalyticsDescription": "이 조직의 리소스에 대한 자세한 요청 분석 보기", "logRetentionRequestLabel": "요청 로그 보관", "logRetentionRequestDescription": "요청 로그를 얼마나 오래 보관할지", "logRetentionAccessLabel": "접근 로그 보관", @@ -2042,6 +2108,7 @@ "logRetention30Days": "30 일", "logRetention90Days": "90 일", "logRetentionForever": "영구", + "logRetentionEndOfFollowingYear": "다음 연도 말", "actionLogsDescription": "이 조직에서 수행된 작업의 기록을 봅니다", "accessLogsDescription": "이 조직의 자원에 대한 접근 인증 요청을 확인합니다", "licenseRequiredToUse": "이 기능을 사용하려면 Enterprise 라이선스가 필요합니다.", @@ -2052,7 +2119,7 @@ "preferWildcardCert": "와일드카드 인증서 선호", "unverified": "검증되지 않음", "domainSetting": "도메인 설정", - "domainSettingDescription": "도메인에 대한 설정을 구성하세요.", + "domainSettingDescription": "도메인 설정 구성", "preferWildcardCertDescription": "와일드카드 인증서를 생성하려고 시도합니다 (올바르게 구성된 인증서 해결사가 필요합니다).", "recordName": "레코드 이름", "auto": "자동", @@ -2066,9 +2133,9 @@ "olmUpdateAvailableInfo": "올름의 새 버전이 이용 가능합니다. 최상의 경험을 위해 최신 버전으로 업데이트하세요.", "client": "클라이언트", "proxyProtocol": "프록시 프로토콜 설정", - "proxyProtocolDescription": "프록시 프로토콜을 구성하여 TCP/UDP 서비스에 대한 클라이언트 IP 주소를 보존하십시오.", + "proxyProtocolDescription": "TCP 서비스에 대한 클라이언트 IP 주소를 유지하도록 프록시 프로토콜을 구성하세요.", "enableProxyProtocol": "프록시 프로토콜 활성화", - "proxyProtocolInfo": "TCP/UDP 백엔드의 클라이언트 IP 주소를 보존합니다", + "proxyProtocolInfo": "TCP 백엔드에 대한 클라이언트 IP 주소를 유지합니다.", "proxyProtocolVersion": "프록시 프로토콜 버전", "version1": " 버전 1 (추천)", "version2": "버전 2", @@ -2097,6 +2164,43 @@ "supportMessageSent": "메시지 전송 완료!", "supportWillContact": "곧 연락드리겠습니다!", "selectLogRetention": "로그 보존 선택", + "terms": "약관", + "privacy": "개인정보 보호", + "security": "보안", + "docs": "문서", + "deviceActivation": "장치 활성화", + "deviceCodeInvalidFormat": "코드는 9자리여야 합니다 (예: A1AJ-N5JD)", + "deviceCodeInvalidOrExpired": "무효하거나 만료된 코드", + "deviceCodeVerifyFailed": "이메일 확인에 실패했습니다:", + "signedInAs": "로그인한 사용자", + "deviceCodeEnterPrompt": "기기에 표시된 코드를 입력하세요", + "continue": "계속 진행하기", + "deviceUnknownLocation": "알 수 없는 위치", + "deviceAuthorizationRequested": "이 인증 요청은 {location}에서 {date}에 요청되었습니다. 이 장치에 액세스 권한을 부여할 신뢰할 수 있는 경우 확인하세요.", + "deviceLabel": "장치: {deviceName}", + "deviceWantsAccess": "계정에 액세스하려고 합니다", + "deviceExistingAccess": "기존 액세스:", + "deviceFullAccess": "계정에 대한 전체 액세스", + "deviceOrganizationsAccess": "계정이 접근할 수 있는 모든 조직에 대한 접근", + "deviceAuthorize": "{applicationName} 권한 부여", + "deviceConnected": "장치가 연결되었습니다!", + "deviceAuthorizedMessage": "장치가 계정에 액세스할 수 있도록 승인되었습니다.", + "pangolinCloud": "판골린 클라우드", + "viewDevices": "장치 보기", + "viewDevicesDescription": "연결된 장치를 관리하십시오", + "noDevices": "장치를 찾을 수 없습니다", + "dateCreated": "생성 날짜", + "unnamedDevice": "이름 없는 장치", + "deviceQuestionRemove": "이 장치를 삭제하시겠습니까?", + "deviceMessageRemove": "이 작업은 취소할 수 없습니다.", + "deviceDeleteConfirm": "장치 삭제", + "deleteDevice": "장치 삭제", + "errorLoadingDevices": "장치 로딩 오류", + "failedToLoadDevices": "장치를 로드하지 못했습니다", + "deviceDeleted": "장치 삭제 완료", + "deviceDeletedDescription": "장치가 성공적으로 삭제되었습니다.", + "errorDeletingDevice": "장치 삭제 오류", + "failedToDeleteDevice": "장치를 삭제하지 못했습니다", "showColumns": "열 표시", "hideColumns": "열 숨기기", "columnVisibility": "열 가시성", @@ -2111,10 +2215,14 @@ "enableSelected": "선택된 항목 활성화", "disableSelected": "선택된 항목 비활성화", "checkSelectedStatus": "선택된 항목 상태 확인", + "clients": "클라이언트", + "accessClientSelect": "기계 클라이언트 선택", + "resourceClientDescription": "관리자는 항상 이 리소스에 접근할 수 있습니다", + "regenerate": "재생성", "credentials": "자격 증명", "savecredentials": "자격 증명 저장", - "regeneratecredentials": "재생성", - "regenerateCredentials": "자격 증명을 재생성하고 저장합니다", + "regenerateCredentialsButton": "자격 증명 다시 생성", + "regenerateCredentials": "자격 증명 다시 생성", "generatedcredentials": "생성된 자격 증명", "copyandsavethesecredentials": "이 자격 증명을 복사하여 저장합니다", "copyandsavethesecredentialsdescription": "이 페이지를 떠난 후에는 자격 증명이 다시 표시되지 않습니다. 지금 안전하게 저장하십시오.", @@ -2122,13 +2230,12 @@ "credentialsSavedDescription": "자격 증명이 성공적으로 재생성 및 저장되었습니다.", "credentialsSaveError": "자격 증명 저장 오류", "credentialsSaveErrorDescription": "자격 증명을 재생성하고 저장하는 동안 오류가 발생했습니다.", - "regenerateCredentialsWarning": "자격 증명을 재생성하면 이전 자격 증명이 무효화됩니다. 이 자격 증명을 사용하는 모든 구성을 업데이트하십시오.", + "regenerateCredentialsWarning": "자격 증명을 다시 생성하면 이전 것들이 무효화되면서 연결이 끊어집니다. 이러한 자격 증명을 사용하는 모든 구성을 업데이트하세요.", "confirm": "확인", "regenerateCredentialsConfirmation": "자격 증명을 재생성하시겠습니까?", "endpoint": "엔드포인트", "Id": "아이디", "SecretKey": "비밀 키", - "featureDisabledTooltip": "이 기능은 엔터프라이즈 플랜에서만 사용할 수 있으며 라이센스가 필요합니다.", "niceId": "예쁜 ID", "niceIdUpdated": "예쁜 ID 업데이트됨", "niceIdUpdatedSuccessfully": "예쁜 ID가 성공적으로 업데이트되었습니다", @@ -2136,5 +2243,32 @@ "niceIdUpdateErrorDescription": "예쁜 ID를 업데이트하는 동안 오류가 발생했습니다.", "niceIdCannotBeEmpty": "예쁜 ID는 비워둘 수 없습니다", "enterIdentifier": "식별자 입력", - "identifier": "식별자" + "identifier": "식별자", + "deviceLoginUseDifferentAccount": "본인이 아닙니까? 다른 계정을 사용하세요.", + "deviceLoginDeviceRequestingAccessToAccount": "장치가 이 계정에 접근하려고 합니다.", + "noData": "데이터 없음", + "machineClients": "기계 클라이언트", + "install": "설치", + "run": "실행", + "clientNameDescription": "나중에 변경할 수 있는 클라이언트의 표시 이름입니다.", + "clientAddress": "클라이언트 주소(고급)", + "setupFailedToFetchSubnet": "기본값 로드 실패", + "setupSubnetAdvanced": "서브넷(고급)", + "setupSubnetDescription": "이 조직의 네트워크 구성에 대한 서브넷입니다.", + "siteRegenerateAndDisconnect": "재생성 및 연결 해제", + "siteRegenerateAndDisconnectConfirmation": "자격 증명을 재생성하고 이 사이트와의 연결을 해제하시겠습니까?", + "siteRegenerateAndDisconnectWarning": "이 과정은 자격 증명을 다시 생성하고 사이트와의 연결을 즉시 해제합니다. 사이트는 새 자격 증명으로 다시 시작되어야 합니다.", + "siteRegenerateCredentialsConfirmation": "이 사이트에 대한 자격 증명을 다시 생성하시겠습니까?", + "siteRegenerateCredentialsWarning": "이 과정은 자격 증명을 다시 생성합니다. 수동으로 다시 시작하고 새 자격 증명을 사용하기 전까지 사이트는 연결된 상태로 유지됩니다.", + "clientRegenerateAndDisconnect": "재생성 및 연결 해제", + "clientRegenerateAndDisconnectConfirmation": "자격 증명을 재생성하고 이 클라이언트와의 연결을 해제하시겠습니까?", + "clientRegenerateAndDisconnectWarning": "이 과정은 자격 증명을 다시 생성하고 클라이언트와의 연결을 즉시 해제합니다. 클라이언트는 새 자격 증명으로 다시 시작되어야 합니다.", + "clientRegenerateCredentialsConfirmation": "이 클라이언트에 대한 자격 증명을 다시 생성하시겠습니까?", + "clientRegenerateCredentialsWarning": "이 과정은 자격 증명을 다시 생성합니다. 수동으로 다시 시작하고 새 자격 증명을 사용하기 전까지 클라이언트는 연결된 상태로 유지됩니다.", + "remoteExitNodeRegenerateAndDisconnect": "재생성 및 연결 해제", + "remoteExitNodeRegenerateAndDisconnectConfirmation": "자격 증명을 재생성하고 이 원격 종료 노드와의 연결을 해제하시겠습니까?", + "remoteExitNodeRegenerateAndDisconnectWarning": "이 과정은 자격 증명을 다시 생성하고 원격 종료 노드와의 연결을 즉시 해제합니다. 원격 종료 노드는 새 자격 증명으로 다시 시작되어야 합니다.", + "remoteExitNodeRegenerateCredentialsConfirmation": "이 원격 종료 노드에 대한 자격 증명을 다시 생성하시겠습니까?", + "remoteExitNodeRegenerateCredentialsWarning": "이 과정은 자격 증명을 다시 생성합니다. 수동으로 다시 시작하고 새 자격 증명을 사용하기 전까지 원격 종료 노드는 연결된 상태로 유지됩니다.", + "agent": "에이전트" } diff --git a/messages/nb-NO.json b/messages/nb-NO.json index c2f8f791d..ec7553b67 100644 --- a/messages/nb-NO.json +++ b/messages/nb-NO.json @@ -1,12 +1,12 @@ { - "setupCreate": "Lag din organisasjon, område og dine ressurser", + "setupCreate": "Opprett organisasjonen, nettstedet og ressursene", "setupNewOrg": "Ny Organisasjon", "setupCreateOrg": "Opprett organisasjon", "setupCreateResources": "Opprett ressurser", "setupOrgName": "Organisasjonsnavn", - "orgDisplayName": "Dette er visningsnavnet til organisasjonen din.", + "orgDisplayName": "Dette er organisasjonens visningsnavn.", "orgId": "Organisasjons-ID", - "setupIdentifierMessage": "Dette er den unike identifikator for din organisasjon. Dette er separat fra visningsnavnet.", + "setupIdentifierMessage": "Dette er den unike identifikatoren for organisasjonen.", "setupErrorIdentifier": "Organisasjons-ID er allerede tatt. Vennligst velg en annen.", "componentsErrorNoMemberCreate": "Du er for øyeblikket ikke medlem av noen organisasjoner. Lag en organisasjon for å komme i gang.", "componentsErrorNoMember": "Du er for øyeblikket ikke medlem av noen organisasjoner.", @@ -50,10 +50,10 @@ "siteMessageRemove": "Når nettstedet er fjernet, vil det ikke lenger være tilgjengelig. Alle målene for nettstedet vil også bli fjernet.", "siteQuestionRemove": "Er du sikker på at du vil fjerne nettstedet fra organisasjonen?", "siteManageSites": "Administrer Områder", - "siteDescription": "Tillat tilkobling til nettverket ditt gjennom sikre tunneler", + "siteDescription": "Opprette og administrere nettsteder for å aktivere tilkobling til private nettverk", "siteCreate": "Opprett område", "siteCreateDescription2": "Følg trinnene nedenfor for å opprette og koble til et nytt område", - "siteCreateDescription": "Opprett et nytt område for å begynne å koble til ressursene dine", + "siteCreateDescription": "Opprett et nytt nettsted for å koble til ressurser", "close": "Lukk", "siteErrorCreate": "Feil ved oppretting av område", "siteErrorCreateKeyPair": "Nøkkelpar eller standardinnstillinger for område ikke funnet", @@ -74,7 +74,7 @@ "siteInstallNewt": "Installer Newt", "siteInstallNewtDescription": "Få Newt til å kjøre på systemet ditt", "WgConfiguration": "WireGuard Konfigurasjon", - "WgConfigurationDescription": "Bruk følgende konfigurasjon for å koble til nettverket ditt", + "WgConfigurationDescription": "Bruk følgende konfigurasjon for å koble til nettverket", "operatingSystem": "Operativsystem", "commands": "Kommandoer", "recommended": "Anbefalt", @@ -87,32 +87,32 @@ "siteUpdated": "Område oppdatert", "siteUpdatedDescription": "Området har blitt oppdatert.", "siteGeneralDescription": "Konfigurer de generelle innstillingene for dette området", - "siteSettingDescription": "Konfigurer innstillingene for området ditt", + "siteSettingDescription": "Konfigurere innstillingene på nettstedet", "siteSetting": "{siteName} Innstillinger", - "siteNewtTunnel": "Newt Tunnel (Anbefalt)", - "siteNewtTunnelDescription": "Enkleste måte å opprette et inngangspunkt i nettverket ditt. Ingen ekstra oppsett.", + "siteNewtTunnel": "Nyhetsnettsted (anbefalt)", + "siteNewtTunnelDescription": "Lekkeste måte å lage et inngangspunkt til ethvert nettverk. Ingen ekstra oppsett på.", "siteWg": "Grunnleggende WireGuard", "siteWgDescription": "Bruk hvilken som helst WireGuard-klient for å etablere en tunnel. Manuell NAT-oppsett kreves.", "siteWgDescriptionSaas": "Bruk hvilken som helst WireGuard-klient for å etablere en tunnel. Manuell NAT-oppsett er nødvendig. FUNGERER KUN PÅ SELVHOSTEDE NODER", "siteLocalDescription": "Kun lokale ressurser. Ingen tunnelering.", "siteLocalDescriptionSaas": "Lokale ressurser. Ingen tunnelering. Bare tilgjengelig på eksterne noder.", "siteSeeAll": "Se alle områder", - "siteTunnelDescription": "Bestem hvordan du vil koble deg til ditt område", - "siteNewtCredentials": "Newt påloggingsinformasjon", - "siteNewtCredentialsDescription": "Slik vil Newt autentisere seg mot serveren", - "siteCredentialsSave": "Lagre påloggingsinformasjonen din", + "siteTunnelDescription": "Avgjør hvordan du vil koble deg til nettstedet", + "siteNewtCredentials": "Legitimasjon", + "siteNewtCredentialsDescription": "Dette er hvordan nettstedet vil godkjenne med serveren", + "siteCredentialsSave": "Lagre brukeropplysninger", "siteCredentialsSaveDescription": "Du vil kun kunne se dette én gang. Sørg for å kopiere det til et sikkert sted.", "siteInfo": "Områdeinformasjon", "status": "Status", "shareTitle": "Administrer delingslenker", - "shareDescription": "Opprett delbare lenker for å gi midlertidig eller permanent tilgang til ressursene dine", + "shareDescription": "Opprett delbare lenker for å gi midlertidige eller permanent tilgang til proxyressurser", "shareSearch": "Søk delingslenker...", "shareCreate": "Opprett delingslenke", "shareErrorDelete": "Klarte ikke å slette lenke", "shareErrorDeleteMessage": "En feil oppstod ved sletting av lenke", "shareDeleted": "Lenke slettet", "shareDeletedDescription": "Lenken har blitt slettet", - "shareTokenDescription": "Din tilgangsnøkkel kan sendes på to måter: som en query parameter eller i request headers. Disse må sendes fra klienten på hver forespørsel for autentisert tilgang.", + "shareTokenDescription": "Adgangstoken kan sendes på to måter: som en spørringsparameter eller i forespørselsoverskriftene. Disse må sendes fra klienten på hver forespørsel om autentisert tilgang.", "accessToken": "Tilgangsnøkkel", "usageExamples": "Brukseksempler", "tokenId": "Token-ID", @@ -121,7 +121,7 @@ "importantNote": "Viktig merknad", "shareImportantDescription": "Av sikkerhetsgrunner anbefales det å bruke headere fremfor query parametere der det er mulig, da query parametere kan logges i serverlogger eller nettleserhistorikk.", "token": "Token", - "shareTokenSecurety": "Hold tilgangsnøkkelen ditt sikkert. Ikke del i offentlig tilgjengelige områder eller klientkode.", + "shareTokenSecurety": "Hold tilgangstoken sikker. Ikke del den i offentlig tilgjengelige områder eller klientsidekode.", "shareErrorFetchResource": "Klarte ikke å hente ressurser", "shareErrorFetchResourceDescription": "En feil oppstod under henting av ressursene", "shareErrorCreate": "Mislyktes med å opprette delingslenke", @@ -144,8 +144,10 @@ "expires": "Utløper", "never": "Aldri", "shareErrorSelectResource": "Vennligst velg en ressurs", - "resourceTitle": "Administrer Ressurser", - "resourceDescription": "Opprett sikre proxyer til dine private applikasjoner", + "proxyResourceTitle": "Administrere offentlige ressurser", + "proxyResourceDescription": "Opprett og administrer ressurser som er offentlig tilgjengelige via en nettleser", + "clientResourceTitle": "Administrer private ressurser", + "clientResourceDescription": "Opprette og administrere ressurser som bare er tilgjengelige via en tilkoblet klient", "resourcesSearch": "Søk i ressurser...", "resourceAdd": "Legg til ressurs", "resourceErrorDelte": "Feil ved sletting av ressurs", @@ -155,9 +157,9 @@ "resourceMessageRemove": "Når den er fjernet, vil ressursen ikke lenger være tilgjengelig. Alle mål knyttet til ressursen vil også bli fjernet.", "resourceQuestionRemove": "Er du sikker på at du vil fjerne ressursen fra organisasjonen?", "resourceHTTP": "HTTPS-ressurs", - "resourceHTTPDescription": "Proxy-forespørsler til appen din over HTTPS ved bruk av et underdomene eller grunndomene.", + "resourceHTTPDescription": "Proxy-forespørsler til appen over HTTPS ved hjelp av et underdomene eller basisdomene.", "resourceRaw": "Rå TCP/UDP-ressurs", - "resourceRawDescription": "Proxyer forespørsler til appen din over TCP/UDP ved å bruke et portnummer.", + "resourceRawDescription": "Proxy ber om til appen over TCP/UDP med et portnummer. Dette fungerer bare når nettsteder er koblet til noder.", "resourceCreate": "Opprett ressurs", "resourceCreateDescription": "Følg trinnene nedenfor for å opprette en ny ressurs", "resourceSeeAll": "Se alle ressurser", @@ -171,22 +173,22 @@ "noCountryFound": "Ingen land funnet.", "siteSelectionDescription": "Dette området vil gi tilkobling til mål.", "resourceType": "Ressurstype", - "resourceTypeDescription": "Bestem hvordan du vil få tilgang til ressursen din", + "resourceTypeDescription": "Bestemme hvordan denne ressursen skal brukes", "resourceHTTPSSettings": "HTTPS-innstillinger", - "resourceHTTPSSettingsDescription": "Konfigurer tilgang til ressursen din over HTTPS", + "resourceHTTPSSettingsDescription": "Konfigurer hvordan ressursen skal nås over HTTPS", "domainType": "Domenetype", "subdomain": "Underdomene", "baseDomain": "Grunndomene", - "subdomnainDescription": "Underdomenet der ressursen din vil være tilgjengelig.", + "subdomnainDescription": "Underdomenet hvor ressursen vil være tilgjengelig.", "resourceRawSettings": "TCP/UDP-innstillinger", - "resourceRawSettingsDescription": "Konfigurer hvordan din ressurs vil bli tilgjengelig over TCP/UDP. Du kartlegger ressursen til en port på vertsserveren Pangolin slik at du får tilgang til ressursene fra server-ip:mappet port.", + "resourceRawSettingsDescription": "Konfigurer hvordan ressursen vil bli tilgjengelig over TCP/UDP", "protocol": "Protokoll", "protocolSelect": "Velg en protokoll", "resourcePortNumber": "Portnummer", "resourcePortNumberDescription": "Det eksterne portnummeret for proxy forespørsler.", "cancel": "Avbryt", "resourceConfig": "Konfigurasjonsutdrag", - "resourceConfigDescription": "Kopier og lim inn disse konfigurasjonsutdragene for å sette opp din TCP/UDP-ressurs", + "resourceConfigDescription": "Kopier og lim inn disse konfigurasjons-øyeblikkene for å sette opp TCP/UDP ressursen", "resourceAddEntrypoints": "Traefik: Legg til inngangspunkter", "resourceExposePorts": "Gerbil: Eksponer Porter i Docker Compose", "resourceLearnRaw": "Lær hvordan å konfigurere TCP/UDP-ressurser", @@ -202,14 +204,14 @@ "proxy": "Proxy", "internal": "Intern", "rules": "Regler", - "resourceSettingDescription": "Konfigurer innstillingene på ressursen din", + "resourceSettingDescription": "Konfigurere innstillingene på ressursen", "resourceSetting": "{resourceName} Innstillinger", - "alwaysAllow": "Alltid tillat", - "alwaysDeny": "Alltid avslå", + "alwaysAllow": "Omgå Auth", + "alwaysDeny": "Blokker tilgang", "passToAuth": "Pass til Autentisering", - "orgSettingsDescription": "Konfigurer organisasjonens generelle innstillinger", + "orgSettingsDescription": "Konfigurere organisasjonens innstillinger", "orgGeneralSettings": "Organisasjonsinnstillinger", - "orgGeneralSettingsDescription": "Administrer dine organisasjonsdetaljer og konfigurasjon", + "orgGeneralSettingsDescription": "Behandle organisasjonens detaljer og konfigurasjon", "saveGeneralSettings": "Lagre generelle innstillinger", "saveSettings": "Lagre innstillinger", "orgDangerZone": "Faresone", @@ -232,7 +234,7 @@ "orgMissing": "Organisasjons-ID Mangler", "orgMissingMessage": "Kan ikke regenerere invitasjon uten en organisasjons-ID.", "accessUsersManage": "Administrer brukere", - "accessUsersDescription": "Inviter brukere og gi dem roller for å administrere tilgang til organisasjonen din", + "accessUsersDescription": "Inviter og behandle brukere med tilgang til denne organisasjonen", "accessUsersSearch": "Søk etter brukere...", "accessUserCreate": "Opprett bruker", "accessUserRemove": "Fjern bruker", @@ -241,13 +243,13 @@ "role": "Rolle", "nameRequired": "Navn er påkrevd", "accessRolesManage": "Administrer Roller", - "accessRolesDescription": "Konfigurer roller for å administrere tilgang til organisasjonen din", + "accessRolesDescription": "Opprett og administrer roller for brukere i organisasjonen", "accessRolesSearch": "Søk etter roller...", "accessRolesAdd": "Legg til rolle", "accessRoleDelete": "Slett rolle", "description": "Beskrivelse", "inviteTitle": "Åpne invitasjoner", - "inviteDescription": "Administrer invitasjonene dine til andre brukere", + "inviteDescription": "Administrer invitasjoner til andre brukere for å bli med i organisasjonen", "inviteSearch": "Søk i invitasjoner...", "minutes": "Minutter", "hours": "Timer", @@ -261,13 +263,13 @@ "apiKeysErrorCreate": "Feil ved oppretting av API-nøkkel", "apiKeysErrorSetPermission": "Feil ved innstilling av tillatelser", "apiKeysCreate": "Generer API-nøkkel", - "apiKeysCreateDescription": "Generer en ny API-nøkkel for din organisasjon", + "apiKeysCreateDescription": "Generer en ny API-nøkkel for organisasjonen", "apiKeysGeneralSettings": "Tillatelser", "apiKeysGeneralSettingsDescription": "Finn ut hva denne API-nøkkelen kan gjøre", - "apiKeysList": "Din API-nøkkel", - "apiKeysSave": "Lagre API-nøkkelen din", + "apiKeysList": "Ny API-nøkkel", + "apiKeysSave": "Lagre API-nøkkel", "apiKeysSaveDescription": "Du vil bare kunne se dette én gang. Sørg for å kopiere det til et sikkert sted.", - "apiKeysInfo": "Din API-nøkkel er:", + "apiKeysInfo": "API-nøkkelen er:", "apiKeysConfirmCopy": "Jeg har kopiert API-nøkkelen", "generate": "Generer", "done": "Ferdig", @@ -424,7 +426,7 @@ "userCreated": "Bruker opprettet", "userCreatedDescription": "Brukeren har blitt vellykket opprettet.", "userTypeInternal": "Intern bruker", - "userTypeInternalDescription": "Inviter en bruker til å bli med i organisasjonen din direkte.", + "userTypeInternalDescription": "Inviter en bruker til å bli med direkte på organisasjonen.", "userTypeExternal": "Ekstern bruker", "userTypeExternalDescription": "Opprett en bruker med en ekstern identitetsleverandør.", "accessUserCreateDescription": "Følg stegene under for å opprette en ny bruker", @@ -436,6 +438,16 @@ "inviteEmailSent": "Send invitasjonsepost til bruker", "inviteValid": "Gyldig for", "selectDuration": "Velg varighet", + "selectResource": "Velg ressurs", + "filterByResource": "Filtrer etter ressurser", + "resetFilters": "Tilbakestill filtre", + "totalBlocked": "Forespørsler blokkert av Pangolin", + "totalRequests": "Totalt antall forespørsler", + "requestsByCountry": "Forespørsler fra land", + "requestsByDay": "Forespørsler per dag", + "blocked": "Blokkert", + "allowed": "Tillatt", + "topCountries": "Flest land", "accessRoleSelect": "Velg rolle", "inviteEmailSentDescription": "En e-post er sendt til brukeren med tilgangslenken nedenfor. De må åpne lenken for å akseptere invitasjonen.", "inviteSentDescription": "Brukeren har blitt invitert. De må åpne lenken nedenfor for å godta invitasjonen.", @@ -458,13 +470,13 @@ "accessControlsSubmit": "Lagre tilgangskontroller", "roles": "Roller", "accessUsersRoles": "Administrer brukere og roller", - "accessUsersRolesDescription": "Inviter brukere og legg dem til roller for å administrere tilgang til organisasjonen din.", + "accessUsersRolesDescription": "Inviter brukere og legg dem til roller for å administrere tilgang til organisasjonen", "key": "Nøkkel", "createdAt": "Opprettet", "proxyErrorInvalidHeader": "Ugyldig verdi for egendefinert vertsoverskrift. Bruk domenenavnformat, eller lagre tomt for å fjerne den egendefinerte vertsoverskriften.", "proxyErrorTls": "Ugyldig TLS-servernavn. Bruk domenenavnformat, eller la stå tomt for å fjerne TLS-servernavnet.", "proxyEnableSSL": "Aktiver SSL", - "proxyEnableSSLDescription": "Aktiver SSL/TLS-kryptering for sikre HTTPS-tilkoblinger til dine mål.", + "proxyEnableSSLDescription": "Aktivere SSL/TLS-kryptering for sikker HTTPS tilkobling til målene.", "target": "Target", "configureTarget": "Konfigurer mål", "targetErrorFetch": "Kunne ikke hente mål", @@ -480,29 +492,29 @@ "targetsErrorUpdate": "Feilet å oppdatere mål", "targetsErrorUpdateDescription": "En feil oppsto under oppdatering av mål", "targetTlsUpdate": "TLS-innstillinger oppdatert", - "targetTlsUpdateDescription": "Dine TLS-innstillinger er oppdatert", + "targetTlsUpdateDescription": "TLS-innstillinger har blitt oppdatert", "targetErrorTlsUpdate": "Feilet under oppdatering av TLS-innstillinger", "targetErrorTlsUpdateDescription": "Det oppstod en feil under oppdatering av TLS-innstillinger", "proxyUpdated": "Proxy-innstillinger oppdatert", - "proxyUpdatedDescription": "Proxy-innstillingene dine er oppdatert", + "proxyUpdatedDescription": "Proxy innstillinger har blitt oppdatert", "proxyErrorUpdate": "En feil oppsto under oppdatering av proxyinnstillinger", "proxyErrorUpdateDescription": "En feil oppsto under oppdatering av proxyinnstillinger", - "targetAddr": "IP / vertsnavn", + "targetAddr": "Vert", "targetPort": "Port", "targetProtocol": "Protokoll", "targetTlsSettings": "Sikker tilkoblings-konfigurasjon", - "targetTlsSettingsDescription": "Konfigurer SSL/TLS-innstillinger for ressursen din", + "targetTlsSettingsDescription": "Konfigurer SSL/TLS-innstillinger for ressursen", "targetTlsSettingsAdvanced": "Avanserte TLS-innstillinger", "targetTlsSni": "TLS servernavn", "targetTlsSniDescription": "TLS-servernavnet som skal brukes for SNI. La stå tomt for å bruke standardverdien.", "targetTlsSubmit": "Lagre innstillinger", "targets": "Målkonfigurasjon", - "targetsDescription": "Sett opp mål for å rute trafikk til dine backend-tjenester", + "targetsDescription": "Sett opp mål for rutetrafikk til backend tjenestene", "targetStickySessions": "Aktiver klebrige sesjoner", "targetStickySessionsDescription": "Behold tilkoblinger på samme bakend-mål gjennom hele sesjonen.", "methodSelect": "Velg metode", "targetSubmit": "Legg til mål", - "targetNoOne": "Denne ressursen har ikke noen mål. Legg til et mål for å konfigurere hvor du vil sende forespørsler til din backend.", + "targetNoOne": "Denne ressursen har ikke noen mål. Legg til et mål for å konfigurere hvor du vil sende forespørsler til backend.", "targetNoOneDescription": "Å legge til mer enn ett mål ovenfor vil aktivere lastbalansering.", "targetsSubmit": "Lagre mål", "addTarget": "Legg til mål", @@ -516,9 +528,11 @@ "targetCreatedDescription": "Målet har blitt opprettet", "targetErrorCreate": "Kunne ikke opprette målet", "targetErrorCreateDescription": "Det oppstod en feil under oppretting av målet", + "tlsServerName": "TLS servernavn", + "tlsServerNameDescription": "Tjenernavnet som skal brukes for SNI", "save": "Lagre", "proxyAdditional": "Ytterligere Proxy-innstillinger", - "proxyAdditionalDescription": "Konfigurer hvordan ressursen din håndterer proxy-innstillinger", + "proxyAdditionalDescription": "Konfigurer hvordan ressursen håndterer proxy-innstillingene", "proxyCustomHeader": "Tilpasset verts-header", "proxyCustomHeaderDescription": "Verts-header som skal settes ved videresending av forespørsler. La stå tom for å bruke standardinnstillingen.", "proxyAdditionalSubmit": "Lagre proxy-innstillinger", @@ -558,7 +572,7 @@ "rulesMatchType": "Trefftype", "value": "Verdi", "rulesAbout": "Om regler", - "rulesAboutDescription": "Regler lar deg kontrollere tilgang til din ressurs basert på et sett med kriterier. Du kan opprette regler for å tillate eller nekte tilgang basert på IP-adresse eller URL-sti.", + "rulesAboutDescription": "Regler gir mulighet til å kontrollere tilgangen til ressursen basert på et sett av kriterier. Du kan opprette regler for å tillate eller nekte tilgang basert på IP-adresse eller URL-bane.", "rulesActions": "Handlinger", "rulesActionAlwaysAllow": "Alltid Tillat: Omgå alle autentiserings metoder", "rulesActionAlwaysDeny": "Alltid Nekt: Blokker alle forespørsler; ingen autentisering kan forsøkes", @@ -570,7 +584,7 @@ "rulesEnable": "Aktiver regler", "rulesEnableDescription": "Aktiver eller deaktiver regelvurdering for denne ressursen", "rulesResource": "Konfigurasjon av ressursregler", - "rulesResourceDescription": "Konfigurere regler for tilgangskontroll til ressursen din", + "rulesResourceDescription": "Konfigurer regler for å kontrollere tilgang til ressursen", "ruleSubmit": "Legg til regel", "rulesNoOne": "Ingen regler. Legg til en regel ved å bruke skjemaet.", "rulesOrder": "Regler evalueres etter prioritet i stigende rekkefølge.", @@ -586,7 +600,7 @@ "none": "Ingen", "unknown": "Ukjent", "resources": "Ressurser", - "resourcesDescription": "Ressurser er proxyer for applikasjoner som kjører på ditt private nettverk. Opprett en ressurs for enhver HTTP/HTTPS- eller rå TCP/UDP-tjeneste på ditt private nettverk. Hver ressurs må kobles til et område for å muliggjøre privat, sikker tilkobling gjennom en kryptert WireGuard-tunnel.", + "resourcesDescription": "Ressurser er proxyer til applikasjoner som kjører i det private nettverket. Opprett en ressurs for enhver HTTP/HTTPS eller rå TCP/UDP tjeneste på ditt private nettverk. Hver ressurs må kobles til et nettsted for å aktivere privat, sikker tilkobling gjennom en kryptert WireGuard tunnel.", "resourcesWireGuardConnect": "Sikker tilkobling med WireGuard-kryptering", "resourcesMultipleAuthenticationMethods": "Konfigurer flere autentiseringsmetoder", "resourcesUsersRolesAccess": "Bruker- og rollebasert tilgangskontroll", @@ -597,7 +611,7 @@ "resourceSelect": "Velg ressurs", "shareLinks": "Del lenker", "share": "Delbare lenker", - "shareDescription2": "Opprett delbare lenker til ressursene dine. Lenker gir midlertidig eller ubegrenset tilgang til ressursen din. Du kan konfigurere utløpsvarigheten for lenken når du oppretter den.", + "shareDescription2": "Opprett delbare lenker til ressurser. Lenker gir midlertidig eller ubegrenset tilgang til din ressurs. Du kan konfigurere utløpsvarigheten på lenken når du oppretter en.", "shareEasyCreate": "Enkelt å lage og dele", "shareConfigurableExpirationDuration": "Konfigurerbar utløpsvarighet", "shareSecureAndRevocable": "Sikker og tilbakekallbar", @@ -607,19 +621,19 @@ "unknownCommand": "Ukjent kommando", "newtErrorFetchReleases": "Feilet å hente utgivelsesinfo: {err}", "newtErrorFetchLatest": "Feil ved henting av siste utgivelse: {err}", - "newtEndpoint": "Newt endepunkt", - "newtId": "Newt-ID", - "newtSecretKey": "Newt hemmelig nøkkel", + "newtEndpoint": "Endpoint", + "newtId": "ID", + "newtSecretKey": "Sikkerhetsnøkkel", "architecture": "Arkitektur", "sites": "Områder", - "siteWgAnyClients": "Bruk en hvilken som helst WireGuard-klient for å koble til. Du må adressere dine interne ressurser ved å bruke peer-IP-en.", + "siteWgAnyClients": "Bruk hvilken som helst WireGuard klient til å koble til. Du må adressere interne ressurser ved hjelp av peer IP.", "siteWgCompatibleAllClients": "Kompatibel med alle WireGuard-klienter", "siteWgManualConfigurationRequired": "Manuell konfigurasjon påkrevd", "userErrorNotAdminOrOwner": "Bruker er ikke administrator eller eier", "pangolinSettings": "Innstillinger - Pangolin", "accessRoleYour": "Din rolle:", - "accessRoleSelect2": "Velg en rolle", - "accessUserSelect": "Velg en bruker", + "accessRoleSelect2": "Velg roller", + "accessUserSelect": "Velg brukere", "otpEmailEnter": "Skriv inn én e-post", "otpEmailEnterDescription": "Trykk enter for å legge til en e-post etter å ha tastet den inn i tekstfeltet.", "otpEmailErrorInvalid": "Ugyldig e-postadresse. Jokertegnet (*) må være hele lokaldelen.", @@ -671,7 +685,7 @@ "resourcePincodeSetupTitle": "Angi PIN-kode", "resourcePincodeSetupTitleDescription": "Sett en pinkode for å beskytte denne ressursen", "resourceRoleDescription": "Administratorer har alltid tilgang til denne ressursen.", - "resourceUsersRoles": "Brukere og Roller", + "resourceUsersRoles": "Tilgangskontroller", "resourceUsersRolesDescription": "Konfigurer hvilke brukere og roller som har tilgang til denne ressursen", "resourceUsersRolesSubmit": "Lagre brukere og roller", "resourceWhitelistSave": "Lagring vellykket", @@ -702,6 +716,7 @@ "resourceTransferSubmit": "Overfør ressurs", "siteDestination": "Destinasjonsområde", "searchSites": "Søk områder", + "countries": "Land", "accessRoleCreate": "Opprett rolle", "accessRoleCreateDescription": "Opprett en ny rolle for å gruppere brukere og administrere deres tillatelser.", "accessRoleCreateSubmit": "Opprett rolle", @@ -766,15 +781,15 @@ "idpOidcConfigure": "OAuth2/OIDC-konfigurasjon", "idpOidcConfigureDescription": "Konfigurer OAuth2/OIDC-leverandørens endepunkter og legitimasjon", "idpClientId": "Klient-ID", - "idpClientIdDescription": "OAuth2-klient-ID-en fra identitetsleverandøren din", + "idpClientIdDescription": "OAuth2 klient-ID fra identitet leverandøren", "idpClientSecret": "Klienthemmelighet", - "idpClientSecretDescription": "OAuth2-klienthemmeligheten fra din identitetsleverandør", + "idpClientSecretDescription": "Klient-hemmeligheten med OAuth2 fra identitet leverandøren", "idpAuthUrl": "Autorisasjons-URL", "idpAuthUrlDescription": "OAuth2 autorisasjonsendepunkt URL", "idpTokenUrl": "Token-URL", "idpTokenUrlDescription": "OAuth2-tokenendepunkt-URL", "idpOidcConfigureAlert": "Viktig informasjon", - "idpOidcConfigureAlertDescription": "Etter at du har opprettet identitetsleverandøren, må du konfigurere callback-URL-en i identitetsleverandørens innstillinger. Callback-URL-en blir oppgitt etter vellykket opprettelse.", + "idpOidcConfigureAlertDescription": "Etter at du har opprettet identitetsleverandøren, må du konfigurere callback-URLen i identitetsleverandørens innstillinger. Tilbakeringings URL vil bli lagt til etter vellykket oppretting.", "idpToken": "Token-konfigurasjon", "idpTokenDescription": "Konfigurer hvordan brukerinformasjon trekkes ut fra ID-tokenet", "idpJmespathAbout": "Om JMESPath", @@ -791,7 +806,7 @@ "idpSubmit": "Opprett identitetsleverandør", "orgPolicies": "Organisasjonsretningslinjer", "idpSettings": "{idpName} Innstillinger", - "idpCreateSettingsDescription": "Konfigurer innstillingene for din identitetsleverandør", + "idpCreateSettingsDescription": "Konfigurer innstillingene for identiteten leverandøren", "roleMapping": "Rolletilordning", "orgMapping": "Organisasjon Kartlegging", "orgPoliciesSearch": "Søk i organisasjonens retningslinjer...", @@ -826,7 +841,7 @@ "idpUpdatedDescription": "Identitetsleverandør vellykket oppdatert", "redirectUrl": "Omdirigerings-URL", "redirectUrlAbout": "Om omdirigerings-URL", - "redirectUrlAboutDescription": "Dette er URL-en som brukere vil bli omdirigert til etter autentisering. Du må konfigurere denne URL-en i innstillingene for identitetsleverandøren din.", + "redirectUrlAboutDescription": "Dette er URLen som brukere vil bli omdirigert etter autentisering. Du må konfigurere denne URLen i identitetsleverandørens innstillinger.", "pangolinAuth": "Autentisering - Pangolin", "verificationCodeLengthRequirements": "Din verifiseringskode må være 8 tegn.", "errorOccurred": "Det oppstod en feil", @@ -909,6 +924,10 @@ "passwordResetSent": "Vi sender en kode for tilbakestilling av passord til denne e-postadressen.", "passwordResetCode": "Tilbakestillingskode", "passwordResetCodeDescription": "Sjekk e-posten din for tilbakestillingskoden.", + "generatePasswordResetCode": "Lag tilbakestillingskode for passord", + "passwordResetCodeGenerated": "Passord tilbakestillingskoden er generert", + "passwordResetCodeGeneratedDescription": "Del denne koden med brukeren. De kan bruke den til å tilbakestille passordet.", + "passwordResetUrl": "Reset URL", "passwordNew": "Nytt passord", "passwordNewConfirm": "Bekreft nytt passord", "changePassword": "Endre passord", @@ -926,6 +945,9 @@ "pincodeAuth": "Autentiseringskode", "pincodeSubmit2": "Send inn kode", "passwordResetSubmit": "Be om tilbakestilling", + "passwordResetAlreadyHaveCode": "Skriv inn tilbakestillingskode for passord", + "passwordResetSmtpRequired": "Kontakt din administrator", + "passwordResetSmtpRequiredDescription": "En passord tilbakestillingskode kreves for å tilbakestille passordet. Kontakt systemansvarlig for assistanse.", "passwordBack": "Tilbake til passord", "loginBack": "Gå tilbake til innlogging", "signup": "Registrer deg", @@ -1091,12 +1113,15 @@ "actionListSiteResources": "List opp Stedsressurser", "actionUpdateSiteResource": "Oppdater Stedsressurs", "actionListInvitations": "Liste invitasjoner", + "actionExportLogs": "Eksportlogger", + "actionViewLogs": "Vis logger", "noneSelected": "Ingen valgt", "orgNotFound2": "Ingen organisasjoner funnet.", "searchProgress": "Søker...", "create": "Opprett", "orgs": "Organisasjoner", "loginError": "En feil oppstod under innlogging", + "loginRequiredForDevice": "Innlogging kreves for å godkjenne enheten.", "passwordForgot": "Glemt passordet ditt?", "otpAuth": "Tofaktorautentisering", "otpAuthDescription": "Skriv inn koden fra autentiseringsappen din eller en av dine engangs reservekoder.", @@ -1151,19 +1176,29 @@ "sidebarHome": "Hjem", "sidebarSites": "Områder", "sidebarResources": "Ressurser", + "sidebarProxyResources": "Offentlig", + "sidebarClientResources": "Privat", "sidebarAccessControl": "Tilgangskontroll", + "sidebarLogsAndAnalytics": "Logger og analyser", "sidebarUsers": "Brukere", + "sidebarAdmin": "Administrator", "sidebarInvitations": "Invitasjoner", "sidebarRoles": "Roller", - "sidebarShareableLinks": "Delbare lenker", + "sidebarShareableLinks": "Lenker", "sidebarApiKeys": "API-nøkler", "sidebarSettings": "Innstillinger", "sidebarAllUsers": "Alle brukere", "sidebarIdentityProviders": "Identitetsleverandører", "sidebarLicense": "Lisens", "sidebarClients": "Klienter", + "sidebarUserDevices": "Brukere", + "sidebarMachineClients": "Maskiner", "sidebarDomains": "Domener", + "sidebarGeneral": "Generelt", + "sidebarLogAndAnalytics": "Logg og analyser", "sidebarBluePrints": "Tegninger", + "sidebarOrganization": "Organisasjon", + "sidebarLogsAnalytics": "Analyser", "blueprints": "Tegninger", "blueprintsDescription": "Bruk deklarative konfigurasjoner og vis tidligere kjøringer", "blueprintAdd": "Legg til blåkopi", @@ -1174,7 +1209,7 @@ "blueprintDetailsDescription": "Se resultatet av den påførte blåkopien og alle feil som oppstod", "blueprintInfo": "Blåkopi informasjon", "message": "Melding", - "blueprintContentsDescription": "Definer innhold av YAML som beskriver din infrastruktur", + "blueprintContentsDescription": "Definere innholdet til YAML som beskriver infrastrukturen", "blueprintErrorCreateDescription": "Det oppstod en feil da plantegningen ble lagt til", "blueprintErrorCreate": "Feil ved opprettelse av plantegning", "searchBlueprintProgress": "Søk etter plantegninger...", @@ -1230,15 +1265,15 @@ "loading": "Laster inn", "restart": "Start på nytt", "domains": "Domener", - "domainsDescription": "Administrer domener for organisasjonen din", + "domainsDescription": "Opprett og behandle domener som er tilgjengelige i organisasjonen", "domainsSearch": "Søk i domener...", "domainAdd": "Legg til domene", - "domainAddDescription": "Registrer et nytt domene hos organisasjonen din", + "domainAddDescription": "Registrer et nytt domene med organisasjonen", "domainCreate": "Opprett domene", "domainCreatedDescription": "Domene ble opprettet", "domainDeletedDescription": "Domene ble slettet", - "domainQuestionRemove": "Er du sikker på at du vil fjerne domenet fra kontoen din?", - "domainMessageRemove": "Når domenet er fjernet, vil det ikke lenger være knyttet til kontoen din.", + "domainQuestionRemove": "Er du sikker på at du vil fjerne domenet?", + "domainMessageRemove": "Når domenet er fjernet, vil det ikke lenger være forbundet med organisasjonen.", "domainConfirmDelete": "Bekreft sletting av domene", "domainDelete": "Slett domene", "domain": "Domene", @@ -1285,9 +1320,9 @@ "productUpdateTitle": "Oppdateringer om produktet", "productUpdateEmpty": "Ingen oppdateringer", "dismissAll": "Avvis alle", - "pangolinUpdateAvailable": "Ny versjon tilgjengelig", + "pangolinUpdateAvailable": "Oppdatering tilgjengelig", "pangolinUpdateAvailableInfo": "Versjon {version} er klar til å installere", - "pangolinUpdateAvailableReleaseNotes": "Se utgivelsnotater", + "pangolinUpdateAvailableReleaseNotes": "Se utgivelsesnotater", "newtUpdateAvailable": "Oppdatering tilgjengelig", "newtUpdateAvailableInfo": "En ny versjon av Newt er tilgjengelig. Vennligst oppdater til den nyeste versjonen for den beste opplevelsen.", "domainPickerEnterDomain": "Domene", @@ -1300,7 +1335,7 @@ "domainPickerSortAsc": "A-Å", "domainPickerSortDesc": "Å-A", "domainPickerCheckingAvailability": "Sjekker tilgjengelighet...", - "domainPickerNoMatchingDomains": "Ingen samsvarende domener funnet. Prøv et annet domene eller sjekk organisasjonens domeneinnstillinger.", + "domainPickerNoMatchingDomains": "Ingen samsvarende domener funnet. Prøv et annet domene eller kontroller organisasjonens domeneinnstillinger.", "domainPickerOrganizationDomains": "Organisasjonsdomener", "domainPickerProvidedDomains": "Leverte domener", "domainPickerSubdomain": "Underdomene: {subdomain}", @@ -1334,7 +1369,7 @@ "billingModifySubscription": "Endre abonnement", "billingStartSubscription": "Start abonnement", "billingRecurringCharge": "Innkommende Avgift", - "billingManageSubscriptionSettings": "Administrer abonnementsinnstillinger og preferanser", + "billingManageSubscriptionSettings": "Administrer abonnementsinnstillinger og -innstillinger", "billingNoActiveSubscription": "Du har ikke et aktivt abonnement. Start abonnementet ditt for å øke bruksgrensene.", "billingFailedToLoadSubscription": "Klarte ikke å laste abonnement", "billingFailedToLoadUsage": "Klarte ikke å laste bruksdata", @@ -1345,9 +1380,9 @@ "billingPortalError": "Portalfeil", "billingDataUsageInfo": "Du er ladet for all data som overføres gjennom dine sikre tunneler når du er koblet til skyen. Dette inkluderer både innkommende og utgående trafikk på alle dine nettsteder. Når du når grensen din, vil sidene koble fra til du oppgraderer planen eller reduserer bruken. Data belastes ikke ved bruk av EK-grupper.", "billingOnlineTimeInfo": "Du er ladet på hvor lenge sidene dine forblir koblet til skyen. For eksempel tilsvarer 44,640 minutter ett nettsted som går 24/7 i en hel måned. Når du når grensen din, vil sidene koble fra til du oppgraderer planen eller reduserer bruken. Tid belastes ikke når du bruker noder.", - "billingUsersInfo": "Du belastes for hver bruker i organisasjonen din. Faktureringen beregnes daglig basert på antall aktive brukerkontoer i organisasjonen din.", - "billingDomainInfo": "Du belastes for hvert domene i organisasjonen din. Faktureringen beregnes daglig basert på antall aktive domenekontoer i organisasjonen din.", - "billingRemoteExitNodesInfo": "Du belastes for hver styrt node i organisasjonen din. Faktureringen beregnes daglig basert på antall aktive styrte noder i organisasjonen din.", + "billingUsersInfo": "Du lades for hver bruker i organisasjonen. Fakturering beregnes daglig basert på antall aktive brukerkontoer i dine org.", + "billingDomainInfo": "Du lades for hvert domene i organisasjonen. Fakturering beregnes daglig basert på antallet aktive domenekontoer i din org.", + "billingRemoteExitNodesInfo": "Du lades for hver håndterte node i organisasjonen. Fakturering beregnes daglig basert på antallet aktive håndterte noder i dine org.", "domainNotFound": "Domene ikke funnet", "domainNotFoundDescription": "Denne ressursen er deaktivert fordi domenet ikke lenger eksisterer i systemet vårt. Vennligst angi et nytt domene for denne ressursen.", "failed": "Mislyktes", @@ -1430,29 +1465,32 @@ "and": "og", "privacyPolicy": "personvernerklæringen" }, + "signUpMarketing": { + "keepMeInTheLoop": "Hold meg i løken med nyheter, oppdateringer og nye funksjoner via e-post." + }, "siteRequired": "Område er påkrevd.", "olmTunnel": "Olm-tunnel", "olmTunnelDescription": "Bruk Olm for klienttilkobling", "errorCreatingClient": "Feil ved oppretting av klient", "clientDefaultsNotFound": "Klientstandarder ikke funnet", "createClient": "Opprett klient", - "createClientDescription": "Opprett en ny klient for å koble til dine områder", + "createClientDescription": "Opprette en ny klient for å få tilgang til private ressurser", "seeAllClients": "Se alle klienter", "clientInformation": "Klientinformasjon", "clientNamePlaceholder": "Klientnavn", "address": "Adresse", "subnetPlaceholder": "Subnett", - "addressDescription": "Adressen denne klienten vil bruke for tilkobling", + "addressDescription": "Den interne adressen til klienten. Må falle innenfor organisasjonens undernett.", "selectSites": "Velg områder", "sitesDescription": "Klienten vil ha tilkobling til de valgte områdene", "clientInstallOlm": "Installer Olm", "clientInstallOlmDescription": "Få Olm til å kjøre på systemet ditt", - "clientOlmCredentials": "Olm-legitimasjon", - "clientOlmCredentialsDescription": "Slik vil Olm autentisere med serveren", - "olmEndpoint": "Olm-endepunkt", - "olmId": "Olm-ID", - "olmSecretKey": "Olm hemmelig nøkkel", - "clientCredentialsSave": "Lagre din legitimasjon", + "clientOlmCredentials": "Legitimasjon", + "clientOlmCredentialsDescription": "Dette er hvordan klienten vil godkjenne med serveren", + "olmEndpoint": "Endpoint", + "olmId": "ID", + "olmSecretKey": "Sikkerhetsnøkkel", + "clientCredentialsSave": "Lagre brukeropplysninger", "clientCredentialsSaveDescription": "Du vil bare kunne se dette én gang. Sørg for å kopiere det til et sikkert sted.", "generalSettingsDescription": "Konfigurer de generelle innstillingene for denne klienten", "clientUpdated": "Klient oppdatert", @@ -1463,9 +1501,7 @@ "sitesFetchError": "En feil oppstod under henting av områder.", "olmErrorFetchReleases": "En feil oppstod under henting av Olm-utgivelser.", "olmErrorFetchLatest": "En feil oppstod under henting av den nyeste Olm-utgivelsen.", - "remoteSubnets": "Fjern-subnett", "enterCidrRange": "Skriv inn CIDR-område", - "remoteSubnetsDescription": "Legg til CIDR-områder som kan få fjerntilgang til dette området. Bruk format som 10.0.0.0/24 eller 192.168.1.0/24.", "resourceEnableProxy": "Aktiver offentlig proxy", "resourceEnableProxyDescription": "Aktiver offentlig proxying til denne ressursen. Dette gir tilgang til ressursen fra utsiden av nettverket gjennom skyen på en åpen port. Krever Traefik-konfigurasjon.", "externalProxyEnabled": "Ekstern proxy aktivert", @@ -1483,14 +1519,15 @@ "enableHealthChecksDescription": "Overvåk helsen til dette målet. Du kan overvåke et annet endepunkt enn målet hvis nødvendig.", "healthScheme": "Metode", "healthSelectScheme": "Velg metode", + "healthCheckPortInvalid": "Helsekontrollporten må være mellom 1 og 65535", "healthCheckPath": "Sti", "healthHostname": "IP / Vert", "healthPort": "Port", "healthCheckPathDescription": "Stien for å sjekke helsestatus.", - "healthyIntervalSeconds": "Sunt intervall", - "unhealthyIntervalSeconds": "Usunt intervall", + "healthyIntervalSeconds": "Sunn intervall (sek)", + "unhealthyIntervalSeconds": "Usunt intervall (sek)", "IntervalSeconds": "Sunt intervall", - "timeoutSeconds": "Tidsavbrudd", + "timeoutSeconds": "Tidsavbrudd (sek)", "timeIsInSeconds": "Tid er i sekunder", "retryAttempts": "Forsøk på nytt", "expectedResponseCodes": "Forventede svarkoder", @@ -1526,12 +1563,12 @@ "resourceEditDomain": "Rediger domene", "siteName": "Områdenavn", "proxyPort": "Port", - "resourcesTableProxyResources": "Proxy-ressurser", - "resourcesTableClientResources": "Klientressurser", + "resourcesTableProxyResources": "Offentlig", + "resourcesTableClientResources": "Privat", "resourcesTableNoProxyResourcesFound": "Ingen proxy-ressurser funnet.", "resourcesTableNoInternalResourcesFound": "Ingen interne ressurser funnet.", "resourcesTableDestination": "Destinasjon", - "resourcesTableTheseResourcesForUseWith": "Disse ressursene er til bruk med", + "resourcesTableAlias": "Alias", "resourcesTableClients": "Klienter", "resourcesTableAndOnlyAccessibleInternally": "og er kun tilgjengelig internt når de er koblet til med en klient.", "resourcesTableNoTargets": "Ingen mål", @@ -1540,8 +1577,8 @@ "resourcesTableOffline": "Frakoblet", "resourcesTableUnknown": "Ukjent", "resourcesTableNotMonitored": "Ikke overvåket", - "editInternalResourceDialogEditClientResource": "Rediger klientressurs", - "editInternalResourceDialogUpdateResourceProperties": "Oppdater ressursens egenskaper og målkonfigurasjon for {resourceName}.", + "editInternalResourceDialogEditClientResource": "Rediger Private Ressurser", + "editInternalResourceDialogUpdateResourceProperties": "Oppdater ressurskonfigurasjonen og få tilgangskontroller for {resourceName}", "editInternalResourceDialogResourceProperties": "Ressursegenskaper", "editInternalResourceDialogName": "Navn", "editInternalResourceDialogProtocol": "Protokoll", @@ -1560,11 +1597,22 @@ "editInternalResourceDialogInvalidIPAddressFormat": "Ugyldig IP-adresseformat", "editInternalResourceDialogDestinationPortMin": "Destinasjonsport må være minst 1", "editInternalResourceDialogDestinationPortMax": "Destinasjonsport må være mindre enn 65536", + "editInternalResourceDialogPortModeRequired": "Protokoll, proxy-port og målport er påkrevd for portmodus", + "editInternalResourceDialogMode": "Modus", + "editInternalResourceDialogModePort": "Port", + "editInternalResourceDialogModeHost": "Vert", + "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogDestination": "Destinasjon", + "editInternalResourceDialogDestinationHostDescription": "IP-adressen eller vertsnavnet til ressursen på nettstedets nettverk.", + "editInternalResourceDialogDestinationIPDescription": "IP eller vertsnavn til ressursen på nettstedets nettverk.", + "editInternalResourceDialogDestinationCidrDescription": "CIDR-rekkevidden til ressursen på nettstedets nettverk.", + "editInternalResourceDialogAlias": "Alias", + "editInternalResourceDialogAliasDescription": "Et valgfritt internt DNS-alias for denne ressursen.", "createInternalResourceDialogNoSitesAvailable": "Ingen tilgjengelige steder", "createInternalResourceDialogNoSitesAvailableDescription": "Du må ha minst ett Newt-område med et konfigureret delnett for å lage interne ressurser.", "createInternalResourceDialogClose": "Lukk", - "createInternalResourceDialogCreateClientResource": "Opprett klientressurs", - "createInternalResourceDialogCreateClientResourceDescription": "Lag en ny ressurs som blir tilgjengelig for klienter koblet til det valgte området.", + "createInternalResourceDialogCreateClientResource": "Opprett privat ressurs", + "createInternalResourceDialogCreateClientResourceDescription": "Opprett en ny ressurs som bare vil være tilgjengelig for kunder som er koblet til organisasjonen", "createInternalResourceDialogResourceProperties": "Ressursegenskaper", "createInternalResourceDialogName": "Navn", "createInternalResourceDialogSite": "Område", @@ -1593,11 +1641,22 @@ "createInternalResourceDialogInvalidIPAddressFormat": "Ugyldig IP-adresseformat", "createInternalResourceDialogDestinationPortMin": "Destinasjonsport må være minst 1", "createInternalResourceDialogDestinationPortMax": "Destinasjonsport må være mindre enn 65536", + "createInternalResourceDialogPortModeRequired": "Protokoll, proxy-port og målport er påkrevd for portmodus", + "createInternalResourceDialogMode": "Modus", + "createInternalResourceDialogModePort": "Port", + "createInternalResourceDialogModeHost": "Vert", + "createInternalResourceDialogModeCidr": "CIDR", + "createInternalResourceDialogDestination": "Destinasjon", + "createInternalResourceDialogDestinationHostDescription": "IP-adressen eller vertsnavnet til ressursen på nettstedets nettverk.", + "createInternalResourceDialogDestinationCidrDescription": "CIDR-rekkevidden til ressursen på nettstedets nettverk.", + "createInternalResourceDialogAlias": "Alias", + "createInternalResourceDialogAliasDescription": "Et valgfritt internt DNS-alias for denne ressursen.", "siteConfiguration": "Konfigurasjon", "siteAcceptClientConnections": "Godta klientforbindelser", - "siteAcceptClientConnectionsDescription": "Tillat andre enheter å koble seg til gjennom denne Newt-instansen som en gateway ved hjelp av klienter.", - "siteAddress": "Områdeadresse", - "siteAddressDescription": "Angi IP-adressen til verten for klienter å koble seg til. Dette er den interne adressen til området i Pangolin-nettverket for klienter som adresserer. Må falle innenfor Org-underettet.", + "siteAcceptClientConnectionsDescription": "Tillat brukere og klienter å få tilgang til ressurser på denne siden. Dette kan endres senere.", + "siteAddress": "Nettstedsadresse (Avansert)", + "siteAddressDescription": "Den interne adressen til nettstedet. Må falle innenfor organisasjonens undernett.", + "siteNameDescription": "Visningsnavnet på nettstedet som kan endres senere.", "autoLoginExternalIdp": "Automatisk innlogging med ekstern IDP", "autoLoginExternalIdpDescription": "Omdiriger brukeren umiddelbart til den eksterne IDP-en for autentisering.", "selectIdp": "Velg IDP", @@ -1611,7 +1670,7 @@ "autoLoginErrorNoRedirectUrl": "Ingen omdirigerings-URL mottatt fra identitetsleverandøren.", "autoLoginErrorGeneratingUrl": "Kunne ikke generere autentiserings-URL.", "remoteExitNodeManageRemoteExitNodes": "Eksterne Noder", - "remoteExitNodeDescription": "Selvbetjent én eller flere eksterne noder for å utvide nettverkstilkoblingen din og redusere avhengighet på skyen", + "remoteExitNodeDescription": "Selvbetjent én eller flere eksterne noder for å utvide nettverkstilkobling og redusere avhengighet på skyen", "remoteExitNodes": "Noder", "searchRemoteExitNodes": "Søk noder...", "remoteExitNodeAdd": "Legg til Node", @@ -1623,7 +1682,7 @@ "sidebarRemoteExitNodes": "Eksterne Noder", "remoteExitNodeCreate": { "title": "Opprett node", - "description": "Opprett en ny node for å utvide nettverkstilkoblingen din", + "description": "Opprett en ny node for å utvide nettverkstilkoblingen", "viewAllButton": "Vis alle koder", "strategy": { "title": "Opprettelsesstrategi", @@ -1648,7 +1707,7 @@ }, "generate": { "title": "Genererte Legitimasjoner", - "description": "Bruk disse genererte opplysningene for å konfigurere noden din", + "description": "Bruk disse genererte opplysningene for å konfigurere noden", "nodeIdTitle": "Node-ID", "secretTitle": "Sikkerhet", "saveCredentialsTitle": "Legg til Legitimasjoner til Config", @@ -1724,16 +1783,16 @@ "idpTypeLabel": "Identitet leverandør type", "roleMappingExpressionPlaceholder": "F.eks. inneholder(grupper, 'admin') && 'Admin' ⋅'Medlem'", "idpGoogleConfiguration": "Google Konfigurasjon", - "idpGoogleConfigurationDescription": "Konfigurer din Google OAuth2 legitimasjon", - "idpGoogleClientIdDescription": "Din Google OAuth2-klient-ID", - "idpGoogleClientSecretDescription": "Google OAuth2-klienten din hemmelig", + "idpGoogleConfigurationDescription": "Konfigurer Google OAuth2 legitimasjonen", + "idpGoogleClientIdDescription": "Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Google OAuth2-klienten hemmelighet", "idpAzureConfiguration": "Azure Entra ID konfigurasjon", - "idpAzureConfigurationDescription": "Konfigurere din Azure Entra ID OAuth2 legitimasjon", + "idpAzureConfigurationDescription": "Konfigurer Azure Entra ID OAuth2 legitimasjon", "idpTenantId": "Leietaker-ID", - "idpTenantIdPlaceholder": "din-tenant-id", - "idpAzureTenantIdDescription": "Din Azure leie-ID (funnet i Azure Active Directory-oversikten)", - "idpAzureClientIdDescription": "Din Azure App registrerings klient-ID", - "idpAzureClientSecretDescription": "Din Azure App registrerings klient hemmelig", + "idpTenantIdPlaceholder": "tenant-id", + "idpAzureTenantIdDescription": "Azure leant ID (funnet i Azure Active Directory-oversikten)", + "idpAzureClientIdDescription": "Azure App registrerings klient-ID", + "idpAzureClientSecretDescription": "Azure App Registrering Klient Hemmelig", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", @@ -1741,14 +1800,14 @@ "idpGoogleConfigurationTitle": "Google Konfigurasjon", "idpAzureConfigurationTitle": "Azure Entra ID konfigurasjon", "idpTenantIdLabel": "Leietaker-ID", - "idpAzureClientIdDescription2": "Din Azure App registrerings klient-ID", - "idpAzureClientSecretDescription2": "Din Azure App registrerings klient hemmelig", + "idpAzureClientIdDescription2": "Azure App registrerings klient-ID", + "idpAzureClientSecretDescription2": "Azure App Registrering Klient Hemmelig", "idpGoogleDescription": "Google OAuth2/OIDC leverandør", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", "subnet": "Subnett", "subnetDescription": "Undernettverket for denne organisasjonens nettverkskonfigurasjon.", "authPage": "Autentiseringsside", - "authPageDescription": "Konfigurer autoriseringssiden for din organisasjon", + "authPageDescription": "Konfigurer autoriseringssiden for organisasjonen", "authPageDomain": "Autentiseringsside domene", "noDomainSet": "Ingen domene valgt", "changeDomain": "Endre domene", @@ -1758,7 +1817,7 @@ "setAuthPageDomain": "Angi autoriseringsside domene", "failedToFetchCertificate": "Kunne ikke hente sertifikat", "failedToRestartCertificate": "Kan ikke starte sertifikat", - "addDomainToEnableCustomAuthPages": "Legg til et domene for å aktivere egendefinerte autentiseringssider for organisasjonen din", + "addDomainToEnableCustomAuthPages": "Legg til et domene for å aktivere egendefinerte autentiseringssider for organisasjonen", "selectDomainForOrgAuthPage": "Velg et domene for organisasjonens autentiseringsside", "domainPickerProvidedDomain": "Gitt domene", "domainPickerFreeProvidedDomain": "Gratis oppgitt domene", @@ -1773,7 +1832,7 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" kunne ikke gjøres gyldig for {domain}.", "domainPickerSubdomainSanitized": "Underdomenet som ble sanivert", "domainPickerSubdomainCorrected": "\"{sub}\" var korrigert til \"{sanitized}\"", - "orgAuthSignInTitle": "Logg inn på din organisasjon", + "orgAuthSignInTitle": "Logg inn på organisasjonen", "orgAuthChooseIdpDescription": "Velg din identitet leverandør for å fortsette", "orgAuthNoIdpConfigured": "Denne organisasjonen har ikke noen identitetstjeneste konfigurert. Du kan i stedet logge inn med Pangolin identiteten din.", "orgAuthSignInWithPangolin": "Logg inn med Pangolin", @@ -1791,7 +1850,7 @@ "enableTwoFactorAuthentication": "Aktiver to-faktor autentisering", "completeSecuritySteps": "Fullfør sikkerhetstrinnene", "securitySettings": "Sikkerhet innstillinger", - "securitySettingsDescription": "Konfigurere sikkerhetspolicyer for din organisasjon", + "securitySettingsDescription": "Konfigurer sikkerhetspolicyer for organisasjonen", "requireTwoFactorForAllUsers": "Krev to-faktor autentisering for alle brukere", "requireTwoFactorDescription": "Når aktivert må alle interne brukere i denne organisasjonen ha to-faktorautentisering aktivert for å få tilgang til organisasjonen.", "requireTwoFactorDisabledDescription": "Denne funksjonen krever en gyldig lisens (Enterprise) eller aktivt abonnement (SaaS)", @@ -1854,8 +1913,12 @@ "enterpriseEdition": "Enterprise Edition", "unlicensed": "Ikke lisensiert", "beta": "beta", - "manageClients": "Administrer klienter", - "manageClientsDescription": "Klienter er enheter som kan koble seg til nettstedet ditt", + "manageUserDevices": "Bruker Enheter", + "manageUserDevicesDescription": "Se og administrer enheter som brukere bruker for privat tilkobling til ressurser", + "manageMachineClients": "Administrer maskinneklienter", + "manageMachineClientsDescription": "Opprett og behandle klienter som servere og systemer bruker for privat tilkobling til ressurser", + "clientsTableUserClients": "Bruker", + "clientsTableMachineClients": "Maskin", "licenseTableValidUntil": "Gyldig til", "saasLicenseKeysSettingsTitle": "Bedriftstillatelse Lisenser", "saasLicenseKeysSettingsDescription": "Generer og administrer Enterprise lisensnøkler for selvbetjente Pangolin forekomster", @@ -1990,11 +2053,12 @@ "pathRewriteStripLabel": "stripe", "sidebarEnableEnterpriseLicense": "Aktiver Enterprise lisens", "cannotbeUndone": "Dette kan ikke angres.", - "toConfirm": "å bekrefte", + "toConfirm": "å bekrefte.", "deleteClientQuestion": "Er du sikker på at du vil fjerne klienten fra nettstedet og organisasjonen?", "clientMessageRemove": "Når klienten er fjernet, kan den ikke lenger koble seg til nettstedet.", "sidebarLogs": "Logger", "request": "Forespørsel", + "requests": "Forespørsler", "logs": "Logger", "logsSettingsDescription": "Overvåk logger samlet fra denne orginiasjonen", "searchLogs": "Søk i logger...", @@ -2020,6 +2084,7 @@ "ip": "IP", "reason": "Grunn", "requestLogs": "Forespørselslogger (Automatic Translation)", + "requestAnalytics": "Be om analyser", "host": "Vert", "location": "Sted", "actionLogs": "Handlingslogger", @@ -2029,6 +2094,7 @@ "logRetention": "Logg tilbaketrekning", "logRetentionDescription": "Håndter hvor lenge ulike typer logger beholdes for denne organisasjonen, eller deaktiver dem", "requestLogsDescription": "Se detaljerte forespørselslogger for ressurser i denne organisasjonen", + "requestAnalyticsDescription": "Se detaljert rekvisisjonsanalyse for ressurser i denne organisasjonen", "logRetentionRequestLabel": "Be om loggoverføring", "logRetentionRequestDescription": "Hvor lenge du vil beholde forespørselslogger", "logRetentionAccessLabel": "Få tilgang til loggoverføring", @@ -2042,6 +2108,7 @@ "logRetention30Days": "30 dager", "logRetention90Days": "90 dager", "logRetentionForever": "Alltid", + "logRetentionEndOfFollowingYear": "Slutt på neste år", "actionLogsDescription": "Vis historikk for handlinger som er utført i denne organisasjonen", "accessLogsDescription": "Vis autoriseringsforespørsler for ressurser i denne organisasjonen", "licenseRequiredToUse": "En Enterprise lisens er påkrevd for å bruke denne funksjonen.", @@ -2052,7 +2119,7 @@ "preferWildcardCert": "Foretrekk Wildcard sertifikat", "unverified": "Uverifisert", "domainSetting": "Domene innstillinger", - "domainSettingDescription": "Konfigurer innstillinger for ditt domene", + "domainSettingDescription": "Konfigurer innstillinger for domenet", "preferWildcardCertDescription": "Forsøk på å generere et jokertegn (krever en riktig konfigurert sertifikatløsning).", "recordName": "Lagre navn", "auto": "Automatisk", @@ -2066,15 +2133,15 @@ "olmUpdateAvailableInfo": "En oppdatert versjon av Olm er tilgjengelig. Oppdater til den nyeste versjonen for å få den beste opplevelsen.", "client": "Klient", "proxyProtocol": "Protokoll innstillinger for Protokoll", - "proxyProtocolDescription": "Konfigurer Proxy-protokoll for å bevare klientens IP-adresser til TCP/UDP tjenester.", + "proxyProtocolDescription": "Konfigurer Proxy-protokoll for å bevare klientens IP-adresser til TCP-tjenester.", "enableProxyProtocol": "Aktiver Proxy-protokoll", - "proxyProtocolInfo": "Bevar klientens IP-adresser for TCP/UDP bakover", + "proxyProtocolInfo": "Bevar klientens IP-adresser for TCP backends", "proxyProtocolVersion": "Proxy protokoll versjon", "version1": " Versjon 1 (Anbefalt)", "version2": "Versjon 2", "versionDescription": "Versjon 1 er tekstbasert og støttet. Versjon 2 er binært og mer effektivt, men mindre kompatibel.", "warning": "Advarsel", - "proxyProtocolWarning": "Din backend applikasjon må være konfigurert for å godta Proxy Protokoller. Hvis din backend ikke støtter Proxy Protocol, vil aktivering av dette bryte alle tilkoblinger. Sørg for å konfigurere backend til å stole på Proxy Protokoll overskrifter fra Traefik.", + "proxyProtocolWarning": "backend-programmet må konfigureres til å akseptere forbindelser i Proxy Protokoll. Hvis backend ikke støtter Proxy Beskyttelse vil aktivering av dette ødelegge alle tilkoblinger så bare dette hvis du vet hva du gjør. Sørg for å konfigurere backend til å stole på Proxy Protokoll overskrifter fra Traefik.", "restarting": "Restarter...", "manual": "Manuell", "messageSupport": "Støtte for melding", @@ -2097,6 +2164,43 @@ "supportMessageSent": "Melding sendt!", "supportWillContact": "Vi kommer raskt til å ta kontakt!", "selectLogRetention": "Velg oppbevaring av logg", + "terms": "Vilkår", + "privacy": "Personvern", + "security": "Sikkerhet", + "docs": "Dokumenter", + "deviceActivation": "Aktivering av enhet", + "deviceCodeInvalidFormat": "Kode må inneholde 9 tegn (f.eks A1AJ-N5JD)", + "deviceCodeInvalidOrExpired": "Ugyldig eller utløpt kode", + "deviceCodeVerifyFailed": "Klarte ikke å bekrefte enhetskoden", + "signedInAs": "Logget inn som", + "deviceCodeEnterPrompt": "Skriv inn koden som vises på enheten", + "continue": "Fortsett", + "deviceUnknownLocation": "Ukjent plassering", + "deviceAuthorizationRequested": "Denne autorisasjonen ble forespurt fra {location} på {date}. Pass på at du stoler på denne enheten siden den vil få tilgang til kontoen.", + "deviceLabel": "Enhet: {deviceName}", + "deviceWantsAccess": "ønsker å få tilgang til kontoen din", + "deviceExistingAccess": "Eksisterende tilgang:", + "deviceFullAccess": "Full tilgang til din konto", + "deviceOrganizationsAccess": "Tilgang til alle organisasjoner din konto har tilgang til", + "deviceAuthorize": "Autoriser {applicationName}", + "deviceConnected": "Enhet tilkoblet!", + "deviceAuthorizedMessage": "Enhet er autorisert for tilgang til kontoen din.", + "pangolinCloud": "Pangolin Sky", + "viewDevices": "Vis enheter", + "viewDevicesDescription": "Administrer tilkoblede enheter", + "noDevices": "Ingen enheter funnet", + "dateCreated": "Opprettet dato", + "unnamedDevice": "Navnløs enhet", + "deviceQuestionRemove": "Er du sikker på at du vil slette denne enheten?", + "deviceMessageRemove": "Denne handlingen kan ikke angres.", + "deviceDeleteConfirm": "Slett enhet", + "deleteDevice": "Slett enhet", + "errorLoadingDevices": "Feil ved lasting av enheter", + "failedToLoadDevices": "Klarte ikke å laste enheter", + "deviceDeleted": "Enheten er slettet", + "deviceDeletedDescription": "Enheten har blitt slettet.", + "errorDeletingDevice": "Feil ved sletting av enhet", + "failedToDeleteDevice": "Kunne ikke slette enheten", "showColumns": "Vis kolonner", "hideColumns": "Skjul kolonner", "columnVisibility": "Kolonne Synlighet", @@ -2111,10 +2215,14 @@ "enableSelected": "Aktiver valgte", "disableSelected": "Deaktiver valgte", "checkSelectedStatus": "Kontroller status for valgte", + "clients": "Klienter", + "accessClientSelect": "Velg maskinklienter", + "resourceClientDescription": "Maskinklienter som har tilgang til denne ressursen", + "regenerate": "Regenerer", "credentials": "Legitimasjon", "savecredentials": "Lagre brukeropplysninger", - "regeneratecredentials": "Ny nøkkel", - "regenerateCredentials": "Regenerer og lagre opplysningene dine", + "regenerateCredentialsButton": "Regenerer brukeropplysninger", + "regenerateCredentials": "Regenerer brukeropplysninger", "generatedcredentials": "Genererte brukeropplysninger", "copyandsavethesecredentials": "Kopier og lagre disse opplysningene", "copyandsavethesecredentialsdescription": "Disse opplysningene vil ikke bli vist igjen etter at du forlater siden. Lagre dem trygt nå.", @@ -2122,13 +2230,12 @@ "credentialsSavedDescription": "Påloggingsinformasjonen har blitt regenerert og lagret.", "credentialsSaveError": "Påloggingsinformasjon lagre feil", "credentialsSaveErrorDescription": "En feil oppstod under regenerering og lagring av legitimasjon.", - "regenerateCredentialsWarning": "Regenerering av legitimasjon vil ugyldiggjøre de forrige. Sørg for at alle konfigurasjoner som bruker disse legitimasjonene.", + "regenerateCredentialsWarning": "Regenerering av legitimasjon vil ugyldiggjøre de forrige og forårsake en frakobling. Sørg for å oppdatere alle konfigurasjoner som bruker disse legitimasjonene.", "confirm": "Bekreft", "regenerateCredentialsConfirmation": "Er du sikker på at du vil regenerere legetimasjonene?", "endpoint": "Endpoint", "Id": "Id", "SecretKey": "Hemmelig nøkkel", - "featureDisabledTooltip": "Denne funksjonen er bare tilgjengelig i virksomhetsplanen og krever en lisens til å bruke den.", "niceId": "God ID", "niceIdUpdated": "Flott ID oppdatert", "niceIdUpdatedSuccessfully": "Id-en ble oppdatert", @@ -2136,5 +2243,32 @@ "niceIdUpdateErrorDescription": "Det oppstod en feil under oppdatering av Nice ID.", "niceIdCannotBeEmpty": "God ID kan ikke være tom", "enterIdentifier": "Angi identifikator", - "identifier": "Identifier" + "identifier": "Identifier", + "deviceLoginUseDifferentAccount": "Ikke du? Bruk en annen konto.", + "deviceLoginDeviceRequestingAccessToAccount": "En enhet ber om tilgang til denne kontoen.", + "noData": "Ingen data", + "machineClients": "Maskinklienter", + "install": "Installer", + "run": "Kjør", + "clientNameDescription": "Visningsnavnet til klienten som kan endres senere.", + "clientAddress": "Klientadresse (avansert)", + "setupFailedToFetchSubnet": "Kunne ikke hente standard undernett", + "setupSubnetAdvanced": "Subnet (avansert)", + "setupSubnetDescription": "Subnet for denne organisasjonens interne nettverk.", + "siteRegenerateAndDisconnect": "Regenerer og koble fra", + "siteRegenerateAndDisconnectConfirmation": "Er du sikker på at du vil regenerere legitimasjon og koble fra dette nettstedet?", + "siteRegenerateAndDisconnectWarning": "Dette vil regenerere legitimasjon og umiddelbart koble fra siden. Siden må startes på nytt med de nye legitimasjonene.", + "siteRegenerateCredentialsConfirmation": "Er du sikker på at du vil regenerere legitimasjon for dette nettstedet?", + "siteRegenerateCredentialsWarning": "Dette vil regenerere legitimasjonen. Siden vil forbli tilkoblet inntil du manuelt starter den på nytt og bruker de nye legitimasjonen.", + "clientRegenerateAndDisconnect": "Regenerer og koble fra", + "clientRegenerateAndDisconnectConfirmation": "Er du sikker på at du vil regenerere legitimasjon og koble fra denne klienten?", + "clientRegenerateAndDisconnectWarning": "Dette vil regenerere legitimasjon og umiddelbart koble fra klienten. Kunden må startes på nytt med de nye legitimasjonene.", + "clientRegenerateCredentialsConfirmation": "Er du sikker på at du vil regenerere legitimasjon for denne klienten?", + "clientRegenerateCredentialsWarning": "Dette vil regenerere legitimasjon. Klienten vil forbli tilkoblet inntil du manuelt starter den på nytt og bruker de nye legitimasjonen.", + "remoteExitNodeRegenerateAndDisconnect": "Regenerer og koble fra", + "remoteExitNodeRegenerateAndDisconnectConfirmation": "Er du sikker på at du vil regenerere legitimasjon og koble fra denne eksterne avslutnings noden?", + "remoteExitNodeRegenerateAndDisconnectWarning": "Dette vil regenerere innloggingsdetaljene og umiddelbart koble fra den eksterne avkjøringnoden. Ekstern avkjøringsnode må startes på nytt med de nye opplysningene", + "remoteExitNodeRegenerateCredentialsConfirmation": "Er du sikker på at du vil regenerere innloggingsene for denne eksterne avslutningen?", + "remoteExitNodeRegenerateCredentialsWarning": "Dette vil regenerere legitimasjon. Ekstern avgang noden vil forbli tilkoblet inntil du manuelt gjenoppstarter den og bruker de nye legitimasjonene.", + "agent": "Agent" } diff --git a/messages/nl-NL.json b/messages/nl-NL.json index 73ba2acc3..c235676a0 100644 --- a/messages/nl-NL.json +++ b/messages/nl-NL.json @@ -1,12 +1,12 @@ { - "setupCreate": "Maak uw organisatie, site en bronnen aan", + "setupCreate": "Maak de organisatie, site en bronnen aan", "setupNewOrg": "Nieuwe organisatie", "setupCreateOrg": "Nieuwe organisatie aanmaken", "setupCreateResources": "Bronnen aanmaken", "setupOrgName": "Naam van de organisatie", - "orgDisplayName": "Dit is de weergavenaam van uw organisatie.", + "orgDisplayName": "Dit is de weergavenaam van de organisatie.", "orgId": "Organisatie ID", - "setupIdentifierMessage": "Dit is de unieke identificatie voor uw organisatie. Deze is gescheiden van de weergavenaam.", + "setupIdentifierMessage": "Dit is de unieke identificatie voor de organisatie.", "setupErrorIdentifier": "Organisatie-ID is al in gebruik. Kies een andere.", "componentsErrorNoMemberCreate": "U bent momenteel geen lid van een organisatie. Maak een organisatie aan om aan de slag te gaan.", "componentsErrorNoMember": "U bent momenteel geen lid van een organisatie.", @@ -50,10 +50,10 @@ "siteMessageRemove": "Eenmaal verwijderd zal de site niet langer toegankelijk zijn. Alle aan de site gekoppelde doelen zullen ook worden verwijderd.", "siteQuestionRemove": "Weet u zeker dat u de site wilt verwijderen uit de organisatie?", "siteManageSites": "Sites beheren", - "siteDescription": "Verbindt met uw netwerk via beveiligde tunnels", + "siteDescription": "Maak en beheer sites om verbinding met privénetwerken in te schakelen", "siteCreate": "Site maken", "siteCreateDescription2": "Volg de onderstaande stappen om een nieuwe site aan te maken en te verbinden", - "siteCreateDescription": "Maak een nieuwe site aan om verbinding te maken met uw bronnen", + "siteCreateDescription": "Maak een nieuwe site aan om bronnen te verbinden", "close": "Sluiten", "siteErrorCreate": "Fout bij maken site", "siteErrorCreateKeyPair": "Key pair of site standaard niet gevonden", @@ -74,7 +74,7 @@ "siteInstallNewt": "Installeer Newt", "siteInstallNewtDescription": "Laat Newt draaien op uw systeem", "WgConfiguration": "WireGuard Configuratie", - "WgConfigurationDescription": "Gebruik de volgende configuratie om verbinding te maken met je netwerk", + "WgConfigurationDescription": "Gebruik de volgende configuratie om verbinding te maken met het netwerk", "operatingSystem": "Operating systeem", "commands": "Opdrachten", "recommended": "Aanbevolen", @@ -87,32 +87,32 @@ "siteUpdated": "Site bijgewerkt", "siteUpdatedDescription": "De site is bijgewerkt.", "siteGeneralDescription": "Algemene instellingen voor deze site configureren", - "siteSettingDescription": "Configureer de instellingen op uw site", + "siteSettingDescription": "Configureer de instellingen van de site", "siteSetting": "{siteName} instellingen", - "siteNewtTunnel": "Newttunnel (Aanbevolen)", - "siteNewtTunnelDescription": "Gemakkelijkste manier om een ingangspunt in uw netwerk te maken. Geen extra opzet.", + "siteNewtTunnel": "Nieuwste site (Aanbevolen)", + "siteNewtTunnelDescription": "Makkelijkste manier om een ingangspunt in een netwerk te maken. Geen extra opzet.", "siteWg": "Basis WireGuard", "siteWgDescription": "Gebruik een WireGuard client om een tunnel te bouwen. Handmatige NAT installatie vereist.", "siteWgDescriptionSaas": "Gebruik elke WireGuard-client om een tunnel op te zetten. Handmatige NAT-instelling vereist. WERKT ALLEEN OP SELF HOSTED NODES", "siteLocalDescription": "Alleen lokale bronnen. Geen tunneling.", "siteLocalDescriptionSaas": "Enkel lokale bronnen. Geen tunneling. Alleen beschikbaar op externe knooppunten.", "siteSeeAll": "Alle sites bekijken", - "siteTunnelDescription": "Bepaal hoe u verbinding wilt maken met uw site", - "siteNewtCredentials": "Nieuwste aanmeldgegevens", - "siteNewtCredentialsDescription": "Dit is hoe Newt zich zal verifiëren met de server", - "siteCredentialsSave": "Uw referenties opslaan", + "siteTunnelDescription": "Bepaal hoe u verbinding wilt maken met de site", + "siteNewtCredentials": "Aanmeldgegevens", + "siteNewtCredentialsDescription": "Dit is hoe de site zich zal verifiëren met de server", + "siteCredentialsSave": "Sla de aanmeldgegevens op", "siteCredentialsSaveDescription": "Je kunt dit slechts één keer zien. Kopieer het naar een beveiligde plek.", "siteInfo": "Site informatie", "status": "Status", "shareTitle": "Beheer deellinks", - "shareDescription": "Maak deelbare links aan om tijdelijke of permanente toegang tot uw bronnen te verlenen", + "shareDescription": "Maak deelbare links aan om tijdelijke of permanente toegang tot proxybronnen te verlenen", "shareSearch": "Zoek share links...", "shareCreate": "Maak Share link", "shareErrorDelete": "Kan link niet verwijderen", "shareErrorDeleteMessage": "Fout opgetreden tijdens het verwijderen link", "shareDeleted": "Link verwijderd", "shareDeletedDescription": "De link is verwijderd", - "shareTokenDescription": "Uw toegangstoken kan op twee manieren worden doorgegeven: als queryparameter of in de header van de aanvraag. Deze moeten worden doorgegeven van de client op elk verzoek voor geverifieerde toegang.", + "shareTokenDescription": "De toegangstoken kan op twee manieren worden doorgegeven: als queryparameter of in de aanvraagheaders. Deze moeten worden doorgegeven van de client op elk verzoek voor geverifieerde toegang.", "accessToken": "Toegangs-token", "usageExamples": "Voorbeelden van gebruik", "tokenId": "Token ID", @@ -121,7 +121,7 @@ "importantNote": "Belangrijke opmerking", "shareImportantDescription": "Om veiligheidsredenen wordt het gebruik van headers aanbevolen over queryparameters indien mogelijk, omdat query parameters kunnen worden aangemeld in serverlogboeken of browsergeschiedenis.", "token": "Token", - "shareTokenSecurety": "Houd uw toegangstoken veilig. Deel deze niet in openbaar toegankelijke gebieden of client-side code.", + "shareTokenSecurety": "Houd het toegangstoken beveiligd. Deel het niet in openbaar toegankelijke gebieden of client-side code.", "shareErrorFetchResource": "Fout bij het ophalen van bronnen", "shareErrorFetchResourceDescription": "Er is een fout opgetreden bij het ophalen van de resources", "shareErrorCreate": "Aanmaken van link delen mislukt", @@ -144,8 +144,10 @@ "expires": "Verloopt", "never": "Nooit", "shareErrorSelectResource": "Selecteer een bron", - "resourceTitle": "Bronnen beheren", - "resourceDescription": "Veilige proxy's voor uw privéapplicaties maken", + "proxyResourceTitle": "Openbare bronnen beheren", + "proxyResourceDescription": "Creëer en beheer bronnen die openbaar toegankelijk zijn via een webbrowser", + "clientResourceTitle": "Privébronnen beheren", + "clientResourceDescription": "Creëer en beheer bronnen die alleen toegankelijk zijn via een verbonden client", "resourcesSearch": "Zoek bronnen...", "resourceAdd": "Bron toevoegen", "resourceErrorDelte": "Fout bij verwijderen document", @@ -155,9 +157,9 @@ "resourceMessageRemove": "Eenmaal verwijderd, zal het bestand niet langer toegankelijk zijn. Alle doelen die gekoppeld zijn aan het hulpbron, zullen ook verwijderd worden.", "resourceQuestionRemove": "Weet u zeker dat u het document van de organisatie wilt verwijderen?", "resourceHTTP": "HTTPS bron", - "resourceHTTPDescription": "Proxy verzoeken aan uw app via HTTPS via een subdomein of basisdomein.", + "resourceHTTPDescription": "Proxy verzoeken aan de app via HTTPS via een subdomein of basisdomein.", "resourceRaw": "TCP/UDP bron", - "resourceRawDescription": "Proxy verzoeken naar je app via TCP/UDP met behulp van een poortnummer.", + "resourceRawDescription": "Proxy verzoeken naar de app via TCP/UDP met behulp van een poortnummer. Dit werkt alleen als sites zijn verbonden met nodes.", "resourceCreate": "Bron maken", "resourceCreateDescription": "Volg de onderstaande stappen om een nieuwe bron te maken", "resourceSeeAll": "Alle bronnen bekijken", @@ -171,22 +173,22 @@ "noCountryFound": "Geen land gevonden.", "siteSelectionDescription": "Deze site zal connectiviteit met het doelwit bieden.", "resourceType": "Type bron", - "resourceTypeDescription": "Bepaal hoe u toegang wilt krijgen tot uw bron", + "resourceTypeDescription": "Bepaal hoe u toegang wilt tot de bron", "resourceHTTPSSettings": "HTTPS instellingen", "resourceHTTPSSettingsDescription": "Stel in hoe de bron wordt benaderd via HTTPS", "domainType": "Domein type", "subdomain": "Subdomein", "baseDomain": "Basis domein", - "subdomnainDescription": "Het subdomein waar de bron toegankelijk is.", + "subdomnainDescription": "Het subdomein waar de bron toegankelijk zal zijn.", "resourceRawSettings": "TCP/UDP instellingen", - "resourceRawSettingsDescription": "Stel in hoe uw bron wordt benaderd via TCP/UDP. Je gooit de bron toe aan een poort op de host-Pangolin server, zodat je de bron kan bereiken vanaf server-public-ip:mapped-port.", + "resourceRawSettingsDescription": "Stel in hoe de bron wordt benaderd via TCP/UDP", "protocol": "Protocol", "protocolSelect": "Selecteer een protocol", "resourcePortNumber": "Nummer van poort", "resourcePortNumberDescription": "Het externe poortnummer naar proxyverzoeken.", "cancel": "Annuleren", "resourceConfig": "Configuratie tekstbouwstenen", - "resourceConfigDescription": "Kopieer en plak deze configuratie-snippets om je TCP/UDP-bron in te stellen", + "resourceConfigDescription": "Kopieer en plak deze configuratie-snippets om de TCP/UDP-bron in te stellen", "resourceAddEntrypoints": "Traefik: Entrypoints toevoegen", "resourceExposePorts": "Gerbild: Gevangen blootstellen in Docker Compose", "resourceLearnRaw": "Leer hoe je TCP/UDP bronnen kunt configureren", @@ -202,14 +204,14 @@ "proxy": "Proxy", "internal": "Intern", "rules": "Regels", - "resourceSettingDescription": "Configureer de instellingen op uw bron", + "resourceSettingDescription": "Configureer de instellingen in de bron", "resourceSetting": "{resourceName} instellingen", - "alwaysAllow": "Altijd toestaan", - "alwaysDeny": "Altijd weigeren", + "alwaysAllow": "Authenticatie omzeilen", + "alwaysDeny": "Blokkeer toegang", "passToAuth": "Passeren naar Auth", - "orgSettingsDescription": "Configureer de algemene instellingen van je organisatie", + "orgSettingsDescription": "Configureer de instellingen van de organisatie", "orgGeneralSettings": "Organisatie Instellingen", - "orgGeneralSettingsDescription": "Beheer de details en configuratie van uw organisatie", + "orgGeneralSettingsDescription": "De details en configuratie van de organisatie beheren", "saveGeneralSettings": "Algemene instellingen opslaan", "saveSettings": "Instellingen opslaan", "orgDangerZone": "Gevaarlijke zone", @@ -232,7 +234,7 @@ "orgMissing": "Organisatie-ID ontbreekt", "orgMissingMessage": "Niet in staat om de uitnodiging te regenereren zonder organisatie-ID.", "accessUsersManage": "Gebruikers beheren", - "accessUsersDescription": "Nodig gebruikers uit en voeg ze toe aan de rollen om toegang tot uw organisatie te beheren", + "accessUsersDescription": "Nodig uit en beheer gebruikers met toegang tot deze organisatie", "accessUsersSearch": "Gebruikers zoeken...", "accessUserCreate": "Gebruiker aanmaken", "accessUserRemove": "Gebruiker verwijderen", @@ -241,13 +243,13 @@ "role": "Functie", "nameRequired": "Naam is verplicht", "accessRolesManage": "Rollen beheren", - "accessRolesDescription": "Configureer rollen om toegang tot uw organisatie te beheren", + "accessRolesDescription": "Maak en beheer rollen voor gebruikers in de organisatie", "accessRolesSearch": "Rollen zoeken...", "accessRolesAdd": "Rol toevoegen", "accessRoleDelete": "Verwijder rol", "description": "Beschrijving", "inviteTitle": "Open uitnodigingen", - "inviteDescription": "Beheer je uitnodigingen aan andere gebruikers", + "inviteDescription": "Beheer uitnodigingen voor andere gebruikers om deel te nemen aan de organisatie", "inviteSearch": "Uitnodigingen zoeken...", "minutes": "minuten", "hours": "Uren", @@ -261,13 +263,13 @@ "apiKeysErrorCreate": "Fout bij maken API-sleutel", "apiKeysErrorSetPermission": "Fout instellen permissies", "apiKeysCreate": "API-sleutel genereren", - "apiKeysCreateDescription": "Genereer een nieuwe API-sleutel voor uw organisatie", + "apiKeysCreateDescription": "Een nieuwe API-sleutel voor de organisatie genereren", "apiKeysGeneralSettings": "Machtigingen", "apiKeysGeneralSettingsDescription": "Bepaal wat deze API-sleutel kan doen", - "apiKeysList": "Uw API-sleutel", - "apiKeysSave": "Uw API-sleutel opslaan", + "apiKeysList": "Nieuwe API-sleutel", + "apiKeysSave": "De API-sleutel opslaan", "apiKeysSaveDescription": "Je kunt dit slechts één keer zien. Kopieer het naar een veilige plek.", - "apiKeysInfo": "Uw API-sleutel is:", + "apiKeysInfo": "De API-sleutel is:", "apiKeysConfirmCopy": "Ik heb de API-sleutel gekopieerd", "generate": "Genereren", "done": "Voltooid", @@ -424,7 +426,7 @@ "userCreated": "Gebruiker aangemaakt", "userCreatedDescription": "De gebruiker is succesvol aangemaakt.", "userTypeInternal": "Interne gebruiker", - "userTypeInternalDescription": "Nodig een gebruiker uit om direct lid te worden van je organisatie.", + "userTypeInternalDescription": "Nodig een gebruiker uit om direct lid te worden van de organisatie.", "userTypeExternal": "Externe gebruiker", "userTypeExternalDescription": "Maak een gebruiker aan met een externe identiteitsprovider.", "accessUserCreateDescription": "Volg de onderstaande stappen om een nieuwe gebruiker te maken", @@ -436,6 +438,16 @@ "inviteEmailSent": "Stuur uitnodigingsmail naar de gebruiker", "inviteValid": "Geldig voor", "selectDuration": "Selecteer duur", + "selectResource": "Selecteer Document", + "filterByResource": "Filter op pagina", + "resetFilters": "Filters resetten", + "totalBlocked": "Verzoeken geblokkeerd door Pangolin", + "totalRequests": "Totaal verzoeken", + "requestsByCountry": "Verzoeken per land", + "requestsByDay": "Verzoeken per dag", + "blocked": "Geblokkeerd", + "allowed": "Toegestaan", + "topCountries": "Top Landen", "accessRoleSelect": "Selecteer rol", "inviteEmailSentDescription": "Een e-mail is verstuurd naar de gebruiker met de link hieronder. Ze moeten toegang krijgen tot de link om de uitnodiging te accepteren.", "inviteSentDescription": "De gebruiker is uitgenodigd. Ze moeten toegang krijgen tot de link hieronder om de uitnodiging te accepteren.", @@ -458,13 +470,13 @@ "accessControlsSubmit": "Bewaar Toegangsbesturing", "roles": "Rollen", "accessUsersRoles": "Beheer Gebruikers & Rollen", - "accessUsersRolesDescription": "Nodig gebruikers uit en voeg ze toe aan de rollen om toegang tot uw organisatie te beheren", + "accessUsersRolesDescription": "Nodig gebruikers uit en voeg ze toe aan de rollen om toegang tot de organisatie te beheren", "key": "Sleutel", "createdAt": "Aangemaakt op", "proxyErrorInvalidHeader": "Ongeldige aangepaste Header waarde. Gebruik het domeinnaam formaat, of sla leeg op om de aangepaste Host header ongedaan te maken.", "proxyErrorTls": "Ongeldige TLS servernaam. Gebruik de domeinnaam of sla leeg op om de TLS servernaam te verwijderen.", "proxyEnableSSL": "SSL inschakelen", - "proxyEnableSSLDescription": "SSL/TLS-versleuteling inschakelen voor beveiligde HTTPS-verbindingen naar uw doelen.", + "proxyEnableSSLDescription": "SSL/TLS-versleuteling inschakelen voor beveiligde HTTPS-verbindingen naar de doelen.", "target": "Target", "configureTarget": "Doelstellingen configureren", "targetErrorFetch": "Ophalen van doelen mislukt", @@ -480,29 +492,29 @@ "targetsErrorUpdate": "Kan doelen niet bijwerken", "targetsErrorUpdateDescription": "Fout opgetreden tijdens het bijwerken van de doelen", "targetTlsUpdate": "TLS instellingen bijgewerkt", - "targetTlsUpdateDescription": "Uw TLS instellingen zijn succesvol bijgewerkt", + "targetTlsUpdateDescription": "TLS instellingen zijn succesvol bijgewerkt", "targetErrorTlsUpdate": "Bijwerken van TLS instellingen mislukt", "targetErrorTlsUpdateDescription": "Fout opgetreden tijdens het bijwerken van de TLS-instellingen", "proxyUpdated": "Proxyinstellingen bijgewerkt", - "proxyUpdatedDescription": "Uw proxyinstellingen zijn succesvol bijgewerkt", + "proxyUpdatedDescription": "Proxyinstellingen zijn succesvol bijgewerkt", "proxyErrorUpdate": "Bijwerken van proxy-instellingen mislukt", "proxyErrorUpdateDescription": "Fout opgetreden tijdens het bijwerken van de proxy-instellingen", - "targetAddr": "IP / Hostnaam", + "targetAddr": "Hostnaam", "targetPort": "Poort", "targetProtocol": "Protocol", "targetTlsSettings": "HTTPS & TLS instellingen", - "targetTlsSettingsDescription": "SSL/TLS-instellingen voor uw bron configureren", + "targetTlsSettingsDescription": "Configureer SSL/TLS instellingen voor de bron", "targetTlsSettingsAdvanced": "Geavanceerde TLS instellingen", "targetTlsSni": "TLS servernaam", "targetTlsSniDescription": "De TLS servernaam om te gebruiken voor SNI. Laat leeg om de standaard te gebruiken.", "targetTlsSubmit": "Instellingen opslaan", "targets": "Doelstellingen configuratie", - "targetsDescription": "Stel doelen in om verkeer naar uw backend-services te leiden", + "targetsDescription": "Stel doelen in om verkeer naar backend diensten te sturen", "targetStickySessions": "Sticky sessies inschakelen", "targetStickySessionsDescription": "Behoud verbindingen op hetzelfde backend doel voor hun hele sessie.", "methodSelect": "Selecteer methode", "targetSubmit": "Doelwit toevoegen", - "targetNoOne": "Deze bron heeft geen doelen. Voeg een doel toe om te configureren waar verzoeken naar uw backend.", + "targetNoOne": "Deze bron heeft geen doelwitten. Voeg een doel toe om te configureren waar verzoeken naar de backend verzonden kunnen worden.", "targetNoOneDescription": "Het toevoegen van meer dan één doel hierboven zal de load balancering mogelijk maken.", "targetsSubmit": "Doelstellingen opslaan", "addTarget": "Doelwit toevoegen", @@ -516,9 +528,11 @@ "targetCreatedDescription": "Doel is succesvol aangemaakt", "targetErrorCreate": "Kan doel niet aanmaken", "targetErrorCreateDescription": "Fout opgetreden tijdens het aanmaken van het doel", + "tlsServerName": "TLS servernaam", + "tlsServerNameDescription": "De TLS servernaam om te gebruiken voor SNI", "save": "Opslaan", "proxyAdditional": "Extra Proxy-instellingen", - "proxyAdditionalDescription": "Configureer hoe de proxy-instellingen van uw bron worden afgehandeld", + "proxyAdditionalDescription": "Configureer hoe de bron omgaat met proxy-instellingen", "proxyCustomHeader": "Aangepaste Host-header", "proxyCustomHeaderDescription": "De hostkop om in te stellen bij proxying verzoeken. Laat leeg om de standaard te gebruiken.", "proxyAdditionalSubmit": "Proxyinstellingen opslaan", @@ -558,7 +572,7 @@ "rulesMatchType": "Wedstrijd Type", "value": "Waarde", "rulesAbout": "Over regels", - "rulesAboutDescription": "Regels stellen u in staat om de toegang tot uw bron te controleren op basis van een aantal criteria. U kunt regels maken om toegang te toestaan of weigeren op basis van IP-adres of URL pad.", + "rulesAboutDescription": "Regels stellen u in staat om de toegang tot het bestand te controleren op basis van een aantal criteria. U kunt regels maken om toegang te toestaan of weigeren op basis van IP-adres of URL pad.", "rulesActions": "acties", "rulesActionAlwaysAllow": "Altijd toegestaan: Omzeil alle authenticatiemethoden", "rulesActionAlwaysDeny": "Altijd weigeren: Blokkeer alle aanvragen, er kan geen verificatie worden geprobeerd", @@ -570,7 +584,7 @@ "rulesEnable": "Regels inschakelen", "rulesEnableDescription": "In- of uitschakelen van regelevaluatie voor deze bron", "rulesResource": "Configuratie Resource Regels", - "rulesResourceDescription": "Regels instellen om toegang tot uw bron te beheren", + "rulesResourceDescription": "Regels instellen om toegang tot de bron te beheren", "ruleSubmit": "Regel toevoegen", "rulesNoOne": "Geen regels. Voeg een regel toe via het formulier.", "rulesOrder": "Regels worden in oplopende volgorde volgens prioriteit beoordeeld.", @@ -586,7 +600,7 @@ "none": "geen", "unknown": "onbekend", "resources": "Bronnen", - "resourcesDescription": "Bronnen zijn proxies voor applicaties die op uw privénetwerk worden uitgevoerd. Maak een bron aan voor elke HTTP/HTTPS of onbewerkte TCP/UDP-service op uw privénetwerk. Elke bron moet verbonden zijn met een site om private, beveiligde verbinding mogelijk te maken via een versleutelde WireGuard tunnel.", + "resourcesDescription": "Bronnen zijn proxies voor applicaties die op het privénetwerk worden uitgevoerd. Maak een bron aan voor een HTTP/HTTPS of ruwe TCP/UDP-service op uw privénetwerk. Elke bron moet verbonden zijn met een site om private, beveiligde verbinding mogelijk te maken via een versleutelde WireGuard tunnel.", "resourcesWireGuardConnect": "Beveiligde verbinding met WireGuard versleuteling", "resourcesMultipleAuthenticationMethods": "Meerdere verificatiemethoden configureren", "resourcesUsersRolesAccess": "Gebruiker en rol-gebaseerde toegangsbeheer", @@ -597,7 +611,7 @@ "resourceSelect": "Selecteer resource", "shareLinks": "Links delen", "share": "Deelbare links", - "shareDescription2": "Maak deelbare links naar uw bronnen. Links bieden tijdelijke of onbeperkte toegang tot uw bron. U kunt de vervalduur van de link configureren wanneer u er een aanmaakt.", + "shareDescription2": "Maak deelbare links naar bronnen. Links bieden tijdelijke of onbeperkte toegang tot je bestand. U kunt de vervalduur van de link configureren wanneer u er een aanmaakt.", "shareEasyCreate": "Makkelijk te maken en te delen", "shareConfigurableExpirationDuration": "Configureerbare vervalduur", "shareSecureAndRevocable": "Veilig en herroepbaar", @@ -607,19 +621,19 @@ "unknownCommand": "Onbekende opdracht", "newtErrorFetchReleases": "Kan release-informatie niet ophalen: {err}", "newtErrorFetchLatest": "Fout bij ophalen van laatste release: {err}", - "newtEndpoint": "Newt Eindoordeel", - "newtId": "Newt-ID", - "newtSecretKey": "Nieuwe geheime sleutel", + "newtEndpoint": "Endpoint", + "newtId": "ID", + "newtSecretKey": "Geheim", "architecture": "Architectuur", "sites": "Sites", - "siteWgAnyClients": "Gebruik een willekeurige WireGuard client om verbinding te maken. Je moet je interne bronnen aanspreken met behulp van de peer IP.", + "siteWgAnyClients": "Gebruik een willekeurige WireGuard client om verbinding te maken. Je zult interne bronnen moeten aanspreken met behulp van de peer IP.", "siteWgCompatibleAllClients": "Compatibel met alle WireGuard clients", "siteWgManualConfigurationRequired": "Handmatige configuratie vereist", "userErrorNotAdminOrOwner": "Gebruiker is geen beheerder of eigenaar", "pangolinSettings": "Instellingen - Pangolin", "accessRoleYour": "Jouw rol:", - "accessRoleSelect2": "Selecteer lidmaatschap", - "accessUserSelect": "Selecteer een gebruiker", + "accessRoleSelect2": "Selecteer rollen", + "accessUserSelect": "Gebruikers selecteren", "otpEmailEnter": "Voer e-mailadres in", "otpEmailEnterDescription": "Druk op enter om een e-mail toe te voegen na het typen in het invoerveld.", "otpEmailErrorInvalid": "Ongeldig e-mailadres. Wildcard (*) moet het hele lokale deel zijn.", @@ -671,7 +685,7 @@ "resourcePincodeSetupTitle": "Pincode instellen", "resourcePincodeSetupTitleDescription": "Stel een pincode in om deze hulpbron te beschermen", "resourceRoleDescription": "Beheerders hebben altijd toegang tot deze bron.", - "resourceUsersRoles": "Gebruikers & Rollen", + "resourceUsersRoles": "Toegang Bediening", "resourceUsersRolesDescription": "Configureer welke gebruikers en rollen deze pagina kunnen bezoeken", "resourceUsersRolesSubmit": "Gebruikers opslaan & rollen", "resourceWhitelistSave": "Succesvol opgeslagen", @@ -702,6 +716,7 @@ "resourceTransferSubmit": "Bronnen overdragen", "siteDestination": "Bestemming site", "searchSites": "Sites zoeken", + "countries": "Landen", "accessRoleCreate": "Rol aanmaken", "accessRoleCreateDescription": "Maak een nieuwe rol aan om gebruikers te groeperen en hun rechten te beheren.", "accessRoleCreateSubmit": "Rol aanmaken", @@ -766,15 +781,15 @@ "idpOidcConfigure": "OAuth2/OIDC configuratie", "idpOidcConfigureDescription": "Configureer de eindpunten van de OAuth2/OIDC provider en referenties", "idpClientId": "Client ID", - "idpClientIdDescription": "De OAuth2 client ID van uw identiteitsprovider", + "idpClientIdDescription": "De OAuth2-client-ID van de identiteitsaanbieder", "idpClientSecret": "Client Secret", - "idpClientSecretDescription": "Het OAuth2 Client Secret van je identiteitsprovider", + "idpClientSecretDescription": "Het OAuth2-clientgeheim van de identiteitsprovider", "idpAuthUrl": "URL autorisatie", "idpAuthUrlDescription": "De URL voor autorisatie OAuth2", "idpTokenUrl": "URL token", "idpTokenUrlDescription": "De URL van het OAuth2 token eindpunt", "idpOidcConfigureAlert": "Belangrijke informatie", - "idpOidcConfigureAlertDescription": "Na het aanmaken van de identity provider moet u de callback URL configureren in de instellingen van uw identity provider. De callback URL zal worden opgegeven na het succesvol aanmaken.", + "idpOidcConfigureAlertDescription": "Na het aanmaken van de identity provider moet u de callback URL configureren in de instellingen van de identity provider. De callback URL zal worden opgegeven na het succesvol aanmaken.", "idpToken": "Token configuratie", "idpTokenDescription": "Stel in hoe gebruikersgegevens uit het ID token uit te pakken", "idpJmespathAbout": "Over JMESPath", @@ -791,7 +806,7 @@ "idpSubmit": "Identity Provider aanmaken", "orgPolicies": "Organisatie beleid", "idpSettings": "{idpName} instellingen", - "idpCreateSettingsDescription": "Configureer de instellingen voor uw identiteitsprovider", + "idpCreateSettingsDescription": "Configureer de instellingen voor de identiteitsprovider", "roleMapping": "Rol Toewijzing", "orgMapping": "Organisatie toewijzing", "orgPoliciesSearch": "Zoek het organisatiebeleid...", @@ -826,7 +841,7 @@ "idpUpdatedDescription": "Identity provider succesvol bijgewerkt", "redirectUrl": "Omleidings URL", "redirectUrlAbout": "Over omleidings-URL", - "redirectUrlAboutDescription": "Dit is de URL waarnaar gebruikers worden doorverwezen na verificatie. U moet deze URL configureren in uw identiteitsprovider-instellingen.", + "redirectUrlAboutDescription": "Dit is de URL waarnaar gebruikers worden doorverwezen na verificatie. U moet deze URL configureren in de instellingen van de identiteitsprovider.", "pangolinAuth": "Authenticatie - Pangolin", "verificationCodeLengthRequirements": "Je verificatiecode moet 8 tekens bevatten.", "errorOccurred": "Er is een fout opgetreden", @@ -909,6 +924,10 @@ "passwordResetSent": "We sturen een wachtwoord reset code naar dit e-mailadres.", "passwordResetCode": "Resetcode", "passwordResetCodeDescription": "Controleer je e-mail voor de reset code.", + "generatePasswordResetCode": "Herstelcode voor wachtwoord genereren", + "passwordResetCodeGenerated": "Wachtwoord reset code gegenereerd", + "passwordResetCodeGeneratedDescription": "Deel deze code met de gebruiker. Ze kunnen deze gebruiken om hun wachtwoord te resetten.", + "passwordResetUrl": "Reset URL", "passwordNew": "Nieuw wachtwoord", "passwordNewConfirm": "Bevestig nieuw wachtwoord", "changePassword": "Wachtwoord wijzigen", @@ -926,6 +945,9 @@ "pincodeAuth": "Authenticatiecode", "pincodeSubmit2": "Code indienen", "passwordResetSubmit": "Opnieuw instellen aanvragen", + "passwordResetAlreadyHaveCode": "Herstelcode wachtwoord invoeren", + "passwordResetSmtpRequired": "Neem contact op met uw beheerder", + "passwordResetSmtpRequiredDescription": "Er is een wachtwoord reset code nodig om uw wachtwoord opnieuw in te stellen. Neem contact op met uw beheerder voor hulp.", "passwordBack": "Terug naar wachtwoord", "loginBack": "Ga terug naar login", "signup": "Registreer nu", @@ -1091,12 +1113,15 @@ "actionListSiteResources": "Bronnen van site weergeven", "actionUpdateSiteResource": "Document bijwerken van site", "actionListInvitations": "Toon uitnodigingen", + "actionExportLogs": "Logboeken exporteren", + "actionViewLogs": "Logboeken bekijken", "noneSelected": "Niet geselecteerd", "orgNotFound2": "Geen organisaties gevonden.", "searchProgress": "Zoeken...", "create": "Aanmaken", "orgs": "Organisaties", "loginError": "Er is een fout opgetreden tijdens het inloggen", + "loginRequiredForDevice": "Inloggen is vereist om je apparaat te verifiëren.", "passwordForgot": "Wachtwoord vergeten?", "otpAuth": "Tweestapsverificatie verificatie", "otpAuthDescription": "Voer de code van je authenticator-app of een van je reservekopiecodes voor het eenmalig gebruik in.", @@ -1151,19 +1176,29 @@ "sidebarHome": "Startpagina", "sidebarSites": "Werkruimtes", "sidebarResources": "Bronnen", + "sidebarProxyResources": "Openbaar", + "sidebarClientResources": "Privé", "sidebarAccessControl": "Toegangs controle", + "sidebarLogsAndAnalytics": "Logs & Analytics", "sidebarUsers": "Gebruikers", + "sidebarAdmin": "Beheerder", "sidebarInvitations": "Uitnodigingen", "sidebarRoles": "Rollen", - "sidebarShareableLinks": "Deelbare links", + "sidebarShareableLinks": "Koppelingen", "sidebarApiKeys": "API sleutels", "sidebarSettings": "Instellingen", "sidebarAllUsers": "Alle gebruikers", "sidebarIdentityProviders": "Identiteit aanbieders", "sidebarLicense": "Licentie", "sidebarClients": "Clienten", + "sidebarUserDevices": "Gebruikers", + "sidebarMachineClients": "Machines", "sidebarDomains": "Domeinen", + "sidebarGeneral": "Algemeen", + "sidebarLogAndAnalytics": "Log & Analytics", "sidebarBluePrints": "Blauwdrukken", + "sidebarOrganization": "Organisatie", + "sidebarLogsAnalytics": "Analyses", "blueprints": "Blauwdrukken", "blueprintsDescription": "Gebruik declaratieve configuraties en bekijk vorige uitvoeringen.", "blueprintAdd": "Blauwdruk toevoegen", @@ -1174,7 +1209,7 @@ "blueprintDetailsDescription": "Bekijk het resultaat van de toegepaste blauwdruk en eventuele fouten", "blueprintInfo": "Blauwdruk Informatie", "message": "bericht", - "blueprintContentsDescription": "Definieer de YAML content die je infrastructuur beschrijft", + "blueprintContentsDescription": "Definieer de YAML-content die de infrastructuur beschrijft", "blueprintErrorCreateDescription": "Er is een fout opgetreden bij het toepassen van de blauwdruk", "blueprintErrorCreate": "Fout bij maken blauwdruk", "searchBlueprintProgress": "Blauwdrukken zoeken...", @@ -1230,15 +1265,15 @@ "loading": "Bezig met laden", "restart": "Herstarten", "domains": "Domeinen", - "domainsDescription": "Beheer domeinen voor je organisatie", + "domainsDescription": "Maak en beheer domeinen die beschikbaar zijn in de organisatie", "domainsSearch": "Zoek domeinen...", "domainAdd": "Domein toevoegen", - "domainAddDescription": "Registreer een nieuw domein bij je organisatie", + "domainAddDescription": "Registreer een nieuw domein met de organisatie", "domainCreate": "Domein aanmaken", "domainCreatedDescription": "Domein succesvol aangemaakt", "domainDeletedDescription": "Domein succesvol verwijderd", - "domainQuestionRemove": "Weet u zeker dat u het domein uit uw account wilt verwijderen?", - "domainMessageRemove": "Na verwijdering zal het domein niet langer aan je account gekoppeld zijn.", + "domainQuestionRemove": "Weet u zeker dat u dit domein wilt verwijderen?", + "domainMessageRemove": "Eenmaal verwijderd, wordt het domein niet langer gekoppeld aan de organisatie.", "domainConfirmDelete": "Bevestig verwijdering van domein", "domainDelete": "Domein verwijderen", "domain": "Domein", @@ -1257,7 +1292,7 @@ "pending": "In afwachting", "sidebarBilling": "Facturering", "billing": "Facturering", - "orgBillingDescription": "Beheer je factureringsgegevens en abonnementen", + "orgBillingDescription": "Beheer factureringsinformatie en abonnementen", "github": "GitHub", "pangolinHosted": "Pangolin gehost", "fossorial": "Fossorial", @@ -1285,9 +1320,9 @@ "productUpdateTitle": "Update Producten", "productUpdateEmpty": "Geen updates", "dismissAll": "Alles afwijzen", - "pangolinUpdateAvailable": "Nieuwe versie beschikbaar", + "pangolinUpdateAvailable": "Update beschikbaar", "pangolinUpdateAvailableInfo": "Versie {version} is klaar om te installeren", - "pangolinUpdateAvailableReleaseNotes": "Bekijk release notities", + "pangolinUpdateAvailableReleaseNotes": "Uitgaveopmerkingen bekijken", "newtUpdateAvailable": "Update beschikbaar", "newtUpdateAvailableInfo": "Er is een nieuwe versie van Newt beschikbaar. Update naar de nieuwste versie voor de beste ervaring.", "domainPickerEnterDomain": "Domein", @@ -1300,7 +1335,7 @@ "domainPickerSortAsc": "A-Z", "domainPickerSortDesc": "Z-A", "domainPickerCheckingAvailability": "Beschikbaarheid controleren...", - "domainPickerNoMatchingDomains": "Geen overeenkomende domeinen gevonden. Probeer een ander domein of controleer de domeininstellingen van uw organisatie.", + "domainPickerNoMatchingDomains": "Geen overeenkomende domeinen gevonden. Probeer een ander domein of controleer de domeininstellingen van de organisatie.", "domainPickerOrganizationDomains": "Organisatiedomeinen", "domainPickerProvidedDomains": "Aangeboden domeinen", "domainPickerSubdomain": "Subdomein: {subdomain}", @@ -1334,7 +1369,7 @@ "billingModifySubscription": "Abonnementsaanpassing", "billingStartSubscription": "Abonnement Starten", "billingRecurringCharge": "Terugkerende Kosten", - "billingManageSubscriptionSettings": "Beheer uw abonnementsinstellingen en voorkeuren", + "billingManageSubscriptionSettings": "Beheer abonnementsinstellingen en voorkeuren", "billingNoActiveSubscription": "U heeft geen actief abonnement. Start uw abonnement om gebruikslimieten te verhogen.", "billingFailedToLoadSubscription": "Fout bij laden van abonnement", "billingFailedToLoadUsage": "Niet gelukt om gebruik te laden", @@ -1345,9 +1380,9 @@ "billingPortalError": "Portal Fout", "billingDataUsageInfo": "U bent in rekening gebracht voor alle gegevens die via uw beveiligde tunnels via de cloud worden verzonden. Dit omvat zowel inkomende als uitgaande verkeer over al uw sites. Wanneer u uw limiet bereikt zullen uw sites de verbinding verbreken totdat u uw abonnement upgradet of het gebruik vermindert. Gegevens worden niet in rekening gebracht bij het gebruik van knooppunten.", "billingOnlineTimeInfo": "U wordt in rekening gebracht op basis van hoe lang uw sites verbonden blijven met de cloud. Bijvoorbeeld 44,640 minuten is gelijk aan één site met 24/7 voor een volledige maand. Wanneer u uw limiet bereikt, zal de verbinding tussen uw sites worden verbroken totdat u een upgrade van uw abonnement uitvoert of het gebruik vermindert. Tijd wordt niet belast bij het gebruik van knooppunten.", - "billingUsersInfo": "U wordt gefactureerd voor elke gebruiker in uw organisatie. Facturering wordt dagelijks berekend op basis van het aantal actieve gebruikersaccounts in uw organisatie.", - "billingDomainInfo": "U wordt gefactureerd voor elk domein in uw organisatie. Facturering wordt dagelijks berekend op basis van het aantal actieve domeinaccounts in uw organisatie.", - "billingRemoteExitNodesInfo": "U wordt gefactureerd voor elke beheerde Node in uw organisatie. Facturering wordt dagelijks berekend op basis van het aantal actieve beheerde Nodes in uw organisatie.", + "billingUsersInfo": "U bent in rekening gebracht voor elke gebruiker in de organisatie. Facturering wordt dagelijks berekend op basis van het aantal actieve gebruikersaccounts in uw org.", + "billingDomainInfo": "U wordt voor elk domein in de organisatie in rekening gebracht. Facturering wordt dagelijks berekend op basis van het aantal actieve domeinaccounts in uw org.", + "billingRemoteExitNodesInfo": "U bent belast voor elke beheerde node in de organisatie. Facturering wordt dagelijks berekend op basis van het aantal actieve beheerde knooppunten in uw org.", "domainNotFound": "Domein niet gevonden", "domainNotFoundDescription": "Deze bron is uitgeschakeld omdat het domein niet langer in ons systeem bestaat. Stel een nieuw domein in voor deze bron.", "failed": "Mislukt", @@ -1430,29 +1465,32 @@ "and": "en", "privacyPolicy": "privacybeleid" }, + "signUpMarketing": { + "keepMeInTheLoop": "Houd me op de hoogte met nieuws, updates en nieuwe functies per e-mail." + }, "siteRequired": "Site is vereist.", "olmTunnel": "Olm Tunnel", "olmTunnelDescription": "Gebruik Olm voor clientconnectiviteit", "errorCreatingClient": "Fout bij het aanmaken van de client", "clientDefaultsNotFound": "Standaardinstellingen van klant niet gevonden", "createClient": "Client aanmaken", - "createClientDescription": "Maak een nieuwe client aan om verbinding te maken met uw sites", + "createClientDescription": "Maak een nieuwe client aan voor toegang tot privébronnen", "seeAllClients": "Alle clients bekijken", "clientInformation": "Klantinformatie", "clientNamePlaceholder": "Clientnaam", "address": "Adres", "subnetPlaceholder": "Subnet", - "addressDescription": "Het adres dat deze client zal gebruiken voor connectiviteit", + "addressDescription": "Het interne adres van de klant. Moet binnen het subnetwerk van de organisatie vallen.", "selectSites": "Selecteer sites", "sitesDescription": "De client heeft connectiviteit met de geselecteerde sites", "clientInstallOlm": "Installeer Olm", "clientInstallOlmDescription": "Laat Olm draaien op uw systeem", - "clientOlmCredentials": "Olm inloggegevens", - "clientOlmCredentialsDescription": "Dit is hoe Olm zich bij de server zal verifiëren", - "olmEndpoint": "Olm Eindpunt", - "olmId": "Olm ID", - "olmSecretKey": "Olm Geheime Sleutel", - "clientCredentialsSave": "Uw referenties opslaan", + "clientOlmCredentials": "Aanmeldgegevens", + "clientOlmCredentialsDescription": "Dit is hoe de client zich zal verifiëren met de server", + "olmEndpoint": "Endpoint", + "olmId": "ID", + "olmSecretKey": "Geheim", + "clientCredentialsSave": "Sla de aanmeldgegevens op", "clientCredentialsSaveDescription": "Je kunt dit slechts één keer zien. Kopieer het naar een beveiligde plek.", "generalSettingsDescription": "Configureer de algemene instellingen voor deze client", "clientUpdated": "Klant bijgewerkt ", @@ -1463,9 +1501,7 @@ "sitesFetchError": "Er is een fout opgetreden bij het ophalen van sites.", "olmErrorFetchReleases": "Er is een fout opgetreden bij het ophalen van Olm releases.", "olmErrorFetchLatest": "Er is een fout opgetreden bij het ophalen van de nieuwste Olm release.", - "remoteSubnets": "Externe Subnets", "enterCidrRange": "Voer CIDR-bereik in", - "remoteSubnetsDescription": "Voeg CIDR-bereiken toe die vanaf deze site op afstand toegankelijk zijn met behulp van clients. Gebruik een formaat zoals 10.0.0.0/24. Dit geldt ALLEEN voor VPN-clientconnectiviteit.", "resourceEnableProxy": "Openbare proxy inschakelen", "resourceEnableProxyDescription": "Schakel publieke proxy in voor deze resource. Dit maakt toegang tot de resource mogelijk vanuit het netwerk via de cloud met een open poort. Vereist Traefik-configuratie.", "externalProxyEnabled": "Externe Proxy Ingeschakeld", @@ -1483,14 +1519,15 @@ "enableHealthChecksDescription": "Controleer de gezondheid van dit doel. U kunt een ander eindpunt monitoren dan het doel indien vereist.", "healthScheme": "Methode", "healthSelectScheme": "Selecteer methode", + "healthCheckPortInvalid": "Health check poort moet tussen 1 en 65535 zijn", "healthCheckPath": "Pad", "healthHostname": "IP / Hostnaam", "healthPort": "Poort", "healthCheckPathDescription": "Het pad om de gezondheid status te controleren.", - "healthyIntervalSeconds": "Gezonde Interval", - "unhealthyIntervalSeconds": "Ongezonde Interval", + "healthyIntervalSeconds": "Gezonde Interval (sec)", + "unhealthyIntervalSeconds": "Ongezonde Interval (sec)", "IntervalSeconds": "Gezonde Interval", - "timeoutSeconds": "Timeout", + "timeoutSeconds": "Timeout (sec)", "timeIsInSeconds": "Tijd is in seconden", "retryAttempts": "Herhaal Pogingen", "expectedResponseCodes": "Verwachte Reactiecodes", @@ -1526,12 +1563,12 @@ "resourceEditDomain": "Domein bewerken", "siteName": "Site Naam", "proxyPort": "Poort", - "resourcesTableProxyResources": "Proxybronnen", - "resourcesTableClientResources": "Clientbronnen", + "resourcesTableProxyResources": "Openbaar", + "resourcesTableClientResources": "Privé", "resourcesTableNoProxyResourcesFound": "Geen proxybronnen gevonden.", "resourcesTableNoInternalResourcesFound": "Geen interne bronnen gevonden.", "resourcesTableDestination": "Bestemming", - "resourcesTableTheseResourcesForUseWith": "Deze bronnen zijn bedoeld voor gebruik met", + "resourcesTableAlias": "Alias", "resourcesTableClients": "Clienten", "resourcesTableAndOnlyAccessibleInternally": "en zijn alleen intern toegankelijk wanneer verbonden met een client.", "resourcesTableNoTargets": "Geen doelen", @@ -1540,8 +1577,8 @@ "resourcesTableOffline": "Offline", "resourcesTableUnknown": "onbekend", "resourcesTableNotMonitored": "Niet gecontroleerd", - "editInternalResourceDialogEditClientResource": "Bewerk clientbron", - "editInternalResourceDialogUpdateResourceProperties": "Werk de eigenschapen van de bron en doelconfiguratie bij voor {resourceName}.", + "editInternalResourceDialogEditClientResource": "Privépagina bewerken", + "editInternalResourceDialogUpdateResourceProperties": "Update de resource configuratie en access control voor {resourceName}", "editInternalResourceDialogResourceProperties": "Bron eigenschappen", "editInternalResourceDialogName": "Naam", "editInternalResourceDialogProtocol": "Protocol", @@ -1560,11 +1597,22 @@ "editInternalResourceDialogInvalidIPAddressFormat": "Ongeldig IP-adresformaat", "editInternalResourceDialogDestinationPortMin": "Bestemmingspoort moet minstens 1 zijn", "editInternalResourceDialogDestinationPortMax": "Bestemmingspoort moet minder dan 65536 zijn", + "editInternalResourceDialogPortModeRequired": "Protocol, proxy poort en bestemmingspoort zijn vereist voor poortmodus", + "editInternalResourceDialogMode": "Modus", + "editInternalResourceDialogModePort": "Poort", + "editInternalResourceDialogModeHost": "Hostnaam", + "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogDestination": "Bestemming", + "editInternalResourceDialogDestinationHostDescription": "Het IP-adres of de hostnaam van de bron op het netwerk van de site.", + "editInternalResourceDialogDestinationIPDescription": "Het IP of hostnaam adres van de bron op het netwerk van de site.", + "editInternalResourceDialogDestinationCidrDescription": "Het CIDR-bereik van het document op het netwerk van de site.", + "editInternalResourceDialogAlias": "Alias", + "editInternalResourceDialogAliasDescription": "Een optionele interne DNS-alias voor dit document.", "createInternalResourceDialogNoSitesAvailable": "Geen sites beschikbaar", "createInternalResourceDialogNoSitesAvailableDescription": "U moet ten minste één Newt-site hebben met een geconfigureerd subnet om interne bronnen aan te maken.", "createInternalResourceDialogClose": "Sluiten", - "createInternalResourceDialogCreateClientResource": "Maak clientbron", - "createInternalResourceDialogCreateClientResourceDescription": "Maak een nieuwe bron die toegankelijk zal zijn voor clients die verbonden zijn met de geselecteerde site.", + "createInternalResourceDialogCreateClientResource": "Privé bron maken", + "createInternalResourceDialogCreateClientResourceDescription": "Maak een nieuwe bron aan die alleen toegankelijk is voor klanten die verbonden zijn met de organisatie", "createInternalResourceDialogResourceProperties": "Bron-eigenschappen", "createInternalResourceDialogName": "Naam", "createInternalResourceDialogSite": "Site", @@ -1593,11 +1641,22 @@ "createInternalResourceDialogInvalidIPAddressFormat": "Ongeldig IP-adresformaat", "createInternalResourceDialogDestinationPortMin": "Bestemmingspoort moet minstens 1 zijn", "createInternalResourceDialogDestinationPortMax": "Bestemmingspoort moet minder dan 65536 zijn", + "createInternalResourceDialogPortModeRequired": "Protocol, proxy poort en bestemmingspoort zijn vereist voor poortmodus", + "createInternalResourceDialogMode": "Modus", + "createInternalResourceDialogModePort": "Poort", + "createInternalResourceDialogModeHost": "Hostnaam", + "createInternalResourceDialogModeCidr": "CIDR", + "createInternalResourceDialogDestination": "Bestemming", + "createInternalResourceDialogDestinationHostDescription": "Het IP-adres of de hostnaam van de bron op het netwerk van de site.", + "createInternalResourceDialogDestinationCidrDescription": "Het CIDR-bereik van het document op het netwerk van de site.", + "createInternalResourceDialogAlias": "Alias", + "createInternalResourceDialogAliasDescription": "Een optionele interne DNS-alias voor dit document.", "siteConfiguration": "Configuratie", "siteAcceptClientConnections": "Accepteer clientverbindingen", - "siteAcceptClientConnectionsDescription": "Sta toe dat andere apparaten verbinding maken via deze Newt-instantie als een gateway met behulp van clients.", - "siteAddress": "Siteadres", - "siteAddressDescription": "Specificeren het IP-adres van de host voor clients om verbinding mee te maken. Dit is het interne adres van de site in het Pangolin netwerk voor clients om te adresseren. Moet binnen het Organisatienetwerk vallen.", + "siteAcceptClientConnectionsDescription": "Sta gebruikersapparaten en clients toegang toe tot bronnen op deze site. Dit kan later worden gewijzigd.", + "siteAddress": "Website Adres (Geavanceerd)", + "siteAddressDescription": "Het interne adres van de site. Moet binnen het subnetwerk van de organisatie vallen.", + "siteNameDescription": "De weergavenaam van de site die later gewijzigd kan worden.", "autoLoginExternalIdp": "Auto Login met Externe IDP", "autoLoginExternalIdpDescription": "De gebruiker onmiddellijk doorsturen naar de externe IDP voor authenticatie.", "selectIdp": "Selecteer IDP", @@ -1611,7 +1670,7 @@ "autoLoginErrorNoRedirectUrl": "Geen redirect URL ontvangen van de identity provider.", "autoLoginErrorGeneratingUrl": "Genereren van authenticatie-URL mislukt.", "remoteExitNodeManageRemoteExitNodes": "Externe knooppunten", - "remoteExitNodeDescription": "Zorgt voor één of meer externe knooppunten om de netwerkverbinding uit te breiden en het vertrouwen in de cloud te verminderen", + "remoteExitNodeDescription": "Zelf host één of meer externe knooppunten om de netwerkverbinding uit te breiden en het vertrouwen in de cloud te verminderen", "remoteExitNodes": "Nodes", "searchRemoteExitNodes": "Knooppunten zoeken...", "remoteExitNodeAdd": "Voeg node toe", @@ -1623,11 +1682,11 @@ "sidebarRemoteExitNodes": "Externe knooppunten", "remoteExitNodeCreate": { "title": "Maak node", - "description": "Maak een nieuwe node aan om uw netwerkverbinding uit te breiden", + "description": "Maak een nieuwe node aan om de netwerkverbinding uit te breiden", "viewAllButton": "Alle nodes weergeven", "strategy": { "title": "Creatie Strategie", - "description": "Kies dit om uw node handmatig te configureren of nieuwe referenties te genereren.", + "description": "Kies dit om handmatig het knooppunt te configureren of nieuwe referenties te genereren.", "adopt": { "title": "Adopteer Node", "description": "Kies dit als u al de referenties voor deze node heeft" @@ -1648,7 +1707,7 @@ }, "generate": { "title": "Gegeneerde Inloggegevens", - "description": "Gebruik deze gegenereerde inloggegevens om uw node te configureren", + "description": "Gebruik deze gegenereerde inloggegevens om het knooppunt te configureren", "nodeIdTitle": "Knooppunt ID", "secretTitle": "Geheim", "saveCredentialsTitle": "Voeg Inloggegevens toe aan Config", @@ -1724,16 +1783,16 @@ "idpTypeLabel": "Identiteit provider type", "roleMappingExpressionPlaceholder": "bijvoorbeeld bevat (groepen, 'admin') && 'Admin' ½ 'Member'", "idpGoogleConfiguration": "Google Configuratie", - "idpGoogleConfigurationDescription": "Configureer uw Google OAuth2-referenties", - "idpGoogleClientIdDescription": "Uw Google OAuth2-client-ID", - "idpGoogleClientSecretDescription": "Uw Google OAuth2 Clientgeheim", + "idpGoogleConfigurationDescription": "Configureer de Google OAuth2-referenties", + "idpGoogleClientIdDescription": "Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Google OAuth2 Clientgeheim", "idpAzureConfiguration": "Azure Entra ID configuratie", - "idpAzureConfigurationDescription": "Configureer uw Azure Entra ID OAuth2 referenties", + "idpAzureConfigurationDescription": "Azure Entra ID OAuth2 referenties configureren", "idpTenantId": "Tenant-ID", - "idpTenantIdPlaceholder": "jouw-tenant-id", - "idpAzureTenantIdDescription": "Uw Azure tenant ID (gevonden in Azure Active Directory overzicht)", - "idpAzureClientIdDescription": "Uw Azure App registratie Client ID", - "idpAzureClientSecretDescription": "Uw Azure App registratie Client Secret", + "idpTenantIdPlaceholder": "tenant-id", + "idpAzureTenantIdDescription": "Azure tenant ID (gevonden in Azure Active Directory overzicht)", + "idpAzureClientIdDescription": "Azure App registratie Client ID", + "idpAzureClientSecretDescription": "Azure App registratie client geheim", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", @@ -1741,14 +1800,14 @@ "idpGoogleConfigurationTitle": "Google Configuratie", "idpAzureConfigurationTitle": "Azure Entra ID configuratie", "idpTenantIdLabel": "Tenant-ID", - "idpAzureClientIdDescription2": "Uw Azure App registratie Client ID", - "idpAzureClientSecretDescription2": "Uw Azure App registratie Client Secret", + "idpAzureClientIdDescription2": "Azure App registratie Client ID", + "idpAzureClientSecretDescription2": "Azure App registratie client geheim", "idpGoogleDescription": "Google OAuth2/OIDC provider", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", "subnet": "Subnet", "subnetDescription": "Het subnet van de netwerkconfiguratie van deze organisatie.", "authPage": "Authenticatie pagina", - "authPageDescription": "De autorisatiepagina voor uw organisatie configureren", + "authPageDescription": "De autorisatiepagina voor de organisatie configureren", "authPageDomain": "Authenticatie pagina domein", "noDomainSet": "Geen domein ingesteld", "changeDomain": "Domein wijzigen", @@ -1758,7 +1817,7 @@ "setAuthPageDomain": "Authenticatiepagina domein instellen", "failedToFetchCertificate": "Certificaat ophalen mislukt", "failedToRestartCertificate": "Kon certificaat niet opnieuw opstarten", - "addDomainToEnableCustomAuthPages": "Voeg een domein toe om aangepaste authenticatiepagina's voor uw organisatie in te schakelen", + "addDomainToEnableCustomAuthPages": "Een domein toevoegen om aangepaste authenticatiepagina's voor de organisatie in te schakelen", "selectDomainForOrgAuthPage": "Selecteer een domein voor de authenticatiepagina van de organisatie", "domainPickerProvidedDomain": "Opgegeven domein", "domainPickerFreeProvidedDomain": "Gratis verstrekt domein", @@ -1773,7 +1832,7 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" kon niet geldig worden gemaakt voor {domain}.", "domainPickerSubdomainSanitized": "Subdomein gesaniseerd", "domainPickerSubdomainCorrected": "\"{sub}\" was gecorrigeerd op \"{sanitized}\"", - "orgAuthSignInTitle": "Meld je aan bij je organisatie", + "orgAuthSignInTitle": "Log in op de organisatie", "orgAuthChooseIdpDescription": "Kies uw identiteitsprovider om door te gaan", "orgAuthNoIdpConfigured": "Deze organisatie heeft geen identiteitsproviders geconfigureerd. Je kunt in plaats daarvan inloggen met je Pangolin-identiteit.", "orgAuthSignInWithPangolin": "Log in met Pangolin", @@ -1791,7 +1850,7 @@ "enableTwoFactorAuthentication": "Tweestapsverificatie inschakelen", "completeSecuritySteps": "Voltooi beveiligingsstappen", "securitySettings": "Beveiliging instellingen", - "securitySettingsDescription": "Beveiligingsbeleid voor uw organisatie configureren", + "securitySettingsDescription": "Beveiligingsbeleid voor de organisatie configureren", "requireTwoFactorForAllUsers": "Authenticatie in twee stappen vereist voor alle gebruikers", "requireTwoFactorDescription": "Wanneer ingeschakeld, moeten alle interne gebruikers in deze organisatie tweestapsverificatie ingeschakeld hebben om toegang te krijgen tot de organisatie.", "requireTwoFactorDisabledDescription": "Deze functie vereist een geldig licentie (Enterprise) of actief abonnement (SaaS)", @@ -1854,8 +1913,12 @@ "enterpriseEdition": "Enterprise Edition", "unlicensed": "Ongelicentieerd", "beta": "Bèta", - "manageClients": "Beheer Cliënten", - "manageClientsDescription": "Klanten zijn apparaten die verbinding kunnen maken met uw sites", + "manageUserDevices": "Gebruiker Apparaten", + "manageUserDevicesDescription": "Bekijk en beheer apparaten die gebruikers gebruiken om privé verbinding te maken met bronnen", + "manageMachineClients": "Beheer Machine Clients", + "manageMachineClientsDescription": "Creëer en beheer clients die servers en systemen gebruiken om privé verbinding te maken met bronnen", + "clientsTableUserClients": "Gebruiker", + "clientsTableMachineClients": "Machine", "licenseTableValidUntil": "Geldig tot", "saasLicenseKeysSettingsTitle": "Enterprise Licenties", "saasLicenseKeysSettingsDescription": "Genereer en beheer de Enterprise licentiesleutels voor zelfgehoste Pangolin instanties", @@ -1990,11 +2053,12 @@ "pathRewriteStripLabel": "strip", "sidebarEnableEnterpriseLicense": "Activeer Enterprise Licentie", "cannotbeUndone": "Dit kan niet ongedaan worden gemaakt.", - "toConfirm": "om te bevestigen", + "toConfirm": "om te bevestigen.", "deleteClientQuestion": "Weet u zeker dat u de client van de site en organisatie wilt verwijderen?", "clientMessageRemove": "Eenmaal verwijderd, kan de client geen verbinding meer maken met de site.", "sidebarLogs": "Logboeken", "request": "Aanvragen", + "requests": "Verzoeken", "logs": "Logboeken", "logsSettingsDescription": "Monitor logs verzameld van deze orginiatie", "searchLogs": "Logboeken zoeken...", @@ -2020,6 +2084,7 @@ "ip": "IP-adres", "reason": "Reden", "requestLogs": "Logboeken aanvragen", + "requestAnalytics": "Analytics opvragen", "host": "Hostnaam", "location": "Locatie", "actionLogs": "Actie logs", @@ -2029,6 +2094,7 @@ "logRetention": "Log bewaring", "logRetentionDescription": "Beheren hoe lang verschillende soorten logs bewaard worden voor deze organisatie of schakel ze uit", "requestLogsDescription": "Bekijk gedetailleerde verzoeklogboeken voor resources in deze organisatie", + "requestAnalyticsDescription": "Bekijk gedetailleerde request analytics voor resources in deze organisatie", "logRetentionRequestLabel": "Logboekbewaring aanvragen", "logRetentionRequestDescription": "Hoe lang de aanvraaglogboeken te behouden", "logRetentionAccessLabel": "Toegang logboek bewaring", @@ -2042,6 +2108,7 @@ "logRetention30Days": "30 dagen", "logRetention90Days": "90 dagen", "logRetentionForever": "Voor altijd", + "logRetentionEndOfFollowingYear": "Einde van volgend jaar", "actionLogsDescription": "Bekijk een geschiedenis van acties die worden uitgevoerd in deze organisatie", "accessLogsDescription": "Toegangsverificatieverzoeken voor resources in deze organisatie bekijken", "licenseRequiredToUse": "Een Enterprise-licentie is vereist om deze functie te gebruiken.", @@ -2052,7 +2119,7 @@ "preferWildcardCert": "Bij voorkeur Wildcard Certificaat", "unverified": "Ongeverifieerd", "domainSetting": "Domein instellingen", - "domainSettingDescription": "Configureer instellingen voor uw domein", + "domainSettingDescription": "Configureer instellingen voor het domein", "preferWildcardCertDescription": "Poging om een certificaat met een wildcard te genereren (vereist een correct geconfigureerde certificaatresolver).", "recordName": "Record Naam", "auto": "Automatisch", @@ -2066,15 +2133,15 @@ "olmUpdateAvailableInfo": "Er is een bijgewerkte versie van Olm beschikbaar. Update alstublieft naar de nieuwste versie voor de beste ervaring.", "client": "Klant", "proxyProtocol": "Proxy Protocol Instellingen", - "proxyProtocolDescription": "Proxyprotocol configureren om de IP-adressen van de client voor TCP/UDP-diensten te bewaren.", + "proxyProtocolDescription": "Proxyprotocol configureren om de IP-adressen van de client voor TCP-diensten te bewaren.", "enableProxyProtocol": "Proxy Protocol inschakelen", - "proxyProtocolInfo": "Behoud IP adressen van de client voor TCP/UDP backends", + "proxyProtocolInfo": "Behoud IP adressen van de client voor TCP backends", "proxyProtocolVersion": "Proxy Protocol Versie", "version1": " Versie 1 (Aanbevolen)", "version2": "Versie 2", "versionDescription": "Versie 1 is text-based en breed ondersteund. Versie 2 is binair en efficiënter maar minder compatibel.", "warning": "Waarschuwing", - "proxyProtocolWarning": "Je backend applicatie moet worden geconfigureerd om connecties met Proxy Protocol te accepteren. Als je backend geen Proxy Protocol ondersteunt, zal het inschakelen van dit alle verbindingen verbreken. Zorg ervoor dat je je backend configureert om Proxy Protocol headers van Traefik.", + "proxyProtocolWarning": "De backend applicatie moet worden geconfigureerd om Proxy Protocol verbindingen te accepteren. Als je backend geen Proxy Protocol ondersteunt, zal het inschakelen van dit alle verbindingen verbreken, dus schakel dit alleen in als je weet wat je doet. Zorg ervoor dat je je backend configureert om Proxy Protocol headers van Traefik.", "restarting": "Herstarten...", "manual": "Handleiding", "messageSupport": "Bericht ondersteuning", @@ -2097,6 +2164,43 @@ "supportMessageSent": "Bericht verzonden!", "supportWillContact": "We nemen binnenkort contact met u op!", "selectLogRetention": "Selecteer log retentie", + "terms": "Voorwaarden", + "privacy": "Privacy", + "security": "Beveiliging", + "docs": "Documentatie", + "deviceActivation": "Apparaat activatie", + "deviceCodeInvalidFormat": "Code moet 9 tekens bevatten (bijv. A1AJ-N5JD)", + "deviceCodeInvalidOrExpired": "Ongeldige of verlopen code", + "deviceCodeVerifyFailed": "Apparaatcode verifiëren mislukt", + "signedInAs": "Ingelogd als", + "deviceCodeEnterPrompt": "Voer de op het apparaat weergegeven code in", + "continue": "Doorgaan", + "deviceUnknownLocation": "Onbekende locatie", + "deviceAuthorizationRequested": "Deze autorisatie is aangevraagd bij {location} op {date}. Vertrouw je dit apparaat omdat het toegang tot het account zal krijgen.", + "deviceLabel": "Apparaat: {deviceName}", + "deviceWantsAccess": "wil toegang tot je account", + "deviceExistingAccess": "Bestaande toegang:", + "deviceFullAccess": "Volledige toegang tot uw account", + "deviceOrganizationsAccess": "Toegang tot alle organisaties waar uw account toegang tot heeft", + "deviceAuthorize": "Autoriseer {applicationName}", + "deviceConnected": "Apparaat verbonden!", + "deviceAuthorizedMessage": "Apparaat is gemachtigd om toegang te krijgen tot je account.", + "pangolinCloud": "Pangoline Cloud", + "viewDevices": "Bekijk apparaten", + "viewDevicesDescription": "Beheer uw aangesloten apparaten", + "noDevices": "Geen apparaten gevonden", + "dateCreated": "Datum aangemaakt", + "unnamedDevice": "Naamloos apparaat", + "deviceQuestionRemove": "Weet u zeker dat u dit apparaat wilt verwijderen?", + "deviceMessageRemove": "Deze actie kan niet ongedaan worden gemaakt.", + "deviceDeleteConfirm": "Apparaat verwijderen", + "deleteDevice": "Apparaat verwijderen", + "errorLoadingDevices": "Fout bij laden van apparaten", + "failedToLoadDevices": "Fout bij het laden van apparaten", + "deviceDeleted": "Apparaat verwijderd", + "deviceDeletedDescription": "Het apparaat is succesvol verwijderd.", + "errorDeletingDevice": "Fout bij verwijderen apparaat", + "failedToDeleteDevice": "Verwijderen van apparaat mislukt", "showColumns": "Kolommen weergeven", "hideColumns": "Kolommen verbergen", "columnVisibility": "Zichtbaarheid kolommen", @@ -2111,10 +2215,14 @@ "enableSelected": "Selectie inschakelen", "disableSelected": "Selectie uitschakelen", "checkSelectedStatus": "Controleer de status van de geselecteerde", + "clients": "Clienten", + "accessClientSelect": "Selecteer machine-clients", + "resourceClientDescription": "Machine clients die toegang hebben tot deze bron", + "regenerate": "Hergenereren", "credentials": "Aanmeldgegevens", "savecredentials": "Referenties opslaan", - "regeneratecredentials": "Hersleutel", - "regenerateCredentials": "Opnieuw genereren en opslaan van uw referenties", + "regenerateCredentialsButton": "Referenties opnieuw genereren", + "regenerateCredentials": "Referenties opnieuw genereren", "generatedcredentials": "Gegenereerde referenties", "copyandsavethesecredentials": "Kopieer en bewaar deze inloggegevens", "copyandsavethesecredentialsdescription": "Deze referenties worden niet meer getoond nadat u deze pagina verlaat. Sla ze nu veilig op.", @@ -2122,13 +2230,12 @@ "credentialsSavedDescription": "Referenties werden met succes opnieuw gegenereerd en opgeslagen.", "credentialsSaveError": "Fout bij opslaan referenties", "credentialsSaveErrorDescription": "Er is een fout opgetreden tijdens het opnieuw genereren en opslaan van de inloggegevens.", - "regenerateCredentialsWarning": "Het opnieuw genereren van inloggegevens zal de vorige ongeldig maken. Zorg ervoor dat alle configuraties die deze inloggegevens gebruiken bijgewerkt worden.", + "regenerateCredentialsWarning": "Het opnieuw genereren van inloggegevens zal de vorige ongeldig maken en een slechte verbinding veroorzaken. Zorg ervoor dat u alle configuraties die deze inloggegevens gebruiken bijwerkt.", "confirm": "Bevestigen", "regenerateCredentialsConfirmation": "Weet u zeker dat u de inloggegevens opnieuw wilt genereren?", "endpoint": "Endpoint", "Id": "Id", "SecretKey": "Geheime sleutel", - "featureDisabledTooltip": "Deze functie is alleen beschikbaar in het bedrijfsplan en vereist een licentie om deze te gebruiken.", "niceId": "Leuk ID", "niceIdUpdated": "Leuke ID bijgewerkt", "niceIdUpdatedSuccessfully": "Nice ID Updated Successfully", @@ -2136,5 +2243,32 @@ "niceIdUpdateErrorDescription": "Fout opgetreden tijdens het bijwerken van de ID van Nice.", "niceIdCannotBeEmpty": "Nice ID mag niet leeg zijn", "enterIdentifier": "ID invoeren", - "identifier": "Identifier" + "identifier": "Identifier", + "deviceLoginUseDifferentAccount": "Niet u? Gebruik een ander account.", + "deviceLoginDeviceRequestingAccessToAccount": "Een apparaat vraagt om toegang tot dit account.", + "noData": "Geen gegevens", + "machineClients": "Machine Clienten", + "install": "Installeren", + "run": "Uitvoeren", + "clientNameDescription": "De weergavenaam van de client die later gewijzigd kan worden.", + "clientAddress": "Klant adres (Geavanceerd)", + "setupFailedToFetchSubnet": "Kan standaard subnet niet ophalen", + "setupSubnetAdvanced": "Subnet (Geavanceerd)", + "setupSubnetDescription": "Het subnet van het interne netwerk van deze organisatie.", + "siteRegenerateAndDisconnect": "Hergenereer en verbreek verbinding", + "siteRegenerateAndDisconnectConfirmation": "Weet u zeker dat u de inloggegevens opnieuw wilt genereren en de verbinding met deze website wilt verbreken?", + "siteRegenerateAndDisconnectWarning": "Dit zal de inloggegevens opnieuw genereren en onmiddellijk de site ontkoppelen. De site zal opnieuw moeten worden gestart met de nieuwe inloggegevens.", + "siteRegenerateCredentialsConfirmation": "Weet u zeker dat u de referenties voor deze site opnieuw wilt genereren?", + "siteRegenerateCredentialsWarning": "Dit zal de inloggegevens opnieuw genereren. De site zal verbonden blijven totdat u het handmatig herstart en de nieuwe inloggegevens gebruikt.", + "clientRegenerateAndDisconnect": "Hergenereer en verbreek verbinding", + "clientRegenerateAndDisconnectConfirmation": "Weet u zeker dat u de inloggegevens opnieuw wilt genereren en de verbinding met deze client wilt verbreken?", + "clientRegenerateAndDisconnectWarning": "Dit zal de inloggegevens opnieuw genereren en onmiddellijk de verbinding verbreken. De client zal opnieuw moeten worden gestart met de nieuwe inloggegevens.", + "clientRegenerateCredentialsConfirmation": "Weet u zeker dat u de referenties voor deze client opnieuw wilt genereren?", + "clientRegenerateCredentialsWarning": "Dit zal de inloggegevens opnieuw genereren. De client zal verbonden blijven totdat u het handmatig herstart en de nieuwe inloggegevens gebruikt.", + "remoteExitNodeRegenerateAndDisconnect": "Hergenereer en verbreek verbinding", + "remoteExitNodeRegenerateAndDisconnectConfirmation": "Weet u zeker dat u de inloggegevens opnieuw wilt genereren en deze afstandsbediening wilt loskoppelen?", + "remoteExitNodeRegenerateAndDisconnectWarning": "Dit zal de referenties regenereren en onmiddellijk de externe exit node ontkoppelen. Het externe exit node zal opnieuw moeten worden gestart met de nieuwe referenties.", + "remoteExitNodeRegenerateCredentialsConfirmation": "Weet u zeker dat u de referenties voor deze externe exit node opnieuw wilt genereren?", + "remoteExitNodeRegenerateCredentialsWarning": "Dit zal de referenties opnieuw genereren. De remote exit node zal verbonden blijven totdat u deze handmatig herstart en de nieuwe referenties gebruikt.", + "agent": "Agent" } diff --git a/messages/pl-PL.json b/messages/pl-PL.json index 6c401dfa3..99817d147 100644 --- a/messages/pl-PL.json +++ b/messages/pl-PL.json @@ -1,12 +1,12 @@ { - "setupCreate": "Utwórz swoją organizację, witrynę i zasoby", + "setupCreate": "Utwórz organizację, witrynę i zasoby", "setupNewOrg": "Nowa organizacja", "setupCreateOrg": "Utwórz organizację", "setupCreateResources": "Utwórz Zasoby", "setupOrgName": "Nazwa organizacji", - "orgDisplayName": "To jest wyświetlana nazwa Twojej organizacji.", + "orgDisplayName": "To jest wyświetlana nazwa organizacji.", "orgId": "Identyfikator organizacji", - "setupIdentifierMessage": "To jest unikalny identyfikator Twojej organizacji. Jest to oddzielone od nazwy wyświetlanej.", + "setupIdentifierMessage": "Jest to unikalny identyfikator organizacji.", "setupErrorIdentifier": "Identyfikator organizacji jest już zajęty. Wybierz inny.", "componentsErrorNoMemberCreate": "Nie jesteś obecnie członkiem żadnej organizacji. Aby rozpocząć, utwórz organizację.", "componentsErrorNoMember": "Nie jesteś obecnie członkiem żadnej organizacji.", @@ -50,7 +50,7 @@ "siteMessageRemove": "Po usunięciu witryna nie będzie już dostępna. Wszystkie cele związane z witryną zostaną również usunięte.", "siteQuestionRemove": "Czy na pewno chcesz usunąć witrynę z organizacji?", "siteManageSites": "Zarządzaj stronami", - "siteDescription": "Zezwalaj na połączenie z siecią przez bezpieczne tunele", + "siteDescription": "Tworzenie stron i zarządzanie nimi, aby włączyć połączenia z prywatnymi sieciami", "siteCreate": "Utwórz witrynę", "siteCreateDescription2": "Wykonaj poniższe kroki, aby utworzyć i połączyć nową witrynę", "siteCreateDescription": "Utwórz nową witrynę, aby rozpocząć łączenie zasobów", @@ -87,32 +87,32 @@ "siteUpdated": "Strona zaktualizowana", "siteUpdatedDescription": "Strona została zaktualizowana.", "siteGeneralDescription": "Skonfiguruj ustawienia ogólne dla tej witryny", - "siteSettingDescription": "Skonfiguruj ustawienia na swojej stronie", + "siteSettingDescription": "Skonfiguruj ustawienia na stronie", "siteSetting": "Ustawienia {siteName}", - "siteNewtTunnel": "Newt Tunnel (Zalecane)", - "siteNewtTunnelDescription": "Łatwiejszy sposób na stworzenie punktu wejścia w sieci. Nie ma dodatkowej konfiguracji.", + "siteNewtTunnel": "Newt Site (Rekomendowane)", + "siteNewtTunnelDescription": "Najprostszy sposób na stworzenie punktu wejścia w żadnej sieci. Nie ma dodatkowej konfiguracji.", "siteWg": "Podstawowy WireGuard", "siteWgDescription": "Użyj dowolnego klienta WireGuard do utworzenia tunelu. Wymagana jest ręczna konfiguracja NAT.", "siteWgDescriptionSaas": "Użyj dowolnego klienta WireGuard do utworzenia tunelu. Wymagana ręczna konfiguracja NAT. DZIAŁA TYLKO NA SAMODZIELNIE HOSTOWANYCH WĘZŁACH", "siteLocalDescription": "Tylko lokalne zasoby. Brak tunelu.", "siteLocalDescriptionSaas": "Tylko zasoby lokalne. Brak tunelu. Dostępne tylko w węzłach zdalnych.", "siteSeeAll": "Zobacz wszystkie witryny", - "siteTunnelDescription": "Określ jak chcesz połączyć się ze swoją stroną", - "siteNewtCredentials": "Aktualne dane logowania", - "siteNewtCredentialsDescription": "Oto jak Newt będzie uwierzytelniał się z serwerem", - "siteCredentialsSave": "Zapisz swoje poświadczenia", + "siteTunnelDescription": "Określ jak chcesz połączyć się z witryną", + "siteNewtCredentials": "Dane logowania", + "siteNewtCredentialsDescription": "Oto jak witryna będzie uwierzytelniać się z serwerem", + "siteCredentialsSave": "Zapisz dane logowania", "siteCredentialsSaveDescription": "Możesz to zobaczyć tylko raz. Upewnij się, że skopiuj je do bezpiecznego miejsca.", "siteInfo": "Informacje o witrynie", "status": "Status", "shareTitle": "Zarządzaj linkami udostępniania", - "shareDescription": "Utwórz linki, które można udostępnić, aby przyznać tymczasowy lub stały dostęp do Twoich zasobów", + "shareDescription": "Utwórz linki do współdzielenia, aby przyznać tymczasowy lub stały dostęp do zasobów proxy", "shareSearch": "Szukaj linków udostępnienia...", "shareCreate": "Utwórz link udostępniania", "shareErrorDelete": "Nie udało się usunąć linku", "shareErrorDeleteMessage": "Wystąpił błąd podczas usuwania linku", "shareDeleted": "Link usunięty", "shareDeletedDescription": "Link został usunięty", - "shareTokenDescription": "Twój token dostępu może być przekazywany na dwa sposoby: jako parametr zapytania lub w nagłówkach żądania. Muszą być przekazywane z klienta na każde żądanie uwierzytelnionego dostępu.", + "shareTokenDescription": "Token dostępu może być przekazywany na dwa sposoby: jako parametr zapytania lub w nagłówkach żądania. Muszą być przekazywane z klienta na każde żądanie uwierzytelnionego dostępu.", "accessToken": "Token dostępu", "usageExamples": "Przykłady użycia", "tokenId": "Identyfikator tokena", @@ -121,7 +121,7 @@ "importantNote": "Ważna uwaga", "shareImportantDescription": "Ze względów bezpieczeństwa zaleca się użycie nagłówków nad parametrami zapytania, jeśli to możliwe, ponieważ parametry zapytania mogą być zalogowane w dziennikach serwera lub historii przeglądarki.", "token": "Token", - "shareTokenSecurety": "Chroń swój token dostępu. Nie udostępniaj go w publicznie dostępnych miejscach ani w kodzie po stronie klienta.", + "shareTokenSecurety": "Zachowaj bezpieczny token dostępu. Nie udostępniaj go w publicznie dostępnych miejscach ani w kodzie po stronie klienta.", "shareErrorFetchResource": "Nie udało się pobrać zasobów", "shareErrorFetchResourceDescription": "Wystąpił błąd podczas pobierania zasobów", "shareErrorCreate": "Nie udało się utworzyć linku udostępniania", @@ -144,8 +144,10 @@ "expires": "Wygasa", "never": "Nigdy", "shareErrorSelectResource": "Wybierz zasób", - "resourceTitle": "Zarządzaj zasobami", - "resourceDescription": "Utwórz bezpieczne proxy do prywatnych aplikacji", + "proxyResourceTitle": "Zarządzaj zasobami publicznymi", + "proxyResourceDescription": "Twórz i zarządzaj zasobami, które są publicznie dostępne w przeglądarce internetowej", + "clientResourceTitle": "Zarządzaj zasobami prywatnymi", + "clientResourceDescription": "Twórz i zarządzaj zasobami, które są dostępne tylko za pośrednictwem połączonego klienta", "resourcesSearch": "Szukaj zasobów...", "resourceAdd": "Dodaj zasób", "resourceErrorDelte": "Błąd podczas usuwania zasobu", @@ -155,9 +157,9 @@ "resourceMessageRemove": "Po usunięciu, zasób nie będzie już dostępny. Wszystkie cele związane z zasobem zostaną również usunięte.", "resourceQuestionRemove": "Czy na pewno chcesz usunąć zasób z organizacji?", "resourceHTTP": "Zasób HTTPS", - "resourceHTTPDescription": "Proxy do Twojej aplikacji przez HTTPS, przy użyciu poddomeny lub domeny bazowej.", + "resourceHTTPDescription": "Proxy żądania do aplikacji przez HTTPS przy użyciu poddomeny lub domeny bazowej.", "resourceRaw": "Surowy zasób TCP/UDP", - "resourceRawDescription": "Proxy do aplikacji przez TCP/UDP przy użyciu numeru portu.", + "resourceRawDescription": "Proxy żądania do aplikacji przez TCP/UDP przy użyciu numeru portu. Działa to tylko wtedy, gdy witryny są podłączone do węzłów.", "resourceCreate": "Utwórz zasób", "resourceCreateDescription": "Wykonaj poniższe kroki, aby utworzyć nowy zasób", "resourceSeeAll": "Zobacz wszystkie zasoby", @@ -171,22 +173,22 @@ "noCountryFound": "Nie znaleziono kraju.", "siteSelectionDescription": "Ta strona zapewni połączenie z celem.", "resourceType": "Typ zasobu", - "resourceTypeDescription": "Określ jak chcesz uzyskać dostęp do swojego zasobu", + "resourceTypeDescription": "Określ jak uzyskać dostęp do zasobu", "resourceHTTPSSettings": "Ustawienia HTTPS", - "resourceHTTPSSettingsDescription": "Skonfiguruj jak twój zasób będzie dostępny przez HTTPS", + "resourceHTTPSSettingsDescription": "Skonfiguruj jak zasób będzie dostępny przez HTTPS", "domainType": "Typ domeny", "subdomain": "Poddomena", "baseDomain": "Bazowa domena", - "subdomnainDescription": "Poddomena, w której twój zasób będzie dostępny.", + "subdomnainDescription": "Poddomena, w której zasób będzie dostępny.", "resourceRawSettings": "Ustawienia TCP/UDP", - "resourceRawSettingsDescription": "Skonfiguruj jak twój zasób będzie dostępny przez TCP/UDP. Zmapujesz zasób do portu na serwerze hosta Pangolin, dzięki czemu możesz uzyskać dostęp do zasobu z serwera-public ip:mapped-port.", + "resourceRawSettingsDescription": "Skonfiguruj jak zasób będzie dostępny przez TCP/UDP", "protocol": "Protokół", "protocolSelect": "Wybierz protokół", "resourcePortNumber": "Numer portu", "resourcePortNumberDescription": "Numer portu zewnętrznego do żądań proxy.", "cancel": "Anuluj", "resourceConfig": "Snippety konfiguracji", - "resourceConfigDescription": "Skopiuj i wklej te fragmenty konfiguracji, aby skonfigurować swój zasób TCP/UDP", + "resourceConfigDescription": "Skopiuj i wklej te fragmenty konfiguracji, aby skonfigurować zasób TCP/UDP", "resourceAddEntrypoints": "Traefik: Dodaj punkty wejścia", "resourceExposePorts": "Gerbil: Podnieś porty w Komponencie Dockera", "resourceLearnRaw": "Dowiedz się, jak skonfigurować zasoby TCP/UDP", @@ -204,12 +206,12 @@ "rules": "Regulamin", "resourceSettingDescription": "Skonfiguruj ustawienia zasobu", "resourceSetting": "Ustawienia {resourceName}", - "alwaysAllow": "Zawsze zezwalaj", - "alwaysDeny": "Zawsze odmawiaj", + "alwaysAllow": "Omijanie uwierzytelniania", + "alwaysDeny": "Blokuj dostęp", "passToAuth": "Przekaż do Autoryzacji", - "orgSettingsDescription": "Skonfiguruj ustawienia ogólne swojej organizacji", + "orgSettingsDescription": "Skonfiguruj ustawienia organizacji", "orgGeneralSettings": "Ustawienia organizacji", - "orgGeneralSettingsDescription": "Zarządzaj szczegółami swojej organizacji i konfiguracją", + "orgGeneralSettingsDescription": "Zarządzaj szczegółami i konfiguracją organizacji", "saveGeneralSettings": "Zapisz ustawienia ogólne", "saveSettings": "Zapisz ustawienia", "orgDangerZone": "Strefa zagrożenia", @@ -232,7 +234,7 @@ "orgMissing": "Brak ID organizacji", "orgMissingMessage": "Nie można ponownie wygenerować zaproszenia bez ID organizacji.", "accessUsersManage": "Zarządzaj użytkownikami", - "accessUsersDescription": "Zaproś użytkowników i dodaj je do ról do zarządzania dostępem do Twojej organizacji", + "accessUsersDescription": "Zaproś użytkowników z dostępem do tej organizacji i zarządzaj nimi", "accessUsersSearch": "Szukaj użytkowników...", "accessUserCreate": "Utwórz użytkownika", "accessUserRemove": "Usuń użytkownika", @@ -241,13 +243,13 @@ "role": "Rola", "nameRequired": "Nazwa jest wymagana", "accessRolesManage": "Zarządzaj rolami", - "accessRolesDescription": "Skonfiguruj role do zarządzania dostępem do Twojej organizacji", + "accessRolesDescription": "Tworzenie ról dla użytkowników w organizacji i zarządzanie nimi", "accessRolesSearch": "Szukaj ról...", "accessRolesAdd": "Dodaj rolę", "accessRoleDelete": "Usuń rolę", "description": "Opis", "inviteTitle": "Otwórz zaproszenia", - "inviteDescription": "Zarządzaj zaproszeniami dla innych użytkowników", + "inviteDescription": "Zarządzaj zaproszeniami dla innych użytkowników do dołączenia do organizacji", "inviteSearch": "Szukaj zaproszeń...", "minutes": "Protokoły", "hours": "Godziny", @@ -261,13 +263,13 @@ "apiKeysErrorCreate": "Błąd podczas tworzenia klucza API", "apiKeysErrorSetPermission": "Błąd podczas ustawiania uprawnień", "apiKeysCreate": "Generuj klucz API", - "apiKeysCreateDescription": "Wygeneruj nowy klucz API dla swojej organizacji", + "apiKeysCreateDescription": "Wygeneruj nowy klucz API dla organizacji", "apiKeysGeneralSettings": "Uprawnienia", "apiKeysGeneralSettingsDescription": "Określ, co ten klucz API może zrobić", - "apiKeysList": "Twój klucz API", - "apiKeysSave": "Zapisz swój klucz API", + "apiKeysList": "Nowy klucz API", + "apiKeysSave": "Zapisz klucz API", "apiKeysSaveDescription": "Będziesz mógł zobaczyć to tylko raz. Upewnij się, że skopiujesz go w bezpieczne miejsce.", - "apiKeysInfo": "Twój klucz API to:", + "apiKeysInfo": "Kluczem API jest:", "apiKeysConfirmCopy": "Skopiowałem klucz API", "generate": "Generuj", "done": "Gotowe", @@ -424,7 +426,7 @@ "userCreated": "Utworzono użytkownika", "userCreatedDescription": "Użytkownik został pomyślnie utworzony.", "userTypeInternal": "Użytkownik wewnętrzny", - "userTypeInternalDescription": "Zaproś użytkownika do bezpośredniego dołączenia do Twojej organizacji.", + "userTypeInternalDescription": "Zaproś użytkownika do dołączenia do organizacji bezpośrednio.", "userTypeExternal": "Użytkownik zewnętrzny", "userTypeExternalDescription": "Utwórz użytkownika z zewnętrznym dostawcą tożsamości.", "accessUserCreateDescription": "Wykonaj poniższe kroki, aby utworzyć nowego użytkownika", @@ -436,6 +438,16 @@ "inviteEmailSent": "Wyślij email z zaproszeniem do użytkownika", "inviteValid": "Ważne przez", "selectDuration": "Wybierz okres", + "selectResource": "Wybierz zasób", + "filterByResource": "Filtruj według zasobów", + "resetFilters": "Resetuj filtry", + "totalBlocked": "Żądania zablokowane przez Pangolina", + "totalRequests": "Wszystkich Żądań", + "requestsByCountry": "Żądania według kraju", + "requestsByDay": "Żądania wg dnia", + "blocked": "Zablokowane", + "allowed": "Dozwolone", + "topCountries": "Najlepsze kraje", "accessRoleSelect": "Wybierz rolę", "inviteEmailSentDescription": "Email został wysłany do użytkownika z linkiem dostępu poniżej. Musi on uzyskać dostęp do linku, aby zaakceptować zaproszenie.", "inviteSentDescription": "Użytkownik został zaproszony. Musi uzyskać dostęp do poniższego linku, aby zaakceptować zaproszenie.", @@ -458,13 +470,13 @@ "accessControlsSubmit": "Zapisz kontrole dostępu", "roles": "Role", "accessUsersRoles": "Zarządzaj użytkownikami i rolami", - "accessUsersRolesDescription": "Zapraszaj użytkowników i dodawaj ich do ról, aby zarządzać dostępem do Twojej organizacji", + "accessUsersRolesDescription": "Zaproś użytkowników i dodaj je do ról do zarządzania dostępem do organizacji", "key": "Klucz", "createdAt": "Utworzono", "proxyErrorInvalidHeader": "Nieprawidłowa wartość niestandardowego nagłówka hosta. Użyj formatu nazwy domeny lub zapisz pusty, aby usunąć niestandardowy nagłówek hosta.", "proxyErrorTls": "Nieprawidłowa nazwa serwera TLS. Użyj formatu nazwy domeny lub zapisz pusty, aby usunąć nazwę serwera TLS.", "proxyEnableSSL": "Włącz SSL", - "proxyEnableSSLDescription": "Włącz szyfrowanie SSL/TLS dla bezpiecznych połączeń HTTPS z Twoimi celami.", + "proxyEnableSSLDescription": "Włącz szyfrowanie SSL/TLS dla bezpiecznych połączeń HTTPS z celami.", "target": "Target", "configureTarget": "Konfiguruj Targety", "targetErrorFetch": "Nie udało się pobrać celów", @@ -480,29 +492,29 @@ "targetsErrorUpdate": "Nie udało się zaktualizować celów", "targetsErrorUpdateDescription": "Wystąpił błąd podczas aktualizacji celów", "targetTlsUpdate": "Ustawienia TLS zaktualizowane", - "targetTlsUpdateDescription": "Twoje ustawienia TLS zostały pomyślnie zaktualizowane", + "targetTlsUpdateDescription": "Ustawienia TLS zostały pomyślnie zaktualizowane", "targetErrorTlsUpdate": "Nie udało się zaktualizować ustawień TLS", "targetErrorTlsUpdateDescription": "Wystąpił błąd podczas aktualizacji ustawień TLS", "proxyUpdated": "Ustawienia proxy zaktualizowane", - "proxyUpdatedDescription": "Twoje ustawienia proxy zostały pomyślnie zaktualizowane", + "proxyUpdatedDescription": "Ustawienia proxy zostały pomyślnie zaktualizowane", "proxyErrorUpdate": "Nie udało się zaktualizować ustawień proxy", "proxyErrorUpdateDescription": "Wystąpił błąd podczas aktualizacji ustawień proxy", - "targetAddr": "IP / Nazwa hosta", + "targetAddr": "Host", "targetPort": "Port", "targetProtocol": "Protokół", "targetTlsSettings": "Konfiguracja bezpiecznego połączenia", - "targetTlsSettingsDescription": "Skonfiguruj ustawienia SSL/TLS dla twojego zasobu", + "targetTlsSettingsDescription": "Skonfiguruj ustawienia SSL/TLS dla zasobu", "targetTlsSettingsAdvanced": "Zaawansowane ustawienia TLS", "targetTlsSni": "Nazwa serwera TLS", "targetTlsSniDescription": "Nazwa serwera TLS do użycia dla SNI. Pozostaw puste, aby użyć domyślnej.", "targetTlsSubmit": "Zapisz ustawienia", "targets": "Konfiguracja celów", - "targetsDescription": "Skonfiguruj cele do kierowania ruchu do usług zaplecza", + "targetsDescription": "Ustaw cele dla ruchu na trasie w celu obsługi zaplecza", "targetStickySessions": "Włącz sesje trwałe", "targetStickySessionsDescription": "Utrzymuj połączenia na tym samym celu backendowym przez całą sesję.", "methodSelect": "Wybierz metodę", "targetSubmit": "Dodaj cel", - "targetNoOne": "Ten zasób nie ma żadnych celów. Dodaj cel, aby skonfigurować miejsce wysyłania żądań do twojego backendu.", + "targetNoOne": "Ten zasób nie ma żadnych celów. Dodaj cel do skonfigurowania adresów wysyłania żądań do backendu.", "targetNoOneDescription": "Dodanie więcej niż jednego celu powyżej włączy równoważenie obciążenia.", "targetsSubmit": "Zapisz cele", "addTarget": "Dodaj cel", @@ -516,9 +528,11 @@ "targetCreatedDescription": "Cel został utworzony pomyślnie", "targetErrorCreate": "Nie udało się utworzyć celu", "targetErrorCreateDescription": "Wystąpił błąd podczas tworzenia celu", + "tlsServerName": "Nazwa serwera TLS", + "tlsServerNameDescription": "Nazwa serwera TLS do użycia dla SNI", "save": "Zapisz", "proxyAdditional": "Dodatkowe ustawienia proxy", - "proxyAdditionalDescription": "Skonfiguruj jak twój zasób obsługuje ustawienia proxy", + "proxyAdditionalDescription": "Skonfiguruj sposób obsługi ustawień proxy", "proxyCustomHeader": "Niestandardowy nagłówek hosta", "proxyCustomHeaderDescription": "Nagłówek hosta do ustawienia podczas proxy żądań. Pozostaw puste, aby użyć domyślnego.", "proxyAdditionalSubmit": "Zapisz ustawienia proxy", @@ -558,7 +572,7 @@ "rulesMatchType": "Typ dopasowania", "value": "Wartość", "rulesAbout": "O regułach", - "rulesAboutDescription": "Reguły pozwalają kontrolować dostęp do zasobu na podstawie zestawu kryteriów. Możesz tworzyć reguły zezwalające lub odmawiające dostępu na podstawie adresu IP lub ścieżki URL.", + "rulesAboutDescription": "Reguły pozwalają kontrolować dostęp do zasobu na podstawie zestawu kryteriów. Możesz utworzyć reguły, aby zezwolić lub odmówić dostępu w oparciu o adres IP lub ścieżkę URL.", "rulesActions": "Akcje", "rulesActionAlwaysAllow": "Zawsze zezwalaj: Pomiń wszystkie metody uwierzytelniania", "rulesActionAlwaysDeny": "Zawsze odmawiaj: Blokuj wszystkie żądania; nie można próbować uwierzytelniania", @@ -570,7 +584,7 @@ "rulesEnable": "Włącz reguły", "rulesEnableDescription": "Włącz lub wyłącz ocenę reguł dla tego zasobu", "rulesResource": "Konfiguracja reguł zasobu", - "rulesResourceDescription": "Skonfiguruj reguły kontroli dostępu do zasobu", + "rulesResourceDescription": "Skonfiguruj reguły, aby kontrolować dostęp do zasobu", "ruleSubmit": "Dodaj regułę", "rulesNoOne": "Brak reguł. Dodaj regułę używając formularza.", "rulesOrder": "Reguły są oceniane według priorytetu w kolejności rosnącej.", @@ -586,7 +600,7 @@ "none": "Brak", "unknown": "Nieznany", "resources": "Zasoby", - "resourcesDescription": "Zasoby są proxy do aplikacji działających w Twojej sieci prywatnej. Utwórz zasób dla dowolnej usługi HTTP/HTTPS lub surowej TCP/UDP w Twojej sieci prywatnej. Każdy zasób musi być połączony z witryną, aby umożliwić prywatne, bezpieczne połączenie przez zaszyfrowany tunel WireGuard.", + "resourcesDescription": "Zasoby to proxy do aplikacji działających w sieci prywatnej. Utwórz zasób dla dowolnej usługi HTTP/HTTPS lub surowej usługi TCP/UDP w sieci prywatnej. Każdy zasób musi być podłączony do witryny, aby umożliwić prywatną, bezpieczną łączność przez zaszyfrowany tunel WireGuard.", "resourcesWireGuardConnect": "Bezpieczne połączenie z szyfrowaniem WireGuard", "resourcesMultipleAuthenticationMethods": "Skonfiguruj wiele metod uwierzytelniania", "resourcesUsersRolesAccess": "Kontrola dostępu oparta na użytkownikach i rolach", @@ -597,7 +611,7 @@ "resourceSelect": "Wybierz zasób", "shareLinks": "Linki udostępniania", "share": "Linki do udostępniania", - "shareDescription2": "Twórz linki do udostępniania swoich zasobów. Linki zapewniają tymczasowy lub nieograniczony dostęp do zasobu. Podczas tworzenia linku możesz skonfigurować okres jego ważności.", + "shareDescription2": "Utwórz linki do zasobów, które można współdzielić. Linki zapewniają tymczasowy lub nieograniczony dostęp do twojego zasobu. Możesz skonfigurować czas ważności linku, gdy go utworzysz.", "shareEasyCreate": "Łatwe tworzenie i udostępnianie", "shareConfigurableExpirationDuration": "Konfigurowalny okres ważności", "shareSecureAndRevocable": "Bezpieczne i odwoływalne", @@ -607,19 +621,19 @@ "unknownCommand": "Nieznane polecenie", "newtErrorFetchReleases": "Nie udało się pobrać informacji o wydaniu: {err}", "newtErrorFetchLatest": "Błąd podczas pobierania najnowszego wydania: {err}", - "newtEndpoint": "Punkt końcowy Newt", - "newtId": "ID Newt", - "newtSecretKey": "Klucz tajny Newt", + "newtEndpoint": "Endpoint", + "newtId": "ID", + "newtSecretKey": "Sekret", "architecture": "Architektura", "sites": "Witryny", - "siteWgAnyClients": "Użyj dowolnego klienta WireGuard do połączenia. Będziesz musiał adresować swoje zasoby wewnętrzne używając IP peera.", + "siteWgAnyClients": "Użyj dowolnego klienta WireGuard, aby się połączyć. Będziesz musiał przekierować wewnętrzne zasoby za pomocą adresu IP.", "siteWgCompatibleAllClients": "Kompatybilny ze wszystkimi klientami WireGuard", "siteWgManualConfigurationRequired": "Wymagana konfiguracja ręczna", "userErrorNotAdminOrOwner": "Użytkownik nie jest administratorem ani właścicielem", "pangolinSettings": "Ustawienia - Pangolin", "accessRoleYour": "Twoja rola:", - "accessRoleSelect2": "Wybierz rolę", - "accessUserSelect": "Wybierz użytkownika", + "accessRoleSelect2": "Wybierz role", + "accessUserSelect": "Wybierz użytkowników", "otpEmailEnter": "Wprowadź adres e-mail", "otpEmailEnterDescription": "Naciśnij enter, aby dodać adres e-mail po wpisaniu go w polu.", "otpEmailErrorInvalid": "Nieprawidłowy adres e-mail. Znak wieloznaczny (*) musi być całą częścią lokalną.", @@ -671,7 +685,7 @@ "resourcePincodeSetupTitle": "Ustaw kod PIN", "resourcePincodeSetupTitleDescription": "Ustaw kod PIN, aby chronić ten zasób", "resourceRoleDescription": "Administratorzy zawsze mają dostęp do tego zasobu.", - "resourceUsersRoles": "Użytkownicy i role", + "resourceUsersRoles": "Kontrola dostępu", "resourceUsersRolesDescription": "Skonfiguruj, którzy użytkownicy i role mogą odwiedzać ten zasób", "resourceUsersRolesSubmit": "Zapisz użytkowników i role", "resourceWhitelistSave": "Zapisano pomyślnie", @@ -702,6 +716,7 @@ "resourceTransferSubmit": "Przenieś zasób", "siteDestination": "Witryna docelowa", "searchSites": "Szukaj witryn", + "countries": "Kraje", "accessRoleCreate": "Utwórz rolę", "accessRoleCreateDescription": "Utwórz nową rolę aby zgrupować użytkowników i zarządzać ich uprawnieniami.", "accessRoleCreateSubmit": "Utwórz rolę", @@ -766,15 +781,15 @@ "idpOidcConfigure": "Konfiguracja OAuth2/OIDC", "idpOidcConfigureDescription": "Skonfiguruj punkty końcowe i poświadczenia dostawcy OAuth2/OIDC", "idpClientId": "ID klienta", - "idpClientIdDescription": "ID klienta OAuth2 od twojego dostawcy tożsamości", + "idpClientIdDescription": "Identyfikator klienta OAuth2 od dostawcy tożsamości", "idpClientSecret": "Sekret klienta", - "idpClientSecretDescription": "Sekret klienta OAuth2 od twojego dostawcy tożsamości", + "idpClientSecretDescription": "Sekret klienta OAuth2 od dostawcy tożsamości", "idpAuthUrl": "URL autoryzacji", "idpAuthUrlDescription": "URL punktu końcowego autoryzacji OAuth2", "idpTokenUrl": "URL tokena", "idpTokenUrlDescription": "URL punktu końcowego tokena OAuth2", "idpOidcConfigureAlert": "Ważna informacja", - "idpOidcConfigureAlertDescription": "Po utworzeniu dostawcy tożsamości, będziesz musiał skonfigurować URL wywołania zwrotnego w ustawieniach swojego dostawcy tożsamości. URL wywołania zwrotnego zostanie podany po pomyślnym utworzeniu.", + "idpOidcConfigureAlertDescription": "Po utworzeniu dostawcy tożsamości, musisz skonfigurować adres URL wywołania zwrotnego w ustawieniach dostawcy tożsamości. Adres zwrotny zostanie podany po pomyślnym utworzeniu.", "idpToken": "Konfiguracja tokena", "idpTokenDescription": "Skonfiguruj jak wydobywać informacje o użytkowniku z tokena ID", "idpJmespathAbout": "O JMESPath", @@ -791,7 +806,7 @@ "idpSubmit": "Utwórz dostawcę tożsamości", "orgPolicies": "Polityki organizacji", "idpSettings": "Ustawienia {idpName}", - "idpCreateSettingsDescription": "Skonfiguruj ustawienia dla swojego dostawcy tożsamości", + "idpCreateSettingsDescription": "Skonfiguruj ustawienia dostawcy tożsamości", "roleMapping": "Mapowanie ról", "orgMapping": "Mapowanie organizacji", "orgPoliciesSearch": "Szukaj polityk organizacji...", @@ -826,7 +841,7 @@ "idpUpdatedDescription": "Dostawca tożsamości został pomyślnie zaktualizowany", "redirectUrl": "URL przekierowania", "redirectUrlAbout": "O URL przekierowania", - "redirectUrlAboutDescription": "Jest to URL, na który użytkownicy zostaną przekierowani po uwierzytelnieniu. Musisz skonfigurować ten URL w ustawieniach swojego dostawcy tożsamości.", + "redirectUrlAboutDescription": "Jest to adres URL, na który użytkownicy zostaną przekierowani po uwierzytelnieniu. Musisz skonfigurować ten adres URL w ustawieniach dostawcy tożsamości.", "pangolinAuth": "Autoryzacja - Pangolin", "verificationCodeLengthRequirements": "Twój kod weryfikacyjny musi mieć 8 znaków.", "errorOccurred": "Wystąpił błąd", @@ -909,6 +924,10 @@ "passwordResetSent": "Wyślemy kod resetowania hasła na ten adres e-mail.", "passwordResetCode": "Kod resetowania", "passwordResetCodeDescription": "Sprawdź swój e-mail, aby znaleźć kod resetowania.", + "generatePasswordResetCode": "Generuj kod resetowania hasła", + "passwordResetCodeGenerated": "Wygenerowany kod resetowania hasła", + "passwordResetCodeGeneratedDescription": "Udostępnij ten kod użytkownikowi. Mogą go użyć do zresetowania hasła.", + "passwordResetUrl": "Reset URL", "passwordNew": "Nowe hasło", "passwordNewConfirm": "Potwierdź nowe hasło", "changePassword": "Zmień hasło", @@ -926,6 +945,9 @@ "pincodeAuth": "Kod uwierzytelniający", "pincodeSubmit2": "Wyślij kod", "passwordResetSubmit": "Zażądaj resetowania", + "passwordResetAlreadyHaveCode": "Wprowadź kod resetowania hasła", + "passwordResetSmtpRequired": "Skontaktuj się z administratorem", + "passwordResetSmtpRequiredDescription": "Aby zresetować hasło, wymagany jest kod resetowania hasła. Skontaktuj się z administratorem.", "passwordBack": "Powrót do hasła", "loginBack": "Wróć do logowania", "signup": "Zarejestruj się", @@ -1091,12 +1113,15 @@ "actionListSiteResources": "Lista zasobów strony", "actionUpdateSiteResource": "Aktualizuj zasób strony", "actionListInvitations": "Lista zaproszeń", + "actionExportLogs": "Eksportuj dzienniki", + "actionViewLogs": "Zobacz dzienniki", "noneSelected": "Nie wybrano", "orgNotFound2": "Nie znaleziono organizacji.", "searchProgress": "Szukaj...", "create": "Utwórz", "orgs": "Organizacje", "loginError": "Wystąpił błąd podczas logowania", + "loginRequiredForDevice": "Logowanie jest wymagane do uwierzytelnienia urządzenia.", "passwordForgot": "Zapomniałeś hasła?", "otpAuth": "Uwierzytelnianie dwuskładnikowe", "otpAuthDescription": "Wprowadź kod z aplikacji uwierzytelniającej lub jeden z jednorazowych kodów zapasowych.", @@ -1151,19 +1176,29 @@ "sidebarHome": "Strona główna", "sidebarSites": "Witryny", "sidebarResources": "Zasoby", + "sidebarProxyResources": "Publiczne", + "sidebarClientResources": "Prywatny", "sidebarAccessControl": "Kontrola dostępu", + "sidebarLogsAndAnalytics": "Logi i Analityki", "sidebarUsers": "Użytkownicy", + "sidebarAdmin": "Administrator", "sidebarInvitations": "Zaproszenia", "sidebarRoles": "Role", - "sidebarShareableLinks": "Linki do udostępnienia", + "sidebarShareableLinks": "Linki", "sidebarApiKeys": "Klucze API", "sidebarSettings": "Ustawienia", "sidebarAllUsers": "Wszyscy użytkownicy", "sidebarIdentityProviders": "Dostawcy tożsamości", "sidebarLicense": "Licencja", "sidebarClients": "Klientami", + "sidebarUserDevices": "Użytkownicy", + "sidebarMachineClients": "Maszyny", "sidebarDomains": "Domeny", + "sidebarGeneral": "Ogólny", + "sidebarLogAndAnalytics": "Dziennik & Analityka", "sidebarBluePrints": "Schematy", + "sidebarOrganization": "Organizacja", + "sidebarLogsAnalytics": "Analityka", "blueprints": "Schematy", "blueprintsDescription": "Zastosuj konfiguracje deklaracyjne i wyświetl poprzednie operacje", "blueprintAdd": "Dodaj schemat", @@ -1174,7 +1209,7 @@ "blueprintDetailsDescription": "Zobacz wynik zastosowanego schematu i wszelkie błędy, które wystąpiły", "blueprintInfo": "Informacje o projekcie", "message": "Wiadomość", - "blueprintContentsDescription": "Zdefiniuj zawartość YAML opisującą Twoją infrastrukturę", + "blueprintContentsDescription": "Zdefiniuj zawartość YAML opisującą infrastrukturę", "blueprintErrorCreateDescription": "Wystąpił błąd podczas stosowania schematu", "blueprintErrorCreate": "Błąd podczas tworzenia schematu", "searchBlueprintProgress": "Szukaj schematów...", @@ -1230,15 +1265,15 @@ "loading": "Ładowanie", "restart": "Uruchom ponownie", "domains": "Domeny", - "domainsDescription": "Zarządzaj domenami swojej organizacji", + "domainsDescription": "Tworzenie domen dostępnych w organizacji i zarządzanie nimi", "domainsSearch": "Szukaj domen...", "domainAdd": "Dodaj domenę", - "domainAddDescription": "Zarejestruj nową domenę w swojej organizacji", + "domainAddDescription": "Zarejestruj nową domenę w organizacji", "domainCreate": "Utwórz domenę", "domainCreatedDescription": "Domena utworzona pomyślnie", "domainDeletedDescription": "Domena usunięta pomyślnie", - "domainQuestionRemove": "Czy na pewno chcesz usunąć domenę ze swojego konta?", - "domainMessageRemove": "Po usunięciu domena nie będzie już powiązana z twoim kontem.", + "domainQuestionRemove": "Czy na pewno chcesz usunąć domenę?", + "domainMessageRemove": "Po usunięciu, domena nie będzie już powiązana z organizacją.", "domainConfirmDelete": "Potwierdź usunięcie domeny", "domainDelete": "Usuń domenę", "domain": "Domena", @@ -1257,7 +1292,7 @@ "pending": "Oczekuje", "sidebarBilling": "Fakturowanie", "billing": "Fakturowanie", - "orgBillingDescription": "Zarządzaj swoimi informacjami rozliczeniowymi i subskrypcjami", + "orgBillingDescription": "Zarządzaj informacjami rozliczeniowymi i subskrypcjami", "github": "GitHub", "pangolinHosted": "Logo Pangolin", "fossorial": "Fossorial", @@ -1285,9 +1320,9 @@ "productUpdateTitle": "Aktualizacje produktu", "productUpdateEmpty": "Brak aktualizacji", "dismissAll": "Zamknij wszystkie", - "pangolinUpdateAvailable": "Dostępna jest nowa wersja", + "pangolinUpdateAvailable": "Dostępna aktualizacja", "pangolinUpdateAvailableInfo": "Wersja {version} jest gotowa do zainstalowania", - "pangolinUpdateAvailableReleaseNotes": "Zobacz notatki o wydaniu", + "pangolinUpdateAvailableReleaseNotes": "Zobacz informacje o wydaniu", "newtUpdateAvailable": "Dostępna aktualizacja", "newtUpdateAvailableInfo": "Nowa wersja Newt jest dostępna. Prosimy o aktualizację do najnowszej wersji dla najlepszej pracy.", "domainPickerEnterDomain": "Domena", @@ -1300,7 +1335,7 @@ "domainPickerSortAsc": "A-Z", "domainPickerSortDesc": "Z-A", "domainPickerCheckingAvailability": "Sprawdzanie dostępności...", - "domainPickerNoMatchingDomains": "Nie znaleziono pasujących domen. Spróbuj innej domeny lub sprawdź ustawienia domeny swojej organizacji.", + "domainPickerNoMatchingDomains": "Nie znaleziono pasujących domen. Wypróbuj inną domenę lub sprawdź ustawienia domeny organizacji.", "domainPickerOrganizationDomains": "Domeny organizacji", "domainPickerProvidedDomains": "Dostarczone domeny", "domainPickerSubdomain": "Subdomena: {subdomain}", @@ -1345,9 +1380,9 @@ "billingPortalError": "Błąd Portalu", "billingDataUsageInfo": "Jesteś obciążony za wszystkie dane przesyłane przez bezpieczne tunele, gdy jesteś podłączony do chmury. Obejmuje to zarówno ruch przychodzący, jak i wychodzący we wszystkich Twoich witrynach. Gdy osiągniesz swój limit, twoje strony zostaną rozłączone, dopóki nie zaktualizujesz planu lub nie ograniczysz użycia. Dane nie będą naliczane przy użyciu węzłów.", "billingOnlineTimeInfo": "Opłata zależy od tego, jak długo twoje strony pozostają połączone z chmurą. Na przykład 44,640 minut oznacza jedną stronę działającą 24/7 przez cały miesiąc. Kiedy osiągniesz swój limit, twoje strony zostaną rozłączone, dopóki nie zaktualizujesz planu lub nie zmniejsz jego wykorzystania. Czas nie będzie naliczany przy użyciu węzłów.", - "billingUsersInfo": "Jesteś obciążany za każdego użytkownika w twojej organizacji. Rozliczenia są obliczane codziennie na podstawie liczby aktywnych kont użytkowników w twojej organizacji.", - "billingDomainInfo": "Jesteś obciążany za każdą domenę w twojej organizacji. Rozliczenia są obliczane codziennie na podstawie liczby aktywnych kont domen w twojej organizacji.", - "billingRemoteExitNodesInfo": "Jesteś obciążany za każdy zarządzany węzeł w twojej organizacji. Rozliczenia są obliczane codziennie na podstawie liczby aktywnych zarządzanych węzłów w twojej organizacji.", + "billingUsersInfo": "Opłata za każdego użytkownika w organizacji. Płatność jest obliczana codziennie na podstawie liczby aktywnych kont użytkowników w Twojej organizacji.", + "billingDomainInfo": "Opłata za każdą domenę w organizacji. Płatność jest obliczana codziennie na podstawie liczby aktywnych kont domen w Twojej organizacji.", + "billingRemoteExitNodesInfo": "Opłata za każdy zarządzany węzeł w organizacji. Płatność jest obliczana codziennie na podstawie liczby aktywnych zarządzanych węzłów w Twojej organizacji.", "domainNotFound": "Nie znaleziono domeny", "domainNotFoundDescription": "Zasób jest wyłączony, ponieważ domena nie istnieje już w naszym systemie. Proszę ustawić nową domenę dla tego zasobu.", "failed": "Niepowodzenie", @@ -1430,29 +1465,32 @@ "and": "oraz", "privacyPolicy": "polityką prywatności" }, + "signUpMarketing": { + "keepMeInTheLoop": "Zachowaj mnie w pętli z wiadomościami, aktualizacjami i nowymi funkcjami przez e-mail." + }, "siteRequired": "Strona jest wymagana.", "olmTunnel": "Tunel Olm", "olmTunnelDescription": "Użyj Olm do łączności klienta", "errorCreatingClient": "Błąd podczas tworzenia klienta", "clientDefaultsNotFound": "Nie znaleziono domyślnych ustawień klienta", "createClient": "Utwórz Klienta", - "createClientDescription": "Utwórz nowego klienta do łączenia się z Twoimi witrynami", + "createClientDescription": "Utwórz nowego klienta, aby uzyskać dostęp do prywatnych zasobów", "seeAllClients": "Zobacz Wszystkich Klientów", "clientInformation": "Informacje o Kliencie", "clientNamePlaceholder": "Nazwa klienta", "address": "Adres", "subnetPlaceholder": "Podsieć", - "addressDescription": "Adres, którego ten klient będzie używać do łączności", + "addressDescription": "Adres wewnętrzny klienta. Musi mieścić się w podsieci organizacji.", "selectSites": "Wybierz witryny", "sitesDescription": "Klient będzie miał łączność z wybranymi witrynami", "clientInstallOlm": "Zainstaluj Olm", "clientInstallOlmDescription": "Uruchom Olm na swoim systemie", - "clientOlmCredentials": "Poświadczenia Olm", - "clientOlmCredentialsDescription": "To jest sposób, w jaki Olm będzie się uwierzytelniać z serwerem", - "olmEndpoint": "Punkt Końcowy Olm", - "olmId": "Identyfikator Olm", - "olmSecretKey": "Tajny Klucz Olm", - "clientCredentialsSave": "Zapisz swoje poświadczenia", + "clientOlmCredentials": "Dane logowania", + "clientOlmCredentialsDescription": "W ten sposób klient będzie uwierzytelniał się z serwerem", + "olmEndpoint": "Endpoint", + "olmId": "ID", + "olmSecretKey": "Sekret", + "clientCredentialsSave": "Zapisz dane logowania", "clientCredentialsSaveDescription": "Będziesz mógł zobaczyć to tylko raz. Upewnij się, że skopiujesz go w bezpieczne miejsce.", "generalSettingsDescription": "Skonfiguruj ogólne ustawienia dla tego klienta", "clientUpdated": "Klient zaktualizowany", @@ -1463,9 +1501,7 @@ "sitesFetchError": "Wystąpił błąd podczas pobierania witryn.", "olmErrorFetchReleases": "Wystąpił błąd podczas pobierania wydań Olm.", "olmErrorFetchLatest": "Wystąpił błąd podczas pobierania najnowszego wydania Olm.", - "remoteSubnets": "Zdalne Podsieci", "enterCidrRange": "Wprowadź zakres CIDR", - "remoteSubnetsDescription": "Dodaj zakresy CIDR, które można uzyskać zdalnie z tej strony za pomocą klientów. Użyj formatu jak 10.0.0.0/24. Dotyczy to WYŁĄCZNIE łączności klienta VPN.", "resourceEnableProxy": "Włącz publiczny proxy", "resourceEnableProxyDescription": "Włącz publiczne proxy dla tego zasobu. To umożliwia dostęp do zasobu spoza sieci przez chmurę na otwartym porcie. Wymaga konfiguracji Traefik.", "externalProxyEnabled": "Zewnętrzny Proxy Włączony", @@ -1483,14 +1519,15 @@ "enableHealthChecksDescription": "Monitoruj zdrowie tego celu. Możesz monitorować inny punkt końcowy niż docelowy w razie potrzeby.", "healthScheme": "Metoda", "healthSelectScheme": "Wybierz metodę", + "healthCheckPortInvalid": "Port oceny stanu musi znajdować się między 1 a 65535", "healthCheckPath": "Ścieżka", "healthHostname": "IP / Nazwa hosta", "healthPort": "Port", "healthCheckPathDescription": "Ścieżka do sprawdzania stanu zdrowia.", - "healthyIntervalSeconds": "Interwał Zdrowy", - "unhealthyIntervalSeconds": "Interwał Niezdrowy", + "healthyIntervalSeconds": "Odstęp zdrowego (sek)", + "unhealthyIntervalSeconds": "Niezdrowy interwał (sek)", "IntervalSeconds": "Interwał Zdrowy", - "timeoutSeconds": "Limit Czasu", + "timeoutSeconds": "Limit czasu (sek)", "timeIsInSeconds": "Czas w sekundach", "retryAttempts": "Próby Ponowienia", "expectedResponseCodes": "Oczekiwane Kody Odpowiedzi", @@ -1526,12 +1563,12 @@ "resourceEditDomain": "Edytuj domenę", "siteName": "Nazwa strony", "proxyPort": "Port", - "resourcesTableProxyResources": "Zasoby proxy", - "resourcesTableClientResources": "Zasoby klienta", + "resourcesTableProxyResources": "Publiczne", + "resourcesTableClientResources": "Prywatny", "resourcesTableNoProxyResourcesFound": "Nie znaleziono zasobów proxy.", "resourcesTableNoInternalResourcesFound": "Nie znaleziono wewnętrznych zasobów.", "resourcesTableDestination": "Miejsce docelowe", - "resourcesTableTheseResourcesForUseWith": "Te zasoby są do użytku z", + "resourcesTableAlias": "Alias", "resourcesTableClients": "Klientami", "resourcesTableAndOnlyAccessibleInternally": "i są dostępne tylko wewnętrznie po połączeniu z klientem.", "resourcesTableNoTargets": "Brak celów", @@ -1540,8 +1577,8 @@ "resourcesTableOffline": "Offline", "resourcesTableUnknown": "Nieznane", "resourcesTableNotMonitored": "Nie monitorowano", - "editInternalResourceDialogEditClientResource": "Edytuj zasób klienta", - "editInternalResourceDialogUpdateResourceProperties": "Zaktualizuj właściwości zasobu i konfigurację celu dla {resourceName}.", + "editInternalResourceDialogEditClientResource": "Edytuj Zasoby Prywatne", + "editInternalResourceDialogUpdateResourceProperties": "Aktualizuj konfigurację zasobów i kontrolę dostępu dla {resourceName}", "editInternalResourceDialogResourceProperties": "Właściwości zasobów", "editInternalResourceDialogName": "Nazwa", "editInternalResourceDialogProtocol": "Protokół", @@ -1560,11 +1597,22 @@ "editInternalResourceDialogInvalidIPAddressFormat": "Nieprawidłowy format adresu IP", "editInternalResourceDialogDestinationPortMin": "Port docelowy musi wynosić przynajmniej 1", "editInternalResourceDialogDestinationPortMax": "Port docelowy nie może być większy niż 65536", + "editInternalResourceDialogPortModeRequired": "Protokół, port proxy i port docelowy są wymagane dla trybu portu", + "editInternalResourceDialogMode": "Tryb", + "editInternalResourceDialogModePort": "Port", + "editInternalResourceDialogModeHost": "Host", + "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogDestination": "Miejsce docelowe", + "editInternalResourceDialogDestinationHostDescription": "Adres IP lub nazwa hosta zasobu w sieci witryny.", + "editInternalResourceDialogDestinationIPDescription": "Adres IP lub nazwa hosta zasobu w sieci witryny.", + "editInternalResourceDialogDestinationCidrDescription": "Zakres CIDR zasobu w sieci witryny.", + "editInternalResourceDialogAlias": "Alias", + "editInternalResourceDialogAliasDescription": "Opcjonalny wewnętrzny alias DNS dla tego zasobu.", "createInternalResourceDialogNoSitesAvailable": "Brak dostępnych stron", "createInternalResourceDialogNoSitesAvailableDescription": "Musisz mieć co najmniej jedną stronę Newt z skonfigurowanym podsiecią, aby tworzyć wewnętrzne zasoby.", "createInternalResourceDialogClose": "Zamknij", - "createInternalResourceDialogCreateClientResource": "Utwórz zasób klienta", - "createInternalResourceDialogCreateClientResourceDescription": "Utwórz nowy zasób, który będzie dostępny dla klientów połączonych z wybraną stroną.", + "createInternalResourceDialogCreateClientResource": "Utwórz zasób prywatny", + "createInternalResourceDialogCreateClientResourceDescription": "Utwórz nowy zasób, który będzie dostępny tylko dla klientów podłączonych do organizacji", "createInternalResourceDialogResourceProperties": "Właściwości zasobów", "createInternalResourceDialogName": "Nazwa", "createInternalResourceDialogSite": "Witryna", @@ -1593,11 +1641,22 @@ "createInternalResourceDialogInvalidIPAddressFormat": "Nieprawidłowy format adresu IP", "createInternalResourceDialogDestinationPortMin": "Port docelowy musi wynosić przynajmniej 1", "createInternalResourceDialogDestinationPortMax": "Port docelowy nie może być większy niż 65536", + "createInternalResourceDialogPortModeRequired": "Protokół, port proxy i port docelowy są wymagane dla trybu portu", + "createInternalResourceDialogMode": "Tryb", + "createInternalResourceDialogModePort": "Port", + "createInternalResourceDialogModeHost": "Host", + "createInternalResourceDialogModeCidr": "CIDR", + "createInternalResourceDialogDestination": "Miejsce docelowe", + "createInternalResourceDialogDestinationHostDescription": "Adres IP lub nazwa hosta zasobu w sieci witryny.", + "createInternalResourceDialogDestinationCidrDescription": "Zakres CIDR zasobu w sieci witryny.", + "createInternalResourceDialogAlias": "Alias", + "createInternalResourceDialogAliasDescription": "Opcjonalny wewnętrzny alias DNS dla tego zasobu.", "siteConfiguration": "Konfiguracja", "siteAcceptClientConnections": "Akceptuj połączenia klienta", - "siteAcceptClientConnectionsDescription": "Pozwól innym urządzeniom połączyć się przez tę instancję Newt jako bramę za pomocą klientów.", - "siteAddress": "Adres strony", - "siteAddressDescription": "Podaj adres IP hosta, do którego klienci będą się łączyć. Jest to wewnętrzny adres strony w sieci Pangolin dla klientów do adresowania. Musi zawierać się w podsieci organizacji.", + "siteAcceptClientConnectionsDescription": "Zezwalaj urządzeniom i klientom na dostęp do zasobów na tej stronie. Może to zostać zmienione później.", + "siteAddress": "Adres witryny (Zaawansowany)", + "siteAddressDescription": "Adres wewnętrzny witryny. Musi mieścić się w podsieci organizacji.", + "siteNameDescription": "Wyświetlana nazwa witryny, która może zostać zmieniona później.", "autoLoginExternalIdp": "Automatyczny login z zewnętrznym IDP", "autoLoginExternalIdpDescription": "Natychmiastowe przekierowanie użytkownika do zewnętrznego IDP w celu uwierzytelnienia.", "selectIdp": "Wybierz IDP", @@ -1623,7 +1682,7 @@ "sidebarRemoteExitNodes": "Zdalne węzły", "remoteExitNodeCreate": { "title": "Utwórz węzeł", - "description": "Utwórz nowy węzeł, aby rozszerzyć połączenie z siecią", + "description": "Utwórz nowy węzeł, aby rozszerzyć łączność z siecią", "viewAllButton": "Zobacz wszystkie węzły", "strategy": { "title": "Strategia Tworzenia", @@ -1724,16 +1783,16 @@ "idpTypeLabel": "Typ dostawcy tożsamości", "roleMappingExpressionPlaceholder": "np. zawiera(grupy, 'admin') && 'Admin' || 'Członek'", "idpGoogleConfiguration": "Konfiguracja Google", - "idpGoogleConfigurationDescription": "Skonfiguruj swoje poświadczenia Google OAuth2", - "idpGoogleClientIdDescription": "Twój identyfikator klienta Google OAuth2", - "idpGoogleClientSecretDescription": "Twój klucz klienta Google OAuth2", + "idpGoogleConfigurationDescription": "Skonfiguruj dane logowania Google OAuth2", + "idpGoogleClientIdDescription": "Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Klucz tajny klienta Google OAuth2", "idpAzureConfiguration": "Konfiguracja Azure Entra ID", - "idpAzureConfigurationDescription": "Skonfiguruj swoje dane logowania OAuth2 Azure Entra", + "idpAzureConfigurationDescription": "Skonfiguruj poświadczenia Aure Entra ID OAuth2", "idpTenantId": "ID Najemcy", - "idpTenantIdPlaceholder": "twoj-lokator", - "idpAzureTenantIdDescription": "Twój identyfikator dzierżawcy Azure (znaleziony w Podglądzie Azure Active Directory", - "idpAzureClientIdDescription": "Twój identyfikator klienta rejestracji aplikacji Azure", - "idpAzureClientSecretDescription": "Klucz tajny Twojego klienta rejestracji aplikacji Azure", + "idpTenantIdPlaceholder": "tenant-id", + "idpAzureTenantIdDescription": "Identyfikator dzierżawcy azure (znaleziony w Azuure Active Directory podglądu)", + "idpAzureClientIdDescription": "Identyfikator klienta aplikacji Azure", + "idpAzureClientSecretDescription": "Klucz tajny klienta aplikacji Azure", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", @@ -1741,14 +1800,14 @@ "idpGoogleConfigurationTitle": "Konfiguracja Google", "idpAzureConfigurationTitle": "Konfiguracja Azure Entra ID", "idpTenantIdLabel": "ID Najemcy", - "idpAzureClientIdDescription2": "Twój identyfikator klienta rejestracji aplikacji Azure", - "idpAzureClientSecretDescription2": "Klucz tajny Twojego klienta rejestracji aplikacji Azure", + "idpAzureClientIdDescription2": "Identyfikator klienta aplikacji Azure", + "idpAzureClientSecretDescription2": "Klucz tajny klienta aplikacji Azure", "idpGoogleDescription": "Dostawca Google OAuth2/OIDC", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", "subnet": "Podsieć", "subnetDescription": "Podsieć dla konfiguracji sieci tej organizacji.", "authPage": "Strona uwierzytelniania", - "authPageDescription": "Skonfiguruj stronę uwierzytelniania dla swojej organizacji", + "authPageDescription": "Skonfiguruj stronę uwierzytelniania dla organizacji", "authPageDomain": "Domena strony uwierzytelniania", "noDomainSet": "Nie ustawiono domeny", "changeDomain": "Zmień domenę", @@ -1758,7 +1817,7 @@ "setAuthPageDomain": "Ustaw domenę strony uwierzytelniania", "failedToFetchCertificate": "Nie udało się pobrać certyfikatu", "failedToRestartCertificate": "Nie udało się ponownie uruchomić certyfikatu", - "addDomainToEnableCustomAuthPages": "Dodaj domenę, aby włączyć niestandardowe strony uwierzytelniania dla Twojej organizacji", + "addDomainToEnableCustomAuthPages": "Dodaj domenę, aby włączyć niestandardowe strony uwierzytelniania dla organizacji", "selectDomainForOrgAuthPage": "Wybierz domenę dla strony uwierzytelniania organizacji", "domainPickerProvidedDomain": "Dostarczona domena", "domainPickerFreeProvidedDomain": "Darmowa oferowana domena", @@ -1773,7 +1832,7 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" nie może być poprawne dla {domain}.", "domainPickerSubdomainSanitized": "Poddomena oczyszczona", "domainPickerSubdomainCorrected": "\"{sub}\" został skorygowany do \"{sanitized}\"", - "orgAuthSignInTitle": "Zaloguj się do swojej organizacji", + "orgAuthSignInTitle": "Zaloguj się do organizacji", "orgAuthChooseIdpDescription": "Wybierz swojego dostawcę tożsamości, aby kontynuować", "orgAuthNoIdpConfigured": "Ta organizacja nie ma skonfigurowanych żadnych dostawców tożsamości. Zamiast tego możesz zalogować się za pomocą swojej tożsamości Pangolin.", "orgAuthSignInWithPangolin": "Zaloguj się używając Pangolin", @@ -1791,7 +1850,7 @@ "enableTwoFactorAuthentication": "Włącz uwierzytelnianie dwuskładnikowe", "completeSecuritySteps": "Zakończ kroki bezpieczeństwa", "securitySettings": "Ustawienia zabezpieczeń", - "securitySettingsDescription": "Skonfiguruj politykę bezpieczeństwa dla Twojej organizacji", + "securitySettingsDescription": "Skonfiguruj polityki bezpieczeństwa dla organizacji", "requireTwoFactorForAllUsers": "Wymagaj uwierzytelniania dwuetapowego dla wszystkich użytkowników", "requireTwoFactorDescription": "Po włączeniu wszyscy użytkownicy wewnętrzni w tej organizacji muszą mieć włączone uwierzytelnianie dwuskładnikowe, aby uzyskać dostęp do organizacji.", "requireTwoFactorDisabledDescription": "Ta funkcja wymaga poprawnej licencji (Enterprise) lub aktywnej subskrypcji (SaaaS)", @@ -1854,8 +1913,12 @@ "enterpriseEdition": "Edycja Enterprise", "unlicensed": "Nielicencjonowane", "beta": "Beta", - "manageClients": "Zarządzaj klientami", - "manageClientsDescription": "Klienci to urządzenia, które mogą łączyć się z Twoimi witrynami", + "manageUserDevices": "Urządzenia użytkownika", + "manageUserDevicesDescription": "Przeglądaj i zarządzaj urządzeniami, które użytkownicy używają do prywatnego łączenia się z zasobami", + "manageMachineClients": "Zarządzaj klientami maszyn", + "manageMachineClientsDescription": "Tworzenie i zarządzanie klientami, których serwery i systemy używają do prywatnego łączenia się z zasobami", + "clientsTableUserClients": "Użytkownik", + "clientsTableMachineClients": "Maszyna", "licenseTableValidUntil": "Ważny do", "saasLicenseKeysSettingsTitle": "Licencje przedsiębiorstwa", "saasLicenseKeysSettingsDescription": "Generuj i zarządzaj kluczami licencyjnymi Enterprise dla samodzielnych instancji Pangolin", @@ -1990,11 +2053,12 @@ "pathRewriteStripLabel": "pasek", "sidebarEnableEnterpriseLicense": "Włącz licencję przedsiębiorstwa", "cannotbeUndone": "Tej operacji nie można cofnąć.", - "toConfirm": "potwierdzić", + "toConfirm": "do potwierdzenia.", "deleteClientQuestion": "Czy na pewno chcesz usunąć klienta z witryny i organizacji?", "clientMessageRemove": "Po usunięciu, klient nie będzie już mógł połączyć się z witryną.", "sidebarLogs": "Logi", "request": "Żądanie", + "requests": "Żądania", "logs": "Logi", "logsSettingsDescription": "Monitoruj logi zebrane z tej orginizacji", "searchLogs": "Szukaj dzienników...", @@ -2020,6 +2084,7 @@ "ip": "IP", "reason": "Powód", "requestLogs": "Dzienniki żądań", + "requestAnalytics": "Żądanie Analityki", "host": "Host", "location": "Lokalizacja", "actionLogs": "Dzienniki działań", @@ -2029,6 +2094,7 @@ "logRetention": "Zachowanie dziennika", "logRetentionDescription": "Zarządzaj jak długo różne typy logów są zachowane dla tej organizacji lub wyłącz je", "requestLogsDescription": "Zobacz szczegółowe dzienniki żądań zasobów w tej organizacji", + "requestAnalyticsDescription": "Zobacz szczegółowe analizy żądań dla zasobów w tej organizacji", "logRetentionRequestLabel": "Zachowanie dziennika żądań", "logRetentionRequestDescription": "Jak długo zachować dzienniki żądań", "logRetentionAccessLabel": "Zachowanie dziennika dostępu", @@ -2042,6 +2108,7 @@ "logRetention30Days": "30 dni", "logRetention90Days": "90 dni", "logRetentionForever": "Na zawsze", + "logRetentionEndOfFollowingYear": "Koniec następnego roku", "actionLogsDescription": "Zobacz historię działań wykonywanych w tej organizacji", "accessLogsDescription": "Wyświetl prośby o autoryzację dostępu do zasobów w tej organizacji", "licenseRequiredToUse": "Licencja Enterprise jest wymagana do korzystania z tej funkcji.", @@ -2066,15 +2133,15 @@ "olmUpdateAvailableInfo": "Dostępna jest zaktualizowana wersja Olm. Zaktualizuj do najnowszej wersji, aby uzyskać najlepsze doświadczenia.", "client": "Klient", "proxyProtocol": "Ustawienia protokołu proxy", - "proxyProtocolDescription": "Skonfiguruj protokół Proxy aby zachować adresy IP klienta dla usług TCP/UDP.", + "proxyProtocolDescription": "Skonfiguruj protokół Proxy aby zachować adresy IP klienta dla usług TCP.", "enableProxyProtocol": "Włącz protokół proxy", - "proxyProtocolInfo": "Zachowaj adresy IP klienta dla backendów TCP/UDP", + "proxyProtocolInfo": "Zachowaj adresy IP klienta dla backendów TCP", "proxyProtocolVersion": "Wersja protokołu proxy", "version1": " Wersja 1 (zalecane)", "version2": "Wersja 2", "versionDescription": "Wersja 1 jest oparta na tekście i szeroko wspierana. Wersja 2 jest binarna i bardziej efektywna, ale mniej kompatybilna.", "warning": "Ostrzeżenie", - "proxyProtocolWarning": "Twoja aplikacja backend musi być skonfigurowana tak, aby przyjmować połączenia z protokołem proxy. Jeśli Twój backend nie obsługuje protokołu proxy, włączenie to spowoduje przerwanie wszystkich połączeń. Upewnij się, że konfiguracja twojego backendu do zaufanych nagłówków protokołu proxy z Traefik.", + "proxyProtocolWarning": "Aplikacja backend musi być skonfigurowana do akceptowania połączeń protokołu proxy. Jeśli Twój backend nie obsługuje protokołu Proxy, włączenie tego spowoduje przerwanie wszystkich połączeń, więc włącz to tylko jeśli wiesz, co robisz. Upewnij się, że konfiguracja twojego backendu do zaufanych nagłówków protokołu proxy z Traefik.", "restarting": "Restartowanie...", "manual": "Ręcznie", "messageSupport": "Obsługa wiadomości", @@ -2097,6 +2164,43 @@ "supportMessageSent": "Wiadomość wysłana!", "supportWillContact": "Wkrótce będziemy w kontakcie!", "selectLogRetention": "Wybierz zatrzymanie dziennika", + "terms": "Regulamin", + "privacy": "Prywatność", + "security": "Bezpieczeństwo", + "docs": "Dokumentacja", + "deviceActivation": "Aktywacja urządzenia", + "deviceCodeInvalidFormat": "Kod musi mieć 9 znaków (np. A1AJ-N5JD)", + "deviceCodeInvalidOrExpired": "Nieprawidłowy lub wygasły kod", + "deviceCodeVerifyFailed": "Nie udało się zweryfikować kodu urządzenia", + "signedInAs": "Zalogowany jako", + "deviceCodeEnterPrompt": "Wprowadź kod wyświetlany na urządzeniu", + "continue": "Kontynuuj", + "deviceUnknownLocation": "Nieznana lokalizacja", + "deviceAuthorizationRequested": "Ta autoryzacja została zgłoszona do {location} na {date}. Upewnij się, że ufasz urządzeniu, ponieważ uzyska dostęp do konta.", + "deviceLabel": "Urządzenie: {deviceName}", + "deviceWantsAccess": "chce uzyskać dostęp do Twojego konta", + "deviceExistingAccess": "Istniejący dostęp:", + "deviceFullAccess": "Pełny dostęp do Twojego konta", + "deviceOrganizationsAccess": "Dostęp do wszystkich organizacji, do których Twoje konto ma dostęp", + "deviceAuthorize": "Autoryzuj {applicationName}", + "deviceConnected": "Urządzenie podłączone!", + "deviceAuthorizedMessage": "Urządzenie jest upoważnione do dostępu do Twojego konta.", + "pangolinCloud": "Chmura Pangolin", + "viewDevices": "Zobacz urządzenia", + "viewDevicesDescription": "Zarządzaj podłączonymi urządzeniami", + "noDevices": "Nie znaleziono urządzeń", + "dateCreated": "Data utworzenia", + "unnamedDevice": "Urządzenie bez nazwy", + "deviceQuestionRemove": "Czy na pewno chcesz usunąć to urządzenie?", + "deviceMessageRemove": "Tej czynności nie można cofnąć.", + "deviceDeleteConfirm": "Usuń urządzenie", + "deleteDevice": "Usuń urządzenie", + "errorLoadingDevices": "Błąd ładowania urządzeń", + "failedToLoadDevices": "Nie udało się załadować urządzeń", + "deviceDeleted": "Urządzenie usunięte", + "deviceDeletedDescription": "Urządzenie zostało usunięte.", + "errorDeletingDevice": "Błąd podczas usuwania urządzenia", + "failedToDeleteDevice": "Nie udało się usunąć urządzenia", "showColumns": "Pokaż kolumny", "hideColumns": "Ukryj kolumny", "columnVisibility": "Widoczność kolumn", @@ -2111,10 +2215,14 @@ "enableSelected": "Włącz zaznaczone", "disableSelected": "Wyłącz zaznaczone", "checkSelectedStatus": "Sprawdź status zaznaczonych", + "clients": "Klientami", + "accessClientSelect": "Wybierz klientów komputera", + "resourceClientDescription": "Klienci maszynowi, którzy mają dostęp do tego zasobu", + "regenerate": "Wygeneruj ponownie", "credentials": "Dane logowania", "savecredentials": "Zapisz dane logowania", - "regeneratecredentials": "Przycisk ponownie", - "regenerateCredentials": "Ponownie wygeneruj i zapisz swoje dane logowania", + "regenerateCredentialsButton": "Wygeneruj dane logowania", + "regenerateCredentials": "Wygeneruj dane logowania", "generatedcredentials": "Wygenerowane dane logowania", "copyandsavethesecredentials": "Skopiuj i zapisz te dane logowania", "copyandsavethesecredentialsdescription": "Te dane uwierzytelniające nie będą wyświetlane ponownie po opuszczeniu tej strony. Zapisz je teraz bezpiecznie.", @@ -2122,13 +2230,12 @@ "credentialsSavedDescription": "Dane logowania zostały wygenerowane i zapisane pomyślnie.", "credentialsSaveError": "Błąd zapisu danych logowania", "credentialsSaveErrorDescription": "Wystąpił błąd podczas regeneracji i zapisywania poświadczeń.", - "regenerateCredentialsWarning": "Regeneracja poświadczeń spowoduje unieważnienie poprzednich poświadczeń. Upewnij się, że zaktualizowano wszystkie konfiguracje, które używają tych poświadczeń.", + "regenerateCredentialsWarning": "Regeneracja poświadczeń spowoduje unieważnienie poprzednich danych i spowoduje rozłączenie. Upewnij się, że aktualizacja wszystkich konfiguracji, które używają tych poświadczeń.", "confirm": "Potwierdź", "regenerateCredentialsConfirmation": "Czy na pewno chcesz wygenerować dane logowania?", "endpoint": "Endpoint", "Id": "Id", "SecretKey": "Sekretny klucz", - "featureDisabledTooltip": "Ta funkcja jest dostępna tylko w planie przedsiębiorstwa i wymaga licencji, aby z niej korzystać.", "niceId": "Niepoprawne ID", "niceIdUpdated": "Zaktualizowano błędne ID", "niceIdUpdatedSuccessfully": "Zaktualizowano błędne ID", @@ -2136,5 +2243,32 @@ "niceIdUpdateErrorDescription": "Wystąpił błąd podczas aktualizowania Nicei ID.", "niceIdCannotBeEmpty": "Niepoprawny identyfikator nie może być pusty", "enterIdentifier": "Wprowadź identyfikator", - "identifier": "Identifier" + "identifier": "Identifier", + "deviceLoginUseDifferentAccount": "To nie? Użyj innego konta.", + "deviceLoginDeviceRequestingAccessToAccount": "Urządzenie żąda dostępu do tego konta.", + "noData": "Brak danych", + "machineClients": "Klienci maszyn", + "install": "Zainstaluj", + "run": "Uruchom", + "clientNameDescription": "Wyświetlana nazwa klienta, która może zostać zmieniona później.", + "clientAddress": "Adres klienta (Zaawansowany)", + "setupFailedToFetchSubnet": "Nie udało się pobrać domyślnej podsieci", + "setupSubnetAdvanced": "Podsieć (zaawansowana)", + "setupSubnetDescription": "Podsieć dla wewnętrznej sieci tej organizacji.", + "siteRegenerateAndDisconnect": "Wygeneruj ponownie i rozłącz", + "siteRegenerateAndDisconnectConfirmation": "Czy na pewno chcesz odzyskać dane logowania i odłączyć tę stronę?", + "siteRegenerateAndDisconnectWarning": "Spowoduje to regenerację poświadczeń i natychmiastowe odłączenie witryny. Strona będzie musiała zostać zrestartowana z nowymi poświadczeniami.", + "siteRegenerateCredentialsConfirmation": "Czy na pewno chcesz odzyskać dane logowania dla tej witryny?", + "siteRegenerateCredentialsWarning": "Spowoduje to regenerację poświadczeń. Witryna pozostanie połączona dopóki nie uruchomisz jej ręcznie i nie użyjesz nowych poświadczeń.", + "clientRegenerateAndDisconnect": "Wygeneruj ponownie i rozłącz", + "clientRegenerateAndDisconnectConfirmation": "Czy na pewno chcesz odzyskać dane logowania i odłączyć tego klienta?", + "clientRegenerateAndDisconnectWarning": "Spowoduje to regenerację poświadczeń i natychmiastowe odłączenie klienta. Klient będzie musiał zostać ponownie uruchomiony z nowymi poświadczeniami.", + "clientRegenerateCredentialsConfirmation": "Czy na pewno chcesz odzyskać dane logowania dla tego klienta?", + "clientRegenerateCredentialsWarning": "Spowoduje to regenerację poświadczeń. Klient pozostanie połączony dopóki nie uruchomisz go ponownie i nie użyjesz nowych poświadczeń.", + "remoteExitNodeRegenerateAndDisconnect": "Wygeneruj ponownie i rozłącz", + "remoteExitNodeRegenerateAndDisconnectConfirmation": "Czy na pewno chcesz odzyskać dane logowania i odłączyć ten węzeł zdalnego wyjścia?", + "remoteExitNodeRegenerateAndDisconnectWarning": "Spowoduje to regenerację danych logowania i natychmiastowe odłączenie zdalnego węzła wyjścia. Węzeł zdalnego wyjścia będzie musiał zostać ponownie uruchomiony z nowymi danymi logowania.", + "remoteExitNodeRegenerateCredentialsConfirmation": "Czy na pewno chcesz wygenerować dane logowania dla tego węzła zdalnego wyjścia?", + "remoteExitNodeRegenerateCredentialsWarning": "Spowoduje to regenerację poświadczeń. Serwer wyjścia pozostanie podłączony do momentu ręcznego ponownego uruchomienia i użycia nowych poświadczeń.", + "agent": "Agent" } diff --git a/messages/pt-PT.json b/messages/pt-PT.json index ed9a45510..41ae04b0d 100644 --- a/messages/pt-PT.json +++ b/messages/pt-PT.json @@ -1,12 +1,12 @@ { - "setupCreate": "Crie sua organização, site e recursos", + "setupCreate": "Criar a organização, o site e os recursos", "setupNewOrg": "Nova organização", "setupCreateOrg": "Criar Organização", "setupCreateResources": "Criar recursos", "setupOrgName": "Nome Da Organização", - "orgDisplayName": "Este é o nome de exibição da sua organização.", + "orgDisplayName": "Este é o nome de exibição da organização.", "orgId": "ID da organização", - "setupIdentifierMessage": "Este é o identificador exclusivo para sua organização. Isso é separado do nome de exibição.", + "setupIdentifierMessage": "Este é o identificador exclusivo da organização.", "setupErrorIdentifier": "O ID da organização já existe. Por favor, escolha um diferente.", "componentsErrorNoMemberCreate": "Não é atualmente um membro de nenhuma organização. Crie uma organização para começar.", "componentsErrorNoMember": "Não é atualmente um membro de nenhuma organização.", @@ -50,10 +50,10 @@ "siteMessageRemove": "Uma vez removido, o site não estará mais acessível. Todas as metas associadas ao site também serão removidas.", "siteQuestionRemove": "Você tem certeza que deseja remover este site da organização?", "siteManageSites": "Gerir sites", - "siteDescription": "Permitir conectividade à sua rede através de túneis seguros", + "siteDescription": "Criar e gerenciar sites para ativar a conectividade a redes privadas", "siteCreate": "Criar site", "siteCreateDescription2": "Siga os passos abaixo para criar e conectar um novo site", - "siteCreateDescription": "Crie um novo site para começar a conectar seus recursos", + "siteCreateDescription": "Crie um novo site para começar a conectar os recursos", "close": "FECHAR", "siteErrorCreate": "Erro ao criar site", "siteErrorCreateKeyPair": "Par de chaves ou padrões do site não encontrados", @@ -74,7 +74,7 @@ "siteInstallNewt": "Instalar Novo", "siteInstallNewtDescription": "Novo item em execução no seu sistema", "WgConfiguration": "Configuração do WireGuard", - "WgConfigurationDescription": "Use a seguinte configuração para conectar-se à sua rede", + "WgConfigurationDescription": "Use a seguinte configuração para conectar-se à rede", "operatingSystem": "Sistema operacional", "commands": "Comandos", "recommended": "Recomendados", @@ -87,32 +87,32 @@ "siteUpdated": "Site atualizado", "siteUpdatedDescription": "O site foi atualizado.", "siteGeneralDescription": "Configurar as configurações gerais para este site", - "siteSettingDescription": "Configure as configurações no seu site", + "siteSettingDescription": "Configurar as configurações no site", "siteSetting": "Configurações do {siteName}", - "siteNewtTunnel": "Novo túnel (recomendado)", - "siteNewtTunnelDescription": "A maneira mais fácil de criar um ponto de entrada na sua rede. Nenhuma configuração extra.", + "siteNewtTunnel": "Novo Site (Recomendado)", + "siteNewtTunnelDescription": "Maneira mais fácil de criar um ponto de entrada em qualquer rede. Nenhuma configuração extra.", "siteWg": "WireGuard Básico", "siteWgDescription": "Use qualquer cliente do WireGuard para estabelecer um túnel. Configuração manual NAT é necessária.", "siteWgDescriptionSaas": "Use qualquer cliente WireGuard para estabelecer um túnel. Configuração manual NAT necessária. SOMENTE FUNCIONA EM NODES AUTO-HOSPEDADOS", "siteLocalDescription": "Recursos locais apenas. Sem túneis.", "siteLocalDescriptionSaas": "Apenas recursos locais. Sem túneis. Apenas disponível em nós remotos.", "siteSeeAll": "Ver todos os sites", - "siteTunnelDescription": "Determine como você deseja se conectar ao seu site", - "siteNewtCredentials": "Credenciais Novas", - "siteNewtCredentialsDescription": "É assim que o novo sistema se autenticará com o servidor", - "siteCredentialsSave": "Salve suas credenciais", + "siteTunnelDescription": "Determine como você deseja se conectar ao site", + "siteNewtCredentials": "Credenciais", + "siteNewtCredentialsDescription": "É assim que o site se autentica com o servidor", + "siteCredentialsSave": "Salvar as Credenciais", "siteCredentialsSaveDescription": "Você só será capaz de ver esta vez. Certifique-se de copiá-lo para um lugar seguro.", "siteInfo": "Informações do Site", "status": "SItuação", "shareTitle": "Gerir links partilhados", - "shareDescription": "Criar links compartilháveis para conceder acesso temporário ou permanente aos seus recursos", + "shareDescription": "Criar links compartilháveis para conceder acesso temporário ou permanente aos recursos do proxy", "shareSearch": "Pesquisar links de compartilhamento...", "shareCreate": "Criar Link de Compartilhamento", "shareErrorDelete": "Falha ao apagar o link", "shareErrorDeleteMessage": "Ocorreu um erro ao apagar o link", "shareDeleted": "Link excluído", "shareDeletedDescription": "O link foi eliminado", - "shareTokenDescription": "Seu token de acesso pode ser passado de duas maneiras: como um parâmetro de consulta ou nos cabeçalhos da solicitação. Estes devem ser passados do cliente em todas as solicitações para acesso autenticado.", + "shareTokenDescription": "O token de acesso pode ser passado de duas maneiras: como um parâmetro de consulta ou nos cabeçalhos da solicitação. Estes devem ser passados do cliente em todas as solicitações para acesso autenticado.", "accessToken": "Token de acesso", "usageExamples": "Exemplos de uso", "tokenId": "ID do Token", @@ -121,7 +121,7 @@ "importantNote": "Nota importante", "shareImportantDescription": "Por razões de segurança, o uso de cabeçalhos é recomendado através dos parâmetros de consulta quando possível, já que os parâmetros de consulta podem estar logados nos logs do servidor ou no histórico do navegador.", "token": "Identificador", - "shareTokenSecurety": "Mantenha seu token de acesso seguro. Não o compartilhe em áreas de acesso público ou código do lado do cliente.", + "shareTokenSecurety": "Mantenha o token de acesso seguro. Não o compartilhe em áreas de acesso público ou código do lado do cliente.", "shareErrorFetchResource": "Falha ao buscar recursos", "shareErrorFetchResourceDescription": "Ocorreu um erro ao obter os recursos", "shareErrorCreate": "Falha ao criar link de compartilhamento", @@ -144,8 +144,10 @@ "expires": "Expira", "never": "nunca", "shareErrorSelectResource": "Por favor, selecione um recurso", - "resourceTitle": "Gerir Recursos", - "resourceDescription": "Crie proxies seguros para seus aplicativos privados", + "proxyResourceTitle": "Gerenciar Recursos Públicos", + "proxyResourceDescription": "Criar e gerenciar recursos que são acessíveis publicamente por meio de um navegador da web", + "clientResourceTitle": "Gerenciar recursos privados", + "clientResourceDescription": "Criar e gerenciar recursos que só são acessíveis por meio de um cliente conectado", "resourcesSearch": "Procurar recursos...", "resourceAdd": "Adicionar Recurso", "resourceErrorDelte": "Erro ao apagar recurso", @@ -155,9 +157,9 @@ "resourceMessageRemove": "Uma vez removido, o recurso não estará mais acessível. Todos os alvos associados ao recurso também serão removidos.", "resourceQuestionRemove": "Você tem certeza que deseja remover o recurso da organização?", "resourceHTTP": "Recurso HTTPS", - "resourceHTTPDescription": "O proxy solicita ao seu aplicativo via HTTPS usando um subdomínio ou domínio base.", + "resourceHTTPDescription": "O proxy solicita ao aplicativo via HTTPS usando um subdomínio ou domínio base.", "resourceRaw": "Recurso TCP/UDP bruto", - "resourceRawDescription": "O proxy solicita ao seu aplicativo sobre TCP/UDP usando um número de porta.", + "resourceRawDescription": "O proxy solicita ao aplicativo sobre TCP/UDP usando um número de porta. Isso só funciona quando os sites estão conectados a nós.", "resourceCreate": "Criar Recurso", "resourceCreateDescription": "Siga os passos abaixo para criar um novo recurso", "resourceSeeAll": "Ver todos os recursos", @@ -171,22 +173,22 @@ "noCountryFound": "Nenhum país encontrado.", "siteSelectionDescription": "Este site fornecerá conectividade ao destino.", "resourceType": "Tipo de Recurso", - "resourceTypeDescription": "Determine como você deseja aceder seu recurso", + "resourceTypeDescription": "Determine como acessar o recurso", "resourceHTTPSSettings": "Configurações de HTTPS", - "resourceHTTPSSettingsDescription": "Configure como seu recurso será acessado por HTTPS", + "resourceHTTPSSettingsDescription": "Configure como o recurso será acessado por HTTPS", "domainType": "Tipo de domínio", "subdomain": "Subdomínio", "baseDomain": "Domínio Base", - "subdomnainDescription": "O subdomínio onde seu recurso estará acessível.", + "subdomnainDescription": "O subdomínio onde o recurso será acessível.", "resourceRawSettings": "Configurações TCP/UDP", - "resourceRawSettingsDescription": "Configure como seu recurso será acessado sobre TCP/UDP. Você mapeia o recurso para uma porta no servidor Pangolin do hospedeiro, para que você possa acessar o recurso do server-public-ip:mapped-port.", + "resourceRawSettingsDescription": "Configurar como o recurso será acessado sobre TCP/UDP", "protocol": "Protocolo", "protocolSelect": "Selecione um protocolo", "resourcePortNumber": "Número da Porta", "resourcePortNumberDescription": "O número da porta externa para requisições de proxy.", "cancel": "cancelar", "resourceConfig": "Snippets de Configuração", - "resourceConfigDescription": "Copie e cole estes snippets de configuração para configurar o seu recurso TCP/UDP", + "resourceConfigDescription": "Copie e cole estes snippets de configuração para configurar o recurso TCP/UDP", "resourceAddEntrypoints": "Traefik: Adicionar pontos de entrada", "resourceExposePorts": "Gerbil: Expor Portas no Docker Compose", "resourceLearnRaw": "Aprenda como configurar os recursos TCP/UDP", @@ -202,14 +204,14 @@ "proxy": "Proxy", "internal": "Interno", "rules": "Regras", - "resourceSettingDescription": "Configure as configurações do seu recurso", + "resourceSettingDescription": "Configure as configurações do recurso", "resourceSetting": "Configurações do {resourceName}", - "alwaysAllow": "Sempre permitir", - "alwaysDeny": "Sempre negar", + "alwaysAllow": "Autenticação de bypass", + "alwaysDeny": "Bloquear Acesso", "passToAuth": "Passar para Autenticação", - "orgSettingsDescription": "Configurar as configurações gerais da sua organização", + "orgSettingsDescription": "Configurar configurações da organização", "orgGeneralSettings": "Configurações da organização", - "orgGeneralSettingsDescription": "Gerir os detalhes e a configuração da sua organização", + "orgGeneralSettingsDescription": "Gerenciar os detalhes e a configuração da organização", "saveGeneralSettings": "Guardar configurações gerais", "saveSettings": "Guardar Configurações", "orgDangerZone": "Zona de Perigo", @@ -232,7 +234,7 @@ "orgMissing": "ID da Organização Ausente", "orgMissingMessage": "Não é possível regenerar o convite sem um ID de organização.", "accessUsersManage": "Gerir Utilizadores", - "accessUsersDescription": "Convidar utilizadores e adicioná-los a funções para gerir o acesso à sua organização", + "accessUsersDescription": "Convidar e gerenciar usuários com acesso a esta organização", "accessUsersSearch": "Procurar utilizadores...", "accessUserCreate": "Criar Usuário", "accessUserRemove": "Remover utilizador", @@ -241,13 +243,13 @@ "role": "Funções", "nameRequired": "O nome é obrigatório", "accessRolesManage": "Gerir Funções", - "accessRolesDescription": "Configurar funções para gerir o acesso à sua organização", + "accessRolesDescription": "Criar e gerenciar funções para os usuários na organização", "accessRolesSearch": "Pesquisar funções...", "accessRolesAdd": "Adicionar função", "accessRoleDelete": "Excluir Papel", "description": "Descrição:", "inviteTitle": "Convites Abertos", - "inviteDescription": "Gerir seus convites para outros utilizadores", + "inviteDescription": "Gerenciar convites para outros usuários participarem da organização", "inviteSearch": "Procurar convites...", "minutes": "minutos", "hours": "horas", @@ -261,13 +263,13 @@ "apiKeysErrorCreate": "Erro ao criar chave API", "apiKeysErrorSetPermission": "Erro ao definir permissões", "apiKeysCreate": "Gerar Chave API", - "apiKeysCreateDescription": "Gerar uma nova chave API para sua organização", + "apiKeysCreateDescription": "Gerar uma nova chave de API para a organização", "apiKeysGeneralSettings": "Permissões", "apiKeysGeneralSettingsDescription": "Determine o que esta chave API pode fazer", - "apiKeysList": "Sua Chave API", - "apiKeysSave": "Guardar Sua Chave API", + "apiKeysList": "Nova chave de API", + "apiKeysSave": "Salvar a chave API", "apiKeysSaveDescription": "Você só poderá ver isto uma vez. Certifique-se de copiá-la para um local seguro.", - "apiKeysInfo": "Sua chave API é:", + "apiKeysInfo": "A chave API é:", "apiKeysConfirmCopy": "Eu copiei a chave API", "generate": "Gerar", "done": "Concluído", @@ -424,7 +426,7 @@ "userCreated": "Usuário criado", "userCreatedDescription": "O utilizador foi criado com sucesso.", "userTypeInternal": "Usuário Interno", - "userTypeInternalDescription": "Convidar um utilizador para se juntar à sua organização diretamente.", + "userTypeInternalDescription": "Convide um usuário para participar diretamente da organização.", "userTypeExternal": "Usuário Externo", "userTypeExternalDescription": "Criar um utilizador com um provedor de identidade externo.", "accessUserCreateDescription": "Siga os passos abaixo para criar um novo utilizador", @@ -436,6 +438,16 @@ "inviteEmailSent": "Enviar e-mail de convite para o utilizador", "inviteValid": "Válido Por", "selectDuration": "Selecionar duração", + "selectResource": "Selecionar Recurso", + "filterByResource": "Filtrar por Recurso", + "resetFilters": "Redefinir filtros", + "totalBlocked": "Solicitações bloqueadas pelo Pangolin", + "totalRequests": "Total de pedidos", + "requestsByCountry": "Solicitações por país", + "requestsByDay": "Requisições Por Dia", + "blocked": "Bloqueado", + "allowed": "Permitido", + "topCountries": "Principais países", "accessRoleSelect": "Selecionar função", "inviteEmailSentDescription": "Um e-mail foi enviado ao utilizador com o link de acesso abaixo. Eles devem aceder ao link para aceitar o convite.", "inviteSentDescription": "O utilizador foi convidado. Eles devem aceder ao link abaixo para aceitar o convite.", @@ -458,13 +470,13 @@ "accessControlsSubmit": "Guardar Controlos de Acesso", "roles": "Funções", "accessUsersRoles": "Gerir Utilizadores e Funções", - "accessUsersRolesDescription": "Convide utilizadores e adicione-os a funções para gerir o acesso à sua organização", + "accessUsersRolesDescription": "Convidar usuários e adicioná-los a funções para gerenciar o acesso à organização", "key": "Chave", "createdAt": "Criado Em", "proxyErrorInvalidHeader": "Valor do cabeçalho Host personalizado inválido. Use o formato de nome de domínio ou salve vazio para remover o cabeçalho Host personalizado.", "proxyErrorTls": "Nome do Servidor TLS inválido. Use o formato de nome de domínio ou salve vazio para remover o Nome do Servidor TLS.", "proxyEnableSSL": "Habilitar SSL", - "proxyEnableSSLDescription": "Habilitar criptografia SSL/TLS para conexões HTTPS seguras a seus alvos.", + "proxyEnableSSLDescription": "Habilitar criptografia SSL/TLS para conexões HTTPS seguras aos alvos.", "target": "Target", "configureTarget": "Configurar Alvos", "targetErrorFetch": "Falha ao buscar alvos", @@ -480,29 +492,29 @@ "targetsErrorUpdate": "Falha ao atualizar alvos", "targetsErrorUpdateDescription": "Ocorreu um erro ao atualizar alvos", "targetTlsUpdate": "Configurações TLS atualizadas", - "targetTlsUpdateDescription": "Suas configurações TLS foram atualizadas com sucesso", + "targetTlsUpdateDescription": "Configurações TLS foram atualizadas com sucesso", "targetErrorTlsUpdate": "Falha ao atualizar configurações TLS", "targetErrorTlsUpdateDescription": "Ocorreu um erro ao atualizar as configurações TLS", "proxyUpdated": "Configurações de proxy atualizadas", - "proxyUpdatedDescription": "Suas configurações de proxy foram atualizadas com sucesso", + "proxyUpdatedDescription": "Configurações de proxy atualizadas com sucesso", "proxyErrorUpdate": "Falha ao atualizar configurações de proxy", "proxyErrorUpdateDescription": "Ocorreu um erro ao atualizar as configurações de proxy", - "targetAddr": "IP / Nome do Host", + "targetAddr": "Servidor", "targetPort": "Porta", "targetProtocol": "Protocolo", "targetTlsSettings": "Configuração de conexão segura", - "targetTlsSettingsDescription": "Configurar configurações SSL/TLS para seu recurso", + "targetTlsSettingsDescription": "Configurar configurações SSL/TLS para o recurso", "targetTlsSettingsAdvanced": "Configurações TLS Avançadas", "targetTlsSni": "Nome do Servidor TLS", "targetTlsSniDescription": "O Nome do Servidor TLS para usar para SNI. Deixe vazio para usar o padrão.", "targetTlsSubmit": "Guardar Configurações", "targets": "Configuração de Alvos", - "targetsDescription": "Configure alvos para rotear tráfego para seus serviços de backend", + "targetsDescription": "Configurar alvos para tráfego de rota para serviços de backend", "targetStickySessions": "Ativar Sessões Persistentes", "targetStickySessionsDescription": "Manter conexões no mesmo alvo backend durante toda a sessão.", "methodSelect": "Selecionar método", "targetSubmit": "Adicionar Alvo", - "targetNoOne": "Este recurso não tem nenhum alvo. Adicione um alvo para configurar para onde enviar solicitações para sua área de administração.", + "targetNoOne": "Este recurso não tem nenhum alvo. Adicione um alvo para configurar para onde enviar solicitações para o backend.", "targetNoOneDescription": "Adicionar mais de um alvo acima habilitará o balanceamento de carga.", "targetsSubmit": "Guardar Alvos", "addTarget": "Adicionar Alvo", @@ -516,9 +528,11 @@ "targetCreatedDescription": "O alvo foi criado com sucesso", "targetErrorCreate": "Falha ao criar destino", "targetErrorCreateDescription": "Ocorreu um erro ao criar o destino", + "tlsServerName": "Nome do Servidor TLS", + "tlsServerNameDescription": "O nome do servidor TLS a ser usado para SNI", "save": "Guardar", "proxyAdditional": "Configurações Adicionais de Proxy", - "proxyAdditionalDescription": "Configure como seu recurso lida com configurações de proxy", + "proxyAdditionalDescription": "Configurar como o recurso lida com as configurações de proxy", "proxyCustomHeader": "Cabeçalho Host Personalizado", "proxyCustomHeaderDescription": "O cabeçalho host para definir ao fazer proxy de requisições. Deixe vazio para usar o padrão.", "proxyAdditionalSubmit": "Guardar Configurações de Proxy", @@ -558,7 +572,7 @@ "rulesMatchType": "Tipo de Correspondência", "value": "Valor", "rulesAbout": "Sobre Regras", - "rulesAboutDescription": "As regras permitem controlar o acesso ao seu recurso com base em um conjunto de critérios. Você pode criar regras para permitir ou negar acesso com base no endereço IP ou caminho URL.", + "rulesAboutDescription": "Regras permitem que você controle o acesso ao recurso com base em um conjunto de critérios. Você pode criar regras para permitir ou negar acesso baseado no endereço IP ou caminho de URL.", "rulesActions": "Ações", "rulesActionAlwaysAllow": "Sempre Permitir: Ignorar todos os métodos de autenticação", "rulesActionAlwaysDeny": "Sempre Negar: Bloquear todas as requisições; nenhuma autenticação pode ser tentada", @@ -570,7 +584,7 @@ "rulesEnable": "Ativar Regras", "rulesEnableDescription": "Ativar ou desativar avaliação de regras para este recurso", "rulesResource": "Configuração de Regras do Recurso", - "rulesResourceDescription": "Configure regras para controlar o acesso ao seu recurso", + "rulesResourceDescription": "Configurar regras para controlar o acesso ao recurso", "ruleSubmit": "Adicionar Regra", "rulesNoOne": "Sem regras. Adicione uma regra usando o formulário.", "rulesOrder": "As regras são avaliadas por prioridade em ordem ascendente.", @@ -586,7 +600,7 @@ "none": "Nenhum", "unknown": "Desconhecido", "resources": "Recursos", - "resourcesDescription": "Recursos são proxies para aplicações executando em sua rede privada. Crie um recurso para qualquer serviço HTTP/HTTPS ou TCP/UDP bruto em sua rede privada. Cada recurso deve estar conectado a um site para habilitar conectividade privada e segura através de um túnel WireGuard criptografado.", + "resourcesDescription": "Os recursos são proxies para aplicativos em execução na rede privada. Crie um recurso para qualquer serviço HTTP/HTTPS ou TCP/UDP bruto na sua rede privada. Cada recurso deve ser conectado a um site para ativar a conectividade privada e segura através de um túnel do WireGuard criptografado.", "resourcesWireGuardConnect": "Conectividade segura com criptografia WireGuard", "resourcesMultipleAuthenticationMethods": "Configure múltiplos métodos de autenticação", "resourcesUsersRolesAccess": "Controle de acesso baseado em utilizadores e funções", @@ -597,7 +611,7 @@ "resourceSelect": "Selecionar recurso", "shareLinks": "Links de Compartilhamento", "share": "Links Compartilháveis", - "shareDescription2": "Crie links compartilháveis para seus recursos. Os links fornecem acesso temporário ou ilimitado ao seu recurso. Você pode configurar a duração da expiração do link quando o criar.", + "shareDescription2": "Crie links compartilháveis para recursos. Links fornecem acesso temporário ou ilimitado ao seu recurso. Você pode configurar a duração de expiração do link quando você criar um.", "shareEasyCreate": "Fácil de criar e compartilhar", "shareConfigurableExpirationDuration": "Duração de expiração configurável", "shareSecureAndRevocable": "Seguro e revogável", @@ -607,19 +621,19 @@ "unknownCommand": "Comando desconhecido", "newtErrorFetchReleases": "Falha ao buscar informações da versão: {err}", "newtErrorFetchLatest": "Erro ao buscar última versão: {err}", - "newtEndpoint": "Endpoint Newt", - "newtId": "ID Newt", - "newtSecretKey": "Chave Secreta Newt", + "newtEndpoint": "Endpoint", + "newtId": "ID", + "newtSecretKey": "Chave Secreta", "architecture": "Arquitetura", "sites": "sites", - "siteWgAnyClients": "Use qualquer cliente WireGuard para conectar. Você terá que endereçar seus recursos internos usando o IP do par.", + "siteWgAnyClients": "Use qualquer cliente do WireGuard para se conectar. Você terá que endereçar recursos internos usando o IP de pares.", "siteWgCompatibleAllClients": "Compatível com todos os clientes WireGuard", "siteWgManualConfigurationRequired": "Configuração manual necessária", "userErrorNotAdminOrOwner": "Usuário não é administrador ou proprietário", "pangolinSettings": "Configurações - Pangolin", "accessRoleYour": "Sua função:", - "accessRoleSelect2": "Selecionar uma função", - "accessUserSelect": "Selecionar um utilizador", + "accessRoleSelect2": "Selecionar funções", + "accessUserSelect": "Selecionar os usuários", "otpEmailEnter": "Digite um e-mail", "otpEmailEnterDescription": "Pressione enter para adicionar um e-mail após digitá-lo no campo de entrada.", "otpEmailErrorInvalid": "Endereço de e-mail inválido. O caractere curinga (*) deve ser a parte local inteira.", @@ -671,7 +685,7 @@ "resourcePincodeSetupTitle": "Definir Código PIN", "resourcePincodeSetupTitleDescription": "Defina um código PIN para proteger este recurso", "resourceRoleDescription": "Administradores sempre podem aceder este recurso.", - "resourceUsersRoles": "Utilizadores e Funções", + "resourceUsersRoles": "Controlos de Acesso", "resourceUsersRolesDescription": "Configure quais utilizadores e funções podem visitar este recurso", "resourceUsersRolesSubmit": "Guardar Utilizadores e Funções", "resourceWhitelistSave": "Salvo com sucesso", @@ -702,6 +716,7 @@ "resourceTransferSubmit": "Transferir Recurso", "siteDestination": "Site de Destino", "searchSites": "Pesquisar sites", + "countries": "Países", "accessRoleCreate": "Criar Função", "accessRoleCreateDescription": "Crie uma nova função para agrupar utilizadores e gerir suas permissões.", "accessRoleCreateSubmit": "Criar Função", @@ -766,15 +781,15 @@ "idpOidcConfigure": "Configuração OAuth2/OIDC", "idpOidcConfigureDescription": "Configurar os endpoints e credenciais do provedor OAuth2/OIDC", "idpClientId": "ID do Cliente", - "idpClientIdDescription": "O ID do cliente OAuth2 do seu provedor de identidade", + "idpClientIdDescription": "O ID de cliente OAuth2 do provedor de identidade", "idpClientSecret": "Segredo do Cliente", - "idpClientSecretDescription": "O segredo do cliente OAuth2 do seu provedor de identidade", + "idpClientSecretDescription": "O segredo de cliente OAuth2 do provedor de identidade", "idpAuthUrl": "URL de Autorização", "idpAuthUrlDescription": "O URL do endpoint de autorização OAuth2", "idpTokenUrl": "URL do Token", "idpTokenUrlDescription": "O URL do endpoint do token OAuth2", "idpOidcConfigureAlert": "Informação Importante", - "idpOidcConfigureAlertDescription": "Após criar o provedor de identidade, será necessário configurar o URL de retorno nas configurações do seu provedor de identidade. O URL de retorno será fornecido após a criação bem-sucedida.", + "idpOidcConfigureAlertDescription": "Depois de criar o provedor de identidade, você precisará configurar o URL de retorno de chamada nas configurações do provedor de identidade. A URL de retorno de chamada será fornecida após a criação com sucesso.", "idpToken": "Configuração do Token", "idpTokenDescription": "Configurar como extrair informações do utilizador do token ID", "idpJmespathAbout": "Sobre JMESPath", @@ -791,7 +806,7 @@ "idpSubmit": "Criar Provedor de Identidade", "orgPolicies": "Políticas da Organização", "idpSettings": "Configurações de {idpName}", - "idpCreateSettingsDescription": "Configurar as definições para o seu provedor de identidade", + "idpCreateSettingsDescription": "Configure as configurações para o provedor de identidade", "roleMapping": "Mapeamento de Funções", "orgMapping": "Mapeamento da Organização", "orgPoliciesSearch": "Pesquisar políticas da organização...", @@ -826,7 +841,7 @@ "idpUpdatedDescription": "Provedor de identidade atualizado com sucesso", "redirectUrl": "URL de Redirecionamento", "redirectUrlAbout": "Sobre o URL de Redirecionamento", - "redirectUrlAboutDescription": "Este é o URL para o qual os utilizadores serão redirecionados após a autenticação. Precisa configurar este URL nas configurações do seu provedor de identidade.", + "redirectUrlAboutDescription": "Essa é a URL para a qual os usuários serão redirecionados após a autenticação. Você precisa configurar esta URL nas configurações do provedor de identidade.", "pangolinAuth": "Autenticação - Pangolin", "verificationCodeLengthRequirements": "O seu código de verificação deve ter 8 caracteres.", "errorOccurred": "Ocorreu um erro", @@ -909,6 +924,10 @@ "passwordResetSent": "Enviaremos um código de redefinição de palavra-passe para este email.", "passwordResetCode": "Código de Redefinição", "passwordResetCodeDescription": "Verifique o seu email para obter o código de redefinição.", + "generatePasswordResetCode": "Gerar código de redefinição de senha", + "passwordResetCodeGenerated": "Código de redefinição de senha gerado", + "passwordResetCodeGeneratedDescription": "Compartilhe este código com o usuário. Eles podem usá-lo para redefinir sua senha.", + "passwordResetUrl": "Reset URL", "passwordNew": "Nova Palavra-passe", "passwordNewConfirm": "Confirmar Nova Palavra-passe", "changePassword": "Mudar a senha", @@ -926,6 +945,9 @@ "pincodeAuth": "Código do Autenticador", "pincodeSubmit2": "Submeter Código", "passwordResetSubmit": "Solicitar Redefinição", + "passwordResetAlreadyHaveCode": "Digitar Código de Redefinição de Senha", + "passwordResetSmtpRequired": "Por favor, contate o administrador", + "passwordResetSmtpRequiredDescription": "É necessário um código de redefinição de senha para redefinir sua senha. Por favor, contate o administrador para assistência.", "passwordBack": "Voltar à Palavra-passe", "loginBack": "Voltar ao início de sessão", "signup": "Registar", @@ -1091,12 +1113,15 @@ "actionListSiteResources": "Listar Recursos do Site", "actionUpdateSiteResource": "Atualizar Recurso do Site", "actionListInvitations": "Listar Convites", + "actionExportLogs": "Exportar logs", + "actionViewLogs": "Visualizar registros", "noneSelected": "Nenhum selecionado", "orgNotFound2": "Nenhuma organização encontrada.", "searchProgress": "Pesquisar...", "create": "Criar", "orgs": "Organizações", "loginError": "Ocorreu um erro ao iniciar sessão", + "loginRequiredForDevice": "É necessário entrar para autenticar seu dispositivo.", "passwordForgot": "Esqueceu a sua palavra-passe?", "otpAuth": "Autenticação de Dois Fatores", "otpAuthDescription": "Insira o código da sua aplicação de autenticação ou um dos seus códigos de backup de uso único.", @@ -1151,19 +1176,29 @@ "sidebarHome": "Residencial", "sidebarSites": "sites", "sidebarResources": "Recursos", + "sidebarProxyResources": "Público", + "sidebarClientResources": "Privado", "sidebarAccessControl": "Controle de Acesso", + "sidebarLogsAndAnalytics": "Registros e Análises", "sidebarUsers": "Utilizadores", + "sidebarAdmin": "Administrador", "sidebarInvitations": "Convites", "sidebarRoles": "Papéis", - "sidebarShareableLinks": "Links compartilháveis", + "sidebarShareableLinks": "Links", "sidebarApiKeys": "Chaves API", "sidebarSettings": "Configurações", "sidebarAllUsers": "Todos os utilizadores", "sidebarIdentityProviders": "Provedores de identidade", "sidebarLicense": "Tipo:", "sidebarClients": "Clientes", + "sidebarUserDevices": "Utilizadores", + "sidebarMachineClients": "Máquinas", "sidebarDomains": "Domínios", + "sidebarGeneral": "Gerais", + "sidebarLogAndAnalytics": "Registo & Análise", "sidebarBluePrints": "Diagramas", + "sidebarOrganization": "Organização", + "sidebarLogsAnalytics": "Análises", "blueprints": "Diagramas", "blueprintsDescription": "Aplicar configurações declarativas e ver execuções anteriores", "blueprintAdd": "Adicionar Diagrama", @@ -1174,7 +1209,7 @@ "blueprintDetailsDescription": "Veja o resultado do diagrama aplicado e todos os erros que ocorreram", "blueprintInfo": "Informação do Diagrama", "message": "mensagem", - "blueprintContentsDescription": "Defina o conteúdo YAML descrevendo a sua infraestrutura", + "blueprintContentsDescription": "Definir o conteúdo YAML descrevendo a infraestrutura", "blueprintErrorCreateDescription": "Ocorreu um erro ao aplicar o diagrama", "blueprintErrorCreate": "Erro ao criar diagrama", "searchBlueprintProgress": "Pesquisar diagramas...", @@ -1230,15 +1265,15 @@ "loading": "Carregando", "restart": "Reiniciar", "domains": "Domínios", - "domainsDescription": "Gerir domínios para sua organização", + "domainsDescription": "Criar e gerenciar domínios disponíveis na organização", "domainsSearch": "Pesquisar domínios...", "domainAdd": "Adicionar Domínio", - "domainAddDescription": "Registre um novo domínio com sua organização", + "domainAddDescription": "Registrar um novo domínio com a organização", "domainCreate": "Criar Domínio", "domainCreatedDescription": "Domínio criado com sucesso", "domainDeletedDescription": "Domínio deletado com sucesso", - "domainQuestionRemove": "Tem certeza de que deseja remover o domínio da sua conta?", - "domainMessageRemove": "Uma vez removido, o domínio não estará mais associado à sua conta.", + "domainQuestionRemove": "Tem certeza de que deseja excluir o domínio?", + "domainMessageRemove": "Uma vez removido, o domínio não será mais associado à organização.", "domainConfirmDelete": "Confirmar Exclusão de Domínio", "domainDelete": "Excluir Domínio", "domain": "Domínio", @@ -1257,7 +1292,7 @@ "pending": "Pendente", "sidebarBilling": "Faturamento", "billing": "Faturamento", - "orgBillingDescription": "Gerir suas informações de faturação e assinaturas", + "orgBillingDescription": "Gerenciar informações e assinaturas de cobrança", "github": "GitHub", "pangolinHosted": "Hospedagem Pangolin", "fossorial": "Fossorial", @@ -1285,9 +1320,9 @@ "productUpdateTitle": "Atualizações de Produto", "productUpdateEmpty": "Não há atualizações", "dismissAll": "Recusar tudo", - "pangolinUpdateAvailable": "Nova versão disponível", + "pangolinUpdateAvailable": "Atualização disponível", "pangolinUpdateAvailableInfo": "A versão {version} está pronta para ser instalada", - "pangolinUpdateAvailableReleaseNotes": "Ver notas de lançamento", + "pangolinUpdateAvailableReleaseNotes": "Ver notas de versão", "newtUpdateAvailable": "Nova Atualização Disponível", "newtUpdateAvailableInfo": "Uma nova versão do Newt está disponível. Atualize para a versão mais recente para uma melhor experiência.", "domainPickerEnterDomain": "Domínio", @@ -1300,7 +1335,7 @@ "domainPickerSortAsc": "A-Z", "domainPickerSortDesc": "Z-A", "domainPickerCheckingAvailability": "Verificando disponibilidade...", - "domainPickerNoMatchingDomains": "Nenhum domínio correspondente encontrado. Tente um domínio diferente ou verifique as configurações do domínio da sua organização.", + "domainPickerNoMatchingDomains": "Nenhum domínio correspondente encontrado. Tente um domínio diferente ou verifique as configurações do domínio da organização.", "domainPickerOrganizationDomains": "Domínios da Organização", "domainPickerProvidedDomains": "Domínios Fornecidos", "domainPickerSubdomain": "Subdomínio: {subdomain}", @@ -1334,7 +1369,7 @@ "billingModifySubscription": "Modificar Assinatura", "billingStartSubscription": "Iniciar Assinatura", "billingRecurringCharge": "Cobrança Recorrente", - "billingManageSubscriptionSettings": "Gerenciar as configurações e preferências da sua assinatura", + "billingManageSubscriptionSettings": "Gerenciar configurações de assinatura e preferências", "billingNoActiveSubscription": "Você não tem uma assinatura ativa. Inicie sua assinatura para aumentar os limites de uso.", "billingFailedToLoadSubscription": "Falha ao carregar assinatura", "billingFailedToLoadUsage": "Falha ao carregar uso", @@ -1345,9 +1380,9 @@ "billingPortalError": "Erro do Portal", "billingDataUsageInfo": "Você é cobrado por todos os dados transferidos através de seus túneis seguros quando conectado à nuvem. Isso inclui o tráfego de entrada e saída em todos os seus sites. Quando você atingir o seu limite, seus sites desconectarão até que você atualize seu plano ou reduza o uso. Os dados não serão cobrados ao usar os nós.", "billingOnlineTimeInfo": "Cobrança de acordo com o tempo em que seus sites permanecem conectados à nuvem. Por exemplo, 44,640 minutos é igual a um site que roda 24/7 para um mês inteiro. Quando você atinge o seu limite, seus sites desconectarão até que você faça o upgrade do seu plano ou reduza o uso. O tempo não é cobrado ao usar nós.", - "billingUsersInfo": "Você será cobrado por cada usuário em sua organização. A cobrança é calculada diariamente com base no número de contas de usuário ativas em sua organização.", - "billingDomainInfo": "Você será cobrado por cada domínio em sua organização. A cobrança é calculada diariamente com base no número de contas de domínio ativas em sua organização.", - "billingRemoteExitNodesInfo": "Você será cobrado por cada Nodo gerenciado em sua organização. A cobrança é calculada diariamente com base no número de Nodos gerenciados ativos em sua organização.", + "billingUsersInfo": "A cobrança é feita por cada usuário na organização. A cobrança é feita diariamente com base no número de contas de usuário ativas na sua organização.", + "billingDomainInfo": "A cobrança é feita por cada domínio da organização. A cobrança é feita diariamente com base no número de contas de domínio ativas na sua organização.", + "billingRemoteExitNodesInfo": "Você é cobrado por cada nó gerenciado na organização. A cobrança é calculada diariamente com base no número de nós gerenciados ativos em sua organização.", "domainNotFound": "Domínio Não Encontrado", "domainNotFoundDescription": "Este recurso está desativado porque o domínio não existe mais em nosso sistema. Defina um novo domínio para este recurso.", "failed": "Falhou", @@ -1430,29 +1465,32 @@ "and": "e", "privacyPolicy": "política de privacidade" }, + "signUpMarketing": { + "keepMeInTheLoop": "Mantenha-me à disposição com notícias, atualizações e novos recursos por e-mail." + }, "siteRequired": "Site é obrigatório.", "olmTunnel": "Olm Tunnel", "olmTunnelDescription": "Use Olm para conectividade do cliente", "errorCreatingClient": "Erro ao criar cliente", "clientDefaultsNotFound": "Padrões do cliente não encontrados", "createClient": "Criar Cliente", - "createClientDescription": "Crie um novo cliente para conectar aos seus sites", + "createClientDescription": "Criar um novo cliente para acessar recursos privados", "seeAllClients": "Ver Todos os Clientes", "clientInformation": "Informações do Cliente", "clientNamePlaceholder": "Nome do cliente", "address": "Endereço", "subnetPlaceholder": "Sub-rede", - "addressDescription": "O endereço que este cliente usará para conectividade", + "addressDescription": "O endereço interno do cliente. Deve estar dentro da sub-rede da organização.", "selectSites": "Selecionar sites", "sitesDescription": "O cliente terá conectividade com os sites selecionados", "clientInstallOlm": "Instalar Olm", "clientInstallOlmDescription": "Execute o Olm em seu sistema", - "clientOlmCredentials": "Credenciais Olm", - "clientOlmCredentialsDescription": "É assim que Olm se autenticará com o servidor", - "olmEndpoint": "Endpoint Olm", - "olmId": "ID Olm", - "olmSecretKey": "Chave Secreta Olm", - "clientCredentialsSave": "Salve suas Credenciais", + "clientOlmCredentials": "Credenciais", + "clientOlmCredentialsDescription": "É assim que o cliente irá se autenticar com o servidor", + "olmEndpoint": "Endpoint", + "olmId": "ID", + "olmSecretKey": "Chave Secreta", + "clientCredentialsSave": "Salvar as Credenciais", "clientCredentialsSaveDescription": "Você só poderá ver isto uma vez. Certifique-se de copiá-las para um local seguro.", "generalSettingsDescription": "Configure as configurações gerais para este cliente", "clientUpdated": "Cliente atualizado", @@ -1463,9 +1501,7 @@ "sitesFetchError": "Ocorreu um erro ao buscar sites.", "olmErrorFetchReleases": "Ocorreu um erro ao buscar lançamentos do Olm.", "olmErrorFetchLatest": "Ocorreu um erro ao buscar o lançamento mais recente do Olm.", - "remoteSubnets": "Sub-redes Remotas", "enterCidrRange": "Insira o intervalo CIDR", - "remoteSubnetsDescription": "Adicionar intervalos CIDR que podem ser acessados deste site remotamente usando clientes. Use um formato como 10.0.0.0/24. Isso SOMENTE se aplica à conectividade do cliente VPN.", "resourceEnableProxy": "Ativar Proxy Público", "resourceEnableProxyDescription": "Permite proxy público para este recurso. Isso permite o acesso ao recurso de fora da rede através da nuvem em uma porta aberta. Requer configuração do Traefik.", "externalProxyEnabled": "Proxy Externo Habilitado", @@ -1483,14 +1519,15 @@ "enableHealthChecksDescription": "Monitore a saúde deste alvo. Você pode monitorar um ponto de extremidade diferente do alvo, se necessário.", "healthScheme": "Método", "healthSelectScheme": "Selecione o Método", + "healthCheckPortInvalid": "A porta do exame de saúde deve estar entre 1 e 65535", "healthCheckPath": "Caminho", "healthHostname": "IP / Nome do Host", "healthPort": "Porta", "healthCheckPathDescription": "O caminho para verificar o estado de saúde.", - "healthyIntervalSeconds": "Intervalo Saudável", - "unhealthyIntervalSeconds": "Intervalo Não Saudável", + "healthyIntervalSeconds": "Intervalo Saudável (seg)", + "unhealthyIntervalSeconds": "Intervalo Insalubre (seg)", "IntervalSeconds": "Intervalo Saudável", - "timeoutSeconds": "Tempo Limite", + "timeoutSeconds": "Tempo limite (seg)", "timeIsInSeconds": "O tempo está em segundos", "retryAttempts": "Tentativas de Repetição", "expectedResponseCodes": "Códigos de Resposta Esperados", @@ -1526,12 +1563,12 @@ "resourceEditDomain": "Editar Domínio", "siteName": "Nome do Site", "proxyPort": "Porta", - "resourcesTableProxyResources": "Recursos de Proxy", - "resourcesTableClientResources": "Recursos do Cliente", + "resourcesTableProxyResources": "Público", + "resourcesTableClientResources": "Privado", "resourcesTableNoProxyResourcesFound": "Nenhum recurso de proxy encontrado.", "resourcesTableNoInternalResourcesFound": "Nenhum recurso interno encontrado.", "resourcesTableDestination": "Destino", - "resourcesTableTheseResourcesForUseWith": "Esses recursos são para uso com", + "resourcesTableAlias": "Alias", "resourcesTableClients": "Clientes", "resourcesTableAndOnlyAccessibleInternally": "e são acessíveis apenas internamente quando conectados com um cliente.", "resourcesTableNoTargets": "Nenhum alvo", @@ -1540,8 +1577,8 @@ "resourcesTableOffline": "Desconectado", "resourcesTableUnknown": "Desconhecido", "resourcesTableNotMonitored": "Não monitorado", - "editInternalResourceDialogEditClientResource": "Editar Recurso do Cliente", - "editInternalResourceDialogUpdateResourceProperties": "Atualize as propriedades do recurso e a configuração do alvo para {resourceName}.", + "editInternalResourceDialogEditClientResource": "Editar Recurso Privado", + "editInternalResourceDialogUpdateResourceProperties": "Atualizar as configurações de recursos e controles de acesso para {resourceName}", "editInternalResourceDialogResourceProperties": "Propriedades do Recurso", "editInternalResourceDialogName": "Nome", "editInternalResourceDialogProtocol": "Protocolo", @@ -1560,11 +1597,22 @@ "editInternalResourceDialogInvalidIPAddressFormat": "Formato de endereço IP inválido", "editInternalResourceDialogDestinationPortMin": "Porta de destino deve ser pelo menos 1", "editInternalResourceDialogDestinationPortMax": "Porta de destino deve ser inferior a 65536", + "editInternalResourceDialogPortModeRequired": "Protocolo, porta de proxy e porta de destino são necessários para o modo de porto", + "editInternalResourceDialogMode": "Modo", + "editInternalResourceDialogModePort": "Porta", + "editInternalResourceDialogModeHost": "Servidor", + "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogDestination": "Destino", + "editInternalResourceDialogDestinationHostDescription": "O endereço IP ou o nome do host do recurso na rede do site.", + "editInternalResourceDialogDestinationIPDescription": "O IP ou endereço do hostname do recurso na rede do site.", + "editInternalResourceDialogDestinationCidrDescription": "A faixa CIDR do recurso na rede do site.", + "editInternalResourceDialogAlias": "Alias", + "editInternalResourceDialogAliasDescription": "Um alias de DNS interno opcional para este recurso.", "createInternalResourceDialogNoSitesAvailable": "Nenhum Site Disponível", "createInternalResourceDialogNoSitesAvailableDescription": "Você precisa ter pelo menos um site Newt com uma sub-rede configurada para criar recursos internos.", "createInternalResourceDialogClose": "Fechar", - "createInternalResourceDialogCreateClientResource": "Criar Recurso do Cliente", - "createInternalResourceDialogCreateClientResourceDescription": "Crie um novo recurso que estará acessível aos clientes conectados ao site selecionado.", + "createInternalResourceDialogCreateClientResource": "Criar Recurso Privado", + "createInternalResourceDialogCreateClientResourceDescription": "Criar um novo recurso que só será acessível para clientes conectados à organização", "createInternalResourceDialogResourceProperties": "Propriedades do Recurso", "createInternalResourceDialogName": "Nome", "createInternalResourceDialogSite": "Site", @@ -1593,11 +1641,22 @@ "createInternalResourceDialogInvalidIPAddressFormat": "Formato de endereço IP inválido", "createInternalResourceDialogDestinationPortMin": "Porta de destino deve ser pelo menos 1", "createInternalResourceDialogDestinationPortMax": "Porta de destino deve ser inferior a 65536", + "createInternalResourceDialogPortModeRequired": "Protocolo, porta de proxy e porta de destino são necessários para o modo de porto", + "createInternalResourceDialogMode": "Modo", + "createInternalResourceDialogModePort": "Porta", + "createInternalResourceDialogModeHost": "Servidor", + "createInternalResourceDialogModeCidr": "CIDR", + "createInternalResourceDialogDestination": "Destino", + "createInternalResourceDialogDestinationHostDescription": "O endereço IP ou o nome do host do recurso na rede do site.", + "createInternalResourceDialogDestinationCidrDescription": "A faixa CIDR do recurso na rede do site.", + "createInternalResourceDialogAlias": "Alias", + "createInternalResourceDialogAliasDescription": "Um alias de DNS interno opcional para este recurso.", "siteConfiguration": "Configuração", "siteAcceptClientConnections": "Aceitar Conexões de Clientes", - "siteAcceptClientConnectionsDescription": "Permitir que outros dispositivos se conectem através desta instância Newt como um gateway usando clientes.", - "siteAddress": "Endereço do Site", - "siteAddressDescription": "Especificar o endereço IP do host para que os clientes se conectem. Este é o endereço interno do site na rede Pangolin para os clientes endereçarem. Deve estar dentro da sub-rede da Organização.", + "siteAcceptClientConnectionsDescription": "Permitir que dispositivos de usuário e clientes acessem recursos neste site. Isso pode ser alterado mais tarde.", + "siteAddress": "Endereço do Site (Avançado)", + "siteAddressDescription": "Endereço interno do site. Deve estar dentro da sub-rede da organização.", + "siteNameDescription": "O nome de exibição do site que pode ser alterado mais tarde.", "autoLoginExternalIdp": "Login Automático com IDP Externo", "autoLoginExternalIdpDescription": "Redirecionar imediatamente o utilizador para o IDP externo para autenticação.", "selectIdp": "Selecionar IDP", @@ -1611,7 +1670,7 @@ "autoLoginErrorNoRedirectUrl": "Nenhum URL de redirecionamento recebido do provedor de identidade.", "autoLoginErrorGeneratingUrl": "Falha ao gerar URL de autenticação.", "remoteExitNodeManageRemoteExitNodes": "Nós remotos", - "remoteExitNodeDescription": "Auto-hospedar um ou mais nós remotos para estender sua conectividade de rede e reduzir a dependência da nuvem", + "remoteExitNodeDescription": "Auto-hospedar um ou mais nós remotos para estender a conectividade de rede e reduzir a dependência da nuvem", "remoteExitNodes": "Nós", "searchRemoteExitNodes": "Buscar nós...", "remoteExitNodeAdd": "Adicionar node", @@ -1623,11 +1682,11 @@ "sidebarRemoteExitNodes": "Nós remotos", "remoteExitNodeCreate": { "title": "Criar nó", - "description": "Crie um novo nó para estender sua conectividade de rede", + "description": "Crie um novo nó para estender a conectividade de rede", "viewAllButton": "Ver Todos os Nós", "strategy": { "title": "Estratégia de Criação", - "description": "Escolha isto para configurar o seu nó manualmente ou gerar novas credenciais.", + "description": "Escolha esta opção para configurar o nó manualmente ou gerar novas credenciais.", "adopt": { "title": "Adotar Nodo", "description": "Escolha isto se você já tem credenciais para o nó." @@ -1648,7 +1707,7 @@ }, "generate": { "title": "Credenciais Geradas", - "description": "Use estas credenciais geradas para configurar o seu nó", + "description": "Use estas credenciais geradas para configurar o nó", "nodeIdTitle": "Nó ID", "secretTitle": "Chave Secreta", "saveCredentialsTitle": "Adicionar Credenciais à Configuração", @@ -1724,16 +1783,16 @@ "idpTypeLabel": "Tipo de provedor de identidade", "roleMappingExpressionPlaceholder": "ex.: Contem (grupos, 'administrador') && 'Administrador' 「'Membro'", "idpGoogleConfiguration": "Configuração do Google", - "idpGoogleConfigurationDescription": "Configurar suas credenciais do Google OAuth2", - "idpGoogleClientIdDescription": "Seu ID de Cliente OAuth2 do Google", - "idpGoogleClientSecretDescription": "Seu Segredo de Cliente OAuth2 do Google", + "idpGoogleConfigurationDescription": "Configurar as credenciais do Google OAuth2", + "idpGoogleClientIdDescription": "Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Segredo de cliente OAuth2 do Google", "idpAzureConfiguration": "Configuração de ID do Azure Entra", - "idpAzureConfigurationDescription": "Configure as suas credenciais do Azure Entra ID OAuth2", + "idpAzureConfigurationDescription": "Configurar credenciais do Azure Entra ID OAuth2", "idpTenantId": "ID do Inquilino", - "idpTenantIdPlaceholder": "seu-tenente-id", - "idpAzureTenantIdDescription": "Seu ID do tenant Azure (encontrado na visão geral do diretório ativo Azure)", - "idpAzureClientIdDescription": "Seu ID de Cliente de Registro do App Azure", - "idpAzureClientSecretDescription": "Seu segredo de cliente de registro de aplicativos Azure", + "idpTenantIdPlaceholder": "tenant-id", + "idpAzureTenantIdDescription": "ID do tenant Azure (encontrado na visão geral do diretório ativo Azure)", + "idpAzureClientIdDescription": "ID cliente de registro do aplicativo Azure", + "idpAzureClientSecretDescription": "Segredo cliente de registro do Azure App", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", @@ -1741,14 +1800,14 @@ "idpGoogleConfigurationTitle": "Configuração do Google", "idpAzureConfigurationTitle": "Configuração de ID do Azure Entra", "idpTenantIdLabel": "ID do Inquilino", - "idpAzureClientIdDescription2": "Seu ID de Cliente de Registro do App Azure", - "idpAzureClientSecretDescription2": "Seu segredo de cliente de registro de aplicativos Azure", + "idpAzureClientIdDescription2": "ID cliente de registro do aplicativo Azure", + "idpAzureClientSecretDescription2": "Segredo cliente de registro do Azure App", "idpGoogleDescription": "Provedor Google OAuth2/OIDC", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", "subnet": "Sub-rede", "subnetDescription": "A sub-rede para a configuração de rede dessa organização.", "authPage": "Página de Autenticação", - "authPageDescription": "Configurar a página de autenticação para sua organização", + "authPageDescription": "Configurar a página de autenticação para a organização", "authPageDomain": "Domínio de Página Autenticação", "noDomainSet": "Nenhum domínio definido", "changeDomain": "Alterar domínio", @@ -1758,7 +1817,7 @@ "setAuthPageDomain": "Definir domínio da página de autenticação", "failedToFetchCertificate": "Falha ao buscar o certificado", "failedToRestartCertificate": "Falha ao reiniciar o certificado", - "addDomainToEnableCustomAuthPages": "Adicione um domínio para habilitar páginas de autenticação personalizadas para sua organização", + "addDomainToEnableCustomAuthPages": "Adicione um domínio para habilitar páginas de autenticação personalizadas para a organização", "selectDomainForOrgAuthPage": "Selecione um domínio para a página de autenticação da organização", "domainPickerProvidedDomain": "Domínio fornecido", "domainPickerFreeProvidedDomain": "Domínio fornecido grátis", @@ -1773,7 +1832,7 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" não pôde ser válido para {domain}.", "domainPickerSubdomainSanitized": "Subdomínio banalizado", "domainPickerSubdomainCorrected": "\"{sub}\" foi corrigido para \"{sanitized}\"", - "orgAuthSignInTitle": "Entrar na sua organização", + "orgAuthSignInTitle": "Fazer login na organização", "orgAuthChooseIdpDescription": "Escolha o seu provedor de identidade para continuar", "orgAuthNoIdpConfigured": "Esta organização não tem nenhum provedor de identidade configurado. Você pode entrar com a identidade do seu Pangolin.", "orgAuthSignInWithPangolin": "Entrar com o Pangolin", @@ -1791,7 +1850,7 @@ "enableTwoFactorAuthentication": "Ativar autenticação de dois fatores", "completeSecuritySteps": "Passos de segurança completos", "securitySettings": "Configurações de Segurança", - "securitySettingsDescription": "Configurar políticas de segurança para a sua organização", + "securitySettingsDescription": "Configurar políticas de segurança para a organização", "requireTwoFactorForAllUsers": "Exigir autenticação dupla para todos os usuários", "requireTwoFactorDescription": "Quando ativado, todos os usuários internos nesta organização devem ter a autenticação de dois fatores ativada para acessar a organização.", "requireTwoFactorDisabledDescription": "Este recurso requer uma licença válida (Enterprise) ou assinatura ativa (SaaS)", @@ -1854,8 +1913,12 @@ "enterpriseEdition": "Edição Enterprise", "unlicensed": "Sem licença", "beta": "Beta", - "manageClients": "Gerenciar Clientes", - "manageClientsDescription": "Clientes são dispositivos que podem se conectar aos seus sites", + "manageUserDevices": "Dispositivos do usuário", + "manageUserDevicesDescription": "Ver e gerenciar dispositivos que os usuários usam para se conectar de forma privada aos recursos", + "manageMachineClients": "Gerenciar Clientes de Máquina", + "manageMachineClientsDescription": "Crie e gerencie clientes que servidores e sistemas usam para se conectar de forma privada aos recursos", + "clientsTableUserClients": "Utilizador", + "clientsTableMachineClients": "Máquina", "licenseTableValidUntil": "Válido até", "saasLicenseKeysSettingsTitle": "Licenças empresariais", "saasLicenseKeysSettingsDescription": "Gerar e gerenciar chaves de licença Enterprise para instâncias Pangolin auto-hospedadas", @@ -1990,11 +2053,12 @@ "pathRewriteStripLabel": "faixa", "sidebarEnableEnterpriseLicense": "Habilitar Licença Empresarial", "cannotbeUndone": "Isso não pode ser desfeito.", - "toConfirm": "para confirmar", + "toConfirm": "para confirmar.", "deleteClientQuestion": "Você tem certeza que deseja remover o cliente do site e da organização?", "clientMessageRemove": "Depois de removido, o cliente não poderá mais se conectar ao site.", "sidebarLogs": "Registros", "request": "Pedir", + "requests": "Solicitações", "logs": "Registros", "logsSettingsDescription": "Monitorar logs coletados desta orginização", "searchLogs": "Pesquisar registros...", @@ -2020,6 +2084,7 @@ "ip": "PI", "reason": "Motivo", "requestLogs": "Registro de pedidos", + "requestAnalytics": "Solicitar análise", "host": "Servidor", "location": "Local:", "actionLogs": "Logs de Ações", @@ -2029,6 +2094,7 @@ "logRetention": "Retenção de Log", "logRetentionDescription": "Gerenciar quanto tempo os diferentes tipos de logs são mantidos para esta organização ou desativá-los", "requestLogsDescription": "Ver registros de pedidos detalhados de recursos nesta organização", + "requestAnalyticsDescription": "Exibir análise detalhada de pedidos para recursos nesta organização", "logRetentionRequestLabel": "Solicitar retenção de registro", "logRetentionRequestDescription": "Por quanto tempo manter os registros de pedidos", "logRetentionAccessLabel": "Retenção de Log de Acesso", @@ -2042,6 +2108,7 @@ "logRetention30Days": "30 dias", "logRetention90Days": "90 dias", "logRetentionForever": "Permanentemente", + "logRetentionEndOfFollowingYear": "Fim do ano seguinte", "actionLogsDescription": "Visualizar histórico de ações realizadas nesta organização", "accessLogsDescription": "Ver solicitações de autenticação de recursos nesta organização", "licenseRequiredToUse": "É necessária uma licença empresarial para usar esse recurso.", @@ -2052,7 +2119,7 @@ "preferWildcardCert": "Prefere Certificado Wildcard", "unverified": "Não verificado", "domainSetting": "Configurações do domínio", - "domainSettingDescription": "Configure as configurações para o seu domínio", + "domainSettingDescription": "Configurar configurações para o domínio", "preferWildcardCertDescription": "Tentativa de gerar um certificado coringa (requer um resolvedor de certificado devidamente configurado).", "recordName": "Nome da gravação", "auto": "Automático", @@ -2066,15 +2133,15 @@ "olmUpdateAvailableInfo": "Uma versão atualizada do Olm está disponível. Atualize para a versão mais recente para ter a melhor experiência.", "client": "Cliente", "proxyProtocol": "Configurações de Protocolo Proxy", - "proxyProtocolDescription": "Configurar o protocolo Proxy para preservar endereços IP do cliente para serviços TCP/UDP.", + "proxyProtocolDescription": "Configurar o protocolo proxy para preservar endereços IP do cliente para serviços TCP.", "enableProxyProtocol": "Habilitar protocolo proxy", - "proxyProtocolInfo": "Preservar endereços IP do cliente para backends TCP/UDP", + "proxyProtocolInfo": "Preservar endereços IP do cliente para backends TCP", "proxyProtocolVersion": "Versão do Protocolo Proxy", "version1": " Versão 1 (recomendado)", "version2": "Versão 2", "versionDescription": "A versão 1 é baseada em texto e amplamente suportada. A versão 2 é binária e mais eficiente, mas menos compatível.", "warning": "ATENÇÃO", - "proxyProtocolWarning": "Seu aplicativo de backend deve ser configurado para aceitar conexões de protocolo de proxy. Se o seu backend não suportar o protocolo de protocolo, habilitando isso quebrará todas as conexões. Certifique-se de configurar seu backend para confiar nos cabeçalhos do protocolo proxy no Traefik.", + "proxyProtocolWarning": "A aplicação de backend deve ser configurada para aceitar conexões de protocolo proxy. Se o seu backend não suporta o Protocolo de Proxy, habilitando isto quebrará todas as conexões, então só habilite isso se você souber o que está fazendo. Certifique-se de configurar seu backend para confiar nos cabeçalhos do protocolo proxy no Traefik.", "restarting": "Reiniciando...", "manual": "Manualmente", "messageSupport": "Suporte a Mensagens", @@ -2097,6 +2164,43 @@ "supportMessageSent": "Mensagem enviada!", "supportWillContact": "Entraremos em contato em breve!", "selectLogRetention": "Selecionar retenção de log", + "terms": "Termos", + "privacy": "Privacidade", + "security": "Segurança", + "docs": "Documentação", + "deviceActivation": "Ativação do dispositivo", + "deviceCodeInvalidFormat": "O código deve ter 9 caracteres (ex.: A1AJ-N5JD)", + "deviceCodeInvalidOrExpired": "Código inválido ou expirado", + "deviceCodeVerifyFailed": "Falha ao verificar o código do dispositivo", + "signedInAs": "Sessão iniciada como", + "deviceCodeEnterPrompt": "Digite o código exibido no dispositivo", + "continue": "Continuar", + "deviceUnknownLocation": "Localização desconhecida", + "deviceAuthorizationRequested": "Esta autorização foi solicitada por {location} no {date}. Certifique-se de que você confia neste dispositivo, pois ele terá acesso à conta.", + "deviceLabel": "Dispositivo: {deviceName}", + "deviceWantsAccess": "quer acessar sua conta", + "deviceExistingAccess": "Acesso existente:", + "deviceFullAccess": "Acesso total à sua conta", + "deviceOrganizationsAccess": "Acesso a todas as organizações que sua conta tem acesso a", + "deviceAuthorize": "Autorizar {applicationName}", + "deviceConnected": "Dispositivo Conectado!", + "deviceAuthorizedMessage": "O dispositivo está autorizado a acessar sua conta.", + "pangolinCloud": "Nuvem do Pangolin", + "viewDevices": "Ver Dispositivos", + "viewDevicesDescription": "Gerencie seus dispositivos conectados", + "noDevices": "Nenhum dispositivo encontrado", + "dateCreated": "Data de Criação", + "unnamedDevice": "Dispositivo sem nome", + "deviceQuestionRemove": "Você tem certeza que deseja excluir este dispositivo?", + "deviceMessageRemove": "Esta ação não pode ser desfeita.", + "deviceDeleteConfirm": "Excluir dispositivo", + "deleteDevice": "Excluir dispositivo", + "errorLoadingDevices": "Erro ao carregar dispositivos", + "failedToLoadDevices": "Falha ao carregar dispositivos", + "deviceDeleted": "Dispositivo excluído", + "deviceDeletedDescription": "O dispositivo foi excluído com sucesso.", + "errorDeletingDevice": "Erro ao excluir dispositivo", + "failedToDeleteDevice": "Falha ao excluir dispositivo", "showColumns": "Exibir Colunas", "hideColumns": "Ocultar colunas", "columnVisibility": "Visibilidade da Coluna", @@ -2111,10 +2215,14 @@ "enableSelected": "Habilitar Selecionados", "disableSelected": "Desativar Selecionados", "checkSelectedStatus": "Status de Verificação dos Selecionados", + "clients": "Clientes", + "accessClientSelect": "Selecionar clientes de máquina", + "resourceClientDescription": "Clientes de máquina que podem acessar este recurso", + "regenerate": "Regenerar", "credentials": "Credenciais", "savecredentials": "Salvar Credenciais", - "regeneratecredentials": "Rechave", - "regenerateCredentials": "Regenerar e salvar suas credenciais", + "regenerateCredentialsButton": "Regerar Credenciais", + "regenerateCredentials": "Regerar Credenciais", "generatedcredentials": "Credenciais Geradas", "copyandsavethesecredentials": "Copiar e salvar estas credenciais", "copyandsavethesecredentialsdescription": "Essas credenciais não serão exibidas novamente depois que você sair desta página. Salve elas com segurança agora.", @@ -2122,13 +2230,12 @@ "credentialsSavedDescription": "As credenciais foram regeneradas e salvas com sucesso.", "credentialsSaveError": "Erro ao Salvar Credenciais", "credentialsSaveErrorDescription": "Ocorreu um erro enquanto regenerava e salvava as credenciais.", - "regenerateCredentialsWarning": "Regenerar credenciais irá invalidar as anteriores. Certifique-se de atualizar qualquer configuração que use essas credenciais.", + "regenerateCredentialsWarning": "Regenerar credenciais irá invalidar as anteriores e causar uma desconexão. Certifique-se de atualizar quaisquer configurações que usam essas credenciais.", "confirm": "Confirmar", "regenerateCredentialsConfirmation": "Você tem certeza que deseja recriar as credenciais?", "endpoint": "Endpoint", "Id": "Id", "SecretKey": "Chave secreta", - "featureDisabledTooltip": "Este recurso só está disponível no plano corporativo e requer que uma licença utilize.", "niceId": "Belo ID", "niceIdUpdated": "Bom ID atualizado", "niceIdUpdatedSuccessfully": "Bom ID atualizado com sucesso", @@ -2136,5 +2243,32 @@ "niceIdUpdateErrorDescription": "Ocorreu um erro ao atualizar a ID de Nice.", "niceIdCannotBeEmpty": "Bom ID não pode estar vazio", "enterIdentifier": "Inserir identificador", - "identifier": "Identifier" + "identifier": "Identifier", + "deviceLoginUseDifferentAccount": "Não é você? Use uma conta diferente.", + "deviceLoginDeviceRequestingAccessToAccount": "Um dispositivo está solicitando acesso a essa conta.", + "noData": "Nenhum dado encontrado", + "machineClients": "Clientes de máquina", + "install": "Instale", + "run": "Executar", + "clientNameDescription": "O nome de exibição do cliente que pode ser alterado mais tarde.", + "clientAddress": "Endereço do Cliente (Avançado)", + "setupFailedToFetchSubnet": "Falha ao buscar a subrede padrão", + "setupSubnetAdvanced": "Sub-rede (Avançado)", + "setupSubnetDescription": "A sub-rede para a rede interna desta organização.", + "siteRegenerateAndDisconnect": "Regerar e Desconectar", + "siteRegenerateAndDisconnectConfirmation": "Você tem certeza que deseja regenerar as credenciais e desconectar este site?", + "siteRegenerateAndDisconnectWarning": "Isto irá regenerar as credenciais e desconectar imediatamente o site. O site precisará ser reiniciado com as novas credenciais.", + "siteRegenerateCredentialsConfirmation": "Você tem certeza que deseja regenerar as credenciais para este site?", + "siteRegenerateCredentialsWarning": "Isso irá regenerar as credenciais. O site permanecerá conectado até que você reinicie-o manualmente e use as novas credenciais.", + "clientRegenerateAndDisconnect": "Regerar e Desconectar", + "clientRegenerateAndDisconnectConfirmation": "Tem certeza que deseja regenerar as credenciais e desconectar este cliente?", + "clientRegenerateAndDisconnectWarning": "Isto irá regenerar as credenciais e desconectar o cliente imediatamente. O cliente precisará ser reiniciado com as novas credenciais.", + "clientRegenerateCredentialsConfirmation": "Tem certeza que deseja regenerar as credenciais para este cliente?", + "clientRegenerateCredentialsWarning": "Isto irá regenerar as credenciais. O cliente permanecerá conectado até você reiniciá-lo manualmente e usar as novas credenciais.", + "remoteExitNodeRegenerateAndDisconnect": "Regerar e Desconectar", + "remoteExitNodeRegenerateAndDisconnectConfirmation": "Tem certeza que deseja regenerar as credenciais e desconectar este nó de saída remota?", + "remoteExitNodeRegenerateAndDisconnectWarning": "Isto irá regenerar as credenciais e desconectar imediatamente o nó de saída remota. O nó de saída remota precisará ser reiniciado com as novas credenciais.", + "remoteExitNodeRegenerateCredentialsConfirmation": "Você tem certeza que deseja regenerar as credenciais para este nó de saída remota?", + "remoteExitNodeRegenerateCredentialsWarning": "Isto irá regenerar as credenciais. O nó de saída remota permanecerá conectado até que você o reinicie manualmente e use as novas credenciais.", + "agent": "Representante" } diff --git a/messages/ru-RU.json b/messages/ru-RU.json index 23c521c19..d687b7837 100644 --- a/messages/ru-RU.json +++ b/messages/ru-RU.json @@ -1,12 +1,12 @@ { - "setupCreate": "Создайте свою организацию, сайт и ресурсы", + "setupCreate": "Создать организацию, сайт и ресурсы", "setupNewOrg": "Новая организация", "setupCreateOrg": "Создать организацию", "setupCreateResources": "Создать ресурсы", "setupOrgName": "Название организации", - "orgDisplayName": "Это отображаемое имя вашей организации.", + "orgDisplayName": "Отображаемое имя организации.", "orgId": "ID организации", - "setupIdentifierMessage": "Уникальный идентификатор вашей организации. Он задаётся отдельно от отображаемого имени.", + "setupIdentifierMessage": "Это уникальный идентификатор для организации.", "setupErrorIdentifier": "ID организации уже занят. Выберите другой.", "componentsErrorNoMemberCreate": "Вы пока не состоите ни в одной организации. Создайте организацию для начала работы.", "componentsErrorNoMember": "Вы пока не состоите ни в одной организации.", @@ -50,10 +50,10 @@ "siteMessageRemove": "После удаления сайт больше не будет доступен. Все цели, связанные с сайтом, также будут удалены.", "siteQuestionRemove": "Вы уверены, что хотите удалить сайт из организации?", "siteManageSites": "Управление сайтами", - "siteDescription": "Обеспечьте подключение к вашей сети через защищённые туннели", + "siteDescription": "Создание и управление сайтами, чтобы включить подключение к приватным сетям", "siteCreate": "Создать сайт", "siteCreateDescription2": "Следуйте инструкциям ниже для создания и подключения нового сайта", - "siteCreateDescription": "Создайте новый сайт для подключения ваших ресурсов", + "siteCreateDescription": "Создайте новый сайт для начала подключения ресурсов", "close": "Закрыть", "siteErrorCreate": "Ошибка при создании сайта", "siteErrorCreateKeyPair": "Пара ключей или настройки сайта по умолчанию не найдены", @@ -74,7 +74,7 @@ "siteInstallNewt": "Установить Newt", "siteInstallNewtDescription": "Запустите Newt в вашей системе", "WgConfiguration": "Конфигурация WireGuard", - "WgConfigurationDescription": "Используйте следующую конфигурацию для подключения к вашей сети", + "WgConfigurationDescription": "Используйте следующую конфигурацию для подключения к сети", "operatingSystem": "Операционная система", "commands": "Команды", "recommended": "Рекомендуется", @@ -87,32 +87,32 @@ "siteUpdated": "Сайт обновлён", "siteUpdatedDescription": "Сайт был успешно обновлён.", "siteGeneralDescription": "Настройте общие параметры для этого сайта", - "siteSettingDescription": "Настройте параметры вашего сайта", + "siteSettingDescription": "Настройка параметров на сайте", "siteSetting": "Настройки {siteName}", - "siteNewtTunnel": "Туннель Newt (Рекомендуется)", - "siteNewtTunnelDescription": "Простейший способ создать точку входа в вашу сеть. Дополнительная настройка не требуется.", + "siteNewtTunnel": "Новый сайт (рекомендуется)", + "siteNewtTunnelDescription": "Самый простой способ создать точку входа в любую сеть. Дополнительная настройка не требуется.", "siteWg": "Базовый WireGuard", "siteWgDescription": "Используйте любой клиент WireGuard для открытия туннеля. Требуется ручная настройка NAT.", "siteWgDescriptionSaas": "Используйте любой клиент WireGuard для создания туннеля. Требуется ручная настройка NAT. РАБОТАЕТ ТОЛЬКО НА САМОСТОЯТЕЛЬНО РАЗМЕЩЕННЫХ УЗЛАХ", "siteLocalDescription": "Только локальные ресурсы. Без туннелирования.", "siteLocalDescriptionSaas": "Только локальные ресурсы. Нет туннелей. Только для удаленных узлов.", "siteSeeAll": "Просмотреть все сайты", - "siteTunnelDescription": "Выберите способ подключения к вашему сайту", - "siteNewtCredentials": "Учётные данные Newt", - "siteNewtCredentialsDescription": "Так Newt будет выполнять аутентификацию на сервере", - "siteCredentialsSave": "Сохраните ваши учётные данные", + "siteTunnelDescription": "Определите, как вы хотите подключиться к сайту", + "siteNewtCredentials": "Полномочия", + "siteNewtCredentialsDescription": "Вот как сайт будет аутентифицироваться с сервером", + "siteCredentialsSave": "Сохранить учетные данные", "siteCredentialsSaveDescription": "Вы сможете увидеть эти данные только один раз. Обязательно скопируйте их в безопасное место.", "siteInfo": "Информация о сайте", "status": "Статус", "shareTitle": "Управление общими ссылками", - "shareDescription": "Создавайте общие ссылки для предоставления временного или постоянного доступа к вашим ресурсам", + "shareDescription": "Создавайте общие ссылки, чтобы предоставить временный или постоянный доступ к прокси ресурсам", "shareSearch": "Поиск общих ссылок...", "shareCreate": "Создать общую ссылку", "shareErrorDelete": "Не удалось удалить ссылку", "shareErrorDeleteMessage": "Произошла ошибка при удалении ссылки", "shareDeleted": "Ссылка удалена", "shareDeletedDescription": "Ссылка была успешно удалена", - "shareTokenDescription": "Ваш токен доступа может быть передан двумя способами: как параметр запроса или в заголовках запроса. Он должен передаваться клиентом при каждом запросе для аутентификации.", + "shareTokenDescription": "Токен доступа может быть передан двумя способами: как параметр запроса или в заголовках запроса. Они должны быть переданы от клиента по каждому запросу для аутентифицированного доступа.", "accessToken": "Токен доступа", "usageExamples": "Примеры использования", "tokenId": "ID токена", @@ -121,7 +121,7 @@ "importantNote": "Важное примечание", "shareImportantDescription": "Из соображений безопасности рекомендуется использовать заголовки вместо параметров запроса, когда это возможно, так как параметры запроса могут сохраняться в логах сервера или истории браузера.", "token": "Токен", - "shareTokenSecurety": "Храните ваш токен доступа в безопасности. Не делитесь им в общедоступных местах или клиентском коде.", + "shareTokenSecurety": "Храните токен доступа в безопасном режиме. Не делитесь им в общедоступных областях или на клиентской стороне.", "shareErrorFetchResource": "Не удалось получить ресурсы", "shareErrorFetchResourceDescription": "Произошла ошибка при получении ресурсов", "shareErrorCreate": "Не удалось создать общую ссылку", @@ -144,8 +144,10 @@ "expires": "Истекает", "never": "Никогда", "shareErrorSelectResource": "Пожалуйста, выберите ресурс", - "resourceTitle": "Управление ресурсами", - "resourceDescription": "Создавайте защищённые прокси к вашим приватным приложениям", + "proxyResourceTitle": "Управление публичными ресурсами", + "proxyResourceDescription": "Создание и управление ресурсами, которые доступны через веб-браузер", + "clientResourceTitle": "Управление приватными ресурсами", + "clientResourceDescription": "Создание и управление ресурсами, которые доступны только через подключенный клиент", "resourcesSearch": "Поиск ресурсов...", "resourceAdd": "Добавить ресурс", "resourceErrorDelte": "Ошибка при удалении ресурса", @@ -155,9 +157,9 @@ "resourceMessageRemove": "После удаления ресурс больше не будет доступен. Все целевые узлы, связанные с ресурсом, также будут удалены.", "resourceQuestionRemove": "Вы уверены, что хотите удалить ресурс из организации?", "resourceHTTP": "HTTPS-ресурс", - "resourceHTTPDescription": "Проксирование запросов к вашему приложению через HTTPS с использованием поддомена или базового домена.", + "resourceHTTPDescription": "Прокси-запросы к приложению по HTTPS с помощью поддомена или базового домена.", "resourceRaw": "Сырой TCP/UDP-ресурс", - "resourceRawDescription": "Проксирование запросов к вашему приложению через TCP/UDP с использованием по номеру порта.", + "resourceRawDescription": "Прокси запрашивает приложение через TCP/UDP по номеру порта. Это работает только тогда, когда сайты подключены к узлам.", "resourceCreate": "Создание ресурса", "resourceCreateDescription": "Следуйте инструкциям ниже для создания нового ресурса", "resourceSeeAll": "Посмотреть все ресурсы", @@ -171,22 +173,22 @@ "noCountryFound": "Страна не найдена.", "siteSelectionDescription": "Этот сайт предоставит подключение к цели.", "resourceType": "Тип ресурса", - "resourceTypeDescription": "Определите, как вы хотите получать доступ к вашему ресурсу", + "resourceTypeDescription": "Определить как получить доступ к ресурсу", "resourceHTTPSSettings": "Настройки HTTPS", - "resourceHTTPSSettingsDescription": "Настройте, как будет осуществляться доступ к вашему ресурсу через HTTPS", + "resourceHTTPSSettingsDescription": "Настройка доступа к ресурсу по HTTPS", "domainType": "Тип домена", "subdomain": "Поддомен", "baseDomain": "Базовый домен", - "subdomnainDescription": "Поддомен, на котором будет доступен ресурс.", + "subdomnainDescription": "Поддомен, в котором ресурс будет доступен.", "resourceRawSettings": "Настройки TCP/UDP", - "resourceRawSettingsDescription": "Настройте доступ к вашему ресурсу по TCP/UDP. Вы соотносите ресурс с портом на сервере хоста Pangolin, так что вы можете получить доступ к ресурсу с сервера server-public-ip:mapped-порта.", + "resourceRawSettingsDescription": "Настройка доступа к ресурсу по TCP/UDP", "protocol": "Протокол", "protocolSelect": "Выберите протокол", "resourcePortNumber": "Номер порта", "resourcePortNumberDescription": "Внешний номер порта для проксирования запросов.", "cancel": "Отмена", "resourceConfig": "Фрагменты конфигурации", - "resourceConfigDescription": "Скопируйте и вставьте эти фрагменты конфигурации для настройки вашего TCP/UDP-ресурса", + "resourceConfigDescription": "Скопируйте и вставьте эти сниппеты для настройки TCP/UDP ресурса", "resourceAddEntrypoints": "Traefik: Добавить точки входа", "resourceExposePorts": "Gerbil: Открыть порты в Docker Compose", "resourceLearnRaw": "Узнайте, как настроить TCP/UDP-ресурсы", @@ -202,14 +204,14 @@ "proxy": "Прокси", "internal": "Внутренний", "rules": "Правила", - "resourceSettingDescription": "Настройте параметры вашего ресурса", + "resourceSettingDescription": "Настройка параметров ресурса", "resourceSetting": "Настройки {resourceName}", - "alwaysAllow": "Всегда разрешать", - "alwaysDeny": "Всегда запрещать", + "alwaysAllow": "Авторизация байпасса", + "alwaysDeny": "Блокировать доступ", "passToAuth": "Переход к аутентификации", - "orgSettingsDescription": "Настройте общие параметры вашей организации", + "orgSettingsDescription": "Настроить настройки организации", "orgGeneralSettings": "Настройки организации", - "orgGeneralSettingsDescription": "Управляйте данными и конфигурацией вашей организации", + "orgGeneralSettingsDescription": "Управление деталями и конфигурацией организации", "saveGeneralSettings": "Сохранить общие настройки", "saveSettings": "Сохранить настройки", "orgDangerZone": "Опасная зона", @@ -232,7 +234,7 @@ "orgMissing": "Отсутствует ID организации", "orgMissingMessage": "Невозможно восстановить приглашение без ID организации.", "accessUsersManage": "Управление пользователями", - "accessUsersDescription": "Приглашайте пользователей и назначайте им роли для управления доступом к вашей организации", + "accessUsersDescription": "Пригласить и управлять пользователями с доступом к этой организации", "accessUsersSearch": "Поиск пользователей...", "accessUserCreate": "Создать пользователя", "accessUserRemove": "Удалить пользователя", @@ -241,13 +243,13 @@ "role": "Роль", "nameRequired": "Имя обязательно", "accessRolesManage": "Управление ролями", - "accessRolesDescription": "Настройте роли для управления доступом к вашей организации", + "accessRolesDescription": "Создание и управление ролями для пользователей в организации", "accessRolesSearch": "Поиск ролей...", "accessRolesAdd": "Добавить роль", "accessRoleDelete": "Удалить роль", "description": "Описание", "inviteTitle": "Открытые приглашения", - "inviteDescription": "Управляйте вашими приглашениями для других пользователей", + "inviteDescription": "Управление приглашениями для присоединения других пользователей к организации", "inviteSearch": "Поиск приглашений...", "minutes": "мин.", "hours": "ч.", @@ -261,13 +263,13 @@ "apiKeysErrorCreate": "Ошибка при создании ключа API", "apiKeysErrorSetPermission": "Ошибка при установке разрешений", "apiKeysCreate": "Сгенерировать ключ API", - "apiKeysCreateDescription": "Сгенерируйте новый ключ API для вашей организации", + "apiKeysCreateDescription": "Сгенерировать новый ключ API для организации", "apiKeysGeneralSettings": "Разрешения", "apiKeysGeneralSettingsDescription": "Определите, что может делать этот ключ API", - "apiKeysList": "Ваш ключ API", - "apiKeysSave": "Сохраните ваш ключ API", + "apiKeysList": "Новый ключ API", + "apiKeysSave": "Сохранить ключ API", "apiKeysSaveDescription": "Вы сможете увидеть этот ключ только один раз. Обязательно скопируйте его в безопасное место.", - "apiKeysInfo": "Ваш ключ API:", + "apiKeysInfo": "Ключ API:", "apiKeysConfirmCopy": "Я скопировал(а) ключ API", "generate": "Сгенерировать", "done": "Готово", @@ -424,7 +426,7 @@ "userCreated": "Пользователь создан", "userCreatedDescription": "Пользователь был успешно создан.", "userTypeInternal": "Внутренний пользователь", - "userTypeInternalDescription": "Пригласите пользователя напрямую в вашу организацию.", + "userTypeInternalDescription": "Пригласить пользователя присоединиться к организации напрямую.", "userTypeExternal": "Внешний пользователь", "userTypeExternalDescription": "Создайте пользователя через внешний Identity Provider.", "accessUserCreateDescription": "Следуйте инструкциям ниже для создания нового пользователя", @@ -436,6 +438,16 @@ "inviteEmailSent": "Отправить приглашение по Email", "inviteValid": "Действительно", "selectDuration": "Укажите срок действия", + "selectResource": "Выберите ресурс", + "filterByResource": "Фильтровать по ресурсам", + "resetFilters": "Сбросить фильтры", + "totalBlocked": "Запросы заблокированы Панголином", + "totalRequests": "Всего запросов", + "requestsByCountry": "Запросы по стране", + "requestsByDay": "Запросы по дням", + "blocked": "Заблокирован", + "allowed": "Разрешено", + "topCountries": "Лучшие страны", "accessRoleSelect": "Выберите роль", "inviteEmailSentDescription": "Email был отправлен пользователю со ссылкой доступа ниже. Он должен перейти по ссылке для принятия приглашения.", "inviteSentDescription": "Пользователь был приглашён. Он должен перейти по ссылке ниже для принятия приглашения.", @@ -458,13 +470,13 @@ "accessControlsSubmit": "Сохранить контроль доступа", "roles": "Роли", "accessUsersRoles": "Управление пользователями и ролями", - "accessUsersRolesDescription": "Приглашайте пользователей и добавляйте их в роли для управления доступом к вашей организации", + "accessUsersRolesDescription": "Пригласить пользователей и добавить их в роли для управления доступом к организации", "key": "Ключ", "createdAt": "Создано в", "proxyErrorInvalidHeader": "Неверное значение пользовательского заголовка Host. Используйте формат доменного имени или оставьте пустым для сброса пользовательского заголовка Host.", "proxyErrorTls": "Неверное имя TLS сервера. Используйте формат доменного имени или оставьте пустым для удаления имени TLS сервера.", "proxyEnableSSL": "Включить SSL", - "proxyEnableSSLDescription": "Включить шифрование SSL/TLS для безопасных HTTPS подключений к вашим целям.", + "proxyEnableSSLDescription": "Включить шифрование SSL/TLS для безопасных HTTPS соединений с целями.", "target": "Target", "configureTarget": "Настроить адресаты", "targetErrorFetch": "Не удалось получить цели", @@ -480,29 +492,29 @@ "targetsErrorUpdate": "Не удалось обновить цели", "targetsErrorUpdateDescription": "Произошла ошибка при обновлении целей", "targetTlsUpdate": "Настройки TLS обновлены", - "targetTlsUpdateDescription": "Ваши настройки TLS были успешно обновлены", + "targetTlsUpdateDescription": "Настройки TLS успешно обновлены", "targetErrorTlsUpdate": "Не удалось обновить настройки TLS", "targetErrorTlsUpdateDescription": "Произошла ошибка при обновлении настроек TLS", "proxyUpdated": "Настройки прокси обновлены", - "proxyUpdatedDescription": "Ваши настройки прокси были успешно обновлены", + "proxyUpdatedDescription": "Настройки прокси успешно обновлены", "proxyErrorUpdate": "Не удалось обновить настройки прокси", "proxyErrorUpdateDescription": "Произошла ошибка при обновлении настроек прокси", - "targetAddr": "IP / Имя хоста", + "targetAddr": "Хост", "targetPort": "Порт", "targetProtocol": "Протокол", "targetTlsSettings": "Конфигурация безопасного соединения", - "targetTlsSettingsDescription": "Настройте параметры SSL/TLS для вашего ресурса", + "targetTlsSettingsDescription": "Настроить параметры SSL/TLS для ресурса", "targetTlsSettingsAdvanced": "Расширенные настройки TLS", "targetTlsSni": "Имя TLS сервера", "targetTlsSniDescription": "Имя TLS сервера для использования в SNI. Оставьте пустым для использования по умолчанию.", "targetTlsSubmit": "Сохранить настройки", "targets": "Конфигурация целей", - "targetsDescription": "Настройте цели для маршрутизации трафика к вашим бэкэнд сервисам", + "targetsDescription": "Настроить цели на маршрут трафика в сервисы backend", "targetStickySessions": "Включить фиксированные сессии", "targetStickySessionsDescription": "Сохранять соединения на одной и той же целевой точке в течение всей сессии.", "methodSelect": "Выберите метод", "targetSubmit": "Добавить цель", - "targetNoOne": "Этот ресурс не имеет никаких целей. Добавьте цель для настройки, где отправлять запросы к вашему бэкэнду.", + "targetNoOne": "Этот ресурс не имеет никаких целей. Добавьте цель для настройки, где отправлять запросы в бэкэнд.", "targetNoOneDescription": "Добавление более одной цели выше включит балансировку нагрузки.", "targetsSubmit": "Сохранить цели", "addTarget": "Добавить цель", @@ -516,9 +528,11 @@ "targetCreatedDescription": "Цель была успешно создана", "targetErrorCreate": "Не удалось создать цель", "targetErrorCreateDescription": "Произошла ошибка при создании цели", + "tlsServerName": "Имя TLS сервера", + "tlsServerNameDescription": "Имя TLS сервера для SNI", "save": "Сохранить", "proxyAdditional": "Дополнительные настройки прокси", - "proxyAdditionalDescription": "Настройте, как ваш ресурс обрабатывает настройки прокси", + "proxyAdditionalDescription": "Настроить обработку параметров прокси ресурса", "proxyCustomHeader": "Пользовательский заголовок Host", "proxyCustomHeaderDescription": "Заголовок host для установки при проксировании запросов. Оставьте пустым для использования по умолчанию.", "proxyAdditionalSubmit": "Сохранить настройки прокси", @@ -558,7 +572,7 @@ "rulesMatchType": "Тип совпадения", "value": "Значение", "rulesAbout": "О правилах", - "rulesAboutDescription": "Правила позволяют контролировать доступ к вашему ресурсу на основе набора критериев. Вы можете создавать правила для разрешения или запрета доступа на основе IP адреса или URL пути.", + "rulesAboutDescription": "Правила позволяют контролировать доступ к ресурсу на основе набора критериев. Вы можете создать правила, чтобы разрешить или запретить доступ на основе IP-адреса или URL пути.", "rulesActions": "Действия", "rulesActionAlwaysAllow": "Всегда разрешать: Обойти все методы аутентификации", "rulesActionAlwaysDeny": "Всегда запрещать: Блокировать все запросы; аутентификация не может быть выполнена", @@ -570,7 +584,7 @@ "rulesEnable": "Включить правила", "rulesEnableDescription": "Включить или отключить проверку правил для этого ресурса", "rulesResource": "Конфигурация правил ресурса", - "rulesResourceDescription": "Настройте правила для контроля доступа к вашему ресурсу", + "rulesResourceDescription": "Настройка правил для контроля доступа к ресурсу", "ruleSubmit": "Добавить правило", "rulesNoOne": "Нет правил. Добавьте правило с помощью формы.", "rulesOrder": "Правила оцениваются по приоритету в возрастающем порядке.", @@ -586,7 +600,7 @@ "none": "Нет", "unknown": "Неизвестно", "resources": "Ресурсы", - "resourcesDescription": "Ресурсы - это прокси к приложениям, работающим в вашей частной сети. Создайте ресурс для любого HTTP/HTTPS или сырого TCP/UDP сервиса в вашей частной сети. Каждый ресурс должен быть подключен к сайту для обеспечения приватного, безопасного соединения через зашифрованный туннель WireGuard.", + "resourcesDescription": "Ресурсы - это прокси для приложений, работающих в частной сети. Создайте ресурс для любого HTTP/HTTPS или необработанной службы TCP/UDP в вашей частной сети. Каждый ресурс должен быть подключен к сайту, чтобы включить приватное и защищенное подключение через зашифрованный туннель WireGuard.", "resourcesWireGuardConnect": "Безопасное соединение с шифрованием WireGuard", "resourcesMultipleAuthenticationMethods": "Настройка нескольких методов аутентификации", "resourcesUsersRolesAccess": "Контроль доступа на основе пользователей и ролей", @@ -597,7 +611,7 @@ "resourceSelect": "Выберите ресурс", "shareLinks": "Общие ссылки", "share": "Общие ссылки", - "shareDescription2": "Создавайте общие ссылки к вашим ресурсам. Ссылки предоставляют временный или неограниченный доступ к вашему ресурсу. Вы можете настроить время истечения ссылки при её создании.", + "shareDescription2": "Создавайте общие ссылки на ресурсы. Ссылки обеспечивают временный или неограниченный доступ к вашему ресурсу. Вы можете настроить продолжительность действия ссылки при ее создании.", "shareEasyCreate": "Легко создавать и делиться", "shareConfigurableExpirationDuration": "Настраиваемая продолжительность истечения", "shareSecureAndRevocable": "Безопасные и отзываемые", @@ -607,19 +621,19 @@ "unknownCommand": "Неизвестная команда", "newtErrorFetchReleases": "Не удалось получить информацию о релизе: {err}", "newtErrorFetchLatest": "Ошибка при получении последнего релиза: {err}", - "newtEndpoint": "Конечная точка Newt", - "newtId": "Newt ID", - "newtSecretKey": "Секретный ключ Newt", + "newtEndpoint": "Endpoint", + "newtId": "ID", + "newtSecretKey": "Секретный ключ", "architecture": "Архитектура", "sites": "Сайты", - "siteWgAnyClients": "Используйте любой клиент WireGuard для подключения. Вам придётся обращаться к вашим внутренним ресурсам, используя IP узла.", + "siteWgAnyClients": "Для подключения используйте любой клиент WireGuard. Вы должны будете адресовать внутренние ресурсы, используя IP адрес пира.", "siteWgCompatibleAllClients": "Совместим со всеми клиентами WireGuard", "siteWgManualConfigurationRequired": "Требуется ручная настройка", "userErrorNotAdminOrOwner": "Пользователь не является администратором или владельцем", "pangolinSettings": "Настройки - Pangolin", "accessRoleYour": "Ваша роль:", - "accessRoleSelect2": "Выберите роль", - "accessUserSelect": "Выберите пользователя", + "accessRoleSelect2": "Выберите роли", + "accessUserSelect": "Выберите пользователей", "otpEmailEnter": "Введите email", "otpEmailEnterDescription": "Нажмите enter для добавления email после ввода в поле.", "otpEmailErrorInvalid": "Неверный email адрес. Подстановочный знак (*) должен быть всей локальной частью.", @@ -671,7 +685,7 @@ "resourcePincodeSetupTitle": "Установить PIN-код", "resourcePincodeSetupTitleDescription": "Установите PIN-код для защиты этого ресурса", "resourceRoleDescription": "Администраторы всегда имеют доступ к этому ресурсу.", - "resourceUsersRoles": "Пользователи и роли", + "resourceUsersRoles": "Контроль доступа", "resourceUsersRolesDescription": "Выберите пользователей и роли с доступом к этому ресурсу", "resourceUsersRolesSubmit": "Сохранить пользователей и роли", "resourceWhitelistSave": "Успешно сохранено", @@ -702,6 +716,7 @@ "resourceTransferSubmit": "Перенести ресурс", "siteDestination": "Новый сайт для ресурса", "searchSites": "Поиск сайтов", + "countries": "Страны", "accessRoleCreate": "Создание роли", "accessRoleCreateDescription": "Создайте новую роль для группы пользователей и выдавайте им разрешения.", "accessRoleCreateSubmit": "Создать роль", @@ -766,15 +781,15 @@ "idpOidcConfigure": "Конфигурация OAuth2/OIDC", "idpOidcConfigureDescription": "Настройте конечные точки и учётные данные поставщика OAuth2/OIDC", "idpClientId": "ID клиента", - "idpClientIdDescription": "OAuth2 ID клиента от вашего поставщика удостоверений", + "idpClientIdDescription": "Идентификатор клиента OAuth2 от поставщика идентификации", "idpClientSecret": "Секрет клиента", - "idpClientSecretDescription": "OAuth2 секрет клиента от вашего поставщика удостоверений", + "idpClientSecretDescription": "Секретный ключ клиента OAuth2 от поставщика идентификации", "idpAuthUrl": "URL авторизации", "idpAuthUrlDescription": "URL конечной точки авторизации OAuth2", "idpTokenUrl": "URL токена", "idpTokenUrlDescription": "URL конечной точки токена OAuth2", "idpOidcConfigureAlert": "Важная информация", - "idpOidcConfigureAlertDescription": "После создания поставщика удостоверений вам нужно будет настроить URL обратного вызова в настройках вашего поставщика удостоверений. URL обратного вызова будет предоставлен после успешного создания.", + "idpOidcConfigureAlertDescription": "После создания идентификационного провайдера вам необходимо настроить обратный адрес в настройках провайдера. URL обратного вызова будет предоставлен после успешного создания.", "idpToken": "Конфигурация токена", "idpTokenDescription": "Настройте, как извлекать информацию о пользователе из ID токена", "idpJmespathAbout": "О JMESPath", @@ -791,7 +806,7 @@ "idpSubmit": "Создать поставщика удостоверений", "orgPolicies": "Политики организации", "idpSettings": "Настройки {idpName}", - "idpCreateSettingsDescription": "Настройте параметры для вашего поставщика удостоверений", + "idpCreateSettingsDescription": "Настройка параметров для идентификации провайдера", "roleMapping": "Сопоставление ролей", "orgMapping": "Сопоставление организаций", "orgPoliciesSearch": "Поиск политик организации...", @@ -826,7 +841,7 @@ "idpUpdatedDescription": "Поставщик удостоверений успешно обновлён", "redirectUrl": "URL редиректа", "redirectUrlAbout": "О редиректе URL", - "redirectUrlAboutDescription": "Это URL, на который пользователи будут перенаправлены после аутентификации. Вам нужно настроить этот URL в настройках вашего поставщика удостоверений.", + "redirectUrlAboutDescription": "Это URL, на который пользователи будут перенаправлены после аутентификации. Вам нужно настроить этот URL в настройках провайдера.", "pangolinAuth": "Аутентификация - Pangolin", "verificationCodeLengthRequirements": "Ваш код подтверждения должен состоять из 8 символов.", "errorOccurred": "Произошла ошибка", @@ -909,6 +924,10 @@ "passwordResetSent": "Мы отправим код сброса пароля на этот email адрес.", "passwordResetCode": "Код сброса пароля", "passwordResetCodeDescription": "Проверьте вашу почту для получения кода сброса пароля.", + "generatePasswordResetCode": "Сгенерировать код сброса пароля", + "passwordResetCodeGenerated": "Код сброса пароля создан", + "passwordResetCodeGeneratedDescription": "Поделитесь этим кодом с пользователем. Они могут использовать его для сброса пароля.", + "passwordResetUrl": "Reset URL", "passwordNew": "Новый пароль", "passwordNewConfirm": "Подтвердите новый пароль", "changePassword": "Изменить пароль", @@ -926,6 +945,9 @@ "pincodeAuth": "Код аутентификатора", "pincodeSubmit2": "Отправить код", "passwordResetSubmit": "Запросить сброс", + "passwordResetAlreadyHaveCode": "Введите код сброса пароля", + "passwordResetSmtpRequired": "Пожалуйста, обратитесь к администратору", + "passwordResetSmtpRequiredDescription": "Для сброса пароля необходим код сброса пароля. Обратитесь к администратору за помощью.", "passwordBack": "Назад к паролю", "loginBack": "Вернуться к входу", "signup": "Регистрация", @@ -1091,12 +1113,15 @@ "actionListSiteResources": "Список ресурсов сайта", "actionUpdateSiteResource": "Обновить ресурс сайта", "actionListInvitations": "Список приглашений", + "actionExportLogs": "Экспорт журналов", + "actionViewLogs": "Просмотр журналов", "noneSelected": "Ничего не выбрано", "orgNotFound2": "Организации не найдены.", "searchProgress": "Поиск...", "create": "Создать", "orgs": "Организации", "loginError": "Произошла ошибка при входе", + "loginRequiredForDevice": "Для аутентификации устройства необходимо войти в систему.", "passwordForgot": "Забыли пароль?", "otpAuth": "Двухфакторная аутентификация", "otpAuthDescription": "Введите код из вашего приложения-аутентификатора или один из ваших одноразовых резервных кодов.", @@ -1151,19 +1176,29 @@ "sidebarHome": "Главная", "sidebarSites": "Сайты", "sidebarResources": "Ресурсы", + "sidebarProxyResources": "Публичный", + "sidebarClientResources": "Приватный", "sidebarAccessControl": "Контроль доступа", + "sidebarLogsAndAnalytics": "Журналы и аналитика", "sidebarUsers": "Пользователи", + "sidebarAdmin": "Админ", "sidebarInvitations": "Приглашения", "sidebarRoles": "Роли", - "sidebarShareableLinks": "Общие ссылки", + "sidebarShareableLinks": "Ссылки", "sidebarApiKeys": "API ключи", "sidebarSettings": "Настройки", "sidebarAllUsers": "Все пользователи", "sidebarIdentityProviders": "Поставщики удостоверений", "sidebarLicense": "Лицензия", "sidebarClients": "Клиенты", + "sidebarUserDevices": "Пользователи", + "sidebarMachineClients": "Машины", "sidebarDomains": "Домены", + "sidebarGeneral": "Общие", + "sidebarLogAndAnalytics": "Журнал и аналитика", "sidebarBluePrints": "Чертежи", + "sidebarOrganization": "Организация", + "sidebarLogsAnalytics": "Статистика", "blueprints": "Чертежи", "blueprintsDescription": "Применить декларирующие конфигурации и просмотреть предыдущие запуски", "blueprintAdd": "Добавить чертёж", @@ -1174,7 +1209,7 @@ "blueprintDetailsDescription": "Посмотреть результат примененного чертежа и все возникшие ошибки", "blueprintInfo": "Информация о чертеже", "message": "Сообщение", - "blueprintContentsDescription": "Определите содержимое YAML, описывающее вашу инфраструктуру", + "blueprintContentsDescription": "Определите содержимое YAML, описывающее инфраструктуру", "blueprintErrorCreateDescription": "Произошла ошибка при применении чертежа", "blueprintErrorCreate": "Ошибка при создании чертежа", "searchBlueprintProgress": "Поиск чертежей...", @@ -1230,15 +1265,15 @@ "loading": "Загрузка", "restart": "Перезагрузка", "domains": "Домены", - "domainsDescription": "Управление доменами для вашей организации", + "domainsDescription": "Создание и управление доменами, доступными в организации", "domainsSearch": "Поиск доменов...", "domainAdd": "Добавить Домен", - "domainAddDescription": "Зарегистрировать новый домен в вашей организации", + "domainAddDescription": "Зарегистрировать новый домен в организации", "domainCreate": "Создать Домен", "domainCreatedDescription": "Домен успешно создан", "domainDeletedDescription": "Домен успешно удален", - "domainQuestionRemove": "Вы уверены, что хотите удалить домен из вашей учетной записи?", - "domainMessageRemove": "После удаления домен больше не будет связан с вашей учетной записью.", + "domainQuestionRemove": "Вы уверены, что хотите удалить домен?", + "domainMessageRemove": "После удаления домен больше не будет связан с организацией.", "domainConfirmDelete": "Подтвердить удаление домена", "domainDelete": "Удалить Домен", "domain": "Домен", @@ -1257,7 +1292,7 @@ "pending": "В ожидании", "sidebarBilling": "Выставление счетов", "billing": "Выставление счетов", - "orgBillingDescription": "Управляйте информацией о выставлении счетов и подписками", + "orgBillingDescription": "Управление платежной информацией и подписками", "github": "GitHub", "pangolinHosted": "Pangolin Hosted", "fossorial": "Fossorial", @@ -1285,9 +1320,9 @@ "productUpdateTitle": "Обновления продуктов", "productUpdateEmpty": "Нет обновлений", "dismissAll": "Отклонить все", - "pangolinUpdateAvailable": "Доступна новая версия", + "pangolinUpdateAvailable": "Доступно обновление", "pangolinUpdateAvailableInfo": "Версия {version} готова к установке", - "pangolinUpdateAvailableReleaseNotes": "Просмотреть заметки о выпуске", + "pangolinUpdateAvailableReleaseNotes": "Просмотреть примечания к выпуску", "newtUpdateAvailable": "Доступно обновление", "newtUpdateAvailableInfo": "Доступна новая версия Newt. Пожалуйста, обновитесь до последней версии для лучшего опыта.", "domainPickerEnterDomain": "Домен", @@ -1300,7 +1335,7 @@ "domainPickerSortAsc": "А-Я", "domainPickerSortDesc": "Я-А", "domainPickerCheckingAvailability": "Проверка доступности...", - "domainPickerNoMatchingDomains": "Не найдены сопоставимые домены. Попробуйте другой домен или проверьте настройки доменов вашей организации.", + "domainPickerNoMatchingDomains": "Подходящие домены не найдены. Попробуйте другой домен или проверьте настройки домена организации.", "domainPickerOrganizationDomains": "Домены организации", "domainPickerProvidedDomains": "Предоставленные домены", "domainPickerSubdomain": "Поддомен: {subdomain}", @@ -1334,7 +1369,7 @@ "billingModifySubscription": "Изменить подписку", "billingStartSubscription": "Начать подписку", "billingRecurringCharge": "Периодический взнос", - "billingManageSubscriptionSettings": "Управляйте настройками и предпочтениями вашей подписки", + "billingManageSubscriptionSettings": "Управление настройками и настройками подписки", "billingNoActiveSubscription": "У вас нет активной подписки. Начните подписку, чтобы увеличить лимиты использования.", "billingFailedToLoadSubscription": "Не удалось загрузить подписку", "billingFailedToLoadUsage": "Не удалось загрузить использование", @@ -1345,9 +1380,9 @@ "billingPortalError": "Ошибка портала", "billingDataUsageInfo": "Вы несете ответственность за все данные, переданные через безопасные туннели при подключении к облаку. Это включает как входящий, так и исходящий трафик на всех ваших сайтах. При достижении лимита ваши сайты будут отключаться до тех пор, пока вы не обновите план или не уменьшите его использование. При использовании узлов не взимается плата.", "billingOnlineTimeInfo": "Вы тарифицируете на то, как долго ваши сайты будут подключены к облаку. Например, 44 640 минут равны одному сайту, работающему круглосуточно за весь месяц. Когда вы достигните лимита, ваши сайты будут отключаться до тех пор, пока вы не обновите тарифный план или не сократите нагрузку. При использовании узлов не тарифицируется.", - "billingUsersInfo": "С вас взимается плата за каждого пользователя в вашей организации. Оплата рассчитывается ежедневно исходя из количества активных учетных записей пользователей в вашей организации.", - "billingDomainInfo": "С вас взимается плата за каждый домен в вашей организации. Оплата рассчитывается ежедневно исходя из количества активных учетных записей доменов в вашей организации.", - "billingRemoteExitNodesInfo": "С вас взимается плата за каждый управляемый узел в вашей организации. Оплата рассчитывается ежедневно исходя из количества активных управляемых узлов в вашей организации.", + "billingUsersInfo": "Вы оплачиваете за каждого пользователя в организации. Платеж рассчитывается ежедневно в зависимости от количества активных учетных записей в вашем органе.", + "billingDomainInfo": "Вы платите за каждый домен в организации. Платеж рассчитывается ежедневно в зависимости от количества активных доменных аккаунтов в вашем органе.", + "billingRemoteExitNodesInfo": "Вы платите за каждый управляемый узел организации. Платёж рассчитывается ежедневно на основе количества активных управляемых узлов в вашем органе.", "domainNotFound": "Домен не найден", "domainNotFoundDescription": "Этот ресурс отключен, так как домен больше не существует в нашей системе. Пожалуйста, установите новый домен для этого ресурса.", "failed": "Ошибка", @@ -1430,29 +1465,32 @@ "and": "и", "privacyPolicy": "политика конфиденциальности" }, + "signUpMarketing": { + "keepMeInTheLoop": "Держите меня в цикле с новостями, обновлениями и новыми функциями по электронной почте." + }, "siteRequired": "Необходимо указать сайт.", "olmTunnel": "Olm Туннель", "olmTunnelDescription": "Используйте Olm для подключений клиентов", "errorCreatingClient": "Ошибка при создании клиента", "clientDefaultsNotFound": "Настройки клиента по умолчанию не найдены", "createClient": "Создать клиента", - "createClientDescription": "Создайте нового клиента для подключения к вашим сайтам", + "createClientDescription": "Создайте нового клиента для доступа к приватным ресурсам", "seeAllClients": "Просмотреть всех клиентов", "clientInformation": "Информация о клиенте", "clientNamePlaceholder": "Имя клиента", "address": "Адрес", "subnetPlaceholder": "Подсеть", - "addressDescription": "Адрес, который этот клиент будет использовать для подключения", + "addressDescription": "Внутренний адрес клиента. Должен находиться в подсети организации.", "selectSites": "Выберите сайты", "sitesDescription": "Клиент будет иметь подключение к выбранным сайтам", "clientInstallOlm": "Установить Olm", "clientInstallOlmDescription": "Запустите Olm на вашей системе", - "clientOlmCredentials": "Учётные данные Olm", - "clientOlmCredentialsDescription": "Так Olm будет аутентифицироваться через сервер", - "olmEndpoint": "Конечная точка Olm", - "olmId": "Olm ID", - "olmSecretKey": "Секретный ключ Olm", - "clientCredentialsSave": "Сохраните ваши учётные данные", + "clientOlmCredentials": "Полномочия", + "clientOlmCredentialsDescription": "Именно так клиент будет аутентифицироваться с сервером", + "olmEndpoint": "Endpoint", + "olmId": "ID", + "olmSecretKey": "Секретный ключ", + "clientCredentialsSave": "Сохранить учетные данные", "clientCredentialsSaveDescription": "Вы сможете увидеть их только один раз. Обязательно скопируйте в безопасное место.", "generalSettingsDescription": "Настройте общие параметры для этого клиента", "clientUpdated": "Клиент обновлен", @@ -1463,9 +1501,7 @@ "sitesFetchError": "Произошла ошибка при получении сайтов.", "olmErrorFetchReleases": "Произошла ошибка при получении релизов Olm.", "olmErrorFetchLatest": "Произошла ошибка при получении последнего релиза Olm.", - "remoteSubnets": "Удалённые подсети", "enterCidrRange": "Введите диапазон CIDR", - "remoteSubnetsDescription": "Добавьте диапазоны адресов CIDR, которые можно получить из этого сайта удаленно, используя клиентов. Используйте формат 10.0.0.0/24. Это относится ТОЛЬКО к подключению через VPN клиентов.", "resourceEnableProxy": "Включить публичный прокси", "resourceEnableProxyDescription": "Включите публичное проксирование для этого ресурса. Это позволяет получить доступ к ресурсу извне сети через облако через открытый порт. Требуется конфигурация Traefik.", "externalProxyEnabled": "Внешний прокси включен", @@ -1483,14 +1519,15 @@ "enableHealthChecksDescription": "Мониторинг здоровья этой цели. При необходимости можно контролировать другую конечную точку.", "healthScheme": "Метод", "healthSelectScheme": "Выберите метод", + "healthCheckPortInvalid": "Порт проверки здоровья должен быть от 1 до 65535", "healthCheckPath": "Путь", "healthHostname": "IP / хост", "healthPort": "Порт", "healthCheckPathDescription": "Путь к проверке состояния здоровья.", - "healthyIntervalSeconds": "Интервал здоровых состояний", - "unhealthyIntervalSeconds": "Интервал нездоровых состояний", + "healthyIntervalSeconds": "Здоровой Интервал (сек)", + "unhealthyIntervalSeconds": "Нездоровый интервал (сек)", "IntervalSeconds": "Интервал здоровых состояний", - "timeoutSeconds": "Тайм-аут", + "timeoutSeconds": "Таймаут (сек)", "timeIsInSeconds": "Время указано в секундах", "retryAttempts": "Количество попыток повторного запроса", "expectedResponseCodes": "Ожидаемые коды ответов", @@ -1526,12 +1563,12 @@ "resourceEditDomain": "Редактировать домен", "siteName": "Имя сайта", "proxyPort": "Порт", - "resourcesTableProxyResources": "Проксированные ресурсы", - "resourcesTableClientResources": "Клиентские ресурсы", + "resourcesTableProxyResources": "Публичный", + "resourcesTableClientResources": "Приватный", "resourcesTableNoProxyResourcesFound": "Проксированных ресурсов не найдено.", "resourcesTableNoInternalResourcesFound": "Внутренних ресурсов не найдено.", "resourcesTableDestination": "Пункт назначения", - "resourcesTableTheseResourcesForUseWith": "Эти ресурсы предназначены для использования с", + "resourcesTableAlias": "Alias", "resourcesTableClients": "Клиенты", "resourcesTableAndOnlyAccessibleInternally": "и доступны только внутренне при подключении с клиентом.", "resourcesTableNoTargets": "Нет ярлыков", @@ -1540,8 +1577,8 @@ "resourcesTableOffline": "Оффлайн", "resourcesTableUnknown": "Неизвестен", "resourcesTableNotMonitored": "Не отслеживается", - "editInternalResourceDialogEditClientResource": "Редактировать ресурс клиента", - "editInternalResourceDialogUpdateResourceProperties": "Обновите свойства ресурса и настройку цели для {resourceName}.", + "editInternalResourceDialogEditClientResource": "Изменить приватный ресурс", + "editInternalResourceDialogUpdateResourceProperties": "Обновить настройки ресурса и элементы управления доступом для {resourceName}", "editInternalResourceDialogResourceProperties": "Свойства ресурса", "editInternalResourceDialogName": "Имя", "editInternalResourceDialogProtocol": "Протокол", @@ -1560,11 +1597,22 @@ "editInternalResourceDialogInvalidIPAddressFormat": "Неверный формат IP адреса", "editInternalResourceDialogDestinationPortMin": "Целевой порт должен быть не менее 1", "editInternalResourceDialogDestinationPortMax": "Целевой порт должен быть меньше 65536", + "editInternalResourceDialogPortModeRequired": "Порт для порта необходим для протокола, прокси и порта назначения", + "editInternalResourceDialogMode": "Режим", + "editInternalResourceDialogModePort": "Порт", + "editInternalResourceDialogModeHost": "Хост", + "editInternalResourceDialogModeCidr": "СИДР", + "editInternalResourceDialogDestination": "Пункт назначения", + "editInternalResourceDialogDestinationHostDescription": "IP адрес или имя хоста ресурса в сети сайта.", + "editInternalResourceDialogDestinationIPDescription": "IP или адрес хоста ресурса в сети сайта.", + "editInternalResourceDialogDestinationCidrDescription": "Диапазон CIDR ресурса в сети сайта.", + "editInternalResourceDialogAlias": "Alias", + "editInternalResourceDialogAliasDescription": "Дополнительный внутренний DNS псевдоним для этого ресурса.", "createInternalResourceDialogNoSitesAvailable": "Нет доступных сайтов", "createInternalResourceDialogNoSitesAvailableDescription": "Вам необходимо иметь хотя бы один сайт Newt с настроенной подсетью для создания внутреннего ресурса.", "createInternalResourceDialogClose": "Закрыть", - "createInternalResourceDialogCreateClientResource": "Создать ресурс клиента", - "createInternalResourceDialogCreateClientResourceDescription": "Создайте новый ресурс, который будет доступен клиентам, подключенным к выбранному сайту.", + "createInternalResourceDialogCreateClientResource": "Создать приватный ресурс", + "createInternalResourceDialogCreateClientResourceDescription": "Создать новый ресурс, который будет доступен только клиентам, подключенным к организации", "createInternalResourceDialogResourceProperties": "Свойства ресурса", "createInternalResourceDialogName": "Имя", "createInternalResourceDialogSite": "Сайт", @@ -1593,11 +1641,22 @@ "createInternalResourceDialogInvalidIPAddressFormat": "Неверный формат IP-адреса", "createInternalResourceDialogDestinationPortMin": "Целевой порт должен быть не менее 1", "createInternalResourceDialogDestinationPortMax": "Целевой порт должен быть меньше 65536", + "createInternalResourceDialogPortModeRequired": "Порт для порта необходим для протокола, прокси и порта назначения", + "createInternalResourceDialogMode": "Режим", + "createInternalResourceDialogModePort": "Порт", + "createInternalResourceDialogModeHost": "Хост", + "createInternalResourceDialogModeCidr": "СИДР", + "createInternalResourceDialogDestination": "Пункт назначения", + "createInternalResourceDialogDestinationHostDescription": "IP адрес или имя хоста ресурса в сети сайта.", + "createInternalResourceDialogDestinationCidrDescription": "Диапазон CIDR ресурса в сети сайта.", + "createInternalResourceDialogAlias": "Alias", + "createInternalResourceDialogAliasDescription": "Дополнительный внутренний DNS псевдоним для этого ресурса.", "siteConfiguration": "Конфигурация", "siteAcceptClientConnections": "Принимать подключения клиентов", - "siteAcceptClientConnectionsDescription": "Разрешите другим устройствам подключаться через этот экземпляр Newt в качестве шлюза с использованием клиентов.", - "siteAddress": "Адрес сайта", - "siteAddressDescription": "Укажите IP-адрес хоста для подключения клиентов. Это внутренний адрес сайта в сети Pangolin для адресации клиентов. Должен находиться в пределах подсети организационного уровня.", + "siteAcceptClientConnectionsDescription": "Разрешить пользовательским устройствам и клиентам доступ к ресурсам на этом сайте. Это может быть изменено позже.", + "siteAddress": "Адрес сайта (Дополнительно)", + "siteAddressDescription": "Внутренний адрес сайта. Должен находиться в подсети организации.", + "siteNameDescription": "Отображаемое имя сайта, которое может быть изменено позже.", "autoLoginExternalIdp": "Автоматический вход с внешним провайдером", "autoLoginExternalIdpDescription": "Немедленно перенаправьте пользователя к внешнему провайдеру для аутентификации.", "selectIdp": "Выберите провайдера", @@ -1611,7 +1670,7 @@ "autoLoginErrorNoRedirectUrl": "URL-адрес перенаправления не получен от провайдера удостоверения.", "autoLoginErrorGeneratingUrl": "Не удалось сгенерировать URL-адрес аутентификации.", "remoteExitNodeManageRemoteExitNodes": "Удаленные узлы", - "remoteExitNodeDescription": "Самохост-один или несколько удаленных узлов для расширения сетевого подключения и уменьшения зависимости от облака", + "remoteExitNodeDescription": "Самохост-один или несколько удаленных узлов для расширения сетевого соединения и уменьшения зависимости от облака", "remoteExitNodes": "Узлы", "searchRemoteExitNodes": "Поиск узлов...", "remoteExitNodeAdd": "Добавить узел", @@ -1623,11 +1682,11 @@ "sidebarRemoteExitNodes": "Удаленные узлы", "remoteExitNodeCreate": { "title": "Создать узел", - "description": "Создайте новый узел, чтобы расширить сетевое подключение", + "description": "Создать новый узел для расширения сетевого подключения", "viewAllButton": "Все узлы", "strategy": { "title": "Стратегия создания", - "description": "Выберите эту опцию для настройки вашего узла или создания новых учетных данных.", + "description": "Выберите эту опцию для настройки узла или создания новых учетных данных.", "adopt": { "title": "Принять узел", "description": "Выберите это, если у вас уже есть учетные данные для узла." @@ -1648,7 +1707,7 @@ }, "generate": { "title": "Сгенерированные учетные данные", - "description": "Используйте эти учётные данные для настройки вашего узла", + "description": "Используйте эти учётные данные для настройки узла", "nodeIdTitle": "ID узла", "secretTitle": "Секретный ключ", "saveCredentialsTitle": "Добавить учетные данные в конфигурацию", @@ -1725,14 +1784,14 @@ "roleMappingExpressionPlaceholder": "например, contains(groups, 'admin') && 'Admin' || 'Member'", "idpGoogleConfiguration": "Конфигурация Google", "idpGoogleConfigurationDescription": "Настройка учетных данных Google OAuth2", - "idpGoogleClientIdDescription": "Ваш Google OAuth2 ID клиента", - "idpGoogleClientSecretDescription": "Ваш Google OAuth2 Секрет", + "idpGoogleClientIdDescription": "Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Секрет клиента Google OAuth2", "idpAzureConfiguration": "Конфигурация Azure Entra ID", - "idpAzureConfigurationDescription": "Настройте учетные данные Azure Entra ID OAuth2", + "idpAzureConfigurationDescription": "Настройка учетных данных Azure Entra ID OAuth2", "idpTenantId": "Идентификатор арендатора", - "idpTenantIdPlaceholder": "ваш тенант-id", - "idpAzureTenantIdDescription": "Идентификатор арендатора Azure (найден в обзоре Active Directory Azure)", - "idpAzureClientIdDescription": "Ваш идентификатор клиента Azure App", + "idpTenantIdPlaceholder": "tenant-id", + "idpAzureTenantIdDescription": "ID арендатора Azure (найден в обзоре Active Directory Azure)", + "idpAzureClientIdDescription": "Регистрационный номер клиента Azure App", "idpAzureClientSecretDescription": "Секрет регистрации клиента Azure App", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", @@ -1741,14 +1800,14 @@ "idpGoogleConfigurationTitle": "Конфигурация Google", "idpAzureConfigurationTitle": "Конфигурация Azure Entra ID", "idpTenantIdLabel": "Идентификатор арендатора", - "idpAzureClientIdDescription2": "Ваш идентификатор клиента Azure App", + "idpAzureClientIdDescription2": "Регистрационный номер клиента Azure App", "idpAzureClientSecretDescription2": "Секрет регистрации клиента Azure App", "idpGoogleDescription": "Google OAuth2/OIDC провайдер", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", "subnet": "Подсеть", "subnetDescription": "Подсеть для конфигурации сети этой организации.", "authPage": "Страница авторизации", - "authPageDescription": "Настройка страницы авторизации для вашей организации", + "authPageDescription": "Настроить страницу авторизации для организации", "authPageDomain": "Домен страницы авторизации", "noDomainSet": "Домен не установлен", "changeDomain": "Изменить домен", @@ -1758,7 +1817,7 @@ "setAuthPageDomain": "Установить домен страницы авторизации", "failedToFetchCertificate": "Не удалось получить сертификат", "failedToRestartCertificate": "Не удалось перезапустить сертификат", - "addDomainToEnableCustomAuthPages": "Добавьте домен для включения пользовательских страниц аутентификации для вашей организации", + "addDomainToEnableCustomAuthPages": "Добавить домен для включения пользовательских страниц аутентификации для организации", "selectDomainForOrgAuthPage": "Выберите домен для страницы аутентификации организации", "domainPickerProvidedDomain": "Домен предоставлен", "domainPickerFreeProvidedDomain": "Бесплатный домен", @@ -1773,7 +1832,7 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" не может быть действительным для {domain}.", "domainPickerSubdomainSanitized": "Субдомен очищен", "domainPickerSubdomainCorrected": "\"{sub}\" был исправлен на \"{sanitized}\"", - "orgAuthSignInTitle": "Войдите в свою организацию", + "orgAuthSignInTitle": "Войти в организацию", "orgAuthChooseIdpDescription": "Выберите своего поставщика удостоверений личности для продолжения", "orgAuthNoIdpConfigured": "Эта организация не имеет настроенных поставщиков идентификационных данных. Вместо этого вы можете войти в свой Pangolin.", "orgAuthSignInWithPangolin": "Войти через Pangolin", @@ -1791,7 +1850,7 @@ "enableTwoFactorAuthentication": "Включить двухфакторную аутентификацию", "completeSecuritySteps": "Пройти шаги безопасности", "securitySettings": "Настройки безопасности", - "securitySettingsDescription": "Настройка политик безопасности для вашей организации", + "securitySettingsDescription": "Настройка политик безопасности для организации", "requireTwoFactorForAllUsers": "Требовать двухфакторную аутентификацию для всех пользователей", "requireTwoFactorDescription": "Когда включено, все внутренние пользователи в этой организации должны иметь двухфакторную аутентификацию для доступа к организации.", "requireTwoFactorDisabledDescription": "Эта функция требует действительной лицензии (Enterprise) или активной подписки (SaaS)", @@ -1854,8 +1913,12 @@ "enterpriseEdition": "Корпоративная версия", "unlicensed": "Нелицензированный", "beta": "Бета", - "manageClients": "Управление клиентами", - "manageClientsDescription": "Клиенты - это устройства, которые могут подключаться к вашим сайтам", + "manageUserDevices": "Устройства пользователя", + "manageUserDevicesDescription": "Просмотр и управление устройствами, которые пользователи используют для приватного подключения к ресурсам", + "manageMachineClients": "Управление машинными клиентами", + "manageMachineClientsDescription": "Создание и управление клиентами, которые используют серверы и системы для частного подключения к ресурсам", + "clientsTableUserClients": "Пользователь", + "clientsTableMachineClients": "Машина", "licenseTableValidUntil": "Действителен до", "saasLicenseKeysSettingsTitle": "Корпоративные лицензии", "saasLicenseKeysSettingsDescription": "Генерировать и управлять лицензионными ключами Enterprise для копий Pangolin", @@ -1990,11 +2053,12 @@ "pathRewriteStripLabel": "полоса", "sidebarEnableEnterpriseLicense": "Включить корпоративную лицензию", "cannotbeUndone": "Это действие не может быть отменено.", - "toConfirm": "для подтверждения", + "toConfirm": "для подтверждения.", "deleteClientQuestion": "Вы уверены, что хотите удалить клиента из сайта и организации?", "clientMessageRemove": "После удаления клиент больше не сможет подключиться к сайту.", "sidebarLogs": "Логи", "request": "Запросить", + "requests": "Запросы", "logs": "Логи", "logsSettingsDescription": "Отслеживать журналы, собранные в этой организации", "searchLogs": "Поиск журналов...", @@ -2020,6 +2084,7 @@ "ip": "IP", "reason": "Причина", "requestLogs": "Запросить журналы", + "requestAnalytics": "Аналитика запроса", "host": "Хост", "location": "Местоположение", "actionLogs": "Журнал действий", @@ -2029,6 +2094,7 @@ "logRetention": "Сохранение журнала", "logRetentionDescription": "Управление сохранением различных типов журналов для этой организации или отключение их", "requestLogsDescription": "Просмотреть подробные журналы запроса ресурсов в этой организации", + "requestAnalyticsDescription": "Просмотреть подробную аналитику запроса для ресурсов в этой организации", "logRetentionRequestLabel": "Запросить сохранение журнала", "logRetentionRequestDescription": "Как долго сохранять журналы запросов", "logRetentionAccessLabel": "Хранение журнала доступа", @@ -2042,6 +2108,7 @@ "logRetention30Days": "30 дней", "logRetention90Days": "90 дней", "logRetentionForever": "Всегда", + "logRetentionEndOfFollowingYear": "Конец следующего года", "actionLogsDescription": "Просмотр истории действий, выполненных в этой организации", "accessLogsDescription": "Просмотр запросов авторизации доступа к ресурсам этой организации", "licenseRequiredToUse": "Для использования этой функции требуется лицензия предприятия.", @@ -2052,7 +2119,7 @@ "preferWildcardCert": "Предпочитать сертификат Wildcard", "unverified": "Не подтверждено", "domainSetting": "Настройки домена", - "domainSettingDescription": "Настройка параметров для вашего домена", + "domainSettingDescription": "Настройка параметров домена", "preferWildcardCertDescription": "Попытка создания шаблона сертификата (требуется должным образом сконфигурированный резолвер сертификата).", "recordName": "Имя записи", "auto": "Авто", @@ -2066,15 +2133,15 @@ "olmUpdateAvailableInfo": "Доступна обновленная версия Олма. Пожалуйста, обновитесь до последней версии.", "client": "Клиент", "proxyProtocol": "Настройки протокола прокси", - "proxyProtocolDescription": "Настроить Прокси-протокол для сохранения IP-адресов клиента для служб TCP/UDP.", + "proxyProtocolDescription": "Настроить Прокси-протокол для сохранения IP-адресов клиента для служб TCP.", "enableProxyProtocol": "Включить Прокси Протокол", - "proxyProtocolInfo": "Сохранять IP-адреса клиента для кэша TCP/UDP", + "proxyProtocolInfo": "Сохранять IP-адреса клиента для backend'ов TCP", "proxyProtocolVersion": "Версия протокола прокси", "version1": " Версия 1 (рекомендуется)", "version2": "Версия 2", "versionDescription": "Версия 1 основана на тексте и широко поддерживается. Версия 2 является бинарной и более эффективной, но менее совместимой.", "warning": "Предупреждение", - "proxyProtocolWarning": "Бэкэнд приложение должно быть сконфигурировано для принятия прокси-соединений. Если ваш бэкэнд не поддерживает Прокси-протокол, это нарушит все соединения. Обязательно настройте вашего бэкэнда на доверие заголовкам Proxy Protocol от Traefik.", + "proxyProtocolWarning": "Бэкэнд приложение должно быть настроено на принятие соединений прокси-протокола. Если ваш бэкэнд не поддерживает Прокси-протокол, то включение этой опции прервет все подключения, поэтому включите это только если вы знаете, что вы делаете. Обязательно настройте вашего бэкэнда на доверие заголовкам Proxy Protocol от Traefik.", "restarting": "Перезапуск...", "manual": "Ручной", "messageSupport": "Поддержка сообщений", @@ -2097,6 +2164,43 @@ "supportMessageSent": "Сообщение отправлено!", "supportWillContact": "Мы скоро свяжемся с Вами!", "selectLogRetention": "Выберите удержание журнала", + "terms": "Условия", + "privacy": "Приватность", + "security": "Безопасность", + "docs": "Документ", + "deviceActivation": "Активация устройства", + "deviceCodeInvalidFormat": "Код должен быть 9 символов (например, A1AJ-N5JD)", + "deviceCodeInvalidOrExpired": "Неверный или просроченный код", + "deviceCodeVerifyFailed": "Не удалось проверить код устройства", + "signedInAs": "Вы вошли как", + "deviceCodeEnterPrompt": "Введите код, отображаемый на устройстве", + "continue": "Продолжить", + "deviceUnknownLocation": "Неизвестное местоположение", + "deviceAuthorizationRequested": "Эта авторизация была запрошена у {location} на {date}. Убедитесь, что вы доверяете этому устройству, так как оно получит доступ к учетной записи.", + "deviceLabel": "Устройство: {deviceName}", + "deviceWantsAccess": "хочет получить доступ к вашей учетной записи", + "deviceExistingAccess": "Существующий доступ:", + "deviceFullAccess": "Полный доступ к вашему аккаунту", + "deviceOrganizationsAccess": "Доступ ко всем организациям, к которым ваш аккаунт имеет доступ", + "deviceAuthorize": "Авторизовать {applicationName}", + "deviceConnected": "Устройство подключено!", + "deviceAuthorizedMessage": "Устройство авторизовано для доступа к вашей учетной записи.", + "pangolinCloud": "Облако Панголина", + "viewDevices": "Просмотр устройств", + "viewDevicesDescription": "Управление подключенными устройствами", + "noDevices": "Устройств не найдено", + "dateCreated": "Дата создания", + "unnamedDevice": "Безымянное устройство", + "deviceQuestionRemove": "Вы уверены, что хотите удалить это устройство?", + "deviceMessageRemove": "Это действие нельзя отменить.", + "deviceDeleteConfirm": "Удалить устройство", + "deleteDevice": "Удалить устройство", + "errorLoadingDevices": "Ошибка загрузки устройств", + "failedToLoadDevices": "Не удалось загрузить устройства", + "deviceDeleted": "Устройство удалено", + "deviceDeletedDescription": "Устройство успешно удалено.", + "errorDeletingDevice": "Ошибка удаления устройства", + "failedToDeleteDevice": "Не удалось удалить устройство", "showColumns": "Показать колонки", "hideColumns": "Скрыть столбцы", "columnVisibility": "Видимость столбцов", @@ -2111,10 +2215,14 @@ "enableSelected": "Включить выбранные", "disableSelected": "Отключить выбранные", "checkSelectedStatus": "Проверить статус выбранных", + "clients": "Клиенты", + "accessClientSelect": "Выберите машинные клиенты", + "resourceClientDescription": "Машинные клиенты, которые имеют доступ к этому ресурсу", + "regenerate": "Пересоздать", "credentials": "Полномочия", "savecredentials": "Сохранить учетные данные", - "regeneratecredentials": "Пере-ключ", - "regenerateCredentials": "Сгенерировать и сохранить ваши учетные данные", + "regenerateCredentialsButton": "Пересоздать учетные данные", + "regenerateCredentials": "Пересоздать учетные данные", "generatedcredentials": "Сгенерированные учетные данные", "copyandsavethesecredentials": "Копировать и сохранить эти учетные данные", "copyandsavethesecredentialsdescription": "Эти учетные данные не будут отображаться снова после того, как вы покинете эту страницу. Сохраните их сейчас.", @@ -2122,13 +2230,12 @@ "credentialsSavedDescription": "Учетные данные были успешно восстановлены и сохранены.", "credentialsSaveError": "Ошибка сохранения учетных данных", "credentialsSaveErrorDescription": "Произошла ошибка при восстановлении и сохранении учетных данных.", - "regenerateCredentialsWarning": "Восстановление учётных данных приведет к недействительным предыдущим. Убедитесь, что все конфигурации, использующие эти учетные данные.", + "regenerateCredentialsWarning": "Восстановление учётных данных приведет к аннулированию предыдущих учетных данных и отключению соединения. Убедитесь, что все конфигурации, использующие эти учетные данные.", "confirm": "Подтвердить", "regenerateCredentialsConfirmation": "Вы уверены, что хотите восстановить учетные данные?", "endpoint": "Endpoint", "Id": "Id", "SecretKey": "Секретный ключ", - "featureDisabledTooltip": "Эта функция доступна только в плане предприятия и требует лицензии на ее использование.", "niceId": "Неплохой ID", "niceIdUpdated": "Хороший ID обновлен", "niceIdUpdatedSuccessfully": "Неплохой ID успешно обновлен", @@ -2136,5 +2243,32 @@ "niceIdUpdateErrorDescription": "Произошла ошибка при обновлении Nice ID.", "niceIdCannotBeEmpty": "Неправильный ID не может быть пустым", "enterIdentifier": "Введите идентификатор", - "identifier": "Identifier" + "identifier": "Identifier", + "deviceLoginUseDifferentAccount": "Не вы? Используйте другую учетную запись.", + "deviceLoginDeviceRequestingAccessToAccount": "Устройство запрашивает доступ к этой учетной записи.", + "noData": "Нет данных", + "machineClients": "Машинные клиенты", + "install": "Установить", + "run": "Запустить", + "clientNameDescription": "Отображаемое имя клиента, которое может быть изменено позже.", + "clientAddress": "Адрес клиента (Дополнительно)", + "setupFailedToFetchSubnet": "Не удалось получить подсеть по умолчанию", + "setupSubnetAdvanced": "Подсеть (Дополнительно)", + "setupSubnetDescription": "Подсеть для внутренней сети этой организации.", + "siteRegenerateAndDisconnect": "Сгенерировать и отключить", + "siteRegenerateAndDisconnectConfirmation": "Вы уверены, что хотите сгенерировать учетные данные и отключить этот сайт?", + "siteRegenerateAndDisconnectWarning": "Это позволит восстановить учетные данные и немедленно отключить сайт. Сайт будет перезапущен с новыми учетными данными.", + "siteRegenerateCredentialsConfirmation": "Вы уверены, что хотите восстановить учетные данные для этого сайта?", + "siteRegenerateCredentialsWarning": "Это позволит восстановить учетные данные. Сайт будет оставаться подключенным, пока вы не перезапустите его вручную и используйте новые учетные данные.", + "clientRegenerateAndDisconnect": "Сгенерировать и отключить", + "clientRegenerateAndDisconnectConfirmation": "Вы уверены, что хотите восстановить учетные данные и отключить этого клиента?", + "clientRegenerateAndDisconnectWarning": "Это позволит восстановить учетные данные и немедленно отключить клиент. Клиент будет перезапущен с новыми учетными данными.", + "clientRegenerateCredentialsConfirmation": "Вы уверены, что хотите сгенерировать данные для этого клиента?", + "clientRegenerateCredentialsWarning": "Это позволит восстановить учетные данные. Клиент останется подключенным, пока вы не перезапустите его вручную и воспользуетесь новыми учетными данными.", + "remoteExitNodeRegenerateAndDisconnect": "Сгенерировать и отключить", + "remoteExitNodeRegenerateAndDisconnectConfirmation": "Вы уверены, что хотите сгенерировать учетные данные и отключить этот удаленный узел?", + "remoteExitNodeRegenerateAndDisconnectWarning": "Это позволит восстановить учётные данные и немедленно отключить удаленный узел выхода. Удаленный узел выхода должен быть перезапущен с новыми учетными данными.", + "remoteExitNodeRegenerateCredentialsConfirmation": "Вы уверены, что хотите восстановить учетные данные для этого удаленного выхода узла?", + "remoteExitNodeRegenerateCredentialsWarning": "Это позволит восстановить учетные данные. Удалённый узел останется подключенным, пока вы не перезапустите его вручную и воспользуетесь новыми учетными данными.", + "agent": "Агент" } diff --git a/messages/tr-TR.json b/messages/tr-TR.json index 7fc8c5ff8..7119808a8 100644 --- a/messages/tr-TR.json +++ b/messages/tr-TR.json @@ -1,12 +1,12 @@ { - "setupCreate": "Organizasyonunuzu, sitenizi ve kaynaklarınızı oluşturun", + "setupCreate": "Organizasyonu, siteyi ve kaynakları oluşturun", "setupNewOrg": "Yeni Organizasyon", "setupCreateOrg": "Organizasyon Oluştur", "setupCreateResources": "Kaynaklar Oluştur", "setupOrgName": "Organizasyon Adı", - "orgDisplayName": "Bu, organizasyonunuzun görünen adıdır.", + "orgDisplayName": "Bu organizasyonun görünen adıdır.", "orgId": "Organizasyon ID", - "setupIdentifierMessage": "Bu, organizasyonunuzun benzersiz kimliğidir. Görünen adtan ayrı olarak.", + "setupIdentifierMessage": "Bu organizasyonun benzersiz tanımlayıcısıdır.", "setupErrorIdentifier": "Organizasyon ID'si zaten alınmış. Lütfen başka bir tane seçin.", "componentsErrorNoMemberCreate": "Şu anda herhangi bir organizasyona üye değilsiniz. Başlamak için bir organizasyon oluşturun.", "componentsErrorNoMember": "Şu anda herhangi bir organizasyona üye değilsiniz.", @@ -50,7 +50,7 @@ "siteMessageRemove": "Kaldırıldıktan sonra site artık erişilebilir olmayacaktır. Siteyle ilişkilendirilmiş tüm hedefler de kaldırılacaktır.", "siteQuestionRemove": "Siteyi organizasyondan kaldırmak istediğinizden emin misiniz?", "siteManageSites": "Siteleri Yönet", - "siteDescription": "Ağınıza güvenli tüneller üzerinden bağlantı izni verin", + "siteDescription": "Özel ağlara erişimi etkinleştirmek için siteler oluşturun ve yönetin", "siteCreate": "Site Oluştur", "siteCreateDescription2": "Yeni bir site oluşturup bağlanmak için aşağıdaki adımları izleyin", "siteCreateDescription": "Kaynaklarınızı bağlamaya başlamak için yeni bir site oluşturun", @@ -89,7 +89,7 @@ "siteGeneralDescription": "Bu site için genel ayarları yapılandırın", "siteSettingDescription": "Sitenizdeki ayarları yapılandırın", "siteSetting": "{siteName} Ayarları", - "siteNewtTunnel": "Newt Tüneli (Önerilen)", + "siteNewtTunnel": "Newt Site (Önerilen)", "siteNewtTunnelDescription": "Ağınıza giriş noktası oluşturmanın en kolay yolu. Ekstra kurulum gerekmez.", "siteWg": "Temel WireGuard", "siteWgDescription": "Bir tünel oluşturmak için herhangi bir WireGuard istemcisi kullanın. Manuel NAT kurulumu gereklidir.", @@ -98,8 +98,8 @@ "siteLocalDescriptionSaas": "Yerel kaynaklar yalnızca. Tünel oluşturma yok. Yalnızca uzak düğümlerde mevcuttur.", "siteSeeAll": "Tüm Siteleri Gör", "siteTunnelDescription": "Sitenize nasıl bağlanmak istediğinizi belirleyin", - "siteNewtCredentials": "Newt Kimlik Bilgileri", - "siteNewtCredentialsDescription": "Bu, Newt'in sunucu ile kimlik doğrulaması yapacağı yöntemdir", + "siteNewtCredentials": "Kimlik Bilgileri", + "siteNewtCredentialsDescription": "Bu, sitenin sunucu ile kimlik doğrulaması yapacağı yöntemdir", "siteCredentialsSave": "Kimlik Bilgilerinizi Kaydedin", "siteCredentialsSaveDescription": "Yalnızca bir kez görebileceksiniz. Güvenli bir yere kopyaladığınızdan emin olun.", "siteInfo": "Site Bilgilendirmesi", @@ -144,8 +144,10 @@ "expires": "Süresi Doluyor", "never": "Asla", "shareErrorSelectResource": "Lütfen bir kaynak seçin", - "resourceTitle": "Kaynakları Yönet", - "resourceDescription": "Özel uygulamalarınıza güvenli vekil sunucular oluşturun", + "proxyResourceTitle": "Herkese Açık Kaynakları Yönet", + "proxyResourceDescription": "Bir web tarayıcısı aracılığıyla kamuya açık kaynaklar oluşturun ve yönetin", + "clientResourceTitle": "Özel Kaynakları Yönet", + "clientResourceDescription": "Sadece bağlı bir istemci aracılığıyla erişilebilen kaynakları oluşturun ve yönetin", "resourcesSearch": "Kaynakları ara...", "resourceAdd": "Kaynak Ekle", "resourceErrorDelte": "Kaynak silinirken hata", @@ -179,7 +181,7 @@ "baseDomain": "Temel Alan Adı", "subdomnainDescription": "Kaynağınızın erişilebileceği alt alan adı.", "resourceRawSettings": "TCP/UDP Ayarları", - "resourceRawSettingsDescription": "Kaynağınızın TCP/UDP üzerinden nasıl erişileceğini yapılandırın. Kaynağı, sunucudan erişebilmeniz için bir ana bilgisayar Pangolin sunucusundaki bir bağlantı noktasına eşlersiniz: sunucu genel-IP: eşlenen-bağlantı-noktası.", + "resourceRawSettingsDescription": "Kaynaklara TCP/UDP üzerinden nasıl erişileceğini yapılandırın", "protocol": "Protokol", "protocolSelect": "Bir protokol seçin", "resourcePortNumber": "Port Numarası", @@ -204,8 +206,8 @@ "rules": "Kurallar", "resourceSettingDescription": "Kaynağınızdaki ayarları yapılandırın", "resourceSetting": "{resourceName} Ayarları", - "alwaysAllow": "Her Zaman İzin Ver", - "alwaysDeny": "Her Zaman Reddet", + "alwaysAllow": "Kimlik Doğrulamayı Atla", + "alwaysDeny": "Erişimi Engelle", "passToAuth": "Kimlik Doğrulamasına Geç", "orgSettingsDescription": "Organizasyonunuzun genel ayarlarını yapılandırın", "orgGeneralSettings": "Organizasyon Ayarları", @@ -232,7 +234,7 @@ "orgMissing": "Organizasyon Kimliği Eksik", "orgMissingMessage": "Organizasyon kimliği olmadan daveti yeniden oluşturmanız mümkün değildir.", "accessUsersManage": "Kullanıcıları Yönet", - "accessUsersDescription": "Kullanıcıları davet edin ve erişimi yönetmek için rollere ekleyin", + "accessUsersDescription": "Bu organizasyona erişimi olan kullanıcıları davet edin ve yönetin", "accessUsersSearch": "Kullanıcıları ara...", "accessUserCreate": "Kullanıcı Oluştur", "accessUserRemove": "Kullanıcıyı Kaldır", @@ -241,13 +243,13 @@ "role": "Rol", "nameRequired": "Ad gereklidir", "accessRolesManage": "Rolleri Yönet", - "accessRolesDescription": "Organizasyonunuza erişimi yönetmek için rolleri yapılandırın", + "accessRolesDescription": "Organizasyondaki kullanıcılar için rolleri oluşturun ve yönetin", "accessRolesSearch": "Rolleri ara...", "accessRolesAdd": "Rol Ekle", "accessRoleDelete": "Rolü Sil", "description": "Açıklama", "inviteTitle": "Açık Davetiyeler", - "inviteDescription": "Davetiyelerinizi diğer kullanıcılarla yönetin", + "inviteDescription": "Organizasyona katılmak için diğer kullanıcılar için davetleri yönetin", "inviteSearch": "Davetiyeleri ara...", "minutes": "Dakika", "hours": "Saat", @@ -424,7 +426,7 @@ "userCreated": "Kullanıcı oluşturuldu", "userCreatedDescription": "Kullanıcı başarıyla oluşturulmuştur.", "userTypeInternal": "Dahili Kullanıcı", - "userTypeInternalDescription": "Kullanıcınızı doğrudan organizasyonunuza davet edin.", + "userTypeInternalDescription": "Kullanıcıyı doğrudan organizasyona davet edin.", "userTypeExternal": "Harici Kullanıcı", "userTypeExternalDescription": "Harici bir kimlik sağlayıcısıyla kullanıcı oluşturun.", "accessUserCreateDescription": "Yeni bir kullanıcı oluşturmak için aşağıdaki adımları izleyin", @@ -436,6 +438,16 @@ "inviteEmailSent": "Kullanıcıya davet e-postası gönder", "inviteValid": "Geçerli Süresi", "selectDuration": "Süreyi seçin", + "selectResource": "Kaynak Seçin", + "filterByResource": "Kaynağa Göre Filtrele", + "resetFilters": "Filtreleri Sıfırla", + "totalBlocked": "Pangolin Tarafından Engellenen İstekler", + "totalRequests": "Toplam İstekler", + "requestsByCountry": "Ülkeye Göre İstekler", + "requestsByDay": "Güne Göre İstekler", + "blocked": "Engellendi", + "allowed": "İzin Verildi", + "topCountries": "En İyi Ülkeler", "accessRoleSelect": "Rol seçin", "inviteEmailSentDescription": "Kullanıcıya erişim bağlantısı ile bir e-posta gönderildi. Daveti kabul etmek için bağlantıya erişmelidirler.", "inviteSentDescription": "Kullanıcı davet edilmiştir. Daveti kabul etmek için aşağıdaki bağlantıya erişmelidirler.", @@ -458,13 +470,13 @@ "accessControlsSubmit": "Erişim Kontrollerini Kaydet", "roles": "Roller", "accessUsersRoles": "Kullanıcılar ve Roller Yönetin", - "accessUsersRolesDescription": "Kullanıcılara davet gönderin ve organizasyonunuza erişim yönetmek için rollere ekleyin", + "accessUsersRolesDescription": "Kullanıcılara davet gönderin ve organizasyona erişimi yönetmek için rollere ekleyin", "key": "Anahtar", "createdAt": "Oluşturulma Tarihi", "proxyErrorInvalidHeader": "Geçersiz özel Ana Bilgisayar Başlığı değeri. Alan adı formatını kullanın veya özel Ana Bilgisayar Başlığını ayarlamak için boş bırakın.", "proxyErrorTls": "Geçersiz TLS Sunucu Adı. Alan adı formatını kullanın veya TLS Sunucu Adını kaldırmak için boş bırakılsın.", "proxyEnableSSL": "SSL Etkinleştir", - "proxyEnableSSLDescription": "Hedeflerinize güvenli HTTPS bağlantıları için SSL/TLS şifrelemesi etkinleştirin.", + "proxyEnableSSLDescription": "Hedeflere güvenli HTTPS bağlantıları için SSL/TLS şifrelemesini etkinleştirin.", "target": "Hedef", "configureTarget": "Hedefleri Yapılandır", "targetErrorFetch": "Hedefleri alamadı", @@ -480,29 +492,29 @@ "targetsErrorUpdate": "Hedefler güncellenemedi", "targetsErrorUpdateDescription": "Hedefler güncellenirken bir hata oluştu", "targetTlsUpdate": "TLS ayarları güncellendi", - "targetTlsUpdateDescription": "TLS ayarlarınız başarıyla güncellendi", + "targetTlsUpdateDescription": "TLS ayarları başarıyla güncellendi", "targetErrorTlsUpdate": "TLS ayarları güncellenemedi", "targetErrorTlsUpdateDescription": "TLS ayarlarını güncellerken bir hata oluştu", "proxyUpdated": "Proxy ayarları güncellendi", - "proxyUpdatedDescription": "Proxy ayarlarınız başarıyla güncellenmiştir", + "proxyUpdatedDescription": "Proxy ayarları başarıyla güncellendi", "proxyErrorUpdate": "Proxy ayarları güncellenemedi", "proxyErrorUpdateDescription": "Proxy ayarlarını güncellerken bir hata oluştu", - "targetAddr": "IP / Hostname", + "targetAddr": "Host", "targetPort": "Bağlantı Noktası", "targetProtocol": "Protokol", "targetTlsSettings": "HTTPS & TLS Settings", - "targetTlsSettingsDescription": "Configure TLS settings for your resource", + "targetTlsSettingsDescription": "SSL/TLS ayarlarını kaynak için yapılandırın", "targetTlsSettingsAdvanced": "Gelişmiş TLS Ayarları", "targetTlsSni": "TLS Sunucu Adı", "targetTlsSniDescription": "SNI için kullanılacak TLS Sunucu Adı'", "targetTlsSubmit": "Ayarları Kaydet", "targets": "Hedefler Konfigürasyonu", - "targetsDescription": "Trafiği arka uç hizmetlerinize yönlendirmek için hedefleri ayarlayın", + "targetsDescription": "Trafiği arka uç hizmetlerine yönlendirmek için hedefleri ayarlayın", "targetStickySessions": "Yapışkan Oturumları Etkinleştir", "targetStickySessionsDescription": "Bağlantıları oturum süresince aynı arka uç hedef üzerinde tutun.", "methodSelect": "Yöntemi Seç", "targetSubmit": "Hedef Ekle", - "targetNoOne": "Bu kaynağın hedefi yok. Arka planınıza istek göndereceğiniz bir hedef yapılandırmak için hedef ekleyin.", + "targetNoOne": "Bu kaynağın hedefleri yok. Arka uca gönderilecek istekleri yapılandırmak için bir hedef ekleyin.", "targetNoOneDescription": "Yukarıdaki birden fazla hedef ekleyerek yük dengeleme etkinleştirilecektir.", "targetsSubmit": "Hedefleri Kaydet", "addTarget": "Hedef Ekle", @@ -516,9 +528,11 @@ "targetCreatedDescription": "Hedef başarıyla oluşturuldu", "targetErrorCreate": "Hedef oluşturma başarısız oldu", "targetErrorCreateDescription": "Hedef oluşturulurken bir hata oluştu", + "tlsServerName": "TLS Sunucu Adı", + "tlsServerNameDescription": "SNI için kullanılacak TLS sunucu adı", "save": "Kaydet", "proxyAdditional": "Ek Proxy Ayarları", - "proxyAdditionalDescription": "Kaynağınızın proxy ayarlarını nasıl yöneteceğini yapılandırın", + "proxyAdditionalDescription": "Kaynağın proxy ayarlarını nasıl yöneteceği yapılandırın", "proxyCustomHeader": "Özel Ana Bilgisayar Başlığı", "proxyCustomHeaderDescription": "İstekleri proxy'lerken ayarlanacak ana bilgisayar başlığı. Varsayılanı kullanmak için boş bırakılır.", "proxyAdditionalSubmit": "Proxy Ayarlarını Kaydet", @@ -558,7 +572,7 @@ "rulesMatchType": "Eşleşme Türü", "value": "Değer", "rulesAbout": "Kurallar Hakkında", - "rulesAboutDescription": "Kurallar, kaynağınıza erişimi belirli bir kriterlere göre kontrol etmenizi sağlar. IP adresi veya URL yolu temelinde erişimi izin vermek veya engellemek için kurallar oluşturabilirsiniz.", + "rulesAboutDescription": "Kurallar, kaynağa erişimi belirli kriterlere göre kontrol etmenizi sağlar. IP adresi veya URL yolu temelinde erişimi izin vermek veya engellemek için kurallar oluşturabilirsiniz.", "rulesActions": "Aksiyonlar", "rulesActionAlwaysAllow": "Her Zaman İzin Ver: Tüm kimlik doğrulama yöntemlerini atlayın", "rulesActionAlwaysDeny": "Her Zaman Reddedin: Tüm istekleri engelleyin; kimlik doğrulaması yapılamaz", @@ -570,7 +584,7 @@ "rulesEnable": "Kuralları Etkinleştir", "rulesEnableDescription": "Bu kaynak için kural değerlendirmesini etkinleştirin veya devre dışı bırakın", "rulesResource": "Kaynak Kuralları Yapılandırması", - "rulesResourceDescription": "Kaynağınıza erişimi kontrol etmek için kuralları yapılandırın", + "rulesResourceDescription": "Kaynağa erişimi kontrol etmek için kuralları yapılandırın", "ruleSubmit": "Kural Ekle", "rulesNoOne": "Kural yok. Formu kullanarak bir kural ekleyin.", "rulesOrder": "Kurallar, artan öncelik sırasına göre değerlendirilir.", @@ -586,7 +600,7 @@ "none": "Hiçbiri", "unknown": "Bilinmiyor", "resources": "Kaynaklar", - "resourcesDescription": "Kaynaklar, özel ağınızda çalışan uygulamalara proxy görevi görür. Özel ağınızdaki herhangi bir HTTP/HTTPS veya ham TCP/UDP hizmeti için bir kaynak oluşturun. Her kaynak, şifreli bir WireGuard tüneli aracılığıyla özel ve güvenli bağlantıyı etkinleştirmek için bir siteye bağlı olmalıdır.", + "resourcesDescription": "Kaynaklar, özel ağda çalışan uygulamalara proxy olarak hizmet eder. Özel ağınızdaki herhangi bir HTTP/HTTPS veya ham TCP/UDP hizmeti için bir kaynak oluşturun. Her kaynak, şifreli bir WireGuard tüneli aracılığıyla özel, güvenli bağlanabilirliği etkinleştirmek için bir siteye bağlı olmalıdır.", "resourcesWireGuardConnect": "WireGuard şifreleme ile güvenli bağlantı", "resourcesMultipleAuthenticationMethods": "Birden fazla kimlik doğrulama yöntemi yapılandırın", "resourcesUsersRolesAccess": "Kullanıcı ve rol tabanlı erişim kontrolü", @@ -607,19 +621,19 @@ "unknownCommand": "Bilinmeyen komut", "newtErrorFetchReleases": "Sürüm bilgileri alınamadı: {err}", "newtErrorFetchLatest": "Son sürüm alınırken hata: {err}", - "newtEndpoint": "Newt Uç Noktası", - "newtId": "Newt Kimliği", - "newtSecretKey": "Newt Gizli Anahtarı", + "newtEndpoint": "Uç Nokta", + "newtId": "Kimlik", + "newtSecretKey": "Gizli", "architecture": "Mimari", "sites": "Siteler", - "siteWgAnyClients": "Herhangi bir WireGuard istemcisi kullanarak bağlanın. Dahili kaynaklarınıza eş IP adresini kullanarak erişmeniz gerekecek.", + "siteWgAnyClients": "Herhangi bir WireGuard istemcisi kullanarak bağlanın. Dahili kaynaklara eş IP adresini kullanarak erişmeniz gerekecek.", "siteWgCompatibleAllClients": "Tüm WireGuard istemcileriyle uyumlu", "siteWgManualConfigurationRequired": "Manuel yapılandırma gerekli", "userErrorNotAdminOrOwner": "Kullanıcı yönetici veya sahibi değil", "pangolinSettings": "Ayarlar - Pangolin", "accessRoleYour": "Rolünüz:", - "accessRoleSelect2": "Bir rol seçin", - "accessUserSelect": "Bir kullanıcı seçin", + "accessRoleSelect2": "Rolleri seçin", + "accessUserSelect": "Kullanıcıları seçin", "otpEmailEnter": "Bir e-posta girin", "otpEmailEnterDescription": "E-posta girdikten sonra girdi alanına yazıp enter'a basın.", "otpEmailErrorInvalid": "Geçersiz e-posta adresi. Joker karakter (*) yerel kısmın tamamı olmalıdır.", @@ -671,7 +685,7 @@ "resourcePincodeSetupTitle": "Pincode Ayarla", "resourcePincodeSetupTitleDescription": "Bu kaynağı korumak için bir pincode ayarlayın", "resourceRoleDescription": "Yöneticiler her zaman bu kaynağa erişebilir.", - "resourceUsersRoles": "Kullanıcılar ve Roller", + "resourceUsersRoles": "Erişim Kontrolleri", "resourceUsersRolesDescription": "Bu kaynağı kimlerin ziyaret edebileceği kullanıcıları ve rolleri yapılandırın", "resourceUsersRolesSubmit": "Kullanıcıları ve Rolleri Kaydet", "resourceWhitelistSave": "Başarıyla kaydedildi", @@ -702,6 +716,7 @@ "resourceTransferSubmit": "Kaynağı Aktar", "siteDestination": "Hedef Site", "searchSites": "Siteleri ara", + "countries": "Ülkeler", "accessRoleCreate": "Rol Oluştur", "accessRoleCreateDescription": "Kullanıcıları gruplamak ve izinlerini yönetmek için yeni bir rol oluşturun.", "accessRoleCreateSubmit": "Rol Oluştur", @@ -909,6 +924,10 @@ "passwordResetSent": "Bu e-posta adresine bir şifre sıfırlama kodu gönderilecektir.", "passwordResetCode": "Sıfırlama Kodu", "passwordResetCodeDescription": "E-posta gelen kutunuzda sıfırlama kodunu kontrol edin.", + "generatePasswordResetCode": "Parola Sıfırlama Kodunu Oluştur", + "passwordResetCodeGenerated": "Parola Sıfırlama Kodu Oluşturuldu", + "passwordResetCodeGeneratedDescription": "Bu kodu kullanıcı ile paylaşın. Parolalarını sıfırlamak için bunu kullanabilirler.", + "passwordResetUrl": "Parola Sıfırlama URL'si", "passwordNew": "Yeni Şifre", "passwordNewConfirm": "Yeni Şifreyi Onayla", "changePassword": "Parola Değiştir", @@ -926,6 +945,9 @@ "pincodeAuth": "Kimlik Doğrulama Kodu", "pincodeSubmit2": "Kodu Gönder", "passwordResetSubmit": "Sıfırlama İsteği", + "passwordResetAlreadyHaveCode": "Parola Sıfırlama Kodunu Giriniz", + "passwordResetSmtpRequired": "Yönetici ile iletişime geçin", + "passwordResetSmtpRequiredDescription": "Parolanızı sıfırlamak için bir parola sıfırlama kodu gereklidir. Yardım için yönetici ile iletişime geçin.", "passwordBack": "Şifreye Geri Dön", "loginBack": "Girişe geri dön", "signup": "Kaydol", @@ -1091,12 +1113,15 @@ "actionListSiteResources": "Site Kaynaklarını Listele", "actionUpdateSiteResource": "Site Kaynağını Güncelle", "actionListInvitations": "Davetiyeleri Listele", + "actionExportLogs": "Kayıtları Dışa Aktar", + "actionViewLogs": "Kayıtları Görüntüle", "noneSelected": "Hiçbiri seçili değil", "orgNotFound2": "Hiçbir organizasyon bulunamadı.", "searchProgress": "Ara...", "create": "Oluştur", "orgs": "Organizasyonlar", "loginError": "Giriş yaparken bir hata oluştu", + "loginRequiredForDevice": "Cihazınızı kimlik doğrulamak için giriş yapılması gereklidir.", "passwordForgot": "Şifrenizi mi unuttunuz?", "otpAuth": "İki Faktörlü Kimlik Doğrulama", "otpAuthDescription": "Authenticator uygulamanızdan veya tek kullanımlık yedek kodlarınızdan birini girin.", @@ -1151,19 +1176,29 @@ "sidebarHome": "Ana Sayfa", "sidebarSites": "Siteler", "sidebarResources": "Kaynaklar", + "sidebarProxyResources": "Herkese Açık", + "sidebarClientResources": "Özel", "sidebarAccessControl": "Erişim Kontrolü", + "sidebarLogsAndAnalytics": "Kayıtlar & Analitik", "sidebarUsers": "Kullanıcılar", + "sidebarAdmin": "Yönetici", "sidebarInvitations": "Davetiye", "sidebarRoles": "Roller", - "sidebarShareableLinks": "Paylaşılabilir Bağlantılar", + "sidebarShareableLinks": "Bağlantılar", "sidebarApiKeys": "API Anahtarları", "sidebarSettings": "Ayarlar", "sidebarAllUsers": "Tüm Kullanıcılar", "sidebarIdentityProviders": "Kimlik Sağlayıcılar", "sidebarLicense": "Lisans", "sidebarClients": "İstemciler", + "sidebarUserDevices": "Kullanıcılar", + "sidebarMachineClients": "Makineler", "sidebarDomains": "Alan Adları", + "sidebarGeneral": "Genel", + "sidebarLogAndAnalytics": "Kayıt & Analiz", "sidebarBluePrints": "Planlar", + "sidebarOrganization": "Organizasyon", + "sidebarLogsAnalytics": "Analitik", "blueprints": "Planlar", "blueprintsDescription": "Deklaratif yapılandırmaları uygulayın ve önceki çalışmaları görüntüleyin", "blueprintAdd": "Plan Ekle", @@ -1174,7 +1209,7 @@ "blueprintDetailsDescription": "Uygulanan mavi yazılımın sonucunu ve oluşan hataları görün", "blueprintInfo": "Plan Bilgileri", "message": "Mesaj", - "blueprintContentsDescription": "Altyapınızı tanımlayan YAML içeriğini tanımlayın", + "blueprintContentsDescription": "Altyapıyı tanımlayan YAML içeriğini belirleyin", "blueprintErrorCreateDescription": "Plan uygulanırken bir hata oluştu", "blueprintErrorCreate": "Plan oluşturulurken hata oluştu", "searchBlueprintProgress": "Planlarda ara...", @@ -1230,15 +1265,15 @@ "loading": "Yükleniyor", "restart": "Yeniden Başlat", "domains": "Alan Adları", - "domainsDescription": "Organizasyonunuz için alan adlarını yönetin", + "domainsDescription": "Organizasyonda kullanılabilir alan adlarını oluşturun ve yönetin", "domainsSearch": "Alan adlarını ara...", "domainAdd": "Alan Adı Ekle", "domainAddDescription": "Organizasyonunuz için yeni bir alan adı kaydedin", "domainCreate": "Alan Adı Oluştur", "domainCreatedDescription": "Alan adı başarıyla oluşturuldu", "domainDeletedDescription": "Alan adı başarıyla silindi", - "domainQuestionRemove": "Alan adını hesabınızdan kaldırmak istediğinizden emin misiniz?", - "domainMessageRemove": "Kaldırıldığında, alan adı hesabınızla ilişkilendirilmeyecek.", + "domainQuestionRemove": "Alan adını kaldırmak istediğinizden emin misiniz?", + "domainMessageRemove": "Kaldırıldığında, alan adı artık organizasyonunuzla ilişkilendirilmez.", "domainConfirmDelete": "Alan Adı Silinmesini Onayla", "domainDelete": "Alan Adını Sil", "domain": "Alan Adı", @@ -1285,9 +1320,9 @@ "productUpdateTitle": "Ürün Güncellemeleri", "productUpdateEmpty": "Güncelleme yok", "dismissAll": "Hepsini Kapat", - "pangolinUpdateAvailable": "Yeni sürüm mevcut", + "pangolinUpdateAvailable": "Güncelleme Mevcut", "pangolinUpdateAvailableInfo": "Sürüm {version} yüklenmeye hazır", - "pangolinUpdateAvailableReleaseNotes": "Sürüm notlarını görüntüleyin", + "pangolinUpdateAvailableReleaseNotes": "Yayın Notlarını Görüntüle", "newtUpdateAvailable": "Güncelleme Mevcut", "newtUpdateAvailableInfo": "Newt'in yeni bir versiyonu mevcut. En iyi deneyim için lütfen en son sürüme güncelleyin.", "domainPickerEnterDomain": "Alan Adı", @@ -1300,7 +1335,7 @@ "domainPickerSortAsc": "A-Z", "domainPickerSortDesc": "Z-A", "domainPickerCheckingAvailability": "Kullanılabilirlik kontrol ediliyor...", - "domainPickerNoMatchingDomains": "Eşleşen domain bulunamadı. Farklı bir domain deneyin veya organizasyonunuzun domain ayarlarını kontrol edin.", + "domainPickerNoMatchingDomains": "Eşleşen alan adı bulunamadı. Farklı bir alan adı deneyin veya organizasyonunuzun alan ayarlarını kontrol edin.", "domainPickerOrganizationDomains": "Organizasyon Alan Adları", "domainPickerProvidedDomains": "Sağlanan Alan Adları", "domainPickerSubdomain": "Alt Alan: {subdomain}", @@ -1345,9 +1380,9 @@ "billingPortalError": "Portal Hatası", "billingDataUsageInfo": "Buluta bağlandığınızda, güvenli tünellerinizden aktarılan tüm verilerden ücret alınırsınız. Bu, tüm sitelerinizdeki gelen ve giden trafiği içerir. Limitinize ulaştığınızda, planınızı yükseltmeli veya kullanımı azaltmalısınız, aksi takdirde siteleriniz bağlantıyı keser. Düğümler kullanırken verilerden ücret alınmaz.", "billingOnlineTimeInfo": "Sitelerinizin buluta ne kadar süre bağlı kaldığına göre ücretlendirilirsiniz. Örneğin, 44,640 dakika, bir sitenin 24/7 boyunca tam bir ay boyunca çalışması anlamına gelir. Limitinize ulaştığınızda, planınızı yükseltmeyip kullanımı azaltmazsanız siteleriniz bağlantıyı keser. Düğümler kullanırken zamandan ücret alınmaz.", - "billingUsersInfo": "Kuruluşunuzdaki her kullanıcı için ücretlendirilirsiniz. Faturalandırma, hesabınızdaki aktif kullanıcı hesaplarının sayısına göre günlük olarak hesaplanır.", - "billingDomainInfo": "Kuruluşunuzdaki her alan adı için ücretlendirilirsiniz. Faturalandırma, hesabınızdaki aktif alan adları hesaplarının sayısına göre günlük olarak hesaplanır.", - "billingRemoteExitNodesInfo": "Kuruluşunuzdaki her yönetilen Düğüm için ücretlendirilirsiniz. Faturalandırma, hesabınızdaki aktif yönetilen Düğümler sayısına göre günlük olarak hesaplanır.", + "billingUsersInfo": "Kuruluşunuzdaki her kullanıcı için ücretlendirilirsiniz. Faturalandırma, organizasyonunuza kayıtlı aktif kullanıcı hesaplarının sayısına göre günlük olarak hesaplanır.", + "billingDomainInfo": "Kuruluşunuzdaki her alan adı için ücretlendirilirsiniz. Faturalandırma, organizasyonunuza kayıtlı aktif alan adları hesaplarının sayısına göre günlük olarak hesaplanır.", + "billingRemoteExitNodesInfo": "Kuruluşunuzdaki her yönetilen Düğüm için ücretlendirilirsiniz. Faturalandırma, organizasyonunuza kayıtlı aktif yönetilen Düğümler sayısına göre günlük olarak hesaplanır.", "domainNotFound": "Alan Adı Bulunamadı", "domainNotFoundDescription": "Bu kaynak devre dışıdır çünkü alan adı sistemimizde artık mevcut değil. Bu kaynak için yeni bir alan adı belirleyin.", "failed": "Başarısız", @@ -1430,28 +1465,31 @@ "and": "ve", "privacyPolicy": "gizlilik politikası" }, + "signUpMarketing": { + "keepMeInTheLoop": "Bana e-posta yoluyla haberler, güncellemeler ve yeni özellikler hakkında bilgi verin." + }, "siteRequired": "Site gerekli.", "olmTunnel": "Olm Tüneli", "olmTunnelDescription": "Müşteri bağlantıları için Olm kullanın", "errorCreatingClient": "Müşteri oluşturulurken hata oluştu", "clientDefaultsNotFound": "Müşteri varsayılanları bulunamadı", "createClient": "Müşteri Oluştur", - "createClientDescription": "Sitelerinize bağlanmak için yeni bir müşteri oluşturun", + "createClientDescription": "Özel kaynaklara erişmek için yeni bir istemci oluşturun", "seeAllClients": "Tüm Müşterileri Gör", "clientInformation": "Müşteri Bilgileri", "clientNamePlaceholder": "Müşteri adı", "address": "Adres", "subnetPlaceholder": "Alt ağ", - "addressDescription": "Bu müşteri için bağlantıda kullanılacak adres", + "addressDescription": "İstemcinin dahili adresi. Organizasyon alt ağı içinde olmalıdır.", "selectSites": "Siteleri seçin", "sitesDescription": "Müşteri seçilen sitelere bağlantı kuracaktır", "clientInstallOlm": "Olm Yükle", "clientInstallOlmDescription": "Sisteminizde Olm çalıştırın", "clientOlmCredentials": "Olm Kimlik Bilgileri", - "clientOlmCredentialsDescription": "Bu, Olm'in sunucu ile kimlik doğrulaması yapacağı yöntemdir", - "olmEndpoint": "Olm Uç Noktası", - "olmId": "Olm Kimliği", - "olmSecretKey": "Olm Gizli Anahtarı", + "clientOlmCredentialsDescription": "Bu, istemcinin sunucu ile kimlik doğrulaması yapacağı yöntemdir", + "olmEndpoint": "Uç Nokta", + "olmId": "Kimlik", + "olmSecretKey": "Gizli", "clientCredentialsSave": "Kimlik Bilgilerinizi Kaydedin", "clientCredentialsSaveDescription": "Bunu yalnızca bir kez görebileceksiniz. Güvenli bir yere kopyaladığınızdan emin olun.", "generalSettingsDescription": "Bu müşteri için genel ayarları yapılandırın", @@ -1463,9 +1501,7 @@ "sitesFetchError": "Siteler alınırken bir hata oluştu.", "olmErrorFetchReleases": "Olm yayınları alınırken bir hata oluştu.", "olmErrorFetchLatest": "En son Olm yayını alınırken bir hata oluştu.", - "remoteSubnets": "Uzak Alt Ağlar", "enterCidrRange": "CIDR aralığını girin", - "remoteSubnetsDescription": "Bu siteye uzaktan erişilebilen CIDR aralıklarını ekleyin. 10.0.0.0/24 formatını kullanın. Bu YALNIZCA VPN istemci bağlantıları için geçerlidir.", "resourceEnableProxy": "Genel Proxy'i Etkinleştir", "resourceEnableProxyDescription": "Bu kaynağa genel proxy erişimini etkinleştirin. Bu sayede ağ dışından açık bir port üzerinden kaynağa bulut aracılığıyla erişim sağlanır. Traefik yapılandırması gereklidir.", "externalProxyEnabled": "Dış Proxy Etkinleştirildi", @@ -1483,14 +1519,15 @@ "enableHealthChecksDescription": "Bu hedefin sağlığını izleyin. Gerekirse hedef dışındaki bir son noktayı izleyebilirsiniz.", "healthScheme": "Yöntem", "healthSelectScheme": "Yöntem Seç", + "healthCheckPortInvalid": "Sağlık Kontrolü portu 1 ile 65535 arasında olmalıdır", "healthCheckPath": "Yol", "healthHostname": "IP / Hostname", "healthPort": "Bağlantı Noktası", "healthCheckPathDescription": "Sağlık durumunu kontrol etmek için yol.", - "healthyIntervalSeconds": "Sağlıklı Aralık", - "unhealthyIntervalSeconds": "Sağlıksız Aralık", + "healthyIntervalSeconds": "Sağlıklı Aralık (saniye)", + "unhealthyIntervalSeconds": "Sağlıksız Aralık (saniye)", "IntervalSeconds": "Sağlıklı Aralık", - "timeoutSeconds": "Zaman Aşımı", + "timeoutSeconds": "Zaman Aşımı (saniye)", "timeIsInSeconds": "Zaman saniye cinsindendir", "retryAttempts": "Tekrar Deneme Girişimleri", "expectedResponseCodes": "Beklenen Yanıt Kodları", @@ -1526,12 +1563,12 @@ "resourceEditDomain": "Alan Adını Düzenle", "siteName": "Site Adı", "proxyPort": "Bağlantı Noktası", - "resourcesTableProxyResources": "Proxy Kaynaklar", - "resourcesTableClientResources": "İstemci Kaynaklar", + "resourcesTableProxyResources": "Herkese Açık", + "resourcesTableClientResources": "Özel", "resourcesTableNoProxyResourcesFound": "Hiçbir proxy kaynağı bulunamadı.", "resourcesTableNoInternalResourcesFound": "Hiçbir dahili kaynak bulunamadı.", "resourcesTableDestination": "Hedef", - "resourcesTableTheseResourcesForUseWith": "Bu kaynaklar ile kullanılmak için", + "resourcesTableAlias": "Takma Ad", "resourcesTableClients": "İstemciler", "resourcesTableAndOnlyAccessibleInternally": "veyalnızca bir istemci ile bağlandığında dahili olarak erişilebilir.", "resourcesTableNoTargets": "Hedef yok", @@ -1540,8 +1577,8 @@ "resourcesTableOffline": "Çevrimdışı", "resourcesTableUnknown": "Bilinmiyor", "resourcesTableNotMonitored": "İzlenmiyor", - "editInternalResourceDialogEditClientResource": "İstemci Kaynağı Düzenleyin", - "editInternalResourceDialogUpdateResourceProperties": "{resourceName} için kaynak özelliklerini ve hedef yapılandırmasını güncelleyin.", + "editInternalResourceDialogEditClientResource": "Özel Kaynak Düzenleyin", + "editInternalResourceDialogUpdateResourceProperties": "{resourceName} için kaynak ayarlarını ve erişim kontrollerini güncelleyin", "editInternalResourceDialogResourceProperties": "Kaynak Özellikleri", "editInternalResourceDialogName": "Ad", "editInternalResourceDialogProtocol": "Protokol", @@ -1560,11 +1597,22 @@ "editInternalResourceDialogInvalidIPAddressFormat": "Geçersiz IP adresi formatı", "editInternalResourceDialogDestinationPortMin": "Hedef bağlantı noktası en az 1 olmalıdır", "editInternalResourceDialogDestinationPortMax": "Hedef bağlantı noktası 65536'dan küçük olmalıdır", + "editInternalResourceDialogPortModeRequired": "Port modu için protokol, proxy portu ve hedef porta ihtiyaç vardır", + "editInternalResourceDialogMode": "Mod", + "editInternalResourceDialogModePort": "Bağlantı Noktası", + "editInternalResourceDialogModeHost": "Ev Sahibi", + "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogDestination": "Hedef", + "editInternalResourceDialogDestinationHostDescription": "Site ağındaki kaynağın IP adresi veya ana bilgisayar adı.", + "editInternalResourceDialogDestinationIPDescription": "Kaynağın site ağındaki IP veya ana bilgisayar adresi.", + "editInternalResourceDialogDestinationCidrDescription": "Site ağındaki kaynağın CIDR aralığı.", + "editInternalResourceDialogAlias": "Takma Ad", + "editInternalResourceDialogAliasDescription": "Bu kaynak için isteğe bağlı dahili DNS takma adı.", "createInternalResourceDialogNoSitesAvailable": "Site Bulunamadı", "createInternalResourceDialogNoSitesAvailableDescription": "Dahili kaynak oluşturmak için en az bir Newt sitesine ve alt ağa sahip olmalısınız.", "createInternalResourceDialogClose": "Kapat", - "createInternalResourceDialogCreateClientResource": "İstemci Kaynağı Oluştur", - "createInternalResourceDialogCreateClientResourceDescription": "Seçilen siteye bağlı istemciler için erişilebilir olacak yeni bir kaynak oluşturun.", + "createInternalResourceDialogCreateClientResource": "Özel Kaynak Oluştur", + "createInternalResourceDialogCreateClientResourceDescription": "Seçilen siteye bağlı istemcilere erişilebilir olacak yeni bir kaynak oluşturun", "createInternalResourceDialogResourceProperties": "Kaynak Özellikleri", "createInternalResourceDialogName": "Ad", "createInternalResourceDialogSite": "Site", @@ -1593,11 +1641,22 @@ "createInternalResourceDialogInvalidIPAddressFormat": "Geçersiz IP adresi formatı", "createInternalResourceDialogDestinationPortMin": "Hedef bağlantı noktası en az 1 olmalıdır", "createInternalResourceDialogDestinationPortMax": "Hedef bağlantı noktası 65536'dan küçük olmalıdır", + "createInternalResourceDialogPortModeRequired": "Port modu için protokol, proxy portu ve hedef porta ihtiyaç vardır", + "createInternalResourceDialogMode": "Mod", + "createInternalResourceDialogModePort": "Bağlantı Noktası", + "createInternalResourceDialogModeHost": "Ev Sahibi", + "createInternalResourceDialogModeCidr": "CIDR", + "createInternalResourceDialogDestination": "Hedef", + "createInternalResourceDialogDestinationHostDescription": "Site ağındaki kaynağın IP adresi veya ana bilgisayar adı.", + "createInternalResourceDialogDestinationCidrDescription": "Site ağındaki kaynağın CIDR aralığı.", + "createInternalResourceDialogAlias": "Takma Ad", + "createInternalResourceDialogAliasDescription": "Bu kaynak için isteğe bağlı dahili DNS takma adı.", "siteConfiguration": "Yapılandırma", "siteAcceptClientConnections": "İstemci Bağlantılarını Kabul Et", - "siteAcceptClientConnectionsDescription": "Bu Newt örneğini bir geçit olarak kullanarak diğer cihazların bağlanmasına izin verin.", - "siteAddress": "Site Adresi", - "siteAddressDescription": "İstemcilerin bağlanması için hostun IP adresini belirtin. Bu, Pangolin ağındaki sitenin iç adresidir ve istemciler için atlas olmalıdır. Org alt ağına düşmelidir.", + "siteAcceptClientConnectionsDescription": "Kullanıcı cihazları ve istemcilerin bu sitedeki kaynaklara erişmesine izin verin. Bu daha sonra değiştirilebilir.", + "siteAddress": "Site Adresi (Gelişmiş)", + "siteAddressDescription": "Site için dahili adres. Organizasyon alt ağı içinde olmalıdır.", + "siteNameDescription": "Sonradan değiştirilebilecek sitenin görünen adı.", "autoLoginExternalIdp": "Harici IDP ile Otomatik Giriş", "autoLoginExternalIdpDescription": "Kullanıcıyı kimlik doğrulama için otomatik olarak harici IDP'ye yönlendirin.", "selectIdp": "IDP Seç", @@ -1611,7 +1670,7 @@ "autoLoginErrorNoRedirectUrl": "Kimlik sağlayıcıdan yönlendirme URL'si alınamadı.", "autoLoginErrorGeneratingUrl": "Kimlik doğrulama URL'si oluşturulamadı.", "remoteExitNodeManageRemoteExitNodes": "Uzak Düğümler", - "remoteExitNodeDescription": "Kendi konum ağlarınızdan bir veya daha fazlasını barındırarak, bağlantı kurulumları için buluta bağımlılığı azaltın.", + "remoteExitNodeDescription": "Ağ bağlantınızı genişletmek ve buluta bağlı kalmayı azaltmak için bir veya daha fazla uzak düğüm barındırın", "remoteExitNodes": "Düğümler", "searchRemoteExitNodes": "Düğüm ara...", "remoteExitNodeAdd": "Düğüm Ekle", @@ -1648,7 +1707,7 @@ }, "generate": { "title": "Oluşturulan Kimlik Bilgileri", - "description": "Düğümünüzü yapılandırmak için oluşturulan bu kimlik bilgilerini kullanın", + "description": "Düğümünüzü yapılandırmak için bu oluşturulan kimlik bilgilerini kullanın", "nodeIdTitle": "Düğüm ID", "secretTitle": "Gizli", "saveCredentialsTitle": "Kimlik Bilgilerini Yapılandırmaya Ekle", @@ -1730,7 +1789,7 @@ "idpAzureConfiguration": "Azure Entra ID Yapılandırması", "idpAzureConfigurationDescription": "Azure Entra ID OAuth2 kimlik bilgilerinizi yapılandırın", "idpTenantId": "Kiracı Kimliği", - "idpTenantIdPlaceholder": "kiraci-kimliginiz", + "idpTenantIdPlaceholder": "kiracı Kimliği", "idpAzureTenantIdDescription": "Azure kiracı kimliğiniz (Azure Active Directory genel bakışında bulunur)", "idpAzureClientIdDescription": "Azure Uygulama Kaydı İstemci Kimliğiniz", "idpAzureClientSecretDescription": "Azure Uygulama Kaydı İstemci Sırrınız", @@ -1854,8 +1913,12 @@ "enterpriseEdition": "Kurumsal Sürüm", "unlicensed": "Lisansız", "beta": "Beta", - "manageClients": "Müşteri Yönetimi", - "manageClientsDescription": "Müşteriler, sitelerinize bağlanabilen cihazlardır.", + "manageUserDevices": "Kullanıcı Cihazları", + "manageUserDevicesDescription": "Kullanıcıların kaynaklara özel olarak bağlanmak için kullandığı cihazları görüntüleyin ve yönetin", + "manageMachineClients": "Makine İstemcilerini Yönetin", + "manageMachineClientsDescription": "Sunucuların ve sistemlerin kaynaklara özel olarak bağlanmak için kullandığı istemcileri oluşturun ve yönetin", + "clientsTableUserClients": "Kullanıcı", + "clientsTableMachineClients": "Makine", "licenseTableValidUntil": "Geçerli İki Tarih Kadar", "saasLicenseKeysSettingsTitle": "Kurumsal Lisanslar", "saasLicenseKeysSettingsDescription": "Kendi barındırdığınız Pangolin örnekleri için kurumsal lisans anahtarları oluşturun ve yönetin.", @@ -1990,11 +2053,12 @@ "pathRewriteStripLabel": "sil", "sidebarEnableEnterpriseLicense": "Kurumsal Lisans Etkinleştir", "cannotbeUndone": "Bu geri alınamaz.", - "toConfirm": "doğrulamak için", + "toConfirm": "onaylamak için.", "deleteClientQuestion": "Müşteriyi siteden ve organizasyondan kaldırmak istediğinizden emin misiniz?", "clientMessageRemove": "Kaldırıldıktan sonra müşteri siteye bağlanamayacaktır.", "sidebarLogs": "Kayıtlar", "request": "İstek", + "requests": "İstekler", "logs": "Günlükler", "logsSettingsDescription": "Bu organizasyondan toplanan günlükleri izleyin", "searchLogs": "Günlüklerde ara...", @@ -2020,6 +2084,7 @@ "ip": "IP", "reason": "Sebep", "requestLogs": "İstek Günlükleri", + "requestAnalytics": "İstek Analizi", "host": "Sunucu", "location": "Konum", "actionLogs": "Eylem Günlükleri", @@ -2029,6 +2094,7 @@ "logRetention": "Kayıt Saklama", "logRetentionDescription": "Bu organizasyon için farklı türdeki günlüklerin ne kadar süre saklanacağını yönetin veya devre dışı bırakın", "requestLogsDescription": "Bu organizasyondaki kaynaklar için ayrıntılı istek günlüklerini görüntüleyin", + "requestAnalyticsDescription": "Bu organizasyondaki kaynaklar için ayrıntılı istek analizlerini görüntüleyin.", "logRetentionRequestLabel": "İstek Günlüğü Saklama", "logRetentionRequestDescription": "İstek günlüklerini ne kadar süre tutacağını belirle", "logRetentionAccessLabel": "Erişim Günlüğü Saklama", @@ -2042,6 +2108,7 @@ "logRetention30Days": "30 gün", "logRetention90Days": "90 gün", "logRetentionForever": "Sonsuza kadar", + "logRetentionEndOfFollowingYear": "Bir sonraki yılın sonu", "actionLogsDescription": "Bu organizasyondaki eylemler geçmişini görüntüleyin", "accessLogsDescription": "Bu organizasyondaki kaynaklar için erişim kimlik doğrulama isteklerini görüntüleyin", "licenseRequiredToUse": "Bu özelliği kullanmak için bir kurumsal lisans gereklidir.", @@ -2052,7 +2119,7 @@ "preferWildcardCert": "Joker Sertifikayı Tercih Et", "unverified": "Doğrulanmadı", "domainSetting": "Alan Adı Ayarları", - "domainSettingDescription": "Alan adınız için ayarları yapılandırın", + "domainSettingDescription": "Alan adı için ayarları yapılandırın", "preferWildcardCertDescription": "Joker sertifika üretmeye çalışın (doğru yapılandırılmış bir sertifika çözücü gereklidir).", "recordName": "Kayıt Adı", "auto": "Otomatik", @@ -2066,9 +2133,9 @@ "olmUpdateAvailableInfo": "Olm'nin güncellenmiş bir sürümü mevcut. En iyi deneyim için lütfen en son sürüme güncelleyin.", "client": "İstemci", "proxyProtocol": "Proxy Protokol Ayarları", - "proxyProtocolDescription": "TCP/UDP hizmetleri için istemci IP adreslerini korumak için Proxy Protokolünü yapılandırın.", + "proxyProtocolDescription": "TCP hizmetleri için istemci IP adreslerini korumak amacıyla Proxy Protokolünü yapılandırın.", "enableProxyProtocol": "Proxy Protokolünü Etkinleştir", - "proxyProtocolInfo": "TCP/UDP arka uçları için istemci IP adreslerini koruyun", + "proxyProtocolInfo": "TCP ara yüzlerini koruyarak istemci IP adreslerini saklayın", "proxyProtocolVersion": "Proxy Protokol Versiyonu", "version1": " Versiyon 1 (Önerilen)", "version2": "Versiyon 2", @@ -2097,6 +2164,43 @@ "supportMessageSent": "Mesaj Gönderildi!", "supportWillContact": "En kısa sürede size geri döneceğiz!", "selectLogRetention": "Kayıt saklama seç", + "terms": "Şartlar", + "privacy": "Gizlilik", + "security": "Güvenlik", + "docs": "Belgeler", + "deviceActivation": "Cihaz aktivasyonu", + "deviceCodeInvalidFormat": "Kod 9 karakter olmalı (ör. A1AJ-N5JD)", + "deviceCodeInvalidOrExpired": "Geçersiz veya süresi dolmuş kod", + "deviceCodeVerifyFailed": "Cihaz kodu doğrulanamadı", + "signedInAs": "Olarak giriş yapıldı", + "deviceCodeEnterPrompt": "Cihazda gösterilen kodu girin", + "continue": "Devam Et", + "deviceUnknownLocation": "Bilinmeyen konum", + "deviceAuthorizationRequested": "Bu yetkilendirme {tarih} tarihinde {konum} konumundan talep edildi. Bu cihaza güvenmenizi sağlayın, çünkü hesap erişimine sahip olacaktır.", + "deviceLabel": "Cihaz: {cihazadı}", + "deviceWantsAccess": "hesabınıza erişmek istiyor", + "deviceExistingAccess": "Mevcut erişim:", + "deviceFullAccess": "Hesabınıza tam erişim", + "deviceOrganizationsAccess": "Hesabınızın erişim hakkına sahip olduğu tüm organizasyonlara erişim", + "deviceAuthorize": "{uygulamaAdi} yetkilendir", + "deviceConnected": "Cihaz Bağlandı!", + "deviceAuthorizedMessage": "Cihazınız, hesabınıza erişim izni almıştır.", + "pangolinCloud": "Pangolin Cloud", + "viewDevices": "Cihazları Görüntüle", + "viewDevicesDescription": "Bağlantılı cihazlarınızı yönetin", + "noDevices": "Cihaz bulunamadı", + "dateCreated": "Oluşturulma Tarihi", + "unnamedDevice": "Adı Olmayan Cihaz", + "deviceQuestionRemove": "Bu cihazı silmek istediğinizden emin misiniz?", + "deviceMessageRemove": "Bu eylem geri alınamaz.", + "deviceDeleteConfirm": "Cihazı Sil", + "deleteDevice": "Cihazı Sil", + "errorLoadingDevices": "Cihaz yüklenirken hata oluştu", + "failedToLoadDevices": "Cihazlar yüklenemedi", + "deviceDeleted": "Cihaz silindi", + "deviceDeletedDescription": "Cihaz başarıyla silindi.", + "errorDeletingDevice": "Cihaz silinirken hata", + "failedToDeleteDevice": "Cihaz silinirken hata oluştu", "showColumns": "Sütunları Göster", "hideColumns": "Sütunları Gizle", "columnVisibility": "Sütun Görünürlüğü", @@ -2111,10 +2215,14 @@ "enableSelected": "Seçilenleri Etkinleştir", "disableSelected": "Seçilenleri Devre Dışı Bırak", "checkSelectedStatus": "Seçilenlerin Durumunu Kontrol Et", + "clients": "İstemciler", + "accessClientSelect": "Makine istemcilerini seçiniz", + "resourceClientDescription": "Bu kaynağa erişebilecek makine istemcileri", + "regenerate": "Yeniden Üret", "credentials": "Kimlik Bilgileri", "savecredentials": "Kimlik Bilgilerini Kaydet", - "regeneratecredentials": "Yeniden Anahtarla", - "regenerateCredentials": "Kimlik bilgilerinizi yeniden oluşturun ve kaydedin", + "regenerateCredentialsButton": "Kimlik Bilgilerini Yeniden Oluştur", + "regenerateCredentials": "Kimlik Bilgilerini Yeniden Oluştur", "generatedcredentials": "Oluşturulan Kimlik Bilgileri", "copyandsavethesecredentials": "Bu kimlik bilgilerini kopyalayın ve kaydedin", "copyandsavethesecredentialsdescription": "Bu sayfadan ayrıldıktan sonra bu kimlik bilgileri tekrar gösterilmeyecek. Onları şimdi güvenli bir şekilde saklayın.", @@ -2122,13 +2230,12 @@ "credentialsSavedDescription": "Kimlik bilgileri başarılı bir şekilde yeniden oluşturuldu ve kaydedildi.", "credentialsSaveError": "Kimlik Bilgileri Kayıt Hatası", "credentialsSaveErrorDescription": "Kimlik bilgilerini yeniden oluştururken ve kaydederken bir hata oluştu.", - "regenerateCredentialsWarning": "Kimlik bilgilerini yeniden oluşturmak önceki bilgileri geçersiz kılacaktır. Bu kimlik bilgilerini kullanan tüm yapılandırmaları güncellediğinizden emin olun.", + "regenerateCredentialsWarning": "Kimlik bilgilerini yeniden oluşturmak, öncekilerini geçersiz kılacak ve bağlantı kesintisine neden olacaktır. Bu kimlik bilgilerini kullanan yapılandırmaları güncellediğinizden emin olun.", "confirm": "Onayla", "regenerateCredentialsConfirmation": "Kimlik bilgilerini yeniden oluşturmak istediğinizden emin misiniz?", "endpoint": "Uç Nokta", "Id": "Kimlik", "SecretKey": "Gizli Anahtar", - "featureDisabledTooltip": "Bu özellik yalnızca kurumsal planda mevcuttur ve kullanmak için lisans gerektirir.", "niceId": "Güzel Kimlik", "niceIdUpdated": "Güzel Kimlik Güncellendi", "niceIdUpdatedSuccessfully": "Güzel Kimlik Başarıyla Güncellendi", @@ -2136,5 +2243,32 @@ "niceIdUpdateErrorDescription": "Güzel Kimlik güncellenirken bir hata oluştu.", "niceIdCannotBeEmpty": "Güzel Kimlik boş olamaz", "enterIdentifier": "Tanımlayıcıyı girin", - "identifier": "Tanımlayıcı" + "identifier": "Tanımlayıcı", + "deviceLoginUseDifferentAccount": "Siz değil misiniz? Farklı bir hesap kullanın.", + "deviceLoginDeviceRequestingAccessToAccount": "Bir cihaz bu hesaba erişim talep ediyor.", + "noData": "Veri Yok", + "machineClients": "Makine İstemcileri", + "install": "Yükle", + "run": "Çalıştır", + "clientNameDescription": "Daha sonra değiştirilebilecek istemcinin görünen adı.", + "clientAddress": "İstemci Adresi (Gelişmiş)", + "setupFailedToFetchSubnet": "Varsayılan alt ağ alınamadı", + "setupSubnetAdvanced": "Alt Ağ (Gelişmiş)", + "setupSubnetDescription": "Bu organizasyonun dahili ağı için alt ağ.", + "siteRegenerateAndDisconnect": "Yeniden Oluştur ve Bağlantıyı Kes", + "siteRegenerateAndDisconnectConfirmation": "Kimlik bilgilerini yeniden oluşturmak ve bu sitenin bağlantısını kesmek istediğinizden emin misiniz?", + "siteRegenerateAndDisconnectWarning": "Bu, kimlik bilgilerini yeniden oluşturacak ve sitenin bağlantısını anında kesecektir. Site yeni kimlik bilgilerle yeniden başlatılmalıdır.", + "siteRegenerateCredentialsConfirmation": "Bu site için kimlik bilgilerini yeniden oluşturmak istediğinizden emin misiniz?", + "siteRegenerateCredentialsWarning": "Bu, kimlik bilgilerini yeniden oluşturacak. Site manuel olarak yeniden başlatılana ve yeni kimlik bilgileri kullanılana kadar bağlı kalacak.", + "clientRegenerateAndDisconnect": "Yeniden Oluştur ve Bağlantıyı Kes", + "clientRegenerateAndDisconnectConfirmation": "Kimlik bilgilerini yeniden oluşturmak ve bu istemcinin bağlantısını kesmek istediğinizden emin misiniz?", + "clientRegenerateAndDisconnectWarning": "Bu, kimlik bilgilerini yeniden oluşturacak ve istemcinin bağlantısını hemen kesecek. İstemci, yeni kimlik bilgilerle yeniden başlatılmalıdır.", + "clientRegenerateCredentialsConfirmation": "Bu istemci için kimlik bilgilerini yeniden oluşturmak istediğinizden emin misiniz?", + "clientRegenerateCredentialsWarning": "Bu, kimlik bilgilerini yeniden oluşturacak. İstemci, manuel olarak yeniden başlatılana ve yeni kimlik bilgileri kullanılana kadar bağlı kalacak.", + "remoteExitNodeRegenerateAndDisconnect": "Yeniden Oluştur ve Bağlantıyı Kes", + "remoteExitNodeRegenerateAndDisconnectConfirmation": "Kimlik bilgilerini yeniden oluşturmak ve bu uzak çıkış düğümünün bağlantısını kesmek istediğinizden emin misiniz?", + "remoteExitNodeRegenerateAndDisconnectWarning": "Bu, kimlik bilgilerini yeniden oluşturacak ve hemen uzak çıkış düğümünün bağlantısını kesecek. Uzak çıkış düğümü, yeni kimlik bilgileri ile yeniden başlatılmalıdır.", + "remoteExitNodeRegenerateCredentialsConfirmation": "Bu uzak çıkış düğümü için kimlik bilgilerini yeniden oluşturmak istediğinizden emin misiniz?", + "remoteExitNodeRegenerateCredentialsWarning": "Bu, kimlik bilgilerini yeniden oluşturacak. Uzak çıkış düğümü, manuel olarak yeniden başlatılana ve yeni kimlik bilgiler kullanılana kadar bağlı kalacak.", + "agent": "Aracı" } diff --git a/messages/zh-CN.json b/messages/zh-CN.json index 6b13a9120..b8e1f2b11 100644 --- a/messages/zh-CN.json +++ b/messages/zh-CN.json @@ -1,12 +1,12 @@ { - "setupCreate": "创建您的第一个组织、网站和资源", + "setupCreate": "创建组织、站点和资源", "setupNewOrg": "新建组织", "setupCreateOrg": "创建组织", "setupCreateResources": "创建资源", "setupOrgName": "组织名称", - "orgDisplayName": "这是您组织的显示名称。", + "orgDisplayName": "这是组织的显示名称。", "orgId": "组织ID", - "setupIdentifierMessage": "这是您组织的唯一标识符。这是与显示名称分开的。", + "setupIdentifierMessage": "这是组织唯一的标识符。", "setupErrorIdentifier": "组织ID 已被使用。请另选一个。", "componentsErrorNoMemberCreate": "您目前不是任何组织的成员。创建组织以开始操作。", "componentsErrorNoMember": "您目前不是任何组织的成员。", @@ -50,10 +50,10 @@ "siteMessageRemove": "一旦移除,站点将无法访问。与站点相关的所有目标也将被移除。", "siteQuestionRemove": "您确定要从组织中删除该站点吗?", "siteManageSites": "管理站点", - "siteDescription": "允许通过安全隧道连接到您的网络", + "siteDescription": "创建和管理站点,启用与私人网络的连接", "siteCreate": "创建站点", "siteCreateDescription2": "按照下面的步骤创建和连接一个新站点", - "siteCreateDescription": "创建一个新站点开始连接您的资源", + "siteCreateDescription": "创建一个新站点开始连接资源", "close": "关闭", "siteErrorCreate": "创建站点出错", "siteErrorCreateKeyPair": "找不到密钥对或站点默认值", @@ -74,7 +74,7 @@ "siteInstallNewt": "安装 Newt", "siteInstallNewtDescription": "在您的系统中运行 Newt", "WgConfiguration": "WireGuard 配置", - "WgConfigurationDescription": "使用以下配置连接到您的网络", + "WgConfigurationDescription": "使用以下配置连接到网络", "operatingSystem": "操作系统", "commands": "命令", "recommended": "推荐", @@ -87,32 +87,32 @@ "siteUpdated": "站点已更新", "siteUpdatedDescription": "网站已更新。", "siteGeneralDescription": "配置此站点的常规设置", - "siteSettingDescription": "配置您网站上的设置", + "siteSettingDescription": "配置站点设置", "siteSetting": "{siteName} 设置", - "siteNewtTunnel": "Newt 隧道 (推荐)", - "siteNewtTunnelDescription": "最简单的方式来连接到您的网络。不需要任何额外设置。", + "siteNewtTunnel": "新站点 (推荐)", + "siteNewtTunnelDescription": "最简单的方式来创建任何网络的入口。没有额外的设置。", "siteWg": "基本 WireGuard", "siteWgDescription": "使用任何 WireGuard 客户端来建立隧道。需要手动配置 NAT。", "siteWgDescriptionSaas": "使用任何WireGuard客户端建立隧道。需要手动配置NAT。仅适用于自托管节点。", "siteLocalDescription": "仅限本地资源。不需要隧道。", "siteLocalDescriptionSaas": "仅本地资源。没有隧道。仅在远程节点上可用。", "siteSeeAll": "查看所有站点", - "siteTunnelDescription": "确定如何连接到您的网站", - "siteNewtCredentials": "Newt 凭据", - "siteNewtCredentialsDescription": "这是 Newt 服务器的身份验证凭据", - "siteCredentialsSave": "保存您的凭据", + "siteTunnelDescription": "确定如何连接到站点", + "siteNewtCredentials": "全权证书", + "siteNewtCredentialsDescription": "站点如何通过服务器进行身份验证", + "siteCredentialsSave": "保存证书", "siteCredentialsSaveDescription": "您只能看到一次。请确保将其复制并保存到一个安全的地方。", "siteInfo": "站点信息", "status": "状态", "shareTitle": "管理共享链接", - "shareDescription": "创建可共享的链接,允许暂时或永久访问您的资源", + "shareDescription": "创建可共享的链接,允许临时或永久访问代理资源", "shareSearch": "搜索共享链接...", "shareCreate": "创建共享链接", "shareErrorDelete": "删除链接失败", "shareErrorDeleteMessage": "删除链接时出错", "shareDeleted": "链接已删除", "shareDeletedDescription": "链接已删除", - "shareTokenDescription": "您的访问令牌可以通过两种方式传递:作为查询参数或请求头。 每次验证访问请求都必须从客户端传递。", + "shareTokenDescription": "访问令牌可以通过两种方式传递:作为查询参数或请求标题。 每次验证访问请求都必须从客户端传递。", "accessToken": "访问令牌", "usageExamples": "用法示例", "tokenId": "令牌 ID", @@ -121,7 +121,7 @@ "importantNote": "重要提示", "shareImportantDescription": "出于安全考虑,建议尽可能在使用请求头传递参数,因为查询参数可能会被浏览器历史记录或服务器日志记录。", "token": "令牌", - "shareTokenSecurety": "请妥善保管您的访问令牌,不要将其暴露在公开访问的区域或客户端代码中。", + "shareTokenSecurety": "保持访问令牌的安全。请不要在公开可访问的区域或客户端代码中共享它。", "shareErrorFetchResource": "获取资源失败", "shareErrorFetchResourceDescription": "获取资源时出错", "shareErrorCreate": "无法创建共享链接", @@ -144,8 +144,10 @@ "expires": "过期时间", "never": "永不过期", "shareErrorSelectResource": "请选择一个资源", - "resourceTitle": "管理资源", - "resourceDescription": "为您的私人应用程序创建安全代理", + "proxyResourceTitle": "管理公共资源", + "proxyResourceDescription": "创建和管理可通过 Web 浏览器公开访问的资源", + "clientResourceTitle": "管理私有资源", + "clientResourceDescription": "创建和管理只能通过连接客户端访问的资源", "resourcesSearch": "搜索资源...", "resourceAdd": "添加资源", "resourceErrorDelte": "删除资源时出错", @@ -155,9 +157,9 @@ "resourceMessageRemove": "一旦删除,资源将不再可访问。与该资源相关的所有目标也将被删除。", "resourceQuestionRemove": "您确定要从组织中删除资源吗?", "resourceHTTP": "HTTPS 资源", - "resourceHTTPDescription": "使用子域或根域名通过 HTTPS 向您的应用程序提出代理请求。", + "resourceHTTPDescription": "使用子域或基础域通过 HTTPS 请求此应用的代理请求。", "resourceRaw": "TCP/UDP 资源", - "resourceRawDescription": "使用 TCP/UDP 使用端口号向您的应用提出代理请求。", + "resourceRawDescription": "通过 TCP/UDP 使用端口号对应用程序的代理请求。只有当站点连接到节点时才能生效。", "resourceCreate": "创建资源", "resourceCreateDescription": "按照下面的步骤创建新资源", "resourceSeeAll": "查看所有资源", @@ -171,22 +173,22 @@ "noCountryFound": "找不到国家。", "siteSelectionDescription": "此站点将为目标提供连接。", "resourceType": "资源类型", - "resourceTypeDescription": "确定如何访问您的资源", + "resourceTypeDescription": "确定如何访问资源", "resourceHTTPSSettings": "HTTPS 设置", - "resourceHTTPSSettingsDescription": "配置如何通过 HTTPS 访问您的资源", + "resourceHTTPSSettingsDescription": "配置如何通过 HTTPS 访问资源", "domainType": "域类型", "subdomain": "子域名", "baseDomain": "根域名", - "subdomnainDescription": "您的资源可以访问的子域名。", + "subdomnainDescription": "可访问资源的子域。", "resourceRawSettings": "TCP/UDP 设置", - "resourceRawSettingsDescription": "配置如何通过 TCP/UDP 访问您的资源。 您映射资源到主机Pangolin服务器上的端口,这样您就可以访问服务器-公共-ip:mapped端口的资源。", + "resourceRawSettingsDescription": "配置如何通过 TCP/UDP 访问资源", "protocol": "协议", "protocolSelect": "选择协议", "resourcePortNumber": "端口号", "resourcePortNumberDescription": "代理请求的外部端口号。", "cancel": "取消", "resourceConfig": "配置片段", - "resourceConfigDescription": "复制并粘贴这些配置片段以设置您的 TCP/UDP 资源", + "resourceConfigDescription": "复制并粘贴这些配置片段以设置 TCP/UDP 资源", "resourceAddEntrypoints": "Traefik: 添加入口点", "resourceExposePorts": "Gerbil:在 Docker Compose 中显示端口", "resourceLearnRaw": "学习如何配置 TCP/UDP 资源", @@ -202,14 +204,14 @@ "proxy": "代理服务器", "internal": "内部设置", "rules": "规则", - "resourceSettingDescription": "配置您资源上的设置", + "resourceSettingDescription": "配置资源上的设置", "resourceSetting": "{resourceName} 设置", - "alwaysAllow": "一律允许", - "alwaysDeny": "一律拒绝", + "alwaysAllow": "旁路认证", + "alwaysDeny": "屏蔽访问", "passToAuth": "传递至认证", - "orgSettingsDescription": "配置您组织的一般设置", + "orgSettingsDescription": "配置组织设置", "orgGeneralSettings": "组织设置", - "orgGeneralSettingsDescription": "管理您的机构详细信息和配置", + "orgGeneralSettingsDescription": "管理机构的详细信息和配置", "saveGeneralSettings": "保存常规设置", "saveSettings": "保存设置", "orgDangerZone": "危险区域", @@ -232,7 +234,7 @@ "orgMissing": "缺少组织 ID", "orgMissingMessage": "没有组织ID,无法重新生成邀请。", "accessUsersManage": "管理用户", - "accessUsersDescription": "邀请用户并位他们添加角色以管理访问您的组织", + "accessUsersDescription": "邀请和管理访问此组织的用户", "accessUsersSearch": "搜索用户...", "accessUserCreate": "创建用户", "accessUserRemove": "删除用户", @@ -241,13 +243,13 @@ "role": "角色", "nameRequired": "名称是必填项", "accessRolesManage": "管理角色", - "accessRolesDescription": "配置角色来管理访问您的组织", + "accessRolesDescription": "创建和管理组织中用户的角色", "accessRolesSearch": "搜索角色...", "accessRolesAdd": "添加角色", "accessRoleDelete": "删除角色", "description": "描述", "inviteTitle": "打开邀请", - "inviteDescription": "管理您给其他用户的邀请", + "inviteDescription": "管理其他用户加入机构的邀请", "inviteSearch": "搜索邀请...", "minutes": "分钟", "hours": "小时", @@ -261,13 +263,13 @@ "apiKeysErrorCreate": "创建 API 密钥出错", "apiKeysErrorSetPermission": "设置权限出错", "apiKeysCreate": "生成 API 密钥", - "apiKeysCreateDescription": "为您的组织生成一个新的 API 密钥", + "apiKeysCreateDescription": "为机构生成一个新的 API 密钥", "apiKeysGeneralSettings": "权限", "apiKeysGeneralSettingsDescription": "确定此 API 密钥可以做什么", - "apiKeysList": "您的 API 密钥", - "apiKeysSave": "保存您的 API 密钥", + "apiKeysList": "新 API 密钥", + "apiKeysSave": "保存 API 密钥", "apiKeysSaveDescription": "该信息仅会显示一次,请确保将其复制到安全的位置。", - "apiKeysInfo": "您的 API 密钥是:", + "apiKeysInfo": "API 密钥是:", "apiKeysConfirmCopy": "我已复制 API 密钥", "generate": "生成", "done": "完成", @@ -424,7 +426,7 @@ "userCreated": "用户已创建", "userCreatedDescription": "用户已成功创建。", "userTypeInternal": "内部用户", - "userTypeInternalDescription": "邀请用户直接加入您的组织。", + "userTypeInternalDescription": "邀请用户直接加入组织。", "userTypeExternal": "外部用户", "userTypeExternalDescription": "创建一个具有外部身份提供商的用户。", "accessUserCreateDescription": "按照下面的步骤创建一个新用户", @@ -436,6 +438,16 @@ "inviteEmailSent": "发送邀请邮件给用户", "inviteValid": "有效", "selectDuration": "选择持续时间", + "selectResource": "选择资源", + "filterByResource": "按资源过滤", + "resetFilters": "重置过滤器", + "totalBlocked": "被Pangolin阻止的请求", + "totalRequests": "总请求", + "requestsByCountry": "请求按国家", + "requestsByDay": "按日请求", + "blocked": "已阻止", + "allowed": "允许的", + "topCountries": "顶级国家", "accessRoleSelect": "选择角色", "inviteEmailSentDescription": "一封电子邮件已经发送给用户,带有下面的访问链接。他们必须访问该链接才能接受邀请。", "inviteSentDescription": "用户已被邀请。他们必须访问下面的链接才能接受邀请。", @@ -458,13 +470,13 @@ "accessControlsSubmit": "保存访问控制", "roles": "角色", "accessUsersRoles": "管理用户和角色", - "accessUsersRolesDescription": "邀请用户并将他们添加到角色以管理访问您的组织", + "accessUsersRolesDescription": "邀请用户加入角色来管理访问组织", "key": "关键字", "createdAt": "创建于", "proxyErrorInvalidHeader": "无效的自定义主机头值。使用域名格式,或将空保存为取消自定义主机头。", "proxyErrorTls": "无效的 TLS 服务器名称。使用域名格式,或保存空以删除 TLS 服务器名称。", "proxyEnableSSL": "启用 SSL", - "proxyEnableSSLDescription": "启用 SSL/TLS 加密以确保您目标的 HTTPS 连接。", + "proxyEnableSSLDescription": "启用 SSL/TLS 加密以确保目标的 HTTPS 连接。", "target": "Target", "configureTarget": "配置目标", "targetErrorFetch": "获取目标失败", @@ -480,14 +492,14 @@ "targetsErrorUpdate": "更新目标失败", "targetsErrorUpdateDescription": "更新目标时出错", "targetTlsUpdate": "TLS 设置已更新", - "targetTlsUpdateDescription": "您的 TLS 设置已成功更新", + "targetTlsUpdateDescription": "已成功更新 TLS 设置", "targetErrorTlsUpdate": "更新 TLS 设置失败", "targetErrorTlsUpdateDescription": "更新 TLS 设置时出错", "proxyUpdated": "代理设置已更新", - "proxyUpdatedDescription": "您的代理设置已成功更新", + "proxyUpdatedDescription": "已成功更新代理设置", "proxyErrorUpdate": "更新代理设置失败", "proxyErrorUpdateDescription": "更新代理设置时出错", - "targetAddr": "IP / 域名", + "targetAddr": "主机", "targetPort": "端口", "targetProtocol": "协议", "targetTlsSettings": "安全连接配置", @@ -497,12 +509,12 @@ "targetTlsSniDescription": "SNI使用的 TLS 服务器名称。留空使用默认值。", "targetTlsSubmit": "保存设置", "targets": "目标配置", - "targetsDescription": "设置目标来路由流量到您的后端服务", + "targetsDescription": "设置目标路由流量到后端服务", "targetStickySessions": "启用置顶会话", "targetStickySessionsDescription": "将连接保持在同一个后端目标的整个会话中。", "methodSelect": "选择方法", "targetSubmit": "添加目标", - "targetNoOne": "此资源没有任何目标。添加目标来配置向您后端发送请求的位置。", + "targetNoOne": "此资源没有任何目标。添加目标来配置向后端发送请求的位置。", "targetNoOneDescription": "在上面添加多个目标将启用负载平衡。", "targetsSubmit": "保存目标", "addTarget": "添加目标", @@ -516,9 +528,11 @@ "targetCreatedDescription": "目标已成功创建", "targetErrorCreate": "创建目标失败", "targetErrorCreateDescription": "创建目标时出错", + "tlsServerName": "TLS 服务器名称", + "tlsServerNameDescription": "SNI使用的 TLS 服务器名称", "save": "保存", "proxyAdditional": "附加代理设置", - "proxyAdditionalDescription": "配置你的资源如何处理代理设置", + "proxyAdditionalDescription": "配置资源如何处理代理设置", "proxyCustomHeader": "自定义主机标题", "proxyCustomHeaderDescription": "代理请求时设置的主机头。留空则使用默认值。", "proxyAdditionalSubmit": "保存代理设置", @@ -558,7 +572,7 @@ "rulesMatchType": "匹配类型", "value": "值", "rulesAbout": "关于规则", - "rulesAboutDescription": "规则使您能够依据特定条件控制资源访问权限。您可以创建基于 IP 地址或 URL 路径的规则,以允许或拒绝访问。", + "rulesAboutDescription": "规则允许您根据一组标准控制对资源的访问。 您可以创建规则允许或拒绝基于IP地址或 URL 路径的访问。", "rulesActions": "行动", "rulesActionAlwaysAllow": "总是允许:绕过所有身份验证方法", "rulesActionAlwaysDeny": "总是拒绝:阻止所有请求;无法尝试验证", @@ -570,7 +584,7 @@ "rulesEnable": "启用规则", "rulesEnableDescription": "启用或禁用此资源的规则评估", "rulesResource": "资源规则配置", - "rulesResourceDescription": "配置规则来控制对您资源的访问", + "rulesResourceDescription": "配置规则来控制对资源的访问", "ruleSubmit": "添加规则", "rulesNoOne": "没有规则。使用表单添加规则。", "rulesOrder": "规则按优先顺序评定。", @@ -586,7 +600,7 @@ "none": "无", "unknown": "未知", "resources": "资源", - "resourcesDescription": "资源是您私有网络中运行的应用程序的代理。您可以为私有网络中的任何 HTTP/HTTPS 或 TCP/UDP 服务创建资源。每个资源都必须连接到一个站点,以通过加密的 WireGuard 隧道实现私密且安全的连接。", + "resourcesDescription": "资源是在私人网络上运行的应用程序的代理。在您的私人网络上为任意HTTP/HTTPS或raw TCP/UDP服务创建资源。 每个资源必须连接到一个站点,以便通过加密的 WireGuard 隧道启用私密安全连接。", "resourcesWireGuardConnect": "采用 WireGuard 提供的加密安全连接", "resourcesMultipleAuthenticationMethods": "配置多个身份验证方法", "resourcesUsersRolesAccess": "基于用户和角色的访问控制", @@ -597,7 +611,7 @@ "resourceSelect": "选择资源", "shareLinks": "分享链接", "share": "分享链接", - "shareDescription2": "创建资源共享链接。链接提供对资源的临时或无限制访问。 当您创建链接时,您可以配置链接的到期时间。", + "shareDescription2": "创建资源的可共享链接。链接提供了对您资源的临时或无限制访问。 当您创建链接时,您可以配置链接的到期时间。", "shareEasyCreate": "轻松创建和分享", "shareConfigurableExpirationDuration": "可配置的过期时间", "shareSecureAndRevocable": "安全和可撤销的", @@ -607,19 +621,19 @@ "unknownCommand": "未知命令", "newtErrorFetchReleases": "无法获取版本信息: {err}", "newtErrorFetchLatest": "无法获取最新版信息: {err}", - "newtEndpoint": "Newt 端点", - "newtId": "Newt ID", - "newtSecretKey": "Newt 私钥", + "newtEndpoint": "Endpoint", + "newtId": "ID", + "newtSecretKey": "密钥", "architecture": "架构", "sites": "站点", - "siteWgAnyClients": "使用任何 WireGuard 客户端连接。您必须使用对等IP解决您的内部资源。", + "siteWgAnyClients": "使用任何 WireGuard 客户端连接。您必须使用对等IP解决内部资源问题。", "siteWgCompatibleAllClients": "与所有WireGuard客户端兼容", "siteWgManualConfigurationRequired": "需要手动配置", "userErrorNotAdminOrOwner": "用户不是管理员或所有者", "pangolinSettings": "设置 - Pangolin", "accessRoleYour": "您的角色:", "accessRoleSelect2": "选择角色", - "accessUserSelect": "选择一个用户", + "accessUserSelect": "选择用户", "otpEmailEnter": "输入电子邮件", "otpEmailEnterDescription": "在输入字段输入后按回车键添加电子邮件。", "otpEmailErrorInvalid": "无效的邮箱地址。通配符(*)必须占据整个开头部分。", @@ -671,7 +685,7 @@ "resourcePincodeSetupTitle": "设置 PIN 码", "resourcePincodeSetupTitleDescription": "设置 PIN 码来保护此资源", "resourceRoleDescription": "管理员总是可以访问此资源。", - "resourceUsersRoles": "用户和角色", + "resourceUsersRoles": "访问控制", "resourceUsersRolesDescription": "配置用户和角色可以访问此资源", "resourceUsersRolesSubmit": "保存用户和角色", "resourceWhitelistSave": "保存成功", @@ -702,6 +716,7 @@ "resourceTransferSubmit": "转移资源", "siteDestination": "目标站点", "searchSites": "搜索站点", + "countries": "国家", "accessRoleCreate": "创建角色", "accessRoleCreateDescription": "创建一个新角色来分组用户并管理他们的权限。", "accessRoleCreateSubmit": "创建角色", @@ -766,7 +781,7 @@ "idpOidcConfigure": "OAuth2/OIDC 配置", "idpOidcConfigureDescription": "配置 OAuth2/OIDC 供应商端点和凭据", "idpClientId": "客户端ID", - "idpClientIdDescription": "来自您身份提供商的 OAuth2 客户端 ID", + "idpClientIdDescription": "来自身份提供商的 OAuth2 客户端 ID", "idpClientSecret": "客户端密钥", "idpClientSecretDescription": "来自身份提供商的 OAuth2 客户端密钥", "idpAuthUrl": "授权 URL", @@ -774,7 +789,7 @@ "idpTokenUrl": "令牌 URL", "idpTokenUrlDescription": "OAuth2 令牌端点的 URL", "idpOidcConfigureAlert": "重要提示", - "idpOidcConfigureAlertDescription": "创建身份提供方后,您需要在其设置中配置回调 URL。回调 URL 会在创建成功后提供。", + "idpOidcConfigureAlertDescription": "在创建身份提供商后,您需要在身份提供商的设置中配置回调URL。 成功创建后将提供回调URL。", "idpToken": "令牌配置", "idpTokenDescription": "配置如何从 ID 令牌中提取用户信息", "idpJmespathAbout": "关于 JMESPath", @@ -826,7 +841,7 @@ "idpUpdatedDescription": "身份提供商更新成功", "redirectUrl": "重定向网址", "redirectUrlAbout": "关于重定向网址", - "redirectUrlAboutDescription": "这是用户在验证后将被重定向到的URL。您需要在身份提供商设置中配置此URL。", + "redirectUrlAboutDescription": "这是用户在验证后将被重定向到的URL。您需要在身份提供者的设置中配置此URL。", "pangolinAuth": "认证 - Pangolin", "verificationCodeLengthRequirements": "您的验证码必须是8个字符。", "errorOccurred": "发生错误", @@ -909,6 +924,10 @@ "passwordResetSent": "我们将发送一个验证码到这个电子邮件地址。", "passwordResetCode": "验证码", "passwordResetCodeDescription": "请检查您的电子邮件以获取验证码。", + "generatePasswordResetCode": "生成密码重置代码", + "passwordResetCodeGenerated": "密码重置代码已生成", + "passwordResetCodeGeneratedDescription": "与用户分享此代码。他们可以用它来重置他们的密码。", + "passwordResetUrl": "Reset URL", "passwordNew": "新密码", "passwordNewConfirm": "确认新密码", "changePassword": "更改密码", @@ -926,6 +945,9 @@ "pincodeAuth": "验证器代码", "pincodeSubmit2": "提交代码", "passwordResetSubmit": "请求重置", + "passwordResetAlreadyHaveCode": "输入密码重置码", + "passwordResetSmtpRequired": "请联系您的管理员", + "passwordResetSmtpRequiredDescription": "需要密码重置密码。请联系您的管理员寻求帮助。", "passwordBack": "回到密码", "loginBack": "返回登录", "signup": "注册", @@ -1091,12 +1113,15 @@ "actionListSiteResources": "列出站点资源", "actionUpdateSiteResource": "更新站点资源", "actionListInvitations": "邀请列表", + "actionExportLogs": "导出日志", + "actionViewLogs": "查看日志", "noneSelected": "未选择", "orgNotFound2": "未找到组织。", "searchProgress": "搜索中...", "create": "创建", "orgs": "组织", "loginError": "登录时出错", + "loginRequiredForDevice": "需要登录才能验证您的设备。", "passwordForgot": "忘记密码?", "otpAuth": "两步验证", "otpAuthDescription": "从您的身份验证程序中输入代码或您的单次备份代码。", @@ -1151,19 +1176,29 @@ "sidebarHome": "首页", "sidebarSites": "站点", "sidebarResources": "资源", + "sidebarProxyResources": "公开的", + "sidebarClientResources": "非公开的", "sidebarAccessControl": "访问控制", + "sidebarLogsAndAnalytics": "日志与分析", "sidebarUsers": "用户", + "sidebarAdmin": "管理员", "sidebarInvitations": "邀请", "sidebarRoles": "角色", - "sidebarShareableLinks": "分享链接", + "sidebarShareableLinks": "链接", "sidebarApiKeys": "API密钥", "sidebarSettings": "设置", "sidebarAllUsers": "所有用户", "sidebarIdentityProviders": "身份提供商", "sidebarLicense": "证书", "sidebarClients": "客户端", + "sidebarUserDevices": "用户", + "sidebarMachineClients": "机", "sidebarDomains": "域", + "sidebarGeneral": "概览", + "sidebarLogAndAnalytics": "日志与分析", "sidebarBluePrints": "蓝图", + "sidebarOrganization": "组织", + "sidebarLogsAnalytics": "分析", "blueprints": "蓝图", "blueprintsDescription": "应用声明配置并查看先前运行的", "blueprintAdd": "添加蓝图", @@ -1174,7 +1209,7 @@ "blueprintDetailsDescription": "查看应用蓝图的结果和发生的任何错误", "blueprintInfo": "蓝图信息", "message": "留言", - "blueprintContentsDescription": "定义描述您基础设施的 YAML 内容", + "blueprintContentsDescription": "定义描述基础设施的 YAML 内容", "blueprintErrorCreateDescription": "应用蓝图时出错", "blueprintErrorCreate": "创建蓝图时出错", "searchBlueprintProgress": "搜索蓝图...", @@ -1230,15 +1265,15 @@ "loading": "加载中", "restart": "重启", "domains": "域", - "domainsDescription": "管理您的组织域", + "domainsDescription": "创建和管理组织中可用的域", "domainsSearch": "搜索域...", "domainAdd": "添加域", - "domainAddDescription": "在您的组织中注册新域", + "domainAddDescription": "注册一个新域名到组织", "domainCreate": "创建域", "domainCreatedDescription": "域创建成功", "domainDeletedDescription": "成功删除域", - "domainQuestionRemove": "您确定要从您的帐户中删除域名吗?", - "domainMessageRemove": "移除后,该域将不再与您的账户关联。", + "domainQuestionRemove": "您确定要删除域名吗?", + "domainMessageRemove": "一旦删除,域将不再与组织相关联。", "domainConfirmDelete": "确认删除域", "domainDelete": "删除域", "domain": "域", @@ -1257,7 +1292,7 @@ "pending": "待定", "sidebarBilling": "计费", "billing": "计费", - "orgBillingDescription": "管理您的账单信息和订阅", + "orgBillingDescription": "管理账单信息和订阅", "github": "GitHub", "pangolinHosted": "Pangolin 托管", "fossorial": "Fossorial", @@ -1285,9 +1320,9 @@ "productUpdateTitle": "产品更新", "productUpdateEmpty": "无更新", "dismissAll": "关闭所有", - "pangolinUpdateAvailable": "新版本可用", + "pangolinUpdateAvailable": "可用更新", "pangolinUpdateAvailableInfo": "版本 {version} 已准备就绪", - "pangolinUpdateAvailableReleaseNotes": "查看发布笔记", + "pangolinUpdateAvailableReleaseNotes": "查看发布说明", "newtUpdateAvailable": "更新可用", "newtUpdateAvailableInfo": "新版本的 Newt 已可用。请更新到最新版本以获得最佳体验。", "domainPickerEnterDomain": "域名", @@ -1300,7 +1335,7 @@ "domainPickerSortAsc": "A-Z", "domainPickerSortDesc": "Z-A", "domainPickerCheckingAvailability": "检查可用性...", - "domainPickerNoMatchingDomains": "未找到匹配的域名。尝试不同的域名或检查您组织的域名设置。", + "domainPickerNoMatchingDomains": "未找到匹配的域。请尝试不同的域或检查组织的域设置。", "domainPickerOrganizationDomains": "组织域", "domainPickerProvidedDomains": "提供的域", "domainPickerSubdomain": "子域:{subdomain}", @@ -1334,7 +1369,7 @@ "billingModifySubscription": "修改订阅", "billingStartSubscription": "开始订阅", "billingRecurringCharge": "周期性收费", - "billingManageSubscriptionSettings": "管理您的订阅设置和偏好", + "billingManageSubscriptionSettings": "管理订阅设置和首选项", "billingNoActiveSubscription": "您没有活跃的订阅。开始订阅以增加使用限制。", "billingFailedToLoadSubscription": "无法加载订阅", "billingFailedToLoadUsage": "无法加载使用情况", @@ -1345,9 +1380,9 @@ "billingPortalError": "门户错误", "billingDataUsageInfo": "当连接到云端时,您将为通过安全隧道传输的所有数据收取费用。 这包括您所有站点的进出流量。 当您达到上限时,您的站点将断开连接,直到您升级计划或减少使用。使用节点时不收取数据。", "billingOnlineTimeInfo": "您要根据您的网站连接到云端的时间长短收取费用。 例如,44,640分钟等于一个24/7全月运行的网站。 当您达到上限时,您的站点将断开连接,直到您升级计划或减少使用。使用节点时不收取费用。", - "billingUsersInfo": "根据您组织中的活跃用户数量收费。按日计算账单。", - "billingDomainInfo": "根据组织中活跃域的数量收费。按日计算账单。", - "billingRemoteExitNodesInfo": "根据您组织中已管理节点的数量收费。按日计算账单。", + "billingUsersInfo": "您为组织中的每个用户收取费用。每日计费是根据您组织中活跃用户帐户的数量计算的。", + "billingDomainInfo": "您在组织中的每个域都要收取费用。每日计费是根据您组织中的活动域帐户数计算的。", + "billingRemoteExitNodesInfo": "您为组织中的每个管理节点收取费用。计费是每日根据您组织中活跃的管理节点数计算的。", "domainNotFound": "域未找到", "domainNotFoundDescription": "此资源已禁用,因为该域不再在我们的系统中存在。请为此资源设置一个新域。", "failed": "失败", @@ -1430,29 +1465,32 @@ "and": "和", "privacyPolicy": "隐私政策" }, + "signUpMarketing": { + "keepMeInTheLoop": "通过电子邮件让我在循环中保持新闻、更新和新功能。" + }, "siteRequired": "需要站点。", "olmTunnel": "Olm 隧道", "olmTunnelDescription": "使用 Olm 进行客户端连接", "errorCreatingClient": "创建客户端出错", "clientDefaultsNotFound": "未找到客户端默认值", "createClient": "创建客户端", - "createClientDescription": "创建一个新客户端来连接您的站点", + "createClientDescription": "创建一个新客户端来访问私有资源", "seeAllClients": "查看所有客户端", "clientInformation": "客户端信息", "clientNamePlaceholder": "客户端名称", "address": "地址", "subnetPlaceholder": "子网", - "addressDescription": "此客户端将用于连接的地址", + "addressDescription": "客户的内部地址。必须属于组织的子网。", "selectSites": "选择站点", "sitesDescription": "客户端将与所选站点进行连接", "clientInstallOlm": "安装 Olm", "clientInstallOlmDescription": "在您的系统上运行 Olm", - "clientOlmCredentials": "Olm 凭据", - "clientOlmCredentialsDescription": "这是 Olm 服务器的身份验证方式", - "olmEndpoint": "Olm 端点", - "olmId": "Olm ID", - "olmSecretKey": "Olm 私钥", - "clientCredentialsSave": "保存您的凭据", + "clientOlmCredentials": "全权证书", + "clientOlmCredentialsDescription": "这是客户端如何通过服务器进行身份验证", + "olmEndpoint": "Endpoint", + "olmId": "ID", + "olmSecretKey": "密钥", + "clientCredentialsSave": "保存证书", "clientCredentialsSaveDescription": "该信息仅会显示一次,请确保将其复制到安全位置。", "generalSettingsDescription": "配置此客户端的常规设置", "clientUpdated": "客户端已更新", @@ -1463,9 +1501,7 @@ "sitesFetchError": "获取站点时出错。", "olmErrorFetchReleases": "获取 Olm 发布版本时出错。", "olmErrorFetchLatest": "获取最新 Olm 发布版本时出错。", - "remoteSubnets": "远程子网", "enterCidrRange": "输入 CIDR 范围", - "remoteSubnetsDescription": "添加可以通过客户端远程访问该站点的CIDR范围。使用类似10.0.0.0/24的格式。这仅适用于VPN客户端连接。", "resourceEnableProxy": "启用公共代理", "resourceEnableProxyDescription": "启用到此资源的公共代理。这允许外部网络通过开放端口访问资源。需要 Traefik 配置。", "externalProxyEnabled": "外部代理已启用", @@ -1483,14 +1519,15 @@ "enableHealthChecksDescription": "监视此目标的健康状况。如果需要,您可以监视一个不同的终点。", "healthScheme": "方法", "healthSelectScheme": "选择方法", + "healthCheckPortInvalid": "健康检查端口必须介于 1 到 65535 之间", "healthCheckPath": "路径", "healthHostname": "IP / 主机", "healthPort": "端口", "healthCheckPathDescription": "用于检查健康状态的路径。", - "healthyIntervalSeconds": "正常间隔", - "unhealthyIntervalSeconds": "不正常间隔", + "healthyIntervalSeconds": "健康间隔(秒)", + "unhealthyIntervalSeconds": "不健康间隔 (秒)", "IntervalSeconds": "正常间隔", - "timeoutSeconds": "超时", + "timeoutSeconds": "超时(秒)", "timeIsInSeconds": "时间以秒为单位", "retryAttempts": "重试次数", "expectedResponseCodes": "期望响应代码", @@ -1526,12 +1563,12 @@ "resourceEditDomain": "编辑域名", "siteName": "站点名称", "proxyPort": "端口", - "resourcesTableProxyResources": "代理资源", - "resourcesTableClientResources": "客户端资源", + "resourcesTableProxyResources": "公开的", + "resourcesTableClientResources": "非公开的", "resourcesTableNoProxyResourcesFound": "未找到代理资源。", "resourcesTableNoInternalResourcesFound": "未找到内部资源。", "resourcesTableDestination": "目标", - "resourcesTableTheseResourcesForUseWith": "这些资源供...使用", + "resourcesTableAlias": "Alias", "resourcesTableClients": "客户端", "resourcesTableAndOnlyAccessibleInternally": "且仅在与客户端连接时可内部访问。", "resourcesTableNoTargets": "没有目标", @@ -1540,8 +1577,8 @@ "resourcesTableOffline": "离线的", "resourcesTableUnknown": "未知的", "resourcesTableNotMonitored": "未监视的", - "editInternalResourceDialogEditClientResource": "编辑客户端资源", - "editInternalResourceDialogUpdateResourceProperties": "更新{resourceName}的资源属性和目标配置。", + "editInternalResourceDialogEditClientResource": "编辑私有资源", + "editInternalResourceDialogUpdateResourceProperties": "更新{resourceName}的资源配置和访问控制。", "editInternalResourceDialogResourceProperties": "资源属性", "editInternalResourceDialogName": "名称", "editInternalResourceDialogProtocol": "协议", @@ -1560,11 +1597,22 @@ "editInternalResourceDialogInvalidIPAddressFormat": "无效的IP地址格式", "editInternalResourceDialogDestinationPortMin": "目标端口必须至少为1", "editInternalResourceDialogDestinationPortMax": "目标端口必须小于65536", + "editInternalResourceDialogPortModeRequired": "端口模式需要协议、代理端口和目的端口", + "editInternalResourceDialogMode": "模式", + "editInternalResourceDialogModePort": "端口", + "editInternalResourceDialogModeHost": "主机", + "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogDestination": "目标", + "editInternalResourceDialogDestinationHostDescription": "站点网络上资源的 IP 地址或主机名。", + "editInternalResourceDialogDestinationIPDescription": "站点网络上资源的IP或主机名地址。", + "editInternalResourceDialogDestinationCidrDescription": "站点网络上资源的 CIDR 范围。", + "editInternalResourceDialogAlias": "Alias", + "editInternalResourceDialogAliasDescription": "此资源可选的内部DNS别名。", "createInternalResourceDialogNoSitesAvailable": "暂无可用站点", "createInternalResourceDialogNoSitesAvailableDescription": "您需要至少配置一个子网的Newt站点来创建内部资源。", "createInternalResourceDialogClose": "关闭", - "createInternalResourceDialogCreateClientResource": "创建客户端资源", - "createInternalResourceDialogCreateClientResourceDescription": "创建一个新资源,该资源将可供连接到所选站点的客户端访问。", + "createInternalResourceDialogCreateClientResource": "创建私有资源", + "createInternalResourceDialogCreateClientResourceDescription": "创建一个新资源只能为连接到组织的客户端访问", "createInternalResourceDialogResourceProperties": "资源属性", "createInternalResourceDialogName": "名称", "createInternalResourceDialogSite": "站点", @@ -1593,11 +1641,22 @@ "createInternalResourceDialogInvalidIPAddressFormat": "无效的IP地址格式", "createInternalResourceDialogDestinationPortMin": "目标端口必须至少为1", "createInternalResourceDialogDestinationPortMax": "目标端口必须小于65536", + "createInternalResourceDialogPortModeRequired": "端口模式需要协议、代理端口和目的端口", + "createInternalResourceDialogMode": "模式", + "createInternalResourceDialogModePort": "端口", + "createInternalResourceDialogModeHost": "主机", + "createInternalResourceDialogModeCidr": "CIDR", + "createInternalResourceDialogDestination": "目标", + "createInternalResourceDialogDestinationHostDescription": "站点网络上资源的 IP 地址或主机名。", + "createInternalResourceDialogDestinationCidrDescription": "站点网络上资源的 CIDR 范围。", + "createInternalResourceDialogAlias": "Alias", + "createInternalResourceDialogAliasDescription": "此资源可选的内部DNS别名。", "siteConfiguration": "配置", "siteAcceptClientConnections": "接受客户端连接", - "siteAcceptClientConnectionsDescription": "允许其他设备通过此Newt实例使用客户端作为网关连接。", - "siteAddress": "站点地址", - "siteAddressDescription": "指定主机的IP地址以供客户端连接。这是Pangolin网络中站点的内部地址,供客户端访问。必须在Org子网内。", + "siteAcceptClientConnectionsDescription": "允许用户设备和客户端访问此站点上的资源。这可以稍后更改。", + "siteAddress": "站点地址 (高级)", + "siteAddressDescription": "站点的内部地址。必须属于组织的子网。", + "siteNameDescription": "可以稍后更改的站点显示名称。", "autoLoginExternalIdp": "自动使用外部IDP登录", "autoLoginExternalIdpDescription": "立即将用户重定向到外部IDP进行身份验证。", "selectIdp": "选择IDP", @@ -1611,7 +1670,7 @@ "autoLoginErrorNoRedirectUrl": "未从身份提供商收到重定向URL。", "autoLoginErrorGeneratingUrl": "生成身份验证URL失败。", "remoteExitNodeManageRemoteExitNodes": "远程节点", - "remoteExitNodeDescription": "自我主机一个或多个远程节点来扩展您的网络连接并减少对云的依赖性", + "remoteExitNodeDescription": "自我主机一个或多个远程节点来扩展网络连接并减少对云的依赖性", "remoteExitNodes": "节点", "searchRemoteExitNodes": "搜索节点...", "remoteExitNodeAdd": "添加节点", @@ -1623,11 +1682,11 @@ "sidebarRemoteExitNodes": "远程节点", "remoteExitNodeCreate": { "title": "创建节点", - "description": "创建一个新节点来扩展您的网络连接", + "description": "创建一个新节点来扩展网络连接", "viewAllButton": "查看所有节点", "strategy": { "title": "创建策略", - "description": "选择此选项以手动配置您的节点或生成新凭据。", + "description": "选择此选项以手动配置节点或生成新凭据。", "adopt": { "title": "采纳节点", "description": "如果您已经拥有该节点的凭据,请选择此项。" @@ -1648,7 +1707,7 @@ }, "generate": { "title": "生成的凭据", - "description": "使用这些生成的凭据来配置您的节点", + "description": "使用这些生成的凭据来配置节点", "nodeIdTitle": "节点 ID", "secretTitle": "密钥", "saveCredentialsTitle": "将凭据添加到配置中", @@ -1724,16 +1783,16 @@ "idpTypeLabel": "身份提供者类型", "roleMappingExpressionPlaceholder": "例如: contains(group, 'admin' &'Admin' || 'Member'", "idpGoogleConfiguration": "Google 配置", - "idpGoogleConfigurationDescription": "配置您的 Google OAuth2 凭据", - "idpGoogleClientIdDescription": "您的 Google OAuth2 客户端 ID", - "idpGoogleClientSecretDescription": "您的 Google OAuth2 客户端密钥", + "idpGoogleConfigurationDescription": "配置 Google OAuth2 凭据", + "idpGoogleClientIdDescription": "Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Google OAuth2 客户端密钥", "idpAzureConfiguration": "Azure Entra ID 配置", - "idpAzureConfigurationDescription": "配置您的 Azure Entra ID OAuth2 凭据", + "idpAzureConfigurationDescription": "配置 Azure Entra ID OAuth2 凭据", "idpTenantId": "租户 ID", - "idpTenantIdPlaceholder": "您的租户ID", - "idpAzureTenantIdDescription": "您的 Azure 租户ID (在 Azure Active Directory 概览中发现)", - "idpAzureClientIdDescription": "您的 Azure 应用程序注册客户端 ID", - "idpAzureClientSecretDescription": "您的 Azure 应用程序注册客户端密钥", + "idpTenantIdPlaceholder": "tenant-id", + "idpAzureTenantIdDescription": "Azure 租户ID (在 Azure Active Directory 概览中找到)", + "idpAzureClientIdDescription": "Azure 应用注册客户端 ID", + "idpAzureClientSecretDescription": "Azure 应用程序注册客户端密钥", "idpGoogleTitle": "谷歌", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", @@ -1741,14 +1800,14 @@ "idpGoogleConfigurationTitle": "Google 配置", "idpAzureConfigurationTitle": "Azure Entra ID 配置", "idpTenantIdLabel": "租户 ID", - "idpAzureClientIdDescription2": "您的 Azure 应用程序注册客户端 ID", - "idpAzureClientSecretDescription2": "您的 Azure 应用程序注册客户端密钥", + "idpAzureClientIdDescription2": "Azure 应用注册客户端 ID", + "idpAzureClientSecretDescription2": "Azure 应用程序注册客户端密钥", "idpGoogleDescription": "Google OAuth2/OIDC 提供商", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", "subnet": "子网", "subnetDescription": "此组织网络配置的子网。", "authPage": "认证页面", - "authPageDescription": "配置您的组织认证页面", + "authPageDescription": "配置组织认证页面", "authPageDomain": "认证页面域", "noDomainSet": "没有域设置", "changeDomain": "更改域", @@ -1758,7 +1817,7 @@ "setAuthPageDomain": "设置认证页面域", "failedToFetchCertificate": "获取证书失败", "failedToRestartCertificate": "重新启动证书失败", - "addDomainToEnableCustomAuthPages": "为您的组织添加域名以启用自定义认证页面", + "addDomainToEnableCustomAuthPages": "添加域名以启用组织自定义认证页面", "selectDomainForOrgAuthPage": "选择组织认证页面的域", "domainPickerProvidedDomain": "提供的域", "domainPickerFreeProvidedDomain": "免费提供的域", @@ -1773,7 +1832,7 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" 无法为 {domain} 变为有效。", "domainPickerSubdomainSanitized": "子域已净化", "domainPickerSubdomainCorrected": "\"{sub}\" 已被更正为 \"{sanitized}\"", - "orgAuthSignInTitle": "登录到您的组织", + "orgAuthSignInTitle": "登录到组织", "orgAuthChooseIdpDescription": "选择您的身份提供商以继续", "orgAuthNoIdpConfigured": "此机构没有配置任何身份提供者。您可以使用您的 Pangolin 身份登录。", "orgAuthSignInWithPangolin": "使用 Pangolin 登录", @@ -1791,7 +1850,7 @@ "enableTwoFactorAuthentication": "启用两步验证", "completeSecuritySteps": "完成安全步骤", "securitySettings": "安全设置", - "securitySettingsDescription": "配置您组织的安全策略", + "securitySettingsDescription": "配置组织安全策略", "requireTwoFactorForAllUsers": "所有用户需要两步验证", "requireTwoFactorDescription": "如果启用,此组织的所有内部用户必须启用双重身份验证才能访问组织。", "requireTwoFactorDisabledDescription": "此功能需要有效的许可证(企业)或活动订阅(SaS)", @@ -1854,8 +1913,12 @@ "enterpriseEdition": "企业版", "unlicensed": "未授权", "beta": "测试版", - "manageClients": "管理客户端", - "manageClientsDescription": "客户端是可以连接到您的站点的设备", + "manageUserDevices": "用户设备", + "manageUserDevicesDescription": "查看和管理用户用来私下连接到资源的设备", + "manageMachineClients": "管理机器客户端", + "manageMachineClientsDescription": "创建和管理服务器和系统用于私密连接到资源的客户端", + "clientsTableUserClients": "用户", + "clientsTableMachineClients": "机", "licenseTableValidUntil": "有效期至", "saasLicenseKeysSettingsTitle": "企业许可证", "saasLicenseKeysSettingsDescription": "为自我托管的 Pangolin 实例生成和管理企业许可证密钥", @@ -1990,11 +2053,12 @@ "pathRewriteStripLabel": "条形图", "sidebarEnableEnterpriseLicense": "启用企业许可证", "cannotbeUndone": "无法撤消。", - "toConfirm": "确认", + "toConfirm": "确认.", "deleteClientQuestion": "您确定要从站点和组织中删除客户吗?", "clientMessageRemove": "一旦删除,客户端将无法连接到站点。", "sidebarLogs": "日志", "request": "请求", + "requests": "请求", "logs": "日志", "logsSettingsDescription": "监视从此orginization中收集的日志", "searchLogs": "搜索日志...", @@ -2020,6 +2084,7 @@ "ip": "IP", "reason": "原因", "requestLogs": "请求日志", + "requestAnalytics": "请求分析", "host": "主机", "location": "地点", "actionLogs": "操作日志", @@ -2029,6 +2094,7 @@ "logRetention": "日志保留", "logRetentionDescription": "管理不同类型的日志为这个机构保留多长时间或禁用这些日志", "requestLogsDescription": "查看此机构资源的详细请求日志", + "requestAnalyticsDescription": "查看此机构资源的详细请求分析", "logRetentionRequestLabel": "请求日志保留", "logRetentionRequestDescription": "保留请求日志的时间", "logRetentionAccessLabel": "访问日志保留", @@ -2042,6 +2108,7 @@ "logRetention30Days": "30 天", "logRetention90Days": "90 天", "logRetentionForever": "永远的", + "logRetentionEndOfFollowingYear": "下一年结束", "actionLogsDescription": "查看此机构执行的操作历史", "accessLogsDescription": "查看此机构资源的访问认证请求", "licenseRequiredToUse": "需要企业许可证才能使用此功能。", @@ -2052,7 +2119,7 @@ "preferWildcardCert": "喜欢通配符证书", "unverified": "未验证", "domainSetting": "域设置", - "domainSettingDescription": "配置您的域的设置", + "domainSettingDescription": "配置域设置", "preferWildcardCertDescription": "尝试生成通配符证书(需要正确配置的证书解析器)。", "recordName": "记录名称", "auto": "自动操作", @@ -2066,15 +2133,15 @@ "olmUpdateAvailableInfo": "有最新版本的 Olm 可用。请更新到最新版本以获取最佳体验。", "client": "客户端:", "proxyProtocol": "代理协议设置", - "proxyProtocolDescription": "配置代理协议以保留TCP/UDP 服务的客户端IP地址。", + "proxyProtocolDescription": "配置代理协议以保留TCP服务的客户端 IP 地址。", "enableProxyProtocol": "启用代理协议", - "proxyProtocolInfo": "为TCP/UDP 后端保留客户端IP地址", + "proxyProtocolInfo": "为TCP后端保留客户端IP地址", "proxyProtocolVersion": "代理协议版本", "version1": " 版本 1 (推荐)", "version2": "版本 2", "versionDescription": "版本 1 是基于文本和广泛支持的版本。版本 2 是二进制和更有效率但不那么兼容。", "warning": "警告", - "proxyProtocolWarning": "您的后端应用程序必须配置为接受代理协议连接。如果您的后端不支持代理协议,启用这将会中断所有连接。 请务必从Traefik配置您的后端到信任代理协议标题。", + "proxyProtocolWarning": "后端应用程序必须配置为接受代理协议连接。 如果您的后端不支持代理协议,启用此功能将会中断所有连接,只有当您知道自己在做什么时才能启用此功能。 请务必从Traefik配置您的后端到信任代理协议标题。", "restarting": "正在重启...", "manual": "手动模式", "messageSupport": "消息支持", @@ -2097,6 +2164,43 @@ "supportMessageSent": "消息已发送!", "supportWillContact": "我们很快就会联系起来!", "selectLogRetention": "选择保留日志", + "terms": "条款", + "privacy": "隐私", + "security": "安全", + "docs": "文档", + "deviceActivation": "设备激活", + "deviceCodeInvalidFormat": "代码必须是9个字符(如A1AJ-N5JD)", + "deviceCodeInvalidOrExpired": "无效或过期的代码", + "deviceCodeVerifyFailed": "验证设备代码失败", + "signedInAs": "登录为", + "deviceCodeEnterPrompt": "输入设备上显示的代码", + "continue": "继续", + "deviceUnknownLocation": "未知位置", + "deviceAuthorizationRequested": "此授权请求来自{location},日期为{date}。请确保您信任此设备,因为它将获得帐户访问权限。", + "deviceLabel": "设备: {deviceName}", + "deviceWantsAccess": "想要访问您的帐户", + "deviceExistingAccess": "现有访问权限:", + "deviceFullAccess": "完全访问您的帐户", + "deviceOrganizationsAccess": "访问您的帐户拥有访问权限的所有组织", + "deviceAuthorize": "授权{applicationName}", + "deviceConnected": "设备已连接!", + "deviceAuthorizedMessage": "设备被授权访问您的帐户。", + "pangolinCloud": "邦戈林云", + "viewDevices": "查看设备", + "viewDevicesDescription": "管理您已连接的设备", + "noDevices": "未找到设备", + "dateCreated": "创建日期", + "unnamedDevice": "未命名设备", + "deviceQuestionRemove": "您确定要删除此设备吗?", + "deviceMessageRemove": "此操作不能撤消。", + "deviceDeleteConfirm": "删除设备", + "deleteDevice": "删除设备", + "errorLoadingDevices": "加载设备时出错", + "failedToLoadDevices": "加载设备失败", + "deviceDeleted": "设备已删除", + "deviceDeletedDescription": "设备已成功删除。", + "errorDeletingDevice": "删除设备时出错", + "failedToDeleteDevice": "删除设备失败", "showColumns": "显示列", "hideColumns": "隐藏列", "columnVisibility": "列可见性", @@ -2111,10 +2215,14 @@ "enableSelected": "启用选中的", "disableSelected": "禁用选中的", "checkSelectedStatus": "检查选中的状态", + "clients": "客户端", + "accessClientSelect": "选择机器客户端", + "resourceClientDescription": "机器客户端可以访问此资源", + "regenerate": "重新生成", "credentials": "全权证书", "savecredentials": "保存证书", - "regeneratecredentials": "重置键", - "regenerateCredentials": "重新生成和保存您的凭据", + "regenerateCredentialsButton": "重新生成证书", + "regenerateCredentials": "重新生成证书", "generatedcredentials": "生成的证书", "copyandsavethesecredentials": "复制和保存这些凭据", "copyandsavethesecredentialsdescription": "这些凭据将不会在您离开此页面后再显示。现在安全地保存。", @@ -2122,13 +2230,12 @@ "credentialsSavedDescription": "已成功生成和保存凭据。", "credentialsSaveError": "证书保存错误", "credentialsSaveErrorDescription": "更新和保存凭据时出错。", - "regenerateCredentialsWarning": "重新生成凭据将使以前的凭据失效。请确保更新使用这些凭据的任何配置。", + "regenerateCredentialsWarning": "重新生成凭据将使以前的凭据失效并导致断开连接。请确保更新使用这些凭据的任何配置。", "confirm": "确认", "regenerateCredentialsConfirmation": "您确定要重新生成凭据吗?", "endpoint": "Endpoint", "Id": "Id", "SecretKey": "秘密密钥", - "featureDisabledTooltip": "此功能仅在企业计划中可用,需要许可证才能使用。", "niceId": "好的 ID", "niceIdUpdated": "好的 ID 已更新", "niceIdUpdatedSuccessfully": "Nice ID 更新成功", @@ -2136,5 +2243,32 @@ "niceIdUpdateErrorDescription": "更新Nice ID时出错。", "niceIdCannotBeEmpty": "好的 ID 不能为空", "enterIdentifier": "输入标识符", - "identifier": "Identifier" + "identifier": "Identifier", + "deviceLoginUseDifferentAccount": "不是你?使用一个不同的帐户。", + "deviceLoginDeviceRequestingAccessToAccount": "设备正在请求访问此帐户。", + "noData": "无数据", + "machineClients": "机器客户端", + "install": "安装", + "run": "运行", + "clientNameDescription": "可以稍后更改的客户端的显示名称。", + "clientAddress": "客户端地址 (高级)", + "setupFailedToFetchSubnet": "获取默认子网失败", + "setupSubnetAdvanced": "子网 (高级)", + "setupSubnetDescription": "该组织内部网络的子网。", + "siteRegenerateAndDisconnect": "重新生成和断开", + "siteRegenerateAndDisconnectConfirmation": "您确定要重新生成凭据并断开此站点连接吗?", + "siteRegenerateAndDisconnectWarning": "这将重新生成凭据并立即断开站点。该站点将需要重新启动新凭据。", + "siteRegenerateCredentialsConfirmation": "您确定要重新生成此站点的凭据吗?", + "siteRegenerateCredentialsWarning": "这将重新生成凭据。站点将保持连接,直到您手动重启并使用新凭据。", + "clientRegenerateAndDisconnect": "重新生成和断开", + "clientRegenerateAndDisconnectConfirmation": "您确定要重新生成凭据并断开此客户端连接吗?", + "clientRegenerateAndDisconnectWarning": "这将重新生成凭据并立即断开客户端。客户端需要重新启动新凭据。", + "clientRegenerateCredentialsConfirmation": "您确定要重新生成此客户端的凭据吗?", + "clientRegenerateCredentialsWarning": "这将重新生成凭据。客户端将保持连接,直到您手动重启它并使用新凭据。", + "remoteExitNodeRegenerateAndDisconnect": "重新生成和断开", + "remoteExitNodeRegenerateAndDisconnectConfirmation": "您确定要重新生成凭据并断开此远程退出节点?", + "remoteExitNodeRegenerateAndDisconnectWarning": "这将重新生成凭据并立即断开远程退出节点。远程退出节点将需要用新的凭据重启。", + "remoteExitNodeRegenerateCredentialsConfirmation": "您确定要重新生成此远程退出节点的凭据吗?", + "remoteExitNodeRegenerateCredentialsWarning": "这将重新生成凭据。远程退出节点将保持连接,直到您手动重启它并使用新凭据。", + "agent": "代理" } diff --git a/messages/zh-TW.json b/messages/zh-TW.json new file mode 100644 index 000000000..a7e11f602 --- /dev/null +++ b/messages/zh-TW.json @@ -0,0 +1,2099 @@ +{ + "setupCreate": "創建您的第一個組織、網站和資源", + "setupNewOrg": "新建組織", + "setupCreateOrg": "創建組織", + "setupCreateResources": "創建資源", + "setupOrgName": "組織名稱", + "orgDisplayName": "這是您組織的顯示名稱。", + "orgId": "組織ID", + "setupIdentifierMessage": "這是您組織的唯一標識符。這是與顯示名稱分開的。", + "setupErrorIdentifier": "組織ID 已被使用。請另選一個。", + "componentsErrorNoMemberCreate": "您目前不是任何組織的成員。創建組織以開始操作。", + "componentsErrorNoMember": "您目前不是任何組織的成員。", + "welcome": "歡迎使用 Pangolin", + "welcomeTo": "歡迎來到", + "componentsCreateOrg": "創建組織", + "componentsMember": "您屬於{count, plural, =0 {沒有組織} one {一個組織} other {# 個組織}}。", + "componentsInvalidKey": "檢測到無效或過期的許可證金鑰。按照許可證條款操作以繼續使用所有功能。", + "dismiss": "忽略", + "componentsLicenseViolation": "許可證超限:該伺服器使用了 {usedSites} 個站點,已超過授權的 {maxSites} 個。請遵守許可證條款以繼續使用全部功能。", + "componentsSupporterMessage": "感謝您的支持!您現在是 Pangolin 的 {tier} 用戶。", + "inviteErrorNotValid": "很抱歉,但看起來你試圖訪問的邀請尚未被接受或不再有效。", + "inviteErrorUser": "很抱歉,但看起來你想要訪問的邀請不是這個用戶。", + "inviteLoginUser": "請確保您以正確的用戶登錄。", + "inviteErrorNoUser": "很抱歉,但看起來你想訪問的邀請不是一個存在的用戶。", + "inviteCreateUser": "請先創建一個帳戶。", + "goHome": "返回首頁", + "inviteLogInOtherUser": "以不同的用戶登錄", + "createAnAccount": "創建帳戶", + "inviteNotAccepted": "邀請未接受", + "authCreateAccount": "創建一個帳戶以開始", + "authNoAccount": "沒有帳戶?", + "email": "電子郵件地址", + "password": "密碼", + "confirmPassword": "確認密碼", + "createAccount": "創建帳戶", + "viewSettings": "查看設置", + "delete": "刪除", + "name": "名稱", + "online": "在線", + "offline": "離線的", + "site": "站點", + "dataIn": "數據輸入", + "dataOut": "數據輸出", + "connectionType": "連接類型", + "tunnelType": "隧道類型", + "local": "本地的", + "edit": "編輯", + "siteConfirmDelete": "確認刪除站點", + "siteDelete": "刪除站點", + "siteMessageRemove": "一旦移除,站點將無法訪問。與站點相關的所有目標也將被移除。", + "siteQuestionRemove": "您確定要從組織中刪除該站點嗎?", + "siteManageSites": "管理站點", + "siteDescription": "允許通過安全隧道連接到您的網路", + "siteCreate": "創建站點", + "siteCreateDescription2": "按照下面的步驟創建和連接一個新站點", + "siteCreateDescription": "創建一個新站點開始連接您的資源", + "close": "關閉", + "siteErrorCreate": "創建站點出錯", + "siteErrorCreateKeyPair": "找不到金鑰對或站點預設值", + "siteErrorCreateDefaults": "未找到站點預設值", + "method": "方法", + "siteMethodDescription": "這是您將如何顯示連接。", + "siteLearnNewt": "學習如何在您的系統上安裝 Newt", + "siteSeeConfigOnce": "您只能看到一次配置。", + "siteLoadWGConfig": "正在載入 WireGuard 配置...", + "siteDocker": "擴展 Docker 部署詳細資訊", + "toggle": "切換", + "dockerCompose": "Docker 配置", + "dockerRun": "停靠欄", + "siteLearnLocal": "本地站點不需要隧道連接,點擊了解更多", + "siteConfirmCopy": "我已經複製了配置資訊", + "searchSitesProgress": "搜索站點...", + "siteAdd": "添加站點", + "siteInstallNewt": "安裝 Newt", + "siteInstallNewtDescription": "在您的系統中運行 Newt", + "WgConfiguration": "WireGuard 配置", + "WgConfigurationDescription": "使用以下配置連接到您的網路", + "operatingSystem": "操作系統", + "commands": "命令", + "recommended": "推薦", + "siteNewtDescription": "為獲得最佳用戶體驗,請使用 Newt。其底層採用 WireGuard 技術,可直接通過 Pangolin 控制台,使用區域網路地址訪問您私有網路中的資源。", + "siteRunsInDocker": "在 Docker 中運行", + "siteRunsInShell": "在 macOS 、 Linux 和 Windows 的 Shell 中運行", + "siteErrorDelete": "刪除站點出錯", + "siteErrorUpdate": "更新站點失敗", + "siteErrorUpdateDescription": "更新站點時出錯。", + "siteUpdated": "站點已更新", + "siteUpdatedDescription": "網站已更新。", + "siteGeneralDescription": "配置此站點的常規設置", + "siteSettingDescription": "配置您網站上的設置", + "siteSetting": "{siteName} 設置", + "siteNewtTunnel": "Newt 隧道 (推薦)", + "siteNewtTunnelDescription": "最簡單的方式來連接到您的網路。不需要任何額外設置。", + "siteWg": "基本 WireGuard", + "siteWgDescription": "使用任何 WireGuard 用戶端來建立隧道。需要手動配置 NAT。", + "siteWgDescriptionSaas": "使用任何WireGuard用戶端建立隧道。需要手動配置NAT。僅適用於自託管節點。", + "siteLocalDescription": "僅限本地資源。不需要隧道。", + "siteLocalDescriptionSaas": "僅本地資源。沒有隧道。僅在遠程節點上可用。", + "siteSeeAll": "查看所有站點", + "siteTunnelDescription": "確定如何連接到您的網站", + "siteNewtCredentials": "Newt 憑據", + "siteNewtCredentialsDescription": "這是 Newt 伺服器的身份驗證憑據", + "siteCredentialsSave": "保存您的憑據", + "siteCredentialsSaveDescription": "您只能看到一次。請確保將其複製並保存到一個安全的地方。", + "siteInfo": "站點資訊", + "status": "狀態", + "shareTitle": "管理共享連結", + "shareDescription": "創建可共享的連結,允許暫時或永久訪問您的資源", + "shareSearch": "搜索共享連結...", + "shareCreate": "創建共享連結", + "shareErrorDelete": "刪除連結失敗", + "shareErrorDeleteMessage": "刪除連結時出錯", + "shareDeleted": "連結已刪除", + "shareDeletedDescription": "連結已刪除", + "shareTokenDescription": "您的訪問令牌可以透過兩種方式傳遞:作為查詢參數或請求頭。 每次驗證訪問請求都必須從用戶端傳遞。", + "accessToken": "訪問令牌", + "usageExamples": "用法範例", + "tokenId": "令牌 ID", + "requestHeades": "請求頭", + "queryParameter": "查詢參數", + "importantNote": "重要提示", + "shareImportantDescription": "出於安全考慮,建議盡可能在使用請求頭傳遞參數,因為查詢參數可能會被瀏覽器歷史記錄或伺服器日誌記錄。", + "token": "令牌", + "shareTokenSecurety": "請妥善保管您的訪問令牌,不要將其暴露在公開訪問的區域或用戶端代碼中。", + "shareErrorFetchResource": "獲取資源失敗", + "shareErrorFetchResourceDescription": "獲取資源時出錯", + "shareErrorCreate": "無法創建共享連結", + "shareErrorCreateDescription": "創建共享連結時出錯", + "shareCreateDescription": "任何具有此連結的人都可以訪問資源", + "shareTitleOptional": "標題 (可選)", + "expireIn": "過期時間", + "neverExpire": "永不過期", + "shareExpireDescription": "過期時間是連結可以使用並提供對資源的訪問時間。 此時間後,連結將不再工作,使用此連結的用戶將失去對資源的訪問。", + "shareSeeOnce": "您只能看到一次此連結。請確保複製它。", + "shareAccessHint": "任何具有此連結的人都可以訪問該資源。小心地分享它。", + "shareTokenUsage": "查看訪問令牌使用情況", + "createLink": "創建連結", + "resourcesNotFound": "找不到資源", + "resourceSearch": "搜索資源", + "openMenu": "打開菜單", + "resource": "資源", + "title": "標題", + "created": "已創建", + "expires": "過期時間", + "never": "永不過期", + "shareErrorSelectResource": "請選擇一個資源", + "resourceTitle": "管理資源", + "resourceDescription": "為您的私人應用程式創建安全代理", + "resourcesSearch": "搜索資源...", + "resourceAdd": "添加資源", + "resourceErrorDelte": "刪除資源時出錯", + "authentication": "認證", + "protected": "受到保護", + "notProtected": "未受到保護", + "resourceMessageRemove": "一旦刪除,資源將不再可訪問。與該資源相關的所有目標也將被刪除。", + "resourceQuestionRemove": "您確定要從組織中刪除資源嗎?", + "resourceHTTP": "HTTPS 資源", + "resourceHTTPDescription": "使用子域或根域名通過 HTTPS 向您的應用程式提出代理請求。", + "resourceRaw": "TCP/UDP 資源", + "resourceRawDescription": "使用 TCP/UDP 使用埠號向您的應用提出代理請求。", + "resourceCreate": "創建資源", + "resourceCreateDescription": "按照下面的步驟創建新資源", + "resourceSeeAll": "查看所有資源", + "resourceInfo": "資源資訊", + "resourceNameDescription": "這是資源的顯示名稱。", + "siteSelect": "選擇站點", + "siteSearch": "搜索站點", + "siteNotFound": "未找到站點。", + "selectCountry": "選擇國家", + "searchCountries": "搜索國家...", + "noCountryFound": "找不到國家。", + "siteSelectionDescription": "此站點將為目標提供連接。", + "resourceType": "資源類型", + "resourceTypeDescription": "確定如何訪問您的資源", + "resourceHTTPSSettings": "HTTPS 設置", + "resourceHTTPSSettingsDescription": "配置如何通過 HTTPS 訪問您的資源", + "domainType": "域類型", + "subdomain": "子域名", + "baseDomain": "根域名", + "subdomnainDescription": "您的資源可以訪問的子域名。", + "resourceRawSettings": "TCP/UDP 設置", + "resourceRawSettingsDescription": "配置如何通過 TCP/UDP 訪問您的資源。 您映射資源到主機Pangolin伺服器上的埠,這樣您就可以訪問伺服器-公共-ip:mapped埠的資源。", + "protocol": "協議", + "protocolSelect": "選擇協議", + "resourcePortNumber": "埠號", + "resourcePortNumberDescription": "代理請求的外部埠號。", + "cancel": "取消", + "resourceConfig": "配置片段", + "resourceConfigDescription": "複製並黏貼這些配置片段以設置您的 TCP/UDP 資源", + "resourceAddEntrypoints": "Traefik: 添加入口點", + "resourceExposePorts": "Gerbil:在 Docker Compose 中顯示埠", + "resourceLearnRaw": "學習如何配置 TCP/UDP 資源", + "resourceBack": "返回資源", + "resourceGoTo": "轉到資源", + "resourceDelete": "刪除資源", + "resourceDeleteConfirm": "確認刪除資源", + "visibility": "可見性", + "enabled": "已啟用", + "disabled": "已禁用", + "general": "概覽", + "generalSettings": "常規設置", + "proxy": "代理伺服器", + "internal": "內部設置", + "rules": "規則", + "resourceSettingDescription": "配置您資源上的設置", + "resourceSetting": "{resourceName} 設置", + "alwaysAllow": "一律允許", + "alwaysDeny": "一律拒絕", + "passToAuth": "傳遞至認證", + "orgSettingsDescription": "配置您組織的一般設定", + "orgGeneralSettings": "組織設置", + "orgGeneralSettingsDescription": "管理您的機構詳細資訊和配置", + "saveGeneralSettings": "保存常規設置", + "saveSettings": "保存設置", + "orgDangerZone": "危險區域", + "orgDangerZoneDescription": "一旦刪除該組織,將無法恢復,請務必確認。", + "orgDelete": "刪除組織", + "orgDeleteConfirm": "確認刪除組織", + "orgMessageRemove": "此操作不可逆,這將刪除所有相關數據。", + "orgMessageConfirm": "要確認,請在下面輸入組織名稱。", + "orgQuestionRemove": "您確定要刪除組織嗎?", + "orgUpdated": "組織已更新", + "orgUpdatedDescription": "組織已更新。", + "orgErrorUpdate": "更新組織失敗", + "orgErrorUpdateMessage": "更新組織時出錯。", + "orgErrorFetch": "獲取組織失敗", + "orgErrorFetchMessage": "列出您的組織時出錯", + "orgErrorDelete": "刪除組織失敗", + "orgErrorDeleteMessage": "刪除組織時出錯。", + "orgDeleted": "組織已刪除", + "orgDeletedMessage": "組織及其數據已被刪除。", + "orgMissing": "缺少組織 ID", + "orgMissingMessage": "沒有組織ID,無法重新生成邀請。", + "accessUsersManage": "管理用戶", + "accessUsersDescription": "邀請用戶並位他們添加角色以管理訪問您的組織", + "accessUsersSearch": "搜索用戶...", + "accessUserCreate": "創建用戶", + "accessUserRemove": "刪除用戶", + "username": "使用者名稱", + "identityProvider": "身份提供商", + "role": "角色", + "nameRequired": "名稱是必填項", + "accessRolesManage": "管理角色", + "accessRolesDescription": "配置角色來管理訪問您的組織", + "accessRolesSearch": "搜索角色...", + "accessRolesAdd": "添加角色", + "accessRoleDelete": "刪除角色", + "description": "描述", + "inviteTitle": "打開邀請", + "inviteDescription": "管理您給其他用戶的邀請", + "inviteSearch": "搜索邀請...", + "minutes": "分鐘", + "hours": "小時", + "days": "天", + "weeks": "周", + "months": "月", + "years": "年", + "day": "{count, plural, other {# 天}}", + "apiKeysTitle": "API 金鑰", + "apiKeysConfirmCopy2": "您必須確認您已複製 API 金鑰。", + "apiKeysErrorCreate": "創建 API 金鑰出錯", + "apiKeysErrorSetPermission": "設置權限出錯", + "apiKeysCreate": "生成 API 金鑰", + "apiKeysCreateDescription": "為您的組織生成一個新的 API 金鑰", + "apiKeysGeneralSettings": "權限", + "apiKeysGeneralSettingsDescription": "確定此 API 金鑰可以做什麼", + "apiKeysList": "您的 API 金鑰", + "apiKeysSave": "保存您的 API 金鑰", + "apiKeysSaveDescription": "該資訊僅會顯示一次,請確保將其複製到安全的位置。", + "apiKeysInfo": "您的 API 金鑰是:", + "apiKeysConfirmCopy": "我已複製 API 金鑰", + "generate": "生成", + "done": "完成", + "apiKeysSeeAll": "查看所有 API 金鑰", + "apiKeysPermissionsErrorLoadingActions": "載入 API 金鑰操作時出錯", + "apiKeysPermissionsErrorUpdate": "設置權限出錯", + "apiKeysPermissionsUpdated": "權限已更新", + "apiKeysPermissionsUpdatedDescription": "權限已更新。", + "apiKeysPermissionsGeneralSettings": "權限", + "apiKeysPermissionsGeneralSettingsDescription": "確定此 API 金鑰可以做什麼", + "apiKeysPermissionsSave": "保存權限", + "apiKeysPermissionsTitle": "權限", + "apiKeys": "API 金鑰", + "searchApiKeys": "搜索 API 金鑰...", + "apiKeysAdd": "生成 API 金鑰", + "apiKeysErrorDelete": "刪除 API 金鑰出錯", + "apiKeysErrorDeleteMessage": "刪除 API 金鑰出錯", + "apiKeysQuestionRemove": "您確定要從組織中刪除 API 金鑰嗎?", + "apiKeysMessageRemove": "一旦刪除,此API金鑰將無法被使用。", + "apiKeysDeleteConfirm": "確認刪除 API 金鑰", + "apiKeysDelete": "刪除 API 金鑰", + "apiKeysManage": "管理 API 金鑰", + "apiKeysDescription": "API 金鑰用於認證集成 API", + "apiKeysSettings": "{apiKeyName} 設置", + "userTitle": "管理所有用戶", + "userDescription": "查看和管理系統中的所有用戶", + "userAbount": "關於用戶管理", + "userAbountDescription": "此表格顯示系統中所有根用戶對象。每個用戶可能屬於多個組織。 從組織中刪除用戶不會刪除其根用戶對象 - 他們將保留在系統中。 要從系統中完全刪除用戶,您必須使用此表格中的刪除操作刪除其根用戶對象。", + "userServer": "伺服器用戶", + "userSearch": "搜索伺服器用戶...", + "userErrorDelete": "刪除用戶時出錯", + "userDeleteConfirm": "確認刪除用戶", + "userDeleteServer": "從伺服器刪除用戶", + "userMessageRemove": "該用戶將被從所有組織中刪除並完全從伺服器中刪除。", + "userQuestionRemove": "您確定要從伺服器永久刪除用戶嗎?", + "licenseKey": "許可證金鑰", + "valid": "有效", + "numberOfSites": "站點數量", + "licenseKeySearch": "搜索許可證金鑰...", + "licenseKeyAdd": "添加許可證金鑰", + "type": "類型", + "licenseKeyRequired": "需要許可證金鑰", + "licenseTermsAgree": "您必須同意許可條款", + "licenseErrorKeyLoad": "載入許可證金鑰失敗", + "licenseErrorKeyLoadDescription": "載入許可證金鑰時出錯。", + "licenseErrorKeyDelete": "刪除許可證金鑰失敗", + "licenseErrorKeyDeleteDescription": "刪除許可證金鑰時出錯。", + "licenseKeyDeleted": "許可證金鑰已刪除", + "licenseKeyDeletedDescription": "許可證金鑰已被刪除。", + "licenseErrorKeyActivate": "啟用許可證金鑰失敗", + "licenseErrorKeyActivateDescription": "啟用許可證金鑰時出錯。", + "licenseAbout": "關於許可協議", + "communityEdition": "社區版", + "licenseAboutDescription": "這是針對商業環境中使用Pangolin的商業和企業用戶。 如果您正在使用 Pangolin 供個人使用,您可以忽略此部分。", + "licenseKeyActivated": "授權金鑰已啟用", + "licenseKeyActivatedDescription": "已成功啟用許可證金鑰。", + "licenseErrorKeyRecheck": "重新檢查許可證金鑰失敗", + "licenseErrorKeyRecheckDescription": "重新檢查許可證金鑰時出錯。", + "licenseErrorKeyRechecked": "重新檢查許可證金鑰", + "licenseErrorKeyRecheckedDescription": "已重新檢查所有許可證金鑰", + "licenseActivateKey": "啟用許可證金鑰", + "licenseActivateKeyDescription": "輸入一個許可金鑰來啟用它。", + "licenseActivate": "啟用許可證", + "licenseAgreement": "通過檢查此框,您確認您已經閱讀並同意與您的許可證金鑰相關的許可條款。", + "fossorialLicense": "查看Fossorial Commercial License和訂閱條款", + "licenseMessageRemove": "這將刪除許可證金鑰和它授予的所有相關權限。", + "licenseMessageConfirm": "要確認,請在下面輸入許可證金鑰。", + "licenseQuestionRemove": "您確定要刪除許可證金鑰?", + "licenseKeyDelete": "刪除許可證金鑰", + "licenseKeyDeleteConfirm": "確認刪除許可證金鑰", + "licenseTitle": "管理許可證狀態", + "licenseTitleDescription": "查看和管理系統中的許可證金鑰", + "licenseHost": "主機許可證", + "licenseHostDescription": "管理主機的主許可證金鑰。", + "licensedNot": "未授權", + "hostId": "主機 ID", + "licenseReckeckAll": "重新檢查所有金鑰", + "licenseSiteUsage": "站點使用情況", + "licenseSiteUsageDecsription": "查看使用此許可的站點數量。", + "licenseNoSiteLimit": "使用未經許可主機的站點數量沒有限制。", + "licensePurchase": "購買許可證", + "licensePurchaseSites": "購買更多站點", + "licenseSitesUsedMax": "使用了 {usedSites}/{maxSites} 個站點", + "licenseSitesUsed": "{count, plural, =0 {# 站點} one {# 站點} other {# 站點}}", + "licensePurchaseDescription": "請選擇您希望 {selectedMode, select, license {直接購買許可證,您可以隨時增加更多站點。} other {為現有許可證購買更多站點}}", + "licenseFee": "許可證費用", + "licensePriceSite": "每個站點的價格", + "total": "總計", + "licenseContinuePayment": "繼續付款", + "pricingPage": "定價頁面", + "pricingPortal": "前往付款頁面", + "licensePricingPage": "關於最新的價格和折扣,請訪問 ", + "invite": "邀請", + "inviteRegenerate": "重新生成邀請", + "inviteRegenerateDescription": "撤銷以前的邀請並創建一個新的邀請", + "inviteRemove": "移除邀請", + "inviteRemoveError": "刪除邀請失敗", + "inviteRemoveErrorDescription": "刪除邀請時出錯。", + "inviteRemoved": "邀請已刪除", + "inviteRemovedDescription": "為 {email} 創建的邀請已刪除", + "inviteQuestionRemove": "您確定要刪除邀請嗎?", + "inviteMessageRemove": "一旦刪除,這個邀請將不再有效。", + "inviteMessageConfirm": "要確認,請在下面輸入邀請的電子郵件地址。", + "inviteQuestionRegenerate": "您確定要重新邀請 {email} 嗎?這將會撤銷掉之前的邀請", + "inviteRemoveConfirm": "確認刪除邀請", + "inviteRegenerated": "重新生成邀請", + "inviteSent": "邀請郵件已成功發送至 {email}。", + "inviteSentEmail": "發送電子郵件通知給用戶", + "inviteGenerate": "已為 {email} 創建新的邀請。", + "inviteDuplicateError": "重複的邀請", + "inviteDuplicateErrorDescription": "此用戶的邀請已存在。", + "inviteRateLimitError": "超出速率限制", + "inviteRateLimitErrorDescription": "您超過了每小時3次再生的限制。請稍後再試。", + "inviteRegenerateError": "重新生成邀請失敗", + "inviteRegenerateErrorDescription": "重新生成邀請時出錯。", + "inviteValidityPeriod": "有效期", + "inviteValidityPeriodSelect": "選擇有效期", + "inviteRegenerateMessage": "邀請已重新生成。用戶必須訪問下面的連結才能接受邀請。", + "inviteRegenerateButton": "重新生成", + "expiresAt": "到期於", + "accessRoleUnknown": "未知角色", + "placeholder": "占位符", + "userErrorOrgRemove": "刪除用戶失敗", + "userErrorOrgRemoveDescription": "刪除用戶時出錯。", + "userOrgRemoved": "用戶已刪除", + "userOrgRemovedDescription": "已將 {email} 從組織中移除。", + "userQuestionOrgRemove": "您確定要從組織中刪除此用戶嗎?", + "userMessageOrgRemove": "一旦刪除,這個用戶將不再能夠訪問組織。 你總是可以稍後重新邀請他們,但他們需要再次接受邀請。", + "userRemoveOrgConfirm": "確認刪除用戶", + "userRemoveOrg": "從組織中刪除用戶", + "users": "用戶", + "accessRoleMember": "成員", + "accessRoleOwner": "所有者", + "userConfirmed": "已確認", + "idpNameInternal": "內部設置", + "emailInvalid": "無效的電子郵件地址", + "inviteValidityDuration": "請選擇持續時間", + "accessRoleSelectPlease": "請選擇一個角色", + "usernameRequired": "必須輸入使用者名稱", + "idpSelectPlease": "請選擇身份提供商", + "idpGenericOidc": "通用的 OAuth2/OIDC 提供商。", + "accessRoleErrorFetch": "獲取角色失敗", + "accessRoleErrorFetchDescription": "獲取角色時出錯", + "idpErrorFetch": "獲取身份提供者失敗", + "idpErrorFetchDescription": "獲取身份提供者時出錯", + "userErrorExists": "用戶已存在", + "userErrorExistsDescription": "此用戶已經是組織成員。", + "inviteError": "邀請用戶失敗", + "inviteErrorDescription": "邀請用戶時出錯", + "userInvited": "用戶邀請", + "userInvitedDescription": "用戶已被成功邀請。", + "userErrorCreate": "創建用戶失敗", + "userErrorCreateDescription": "創建用戶時出錯", + "userCreated": "用戶已創建", + "userCreatedDescription": "用戶已成功創建。", + "userTypeInternal": "內部用戶", + "userTypeInternalDescription": "邀請用戶直接加入您的組織。", + "userTypeExternal": "外部用戶", + "userTypeExternalDescription": "創建一個具有外部身份提供商的用戶。", + "accessUserCreateDescription": "按照下面的步驟創建一個新用戶", + "userSeeAll": "查看所有用戶", + "userTypeTitle": "用戶類型", + "userTypeDescription": "確定如何創建用戶", + "userSettings": "用戶資訊", + "userSettingsDescription": "輸入新用戶的詳細資訊", + "inviteEmailSent": "發送邀請郵件給用戶", + "inviteValid": "有效", + "selectDuration": "選擇持續時間", + "accessRoleSelect": "選擇角色", + "inviteEmailSentDescription": "一封電子郵件已經發送給用戶,帶有下面的訪問連結。他們必須訪問該連結才能接受邀請。", + "inviteSentDescription": "用戶已被邀請。他們必須訪問下面的連結才能接受邀請。", + "inviteExpiresIn": "邀請將在{days, plural, other {# 天}}後過期。", + "idpTitle": "身份提供商", + "idpSelect": "為外部用戶選擇身份提供商", + "idpNotConfigured": "沒有配置身份提供者。請在創建外部用戶之前配置身份提供者。", + "usernameUniq": "這必須匹配所選身份提供者中存在的唯一使用者名稱。", + "emailOptional": "電子郵件(可選)", + "nameOptional": "名稱(可選)", + "accessControls": "訪問控制", + "userDescription2": "管理此用戶的設置", + "accessRoleErrorAdd": "添加用戶到角色失敗", + "accessRoleErrorAddDescription": "添加用戶到角色時出錯。", + "userSaved": "用戶已保存", + "userSavedDescription": "用戶已更新。", + "autoProvisioned": "自動設置", + "autoProvisionedDescription": "允許此用戶由身份提供商自動管理", + "accessControlsDescription": "管理此用戶在組織中可以訪問和做什麼", + "accessControlsSubmit": "保存訪問控制", + "roles": "角色", + "accessUsersRoles": "管理用戶和角色", + "accessUsersRolesDescription": "邀請用戶並將他們添加到角色以管理訪問您的組織", + "key": "關鍵字", + "createdAt": "創建於", + "proxyErrorInvalidHeader": "無效的自訂主機 Header。使用域名格式,或將空保存為取消自訂 Header。", + "proxyErrorTls": "無效的 TLS 伺服器名稱。使用域名格式,或保存空以刪除 TLS 伺服器名稱。", + "proxyEnableSSL": "啟用 SSL", + "proxyEnableSSLDescription": "啟用 SSL/TLS 加密以確保您目標的 HTTPS 連接。", + "target": "Target", + "configureTarget": "配置目標", + "targetErrorFetch": "獲取目標失敗", + "targetErrorFetchDescription": "獲取目標時出錯", + "siteErrorFetch": "獲取資源失敗", + "siteErrorFetchDescription": "獲取資源時出錯", + "targetErrorDuplicate": "重複的目標", + "targetErrorDuplicateDescription": "具有這些設置的目標已存在", + "targetWireGuardErrorInvalidIp": "無效的目標IP", + "targetWireGuardErrorInvalidIpDescription": "目標IP必須在站點子網內", + "targetsUpdated": "目標已更新", + "targetsUpdatedDescription": "目標和設置更新成功", + "targetsErrorUpdate": "更新目標失敗", + "targetsErrorUpdateDescription": "更新目標時出錯", + "targetTlsUpdate": "TLS 設置已更新", + "targetTlsUpdateDescription": "您的 TLS 設置已成功更新", + "targetErrorTlsUpdate": "更新 TLS 設置失敗", + "targetErrorTlsUpdateDescription": "更新 TLS 設置時出錯", + "proxyUpdated": "代理設置已更新", + "proxyUpdatedDescription": "您的代理設置已成功更新", + "proxyErrorUpdate": "更新代理設置失敗", + "proxyErrorUpdateDescription": "更新代理設置時出錯", + "targetAddr": "IP / 域名", + "targetPort": "埠", + "targetProtocol": "協議", + "targetTlsSettings": "安全連接配置", + "targetTlsSettingsDescription": "配置資源的 SSL/TLS 設置", + "targetTlsSettingsAdvanced": "高級TLS設置", + "targetTlsSni": "TLS 伺服器名稱", + "targetTlsSniDescription": "SNI使用的 TLS 伺服器名稱。留空使用預設值。", + "targetTlsSubmit": "保存設置", + "targets": "目標配置", + "targetsDescription": "設置目標來路由流量到您的後端服務", + "targetStickySessions": "啟用置頂會話", + "targetStickySessionsDescription": "將連接保持在同一個後端目標的整個會話中。", + "methodSelect": "選擇方法", + "targetSubmit": "添加目標", + "targetNoOne": "此資源沒有任何目標。添加目標來配置向您後端發送請求的位置。", + "targetNoOneDescription": "在上面添加多個目標將啟用負載平衡。", + "targetsSubmit": "保存目標", + "addTarget": "添加目標", + "targetErrorInvalidIp": "無效的 IP 地址", + "targetErrorInvalidIpDescription": "請輸入有效的IP位址或主機名", + "targetErrorInvalidPort": "無效的埠", + "targetErrorInvalidPortDescription": "請輸入有效的埠號", + "targetErrorNoSite": "沒有選擇站點", + "targetErrorNoSiteDescription": "請選擇目標站點", + "targetCreated": "目標已創建", + "targetCreatedDescription": "目標已成功創建", + "targetErrorCreate": "創建目標失敗", + "targetErrorCreateDescription": "創建目標時出錯", + "save": "保存", + "proxyAdditional": "附加代理設置", + "proxyAdditionalDescription": "配置你的資源如何處理代理設置", + "proxyCustomHeader": "自訂主機 Header", + "proxyCustomHeaderDescription": "代理請求時設置的 Header。留空則使用預設值。", + "proxyAdditionalSubmit": "保存代理設置", + "subnetMaskErrorInvalid": "子網掩碼無效。必須在 0 和 32 之間。", + "ipAddressErrorInvalidFormat": "無效的 IP 地址格式", + "ipAddressErrorInvalidOctet": "無效的 IP 地址", + "path": "路徑", + "matchPath": "匹配路徑", + "ipAddressRange": "IP 範圍", + "rulesErrorFetch": "獲取規則失敗", + "rulesErrorFetchDescription": "獲取規則時出錯", + "rulesErrorDuplicate": "複製規則", + "rulesErrorDuplicateDescription": "帶有這些設置的規則已存在", + "rulesErrorInvalidIpAddressRange": "無效的 CIDR", + "rulesErrorInvalidIpAddressRangeDescription": "請輸入一個有效的 CIDR 值", + "rulesErrorInvalidUrl": "無效的 URL 路徑", + "rulesErrorInvalidUrlDescription": "請輸入一個有效的 URL 路徑值", + "rulesErrorInvalidIpAddress": "無效的 IP", + "rulesErrorInvalidIpAddressDescription": "請輸入一個有效的IP位址", + "rulesErrorUpdate": "更新規則失敗", + "rulesErrorUpdateDescription": "更新規則時出錯", + "rulesUpdated": "啟用規則", + "rulesUpdatedDescription": "規則已更新", + "rulesMatchIpAddressRangeDescription": "以 CIDR 格式輸入地址(如:103.21.244.0/22)", + "rulesMatchIpAddress": "輸入IP位址(例如,103.21.244.12)", + "rulesMatchUrl": "輸入一個 URL 路徑或模式(例如/api/v1/todos 或 /api/v1/*)", + "rulesErrorInvalidPriority": "無效的優先度", + "rulesErrorInvalidPriorityDescription": "請輸入一個有效的優先度", + "rulesErrorDuplicatePriority": "重複的優先度", + "rulesErrorDuplicatePriorityDescription": "請輸入唯一的優先度", + "ruleUpdated": "規則已更新", + "ruleUpdatedDescription": "規則更新成功", + "ruleErrorUpdate": "操作失敗", + "ruleErrorUpdateDescription": "保存過程中發生錯誤", + "rulesPriority": "優先權", + "rulesAction": "行為", + "rulesMatchType": "匹配類型", + "value": "值", + "rulesAbout": "關於規則", + "rulesAboutDescription": "規則使您能夠依據特定條件控制資源訪問權限。您可以創建基於 IP 地址或 URL 路徑的規則,以允許或拒絕訪問。", + "rulesActions": "行動", + "rulesActionAlwaysAllow": "總是允許:繞過所有身份驗證方法", + "rulesActionAlwaysDeny": "總是拒絕:阻止所有請求;無法嘗試驗證", + "rulesActionPassToAuth": "傳遞至認證:允許嘗試身份驗證方法", + "rulesMatchCriteria": "匹配條件", + "rulesMatchCriteriaIpAddress": "匹配一個指定的 IP 地址", + "rulesMatchCriteriaIpAddressRange": "在 CIDR 符號中匹配一系列IP位址", + "rulesMatchCriteriaUrl": "匹配一個 URL 路徑或模式", + "rulesEnable": "啟用規則", + "rulesEnableDescription": "啟用或禁用此資源的規則評估", + "rulesResource": "資源規則配置", + "rulesResourceDescription": "配置規則來控制對您資源的訪問", + "ruleSubmit": "添加規則", + "rulesNoOne": "沒有規則。使用表單添加規則。", + "rulesOrder": "規則按優先順序評定。", + "rulesSubmit": "保存規則", + "resourceErrorCreate": "創建資源時出錯", + "resourceErrorCreateDescription": "創建資源時出錯", + "resourceErrorCreateMessage": "創建資源時發生錯誤:", + "resourceErrorCreateMessageDescription": "發生意外錯誤", + "sitesErrorFetch": "獲取站點出錯", + "sitesErrorFetchDescription": "獲取站點時出錯", + "domainsErrorFetch": "獲取域名出錯", + "domainsErrorFetchDescription": "獲取域時出錯", + "none": "無", + "unknown": "未知", + "resources": "資源", + "resourcesDescription": "資源是您私有網路中運行的應用程式的代理。您可以為私有網路中的任何 HTTP/HTTPS 或 TCP/UDP 服務創建資源。每個資源都必須連接到一個站點,以通過加密的 WireGuard 隧道實現私密且安全的連接。", + "resourcesWireGuardConnect": "採用 WireGuard 提供的加密安全連接", + "resourcesMultipleAuthenticationMethods": "配置多個身份驗證方法", + "resourcesUsersRolesAccess": "基於用戶和角色的訪問控制", + "resourcesErrorUpdate": "切換資源失敗", + "resourcesErrorUpdateDescription": "更新資源時出錯", + "access": "訪問權限", + "shareLink": "{resource} 的分享連結", + "resourceSelect": "選擇資源", + "shareLinks": "分享連結", + "share": "分享連結", + "shareDescription2": "創建資源共享連結。連結提供對資源的臨時或無限制訪問。 當您創建連結時,您可以配置連結的到期時間。", + "shareEasyCreate": "輕鬆創建和分享", + "shareConfigurableExpirationDuration": "可配置的過期時間", + "shareSecureAndRevocable": "安全和可撤銷的", + "nameMin": "名稱長度必須大於 {len} 字元。", + "nameMax": "名稱長度必須小於 {len} 字元。", + "sitesConfirmCopy": "請確認您已經複製了配置。", + "unknownCommand": "未知命令", + "newtErrorFetchReleases": "無法獲取版本資訊: {err}", + "newtErrorFetchLatest": "無法獲取最新版資訊: {err}", + "newtEndpoint": "Newt 端點", + "newtId": "Newt ID", + "newtSecretKey": "Newt 私鑰", + "architecture": "架構", + "sites": "站點", + "siteWgAnyClients": "使用任何 WireGuard 用戶端連接。您必須使用對等IP解決您的內部資源。", + "siteWgCompatibleAllClients": "與所有 WireGuard 用戶端相容", + "siteWgManualConfigurationRequired": "需要手動配置", + "userErrorNotAdminOrOwner": "用戶不是管理員或所有者", + "pangolinSettings": "設置 - Pangolin", + "accessRoleYour": "您的角色:", + "accessRoleSelect2": "選擇角色", + "accessUserSelect": "選擇一個用戶", + "otpEmailEnter": "輸入電子郵件", + "otpEmailEnterDescription": "在輸入欄位輸入後按 Enter 鍵添加電子郵件。", + "otpEmailErrorInvalid": "無效的信箱地址。通配符(*)必須占據整個開頭部分。", + "otpEmailSmtpRequired": "需要先配置 SMTP", + "otpEmailSmtpRequiredDescription": "必須在伺服器上啟用 SMTP 才能使用一次性密碼驗證。", + "otpEmailTitle": "一次性密碼", + "otpEmailTitleDescription": "資源訪問需要基於電子郵件的身份驗證", + "otpEmailWhitelist": "電子郵件白名單", + "otpEmailWhitelistList": "白名單郵件", + "otpEmailWhitelistListDescription": "只有擁有這些電子郵件地址的用戶才能訪問此資源。 他們將被提示輸入一次性密碼發送到他們的電子郵件。 通配符 (*@example.com) 可以用來允許來自一個域名的任何電子郵件地址。", + "otpEmailWhitelistSave": "保存白名單", + "passwordAdd": "添加密碼", + "passwordRemove": "刪除密碼", + "pincodeAdd": "添加 PIN 碼", + "pincodeRemove": "移除 PIN 碼", + "resourceAuthMethods": "身份驗證方法", + "resourceAuthMethodsDescriptions": "允許透過額外的認證方法訪問資源", + "resourceAuthSettingsSave": "保存成功", + "resourceAuthSettingsSaveDescription": "已保存身份驗證設置", + "resourceErrorAuthFetch": "獲取數據失敗", + "resourceErrorAuthFetchDescription": "獲取數據時出錯", + "resourceErrorPasswordRemove": "刪除資源密碼出錯", + "resourceErrorPasswordRemoveDescription": "刪除資源密碼時出錯", + "resourceErrorPasswordSetup": "設置資源密碼出錯", + "resourceErrorPasswordSetupDescription": "設置資源密碼時出錯", + "resourceErrorPincodeRemove": "刪除資源固定碼時出錯", + "resourceErrorPincodeRemoveDescription": "刪除資源PIN碼時出錯", + "resourceErrorPincodeSetup": "設置資源 PIN 碼時出錯", + "resourceErrorPincodeSetupDescription": "設置資源 PIN 碼時發生錯誤", + "resourceErrorUsersRolesSave": "設置角色失敗", + "resourceErrorUsersRolesSaveDescription": "設置角色時出錯", + "resourceErrorWhitelistSave": "保存白名單失敗", + "resourceErrorWhitelistSaveDescription": "保存白名單時出錯", + "resourcePasswordSubmit": "啟用密碼保護", + "resourcePasswordProtection": "密碼保護 {status}", + "resourcePasswordRemove": "已刪除資源密碼", + "resourcePasswordRemoveDescription": "已成功刪除資源密碼", + "resourcePasswordSetup": "設置資源密碼", + "resourcePasswordSetupDescription": "已成功設置資源密碼", + "resourcePasswordSetupTitle": "設置密碼", + "resourcePasswordSetupTitleDescription": "設置密碼來保護此資源", + "resourcePincode": "PIN 碼", + "resourcePincodeSubmit": "啟用 PIN 碼保護", + "resourcePincodeProtection": "PIN 碼保護 {status}", + "resourcePincodeRemove": "資源 PIN 碼已刪除", + "resourcePincodeRemoveDescription": "已成功刪除資源 PIN 碼", + "resourcePincodeSetup": "資源 PIN 碼已設置", + "resourcePincodeSetupDescription": "資源 PIN 碼已成功設置", + "resourcePincodeSetupTitle": "設置 PIN 碼", + "resourcePincodeSetupTitleDescription": "設置 PIN 碼來保護此資源", + "resourceRoleDescription": "管理員總是可以訪問此資源。", + "resourceUsersRoles": "用戶和角色", + "resourceUsersRolesDescription": "配置用戶和角色可以訪問此資源", + "resourceUsersRolesSubmit": "保存用戶和角色", + "resourceWhitelistSave": "保存成功", + "resourceWhitelistSaveDescription": "白名單設置已保存", + "ssoUse": "使用平台 SSO", + "ssoUseDescription": "對於所有啟用此功能的資源,現有用戶只需登錄一次。", + "proxyErrorInvalidPort": "無效的埠號", + "subdomainErrorInvalid": "無效的子域", + "domainErrorFetch": "獲取域名失敗", + "domainErrorFetchDescription": "獲取域名時出錯", + "resourceErrorUpdate": "更新資源失敗", + "resourceErrorUpdateDescription": "更新資源時出錯", + "resourceUpdated": "資源已更新", + "resourceUpdatedDescription": "資源已成功更新", + "resourceErrorTransfer": "轉移資源失敗", + "resourceErrorTransferDescription": "轉移資源時出錯", + "resourceTransferred": "資源已傳輸", + "resourceTransferredDescription": "資源已成功傳輸", + "resourceErrorToggle": "切換資源失敗", + "resourceErrorToggleDescription": "更新資源時出錯", + "resourceVisibilityTitle": "可見性", + "resourceVisibilityTitleDescription": "完全啟用或禁用資源可見性", + "resourceGeneral": "常規設置", + "resourceGeneralDescription": "配置此資源的常規設置", + "resourceEnable": "啟用資源", + "resourceTransfer": "轉移資源", + "resourceTransferDescription": "將此資源轉移到另一個站點", + "resourceTransferSubmit": "轉移資源", + "siteDestination": "目標站點", + "searchSites": "搜索站點", + "accessRoleCreate": "創建角色", + "accessRoleCreateDescription": "創建一個新角色來分組用戶並管理他們的權限。", + "accessRoleCreateSubmit": "創建角色", + "accessRoleCreated": "角色已創建", + "accessRoleCreatedDescription": "角色已成功創建。", + "accessRoleErrorCreate": "創建角色失敗", + "accessRoleErrorCreateDescription": "創建角色時出錯。", + "accessRoleErrorNewRequired": "需要新角色", + "accessRoleErrorRemove": "刪除角色失敗", + "accessRoleErrorRemoveDescription": "刪除角色時出錯。", + "accessRoleName": "角色名稱", + "accessRoleQuestionRemove": "您即將刪除 {name} 角色。 此操作無法撤銷。", + "accessRoleRemove": "刪除角色", + "accessRoleRemoveDescription": "從組織中刪除角色", + "accessRoleRemoveSubmit": "刪除角色", + "accessRoleRemoved": "角色已刪除", + "accessRoleRemovedDescription": "角色已成功刪除。", + "accessRoleRequiredRemove": "刪除此角色之前,請選擇一個新角色來轉移現有成員。", + "manage": "管理", + "sitesNotFound": "未找到站點。", + "pangolinServerAdmin": "伺服器管理員 - Pangolin", + "licenseTierProfessional": "專業許可證", + "licenseTierEnterprise": "企業許可證", + "licenseTierPersonal": "個人許可證", + "licensed": "已授權", + "yes": "是", + "no": "否", + "sitesAdditional": "其他站點", + "licenseKeys": "許可證金鑰", + "sitestCountDecrease": "減少站點數量", + "sitestCountIncrease": "增加站點數量", + "idpManage": "管理身份提供商", + "idpManageDescription": "查看和管理系統中的身份提供商", + "idpDeletedDescription": "身份提供商刪除成功", + "idpOidc": "OAuth2/OIDC", + "idpQuestionRemove": "您確定要永久刪除身份提供者嗎?", + "idpMessageRemove": "這將刪除身份提供者和所有相關的配置。透過此提供者進行身份驗證的用戶將無法登錄。", + "idpMessageConfirm": "要確認,請在下面輸入身份提供者的名稱。", + "idpConfirmDelete": "確認刪除身份提供商", + "idpDelete": "刪除身份提供商", + "idp": "身份提供商", + "idpSearch": "搜索身份提供者...", + "idpAdd": "添加身份提供商", + "idpClientIdRequired": "用戶端 ID 是必需的。", + "idpClientSecretRequired": "用戶端金鑰是必需的。", + "idpErrorAuthUrlInvalid": "身份驗證 URL 必須是有效的 URL。", + "idpErrorTokenUrlInvalid": "令牌 URL 必須是有效的 URL。", + "idpPathRequired": "標識符路徑是必需的。", + "idpScopeRequired": "授權範圍是必需的。", + "idpOidcDescription": "配置 OpenID 連接身份提供商", + "idpCreatedDescription": "身份提供商創建成功", + "idpCreate": "創建身份提供商", + "idpCreateDescription": "配置用戶身份驗證的新身份提供商", + "idpSeeAll": "查看所有身份提供商", + "idpSettingsDescription": "配置身份提供者的基本資訊", + "idpDisplayName": "此身份提供商的顯示名稱", + "idpAutoProvisionUsers": "自動提供用戶", + "idpAutoProvisionUsersDescription": "如果啟用,用戶將在首次登錄時自動在系統中創建,並且能夠映射用戶到角色和組織。", + "licenseBadge": "EE", + "idpType": "提供者類型", + "idpTypeDescription": "選擇您想要配置的身份提供者類型", + "idpOidcConfigure": "OAuth2/OIDC 配置", + "idpOidcConfigureDescription": "配置 OAuth2/OIDC 供應商端點和憑據", + "idpClientId": "用戶端ID", + "idpClientIdDescription": "來自您身份提供商的 OAuth2 用戶端 ID", + "idpClientSecret": "用戶端金鑰", + "idpClientSecretDescription": "來自身份提供商的 OAuth2 用戶端金鑰", + "idpAuthUrl": "授權 URL", + "idpAuthUrlDescription": "OAuth2 授權端點的 URL", + "idpTokenUrl": "令牌 URL", + "idpTokenUrlDescription": "OAuth2 令牌端點的 URL", + "idpOidcConfigureAlert": "重要提示", + "idpOidcConfigureAlertDescription": "創建身份提供方後,您需要在其設置中配置回調 URL。回調 URL 會在創建成功後提供。", + "idpToken": "令牌配置", + "idpTokenDescription": "配置如何從 ID 令牌中提取用戶資訊", + "idpJmespathAbout": "關於 JMESPath", + "idpJmespathAboutDescription": "以下路徑使用 JMESPath 語法從 ID 令牌中提取值。", + "idpJmespathAboutDescriptionLink": "了解更多 JMESPath 資訊", + "idpJmespathLabel": "標識符路徑", + "idpJmespathLabelDescription": "ID 令牌中用戶標識符的路徑", + "idpJmespathEmailPathOptional": "信箱路徑(可選)", + "idpJmespathEmailPathOptionalDescription": "ID 令牌中用戶信箱的路徑", + "idpJmespathNamePathOptional": "使用者名稱路徑(可選)", + "idpJmespathNamePathOptionalDescription": "ID 令牌中使用者名稱的路徑", + "idpOidcConfigureScopes": "作用域(Scopes)", + "idpOidcConfigureScopesDescription": "以空格分隔的 OAuth2 請求作用域列表", + "idpSubmit": "創建身份提供商", + "orgPolicies": "組織策略", + "idpSettings": "{idpName} 設置", + "idpCreateSettingsDescription": "配置身份提供商的設置", + "roleMapping": "角色映射", + "orgMapping": "組織映射", + "orgPoliciesSearch": "搜索組織策略...", + "orgPoliciesAdd": "添加組織策略", + "orgRequired": "組織是必填項", + "error": "錯誤", + "success": "成功", + "orgPolicyAddedDescription": "策略添加成功", + "orgPolicyUpdatedDescription": "策略更新成功", + "orgPolicyDeletedDescription": "已成功刪除策略", + "defaultMappingsUpdatedDescription": "默認映射更新成功", + "orgPoliciesAbout": "關於組織政策", + "orgPoliciesAboutDescription": "組織策略用於根據用戶的 ID 令牌來控制對組織的訪問。 您可以指定 JMESPath 表達式來提取角色和組織資訊從 ID 令牌中提取資訊。", + "orgPoliciesAboutDescriptionLink": "欲了解更多資訊,請參閱文件。", + "defaultMappingsOptional": "默認映射(可選)", + "defaultMappingsOptionalDescription": "當沒有為某個組織定義組織的政策時,使用默認映射。 您可以指定默認角色和組織映射回到這裡。", + "defaultMappingsRole": "默認角色映射", + "defaultMappingsRoleDescription": "此表達式的結果必須返回組織中定義的角色名稱作為字串。", + "defaultMappingsOrg": "默認組織映射", + "defaultMappingsOrgDescription": "此表達式必須返回 組織ID 或 true 才能允許用戶訪問組織。", + "defaultMappingsSubmit": "保存默認映射", + "orgPoliciesEdit": "編輯組織策略", + "org": "組織", + "orgSelect": "選擇組織", + "orgSearch": "搜索", + "orgNotFound": "找不到組織。", + "roleMappingPathOptional": "角色映射路徑(可選)", + "orgMappingPathOptional": "組織映射路徑(可選)", + "orgPolicyUpdate": "更新策略", + "orgPolicyAdd": "添加策略", + "orgPolicyConfig": "配置組織訪問權限", + "idpUpdatedDescription": "身份提供商更新成功", + "redirectUrl": "重定向網址", + "redirectUrlAbout": "關於重定向網址", + "redirectUrlAboutDescription": "這是用戶在驗證後將被重定向到的URL。您需要在身份提供商設置中配置此URL。", + "pangolinAuth": "認證 - Pangolin", + "verificationCodeLengthRequirements": "您的驗證碼必須是 8 個字元。", + "errorOccurred": "發生錯誤", + "emailErrorVerify": "驗證電子郵件失敗:", + "emailVerified": "電子郵件驗證成功!重定向您...", + "verificationCodeErrorResend": "無法重新發送驗證碼:", + "verificationCodeResend": "驗證碼已重新發送", + "verificationCodeResendDescription": "我們已將驗證碼重新發送到您的電子郵件地址。請檢查您的收件箱。", + "emailVerify": "驗證電子郵件", + "emailVerifyDescription": "輸入驗證碼發送到您的電子郵件地址。", + "verificationCode": "驗證碼", + "verificationCodeEmailSent": "我們向您的電子郵件地址發送了驗證碼。", + "submit": "提交", + "emailVerifyResendProgress": "正在重新發送...", + "emailVerifyResend": "沒有收到代碼?點擊此處重新發送", + "passwordNotMatch": "密碼不匹配", + "signupError": "註冊時出錯", + "pangolinLogoAlt": "Pangolin 標誌", + "inviteAlready": "看起來您已被邀請!", + "inviteAlreadyDescription": "要接受邀請,您必須登錄或創建一個帳戶。", + "signupQuestion": "已經有一個帳戶?", + "login": "登錄", + "resourceNotFound": "找不到資源", + "resourceNotFoundDescription": "您要訪問的資源不存在。", + "pincodeRequirementsLength": "PIN碼必須是 6 位數字", + "pincodeRequirementsChars": "PIN 必須只包含數字", + "passwordRequirementsLength": "密碼必須至少 1 個字元長", + "passwordRequirementsTitle": "密碼要求:", + "passwordRequirementLength": "至少 8 個字元長", + "passwordRequirementUppercase": "至少一個大寫字母", + "passwordRequirementLowercase": "至少一個小寫字母", + "passwordRequirementNumber": "至少一個數字", + "passwordRequirementSpecial": "至少一個特殊字元", + "passwordRequirementsMet": "✓ 密碼滿足所有要求", + "passwordStrength": "密碼強度", + "passwordStrengthWeak": "弱", + "passwordStrengthMedium": "中", + "passwordStrengthStrong": "強", + "passwordRequirements": "要求:", + "passwordRequirementLengthText": "8+ 個字元", + "passwordRequirementUppercaseText": "大寫字母 (A-Z)", + "passwordRequirementLowercaseText": "小寫字母 (a-z)", + "passwordRequirementNumberText": "數字 (0-9)", + "passwordRequirementSpecialText": "特殊字元 (!@#$%...)", + "passwordsDoNotMatch": "密碼不匹配", + "otpEmailRequirementsLength": "OTP 必須至少 1 個字元長", + "otpEmailSent": "OTP 已發送", + "otpEmailSentDescription": "OTP 已經發送到您的電子郵件", + "otpEmailErrorAuthenticate": "通過電子郵件身份驗證失敗", + "pincodeErrorAuthenticate": "Pincode 驗證失敗", + "passwordErrorAuthenticate": "密碼驗證失敗", + "poweredBy": "支持者:", + "authenticationRequired": "需要身份驗證", + "authenticationMethodChoose": "請選擇您偏好的方式來訪問 {name}", + "authenticationRequest": "您必須通過身份驗證才能訪問 {name}", + "user": "用戶", + "pincodeInput": "6 位數字 PIN 碼", + "pincodeSubmit": "使用 PIN 登錄", + "passwordSubmit": "使用密碼登錄", + "otpEmailDescription": "一次性代碼將發送到此電子郵件。", + "otpEmailSend": "發送一次性代碼", + "otpEmail": "一次性密碼 (OTP)", + "otpEmailSubmit": "提交 OTP", + "backToEmail": "回到電子郵件", + "noSupportKey": "伺服器當前未使用支持者金鑰,歡迎支持本項目!", + "accessDenied": "訪問被拒絕", + "accessDeniedDescription": "當前帳戶無權訪問此資源。如認為這是錯誤,請與管理員聯繫。", + "accessTokenError": "檢查訪問令牌時出錯", + "accessGranted": "已授予訪問", + "accessUrlInvalid": "訪問 URL 無效", + "accessGrantedDescription": "您已獲准訪問此資源,正在為您跳轉...", + "accessUrlInvalidDescription": "此共享訪問URL無效。請聯絡資源所有者獲取新URL。", + "tokenInvalid": "無效的令牌", + "pincodeInvalid": "無效的代碼", + "passwordErrorRequestReset": "請求重設失敗:", + "passwordErrorReset": "重設密碼失敗:", + "passwordResetSuccess": "密碼重設成功!返回登錄...", + "passwordReset": "重設密碼", + "passwordResetDescription": "按照步驟重設您的密碼", + "passwordResetSent": "我們將發送一個驗證碼到這個電子郵件地址。", + "passwordResetCode": "驗證碼", + "passwordResetCodeDescription": "請檢查您的電子郵件以獲取驗證碼。", + "passwordNew": "新密碼", + "passwordNewConfirm": "確認新密碼", + "changePassword": "更改密碼", + "changePasswordDescription": "更新您的帳戶密碼", + "oldPassword": "當前密碼", + "newPassword": "新密碼", + "confirmNewPassword": "確認新密碼", + "changePasswordError": "更改密碼失敗", + "changePasswordErrorDescription": "更改您的密碼時出錯", + "changePasswordSuccess": "密碼修改成功", + "changePasswordSuccessDescription": "您的密碼已成功更新", + "passwordExpiryRequired": "需要密碼過期", + "passwordExpiryDescription": "該機構要求您每 {maxDays} 天更改一次密碼。", + "changePasswordNow": "現在更改密碼", + "pincodeAuth": "驗證器代碼", + "pincodeSubmit2": "提交代碼", + "passwordResetSubmit": "請求重設", + "passwordBack": "回到密碼", + "loginBack": "返回登錄", + "signup": "註冊", + "loginStart": "登錄以開始", + "idpOidcTokenValidating": "正在驗證 OIDC 令牌", + "idpOidcTokenResponse": "驗證 OIDC 令牌響應", + "idpErrorOidcTokenValidating": "驗證 OIDC 令牌出錯", + "idpConnectingTo": "連接到{name}", + "idpConnectingToDescription": "正在驗證您的身份", + "idpConnectingToProcess": "正在連接...", + "idpConnectingToFinished": "已連接", + "idpErrorConnectingTo": "無法連接到 {name},請聯絡管理員協助處理。", + "idpErrorNotFound": "找不到 IdP", + "inviteInvalid": "無效邀請", + "inviteInvalidDescription": "邀請連結無效。", + "inviteErrorWrongUser": "邀請不是該用戶的", + "inviteErrorUserNotExists": "用戶不存在。請先創建帳戶。", + "inviteErrorLoginRequired": "您必須登錄才能接受邀請", + "inviteErrorExpired": "邀請可能已過期", + "inviteErrorRevoked": "邀請可能已被吊銷了", + "inviteErrorTypo": "邀請連結中可能有一個類型", + "pangolinSetup": "認證 - Pangolin", + "orgNameRequired": "組織名稱是必需的", + "orgIdRequired": "組織ID是必需的", + "orgErrorCreate": "創建組織時出錯", + "pageNotFound": "找不到頁面", + "pageNotFoundDescription": "哎呀!您正在尋找的頁面不存在。", + "overview": "概覽", + "home": "首頁", + "accessControl": "訪問控制", + "settings": "設置", + "usersAll": "所有用戶", + "license": "許可協議", + "pangolinDashboard": "儀錶板 - Pangolin", + "noResults": "未找到任何結果。", + "terabytes": "{count} TB", + "gigabytes": "{count} GB", + "megabytes": "{count} MB", + "tagsEntered": "已輸入的標籤", + "tagsEnteredDescription": "這些是您輸入的標籤。", + "tagsWarnCannotBeLessThanZero": "最大標籤和最小標籤不能小於 0", + "tagsWarnNotAllowedAutocompleteOptions": "標記不允許為每個自動完成選項", + "tagsWarnInvalid": "無效的標籤,每個有效標籤", + "tagWarnTooShort": "標籤 {tagText} 太短", + "tagWarnTooLong": "標籤 {tagText} 太長", + "tagsWarnReachedMaxNumber": "已達到允許標籤的最大數量", + "tagWarnDuplicate": "未添加重複標籤 {tagText}", + "supportKeyInvalid": "無效金鑰", + "supportKeyInvalidDescription": "您的支持者金鑰無效。", + "supportKeyValid": "有效的金鑰", + "supportKeyValidDescription": "您的支持者金鑰已被驗證。感謝您的支持!", + "supportKeyErrorValidationDescription": "驗證支持者金鑰失敗。", + "supportKey": "支持開發和通過一個 Pangolin !", + "supportKeyDescription": "購買支持者鑰匙,幫助我們繼續為社區發展 Pangolin 。 您的貢獻使我們能夠投入更多的時間來維護和添加所有人的新功能。 我們永遠不會用這個來支付牆上的功能。這與任何商業版是分開的。", + "supportKeyPet": "您還可以領養並見到屬於自己的 Pangolin!", + "supportKeyPurchase": "付款通過 GitHub 進行處理,之後您可以在以下位置獲取您的金鑰:", + "supportKeyPurchaseLink": "我們的網站", + "supportKeyPurchase2": "並在這裡兌換。", + "supportKeyLearnMore": "了解更多。", + "supportKeyOptions": "請選擇最適合您的選項。", + "supportKetOptionFull": "完全支持者", + "forWholeServer": "適用於整個伺服器", + "lifetimePurchase": "終身購買", + "supporterStatus": "支持者狀態", + "buy": "購買", + "supportKeyOptionLimited": "有限支持者", + "forFiveUsers": "適用於 5 或更少用戶", + "supportKeyRedeem": "兌換支持者金鑰", + "supportKeyHideSevenDays": "隱藏 7 天", + "supportKeyEnter": "輸入支持者金鑰", + "supportKeyEnterDescription": "見到你自己的 Pangolin!", + "githubUsername": "GitHub 使用者名稱", + "supportKeyInput": "支持者金鑰", + "supportKeyBuy": "購買支持者金鑰", + "logoutError": "註銷錯誤", + "signingAs": "登錄為", + "serverAdmin": "伺服器管理員", + "managedSelfhosted": "託管自託管", + "otpEnable": "啟用雙因子認證", + "otpDisable": "禁用雙因子認證", + "logout": "登出", + "licenseTierProfessionalRequired": "需要專業版", + "licenseTierProfessionalRequiredDescription": "此功能僅在專業版可用。", + "actionGetOrg": "獲取組織", + "updateOrgUser": "更新組織用戶", + "createOrgUser": "創建組織用戶", + "actionUpdateOrg": "更新組織", + "actionUpdateUser": "更新用戶", + "actionGetUser": "獲取用戶", + "actionGetOrgUser": "獲取組織用戶", + "actionListOrgDomains": "列出組織域", + "actionCreateSite": "創建站點", + "actionDeleteSite": "刪除站點", + "actionGetSite": "獲取站點", + "actionListSites": "站點列表", + "actionApplyBlueprint": "應用藍圖", + "setupToken": "設置令牌", + "setupTokenDescription": "從伺服器控制台輸入設定令牌。", + "setupTokenRequired": "需要設置令牌", + "actionUpdateSite": "更新站點", + "actionListSiteRoles": "允許站點角色列表", + "actionCreateResource": "創建資源", + "actionDeleteResource": "刪除資源", + "actionGetResource": "獲取資源", + "actionListResource": "列出資源", + "actionUpdateResource": "更新資源", + "actionListResourceUsers": "列出資源用戶", + "actionSetResourceUsers": "設置資源用戶", + "actionSetAllowedResourceRoles": "設置允許的資源角色", + "actionListAllowedResourceRoles": "列出允許的資源角色", + "actionSetResourcePassword": "設置資源密碼", + "actionSetResourcePincode": "設置資源粉碼", + "actionSetResourceEmailWhitelist": "設置資源電子郵件白名單", + "actionGetResourceEmailWhitelist": "獲取資源電子郵件白名單", + "actionCreateTarget": "創建目標", + "actionDeleteTarget": "刪除目標", + "actionGetTarget": "獲取目標", + "actionListTargets": "列表目標", + "actionUpdateTarget": "更新目標", + "actionCreateRole": "創建角色", + "actionDeleteRole": "刪除角色", + "actionGetRole": "獲取角色", + "actionListRole": "角色列表", + "actionUpdateRole": "更新角色", + "actionListAllowedRoleResources": "列表允許的角色資源", + "actionInviteUser": "邀請用戶", + "actionRemoveUser": "刪除用戶", + "actionListUsers": "列出用戶", + "actionAddUserRole": "添加用戶角色", + "actionGenerateAccessToken": "生成訪問令牌", + "actionDeleteAccessToken": "刪除訪問令牌", + "actionListAccessTokens": "訪問令牌", + "actionCreateResourceRule": "創建資源規則", + "actionDeleteResourceRule": "刪除資源規則", + "actionListResourceRules": "列出資源規則", + "actionUpdateResourceRule": "更新資源規則", + "actionListOrgs": "列出組織", + "actionCheckOrgId": "檢查組織ID", + "actionCreateOrg": "創建組織", + "actionDeleteOrg": "刪除組織", + "actionListApiKeys": "列出 API 金鑰", + "actionListApiKeyActions": "列出 API 金鑰動作", + "actionSetApiKeyActions": "設置 API 金鑰允許的操作", + "actionCreateApiKey": "創建 API 金鑰", + "actionDeleteApiKey": "刪除 API 金鑰", + "actionCreateIdp": "創建 IDP", + "actionUpdateIdp": "更新 IDP", + "actionDeleteIdp": "刪除 IDP", + "actionListIdps": "列出 IDP", + "actionGetIdp": "獲取 IDP", + "actionCreateIdpOrg": "創建 IDP 組織策略", + "actionDeleteIdpOrg": "刪除 IDP 組織策略", + "actionListIdpOrgs": "列出 IDP 組織", + "actionUpdateIdpOrg": "更新 IDP 組織", + "actionCreateClient": "創建用戶端", + "actionDeleteClient": "刪除用戶端", + "actionUpdateClient": "更新用戶端", + "actionListClients": "列出用戶端", + "actionGetClient": "獲取用戶端", + "actionCreateSiteResource": "創建站點資源", + "actionDeleteSiteResource": "刪除站點資源", + "actionGetSiteResource": "獲取站點資源", + "actionListSiteResources": "列出站點資源", + "actionUpdateSiteResource": "更新站點資源", + "actionListInvitations": "邀請列表", + "noneSelected": "未選擇", + "orgNotFound2": "未找到組織。", + "searchProgress": "搜索中...", + "create": "創建", + "orgs": "組織", + "loginError": "登錄時出錯", + "passwordForgot": "忘記密碼?", + "otpAuth": "兩步驗證", + "otpAuthDescription": "從您的身份驗證程序中輸入代碼或您的單次備份代碼。", + "otpAuthSubmit": "提交代碼", + "idpContinue": "或者繼續", + "otpAuthBack": "返回登錄", + "navbar": "導航菜單", + "navbarDescription": "應用程式的主導航菜單", + "navbarDocsLink": "文件", + "otpErrorEnable": "無法啟用 2FA", + "otpErrorEnableDescription": "啟用 2FA 時出錯", + "otpSetupCheckCode": "請輸入您的 6 位數字代碼", + "otpSetupCheckCodeRetry": "無效的代碼。請重試。", + "otpSetup": "啟用兩步驗證", + "otpSetupDescription": "用額外的保護層來保護您的帳戶", + "otpSetupScanQr": "用您的身份驗證程序掃描此二維碼或手動輸入金鑰:", + "otpSetupSecretCode": "驗證器代碼", + "otpSetupSuccess": "啟用兩步驗證", + "otpSetupSuccessStoreBackupCodes": "您的帳戶現在更加安全。不要忘記保存您的備份代碼。", + "otpErrorDisable": "無法禁用 2FA", + "otpErrorDisableDescription": "禁用 2FA 時出錯", + "otpRemove": "禁用兩步驗證", + "otpRemoveDescription": "為您的帳戶禁用兩步驗證", + "otpRemoveSuccess": "雙重身份驗證已禁用", + "otpRemoveSuccessMessage": "您的帳戶已禁用雙重身份驗證。您可以隨時再次啟用它。", + "otpRemoveSubmit": "禁用兩步驗證", + "paginator": "第 {current} 頁,共 {last} 頁", + "paginatorToFirst": "轉到第一頁", + "paginatorToPrevious": "轉到上一頁", + "paginatorToNext": "轉到下一頁", + "paginatorToLast": "轉到最後一頁", + "copyText": "複製文本", + "copyTextFailed": "複製文本失敗: ", + "copyTextClipboard": "複製到剪貼簿", + "inviteErrorInvalidConfirmation": "無效確認", + "passwordRequired": "必須填寫密碼", + "allowAll": "允許所有", + "permissionsAllowAll": "允許所有權限", + "githubUsernameRequired": "必須填寫 GitHub 使用者名稱", + "supportKeyRequired": "必須填寫支持者金鑰", + "passwordRequirementsChars": "密碼至少需要 8 個字元", + "language": "語言", + "verificationCodeRequired": "必須輸入代碼", + "userErrorNoUpdate": "沒有要更新的用戶", + "siteErrorNoUpdate": "沒有要更新的站點", + "resourceErrorNoUpdate": "沒有可更新的資源", + "authErrorNoUpdate": "沒有要更新的身份驗證資訊", + "orgErrorNoUpdate": "沒有要更新的組織", + "orgErrorNoProvided": "未提供組織", + "apiKeysErrorNoUpdate": "沒有要更新的 API 金鑰", + "sidebarOverview": "概覽", + "sidebarHome": "首頁", + "sidebarSites": "站點", + "sidebarResources": "資源", + "sidebarAccessControl": "訪問控制", + "sidebarUsers": "用戶", + "sidebarInvitations": "邀請", + "sidebarRoles": "角色", + "sidebarShareableLinks": "分享連結", + "sidebarApiKeys": "API 金鑰", + "sidebarSettings": "設置", + "sidebarAllUsers": "所有用戶", + "sidebarIdentityProviders": "身份提供商", + "sidebarLicense": "證書", + "sidebarClients": "用戶端", + "sidebarDomains": "域", + "sidebarBluePrints": "藍圖", + "blueprints": "藍圖", + "blueprintsDescription": "應用聲明配置並查看先前運行的", + "blueprintAdd": "添加藍圖", + "blueprintGoBack": "查看所有藍圖", + "blueprintCreate": "創建藍圖", + "blueprintCreateDescription2": "按照下面的步驟創建和應用新的藍圖", + "blueprintDetails": "藍圖詳細資訊", + "blueprintDetailsDescription": "查看應用藍圖的結果和發生的任何錯誤", + "blueprintInfo": "藍圖資訊", + "message": "留言", + "blueprintContentsDescription": "定義描述您基礎設施的 YAML 內容", + "blueprintErrorCreateDescription": "應用藍圖時出錯", + "blueprintErrorCreate": "創建藍圖時出錯", + "searchBlueprintProgress": "搜索藍圖...", + "appliedAt": "應用於", + "source": "來源", + "contents": "目錄", + "parsedContents": "解析內容 (只讀)", + "enableDockerSocket": "啟用 Docker 藍圖", + "enableDockerSocketDescription": "啟用 Docker Socket 標籤擦除藍圖標籤。套接字路徑必須提供給新的。", + "enableDockerSocketLink": "了解更多", + "viewDockerContainers": "查看停靠容器", + "containersIn": "{siteName} 中的容器", + "selectContainerDescription": "選擇任何容器作為目標的主機名。點擊埠使用埠。", + "containerName": "名稱", + "containerImage": "圖片", + "containerState": "狀態", + "containerNetworks": "網路", + "containerHostnameIp": "主機名/IP", + "containerLabels": "標籤", + "containerLabelsCount": "{count, plural, other {# 標籤}}", + "containerLabelsTitle": "容器標籤", + "containerLabelEmpty": "<為空>", + "containerPorts": "埠", + "containerPortsMore": "+{count} 更多", + "containerActions": "行動", + "select": "選擇", + "noContainersMatchingFilters": "沒有找到匹配當前過濾器的容器。", + "showContainersWithoutPorts": "顯示沒有埠的容器", + "showStoppedContainers": "顯示已停止的容器", + "noContainersFound": "未找到容器。請確保 Docker 容器正在運行。", + "searchContainersPlaceholder": "在 {count} 個容器中搜索...", + "searchResultsCount": "{count, plural, other {# 個結果}}", + "filters": "篩選器", + "filterOptions": "過濾器選項", + "filterPorts": "埠", + "filterStopped": "已停止", + "clearAllFilters": "清除所有過濾器", + "columns": "列", + "toggleColumns": "切換列", + "refreshContainersList": "刷新容器列表", + "searching": "搜索中...", + "noContainersFoundMatching": "未找到與 \"{filter}\" 匹配的容器。", + "light": "淺色", + "dark": "深色", + "system": "系統", + "theme": "主題", + "subnetRequired": "子網是必填項", + "initialSetupTitle": "初始伺服器設置", + "initialSetupDescription": "創建初始伺服器管理員帳戶。 只能存在一個伺服器管理員。 您可以隨時更改這些憑據。", + "createAdminAccount": "創建管理員帳戶", + "setupErrorCreateAdmin": "創建伺服器管理員帳戶時發生錯誤。", + "certificateStatus": "證書狀態", + "loading": "載入中", + "restart": "重啟", + "domains": "域", + "domainsDescription": "管理您的組織域", + "domainsSearch": "搜索域...", + "domainAdd": "添加域", + "domainAddDescription": "在您的組織中註冊新域", + "domainCreate": "創建域", + "domainCreatedDescription": "域創建成功", + "domainDeletedDescription": "成功刪除域", + "domainQuestionRemove": "您確定要從您的帳戶中刪除域名嗎?", + "domainMessageRemove": "移除後,該域將不再與您的帳戶關聯。", + "domainConfirmDelete": "確認刪除域", + "domainDelete": "刪除域", + "domain": "域", + "selectDomainTypeNsName": "域委派(NS)", + "selectDomainTypeNsDescription": "此域及其所有子域。當您希望控制整個域區域時使用此選項。", + "selectDomainTypeCnameName": "單個域(CNAME)", + "selectDomainTypeCnameDescription": "僅此特定域。用於單個子域或特定域條目。", + "selectDomainTypeWildcardName": "通配符域", + "selectDomainTypeWildcardDescription": "此域名及其子域名。", + "domainDelegation": "單個域", + "selectType": "選擇一個類型", + "actions": "操作", + "refresh": "刷新", + "refreshError": "刷新數據失敗", + "verified": "已驗證", + "pending": "待定", + "sidebarBilling": "計費", + "billing": "計費", + "orgBillingDescription": "管理您的帳單資訊和訂閱", + "github": "GitHub", + "pangolinHosted": "Pangolin 託管", + "fossorial": "Fossorial", + "completeAccountSetup": "完成帳戶設定", + "completeAccountSetupDescription": "設置您的密碼以開始", + "accountSetupSent": "我們將發送帳號設定代碼到該電子郵件地址。", + "accountSetupCode": "設置代碼", + "accountSetupCodeDescription": "請檢查您的信箱以獲取設置代碼。", + "passwordCreate": "創建密碼", + "passwordCreateConfirm": "確認密碼", + "accountSetupSubmit": "發送設置代碼", + "completeSetup": "完成設置", + "accountSetupSuccess": "帳號設定完成!歡迎來到 Pangolin!", + "documentation": "文件", + "saveAllSettings": "保存所有設置", + "settingsUpdated": "設置已更新", + "settingsUpdatedDescription": "所有設置已成功更新", + "settingsErrorUpdate": "設置更新失敗", + "settingsErrorUpdateDescription": "更新設置時發生錯誤", + "sidebarCollapse": "摺疊", + "sidebarExpand": "展開", + "newtUpdateAvailable": "更新可用", + "newtUpdateAvailableInfo": "新版本的 Newt 已可用。請更新到最新版本以獲得最佳體驗。", + "domainPickerEnterDomain": "域名", + "domainPickerPlaceholder": "example.com", + "domainPickerDescription": "輸入資源的完整域名以查看可用選項。", + "domainPickerDescriptionSaas": "輸入完整域名、子域或名稱以查看可用選項。", + "domainPickerTabAll": "所有", + "domainPickerTabOrganization": "組織", + "domainPickerTabProvided": "提供的", + "domainPickerSortAsc": "A-Z", + "domainPickerSortDesc": "Z-A", + "domainPickerCheckingAvailability": "檢查可用性...", + "domainPickerNoMatchingDomains": "未找到匹配的域名。嘗試不同的域名或檢查您組織的域名設置。", + "domainPickerOrganizationDomains": "組織域", + "domainPickerProvidedDomains": "提供的域", + "domainPickerSubdomain": "子域:{subdomain}", + "domainPickerNamespace": "命名空間:{namespace}", + "domainPickerShowMore": "顯示更多", + "regionSelectorTitle": "選擇區域", + "regionSelectorInfo": "選擇區域以幫助提升您所在地的性能。您不必與伺服器在相同的區域。", + "regionSelectorPlaceholder": "選擇一個區域", + "regionSelectorComingSoon": "即將推出", + "billingLoadingSubscription": "正在載入訂閱...", + "billingFreeTier": "免費層", + "billingWarningOverLimit": "警告:您已超出一個或多個使用限制。在您修改訂閱或調整使用情況之前,您的站點將無法連接。", + "billingUsageLimitsOverview": "使用限制概覽", + "billingMonitorUsage": "監控您的使用情況以對比已配置的限制。如需提高限制請聯絡我們 support@pangolin.net。", + "billingDataUsage": "數據使用情況", + "billingOnlineTime": "站點在線時間", + "billingUsers": "活躍用戶", + "billingDomains": "活躍域", + "billingRemoteExitNodes": "活躍自託管節點", + "billingNoLimitConfigured": "未配置限制", + "billingEstimatedPeriod": "估計結算週期", + "billingIncludedUsage": "包含的使用量", + "billingIncludedUsageDescription": "您當前訂閱計劃中包含的使用量", + "billingFreeTierIncludedUsage": "免費層使用額度", + "billingIncluded": "包含", + "billingEstimatedTotal": "預計總額:", + "billingNotes": "備註", + "billingEstimateNote": "這是根據您當前使用情況的估算。", + "billingActualChargesMayVary": "實際費用可能會有變化。", + "billingBilledAtEnd": "您將在結算週期結束時被計費。", + "billingModifySubscription": "修改訂閱", + "billingStartSubscription": "開始訂閱", + "billingRecurringCharge": "週期性收費", + "billingManageSubscriptionSettings": "管理您的訂閱設置和偏好", + "billingNoActiveSubscription": "您沒有活躍的訂閱。開始訂閱以增加使用限制。", + "billingFailedToLoadSubscription": "無法載入訂閱", + "billingFailedToLoadUsage": "無法載入使用情況", + "billingFailedToGetCheckoutUrl": "無法獲取結帳網址", + "billingPleaseTryAgainLater": "請稍後再試。", + "billingCheckoutError": "結帳錯誤", + "billingFailedToGetPortalUrl": "無法獲取門戶網址", + "billingPortalError": "門戶錯誤", + "billingDataUsageInfo": "當連接到雲端時,您將為透過安全隧道傳輸的所有數據收取費用。 這包括您所有站點的進出流量。 當您達到上限時,您的站點將斷開連接,直到您升級計劃或減少使用。使用節點時不收取數據。", + "billingOnlineTimeInfo": "您要根據您的網站連接到雲端的時間長短收取費用。 例如,44,640 分鐘等於一個 24/7 全月運行的網站。 當您達到上限時,您的站點將斷開連接,直到您升級計劃或減少使用。使用節點時不收取費用。", + "billingUsersInfo": "根據您組織中的活躍用戶數量收費。按日計算帳單。", + "billingDomainInfo": "根據組織中活躍域的數量收費。按日計算帳單。", + "billingRemoteExitNodesInfo": "根據您組織中已管理節點的數量收費。按日計算帳單。", + "domainNotFound": "域未找到", + "domainNotFoundDescription": "此資源已禁用,因為該域不再在我們的系統中存在。請為此資源設置一個新域。", + "failed": "失敗", + "createNewOrgDescription": "創建一個新組織", + "organization": "組織", + "port": "埠", + "securityKeyManage": "管理安全金鑰", + "securityKeyDescription": "添加或刪除用於無密碼認證的安全金鑰", + "securityKeyRegister": "註冊新的安全金鑰", + "securityKeyList": "您的安全金鑰", + "securityKeyNone": "尚未註冊安全金鑰", + "securityKeyNameRequired": "名稱為必填項", + "securityKeyRemove": "刪除", + "securityKeyLastUsed": "上次使用:{date}", + "securityKeyNameLabel": "名稱", + "securityKeyRegisterSuccess": "安全金鑰註冊成功", + "securityKeyRegisterError": "註冊安全金鑰失敗", + "securityKeyRemoveSuccess": "安全金鑰刪除成功", + "securityKeyRemoveError": "刪除安全金鑰失敗", + "securityKeyLoadError": "載入安全金鑰失敗", + "securityKeyLogin": "使用安全金鑰繼續", + "securityKeyAuthError": "使用安全金鑰認證失敗", + "securityKeyRecommendation": "考慮在其他設備上註冊另一個安全金鑰,以確保不會被鎖定在您的帳戶之外。", + "registering": "註冊中...", + "securityKeyPrompt": "請使用您的安全金鑰驗證身份。確保您的安全金鑰已連接並準備好。", + "securityKeyBrowserNotSupported": "您的瀏覽器不支持安全金鑰。請使用像 Chrome、Firefox 或 Safari 這樣的現代瀏覽器。", + "securityKeyPermissionDenied": "請允許訪問您的安全金鑰以繼續登錄。", + "securityKeyRemovedTooQuickly": "請保持您的安全金鑰連接,直到登錄過程完成。", + "securityKeyNotSupported": "您的安全金鑰可能不相容。請嘗試不同的安全金鑰。", + "securityKeyUnknownError": "使用安全金鑰時出現問題。請再試一次。", + "twoFactorRequired": "註冊安全金鑰需要兩步驗證。", + "twoFactor": "兩步驗證", + "twoFactorAuthentication": "兩步驗證", + "twoFactorDescription": "這個組織需要雙重身份驗證。", + "enableTwoFactor": "啟用兩步驗證", + "organizationSecurityPolicy": "組織安全政策", + "organizationSecurityPolicyDescription": "此機構擁有安全要求,您必須先滿足才能訪問", + "securityRequirements": "安全要求", + "allRequirementsMet": "已滿足所有要求", + "completeRequirementsToContinue": "完成下面的要求以繼續訪問此組織", + "youCanNowAccessOrganization": "您現在可以訪問此組織", + "reauthenticationRequired": "會話長度", + "reauthenticationDescription": "該機構要求您每 {maxDays} 天登錄一次。", + "reauthenticationDescriptionHours": "該機構要求您每 {maxHours} 小時登錄一次。", + "reauthenticateNow": "再次登錄", + "adminEnabled2FaOnYourAccount": "管理員已為 {email} 啟用兩步驗證。請完成設置以繼續。", + "securityKeyAdd": "添加安全金鑰", + "securityKeyRegisterTitle": "註冊新安全金鑰", + "securityKeyRegisterDescription": "連接您的安全金鑰並輸入名稱以便識別", + "securityKeyTwoFactorRequired": "要求兩步驗證", + "securityKeyTwoFactorDescription": "請輸入你的兩步驗證代碼以註冊安全金鑰", + "securityKeyTwoFactorRemoveDescription": "請輸入你的兩步驗證代碼以移除安全金鑰", + "securityKeyTwoFactorCode": "雙因素代碼", + "securityKeyRemoveTitle": "移除安全金鑰", + "securityKeyRemoveDescription": "輸入您的密碼以移除安全金鑰 \"{name}\"", + "securityKeyNoKeysRegistered": "沒有註冊安全金鑰", + "securityKeyNoKeysDescription": "添加安全金鑰以加強您的帳戶安全", + "createDomainRequired": "必須輸入域", + "createDomainAddDnsRecords": "添加 DNS 記錄", + "createDomainAddDnsRecordsDescription": "將以下 DNS 記錄添加到您的域名提供商以完成設置。", + "createDomainNsRecords": "NS 記錄", + "createDomainRecord": "記錄", + "createDomainType": "類型:", + "createDomainName": "名稱:", + "createDomainValue": "值:", + "createDomainCnameRecords": "CNAME 記錄", + "createDomainARecords": "A記錄", + "createDomainRecordNumber": "記錄 {number}", + "createDomainTxtRecords": "TXT 記錄", + "createDomainSaveTheseRecords": "保存這些記錄", + "createDomainSaveTheseRecordsDescription": "務必保存這些 DNS 記錄,因為您將無法再次查看它們。", + "createDomainDnsPropagation": "DNS 傳播", + "createDomainDnsPropagationDescription": "DNS 更改可能需要一些時間才能在網路上傳播。這可能需要從幾分鐘到 48 小時,具體取決於您的 DNS 提供商和 TTL 設置。", + "resourcePortRequired": "非 HTTP 資源必須輸入埠號", + "resourcePortNotAllowed": "HTTP 資源不應設置埠號", + "billingPricingCalculatorLink": "價格計算機", + "signUpTerms": { + "IAgreeToThe": "我同意", + "termsOfService": "服務條款", + "and": "和", + "privacyPolicy": "隱私政策" + }, + "siteRequired": "需要站點。", + "olmTunnel": "Olm 隧道", + "olmTunnelDescription": "使用 Olm 進行用戶端連接", + "errorCreatingClient": "創建用戶端出錯", + "clientDefaultsNotFound": "未找到用戶端預設值", + "createClient": "創建用戶端", + "createClientDescription": "創建一個新用戶端來連接您的站點", + "seeAllClients": "查看所有用戶端", + "clientInformation": "用戶端資訊", + "clientNamePlaceholder": "用戶端名稱", + "address": "地址", + "subnetPlaceholder": "子網", + "addressDescription": "此用戶端將用於連接的地址", + "selectSites": "選擇站點", + "sitesDescription": "用戶端將與所選站點進行連接", + "clientInstallOlm": "安裝 Olm", + "clientInstallOlmDescription": "在您的系統上運行 Olm", + "clientOlmCredentials": "Olm 憑據", + "clientOlmCredentialsDescription": "這是 Olm 伺服器的身份驗證方式", + "olmEndpoint": "Olm 端點", + "olmId": "Olm ID", + "olmSecretKey": "Olm 私鑰", + "clientCredentialsSave": "保存您的憑據", + "clientCredentialsSaveDescription": "該資訊僅會顯示一次,請確保將其複製到安全位置。", + "generalSettingsDescription": "配置此用戶端的常規設置", + "clientUpdated": "用戶端已更新", + "clientUpdatedDescription": "用戶端已更新。", + "clientUpdateFailed": "更新用戶端失敗", + "clientUpdateError": "更新用戶端時出錯。", + "sitesFetchFailed": "獲取站點失敗", + "sitesFetchError": "獲取站點時出錯。", + "olmErrorFetchReleases": "獲取 Olm 發布版本時出錯。", + "olmErrorFetchLatest": "獲取最新 Olm 發布版本時出錯。", + "remoteSubnets": "遠程子網", + "enterCidrRange": "輸入 CIDR 範圍", + "remoteSubnetsDescription": "添加可以通過用戶端遠端存取該站點的 CIDR 範圍。使用類似 10.0.0.0/24 的格式。這僅適用於 VPN 用戶端連接。", + "resourceEnableProxy": "啟用公共代理", + "resourceEnableProxyDescription": "啟用到此資源的公共代理。這允許外部網路通過開放埠訪問資源。需要 Traefik 配置。", + "externalProxyEnabled": "外部代理已啟用", + "addNewTarget": "添加新目標", + "targetsList": "目標列表", + "advancedMode": "高級模式", + "targetErrorDuplicateTargetFound": "找到重複的目標", + "healthCheckHealthy": "正常", + "healthCheckUnhealthy": "不正常", + "healthCheckUnknown": "未知", + "healthCheck": "健康檢查", + "configureHealthCheck": "配置健康檢查", + "configureHealthCheckDescription": "為 {target} 設置健康監控", + "enableHealthChecks": "啟用健康檢查", + "enableHealthChecksDescription": "監視此目標的健康狀況。如果需要,您可以監視一個不同的終點。", + "healthScheme": "方法", + "healthSelectScheme": "選擇方法", + "healthCheckPath": "路徑", + "healthHostname": "IP / 主機", + "healthPort": "埠", + "healthCheckPathDescription": "用於檢查健康狀態的路徑。", + "healthyIntervalSeconds": "正常間隔", + "unhealthyIntervalSeconds": "不正常間隔", + "IntervalSeconds": "正常間隔", + "timeoutSeconds": "超時", + "timeIsInSeconds": "時間以秒為單位", + "retryAttempts": "重試次數", + "expectedResponseCodes": "期望響應代碼", + "expectedResponseCodesDescription": "HTTP 狀態碼表示健康狀態。如留空,200-300 被視為健康。", + "customHeaders": "自訂 Headers", + "customHeadersDescription": "Header 斷行分隔:Header 名稱:值", + "headersValidationError": "Header 必須是格式:Header 名稱:值。", + "saveHealthCheck": "保存健康檢查", + "healthCheckSaved": "健康檢查已保存", + "healthCheckSavedDescription": "健康檢查配置已成功保存。", + "healthCheckError": "健康檢查錯誤", + "healthCheckErrorDescription": "保存健康檢查配置時出錯", + "healthCheckPathRequired": "健康檢查路徑為必填項", + "healthCheckMethodRequired": "HTTP 方法為必填項", + "healthCheckIntervalMin": "檢查間隔必須至少為 5 秒", + "healthCheckTimeoutMin": "超時必須至少為 1 秒", + "healthCheckRetryMin": "重試次數必須至少為 1 次", + "httpMethod": "HTTP 方法", + "selectHttpMethod": "選擇 HTTP 方法", + "domainPickerSubdomainLabel": "子域名", + "domainPickerBaseDomainLabel": "根域名", + "domainPickerSearchDomains": "搜索域名...", + "domainPickerNoDomainsFound": "未找到域名", + "domainPickerLoadingDomains": "載入域名...", + "domainPickerSelectBaseDomain": "選擇根域名...", + "domainPickerNotAvailableForCname": "不適用於 CNAME 域", + "domainPickerEnterSubdomainOrLeaveBlank": "輸入子域名或留空以使用根域名。", + "domainPickerEnterSubdomainToSearch": "輸入一個子域名以搜索並從可用免費域名中選擇。", + "domainPickerFreeDomains": "免費域名", + "domainPickerSearchForAvailableDomains": "搜索可用域名", + "domainPickerNotWorkSelfHosted": "注意:自託管實例當前不提供免費的域名。", + "resourceDomain": "域名", + "resourceEditDomain": "編輯域名", + "siteName": "站點名稱", + "proxyPort": "埠", + "resourcesTableProxyResources": "代理資源", + "resourcesTableClientResources": "用戶端資源", + "resourcesTableNoProxyResourcesFound": "未找到代理資源。", + "resourcesTableNoInternalResourcesFound": "未找到內部資源。", + "resourcesTableDestination": "目標", + "resourcesTableTheseResourcesForUseWith": "這些資源供...使用", + "resourcesTableClients": "用戶端", + "resourcesTableAndOnlyAccessibleInternally": "且僅在與用戶端連接時可內部訪問。", + "editInternalResourceDialogEditClientResource": "編輯用戶端資源", + "editInternalResourceDialogUpdateResourceProperties": "更新 {resourceName} 的資源屬性和目標配置。", + "editInternalResourceDialogResourceProperties": "資源屬性", + "editInternalResourceDialogName": "名稱", + "editInternalResourceDialogProtocol": "協議", + "editInternalResourceDialogSitePort": "站點埠", + "editInternalResourceDialogTargetConfiguration": "目標配置", + "editInternalResourceDialogCancel": "取消", + "editInternalResourceDialogSaveResource": "保存資源", + "editInternalResourceDialogSuccess": "成功", + "editInternalResourceDialogInternalResourceUpdatedSuccessfully": "內部資源更新成功", + "editInternalResourceDialogError": "錯誤", + "editInternalResourceDialogFailedToUpdateInternalResource": "更新內部資源失敗", + "editInternalResourceDialogNameRequired": "名稱為必填項", + "editInternalResourceDialogNameMaxLength": "名稱長度必須小於 255 個字元", + "editInternalResourceDialogProxyPortMin": "代理埠必須至少為 1", + "editInternalResourceDialogProxyPortMax": "代理埠必須小於 65536", + "editInternalResourceDialogInvalidIPAddressFormat": "無效的 IP 位址格式", + "editInternalResourceDialogDestinationPortMin": "目標埠必須至少為 1", + "editInternalResourceDialogDestinationPortMax": "目標埠必須小於 65536", + "createInternalResourceDialogNoSitesAvailable": "暫無可用站點", + "createInternalResourceDialogNoSitesAvailableDescription": "您需要至少配置一個子網的 Newt 站點來創建內部資源。", + "createInternalResourceDialogClose": "關閉", + "createInternalResourceDialogCreateClientResource": "創建用戶端資源", + "createInternalResourceDialogCreateClientResourceDescription": "創建一個新資源,該資源將可供連接到所選站點的用戶端訪問。", + "createInternalResourceDialogResourceProperties": "資源屬性", + "createInternalResourceDialogName": "名稱", + "createInternalResourceDialogSite": "站點", + "createInternalResourceDialogSelectSite": "選擇站點...", + "createInternalResourceDialogSearchSites": "搜索站點...", + "createInternalResourceDialogNoSitesFound": "未找到站點。", + "createInternalResourceDialogProtocol": "協議", + "createInternalResourceDialogTcp": "TCP", + "createInternalResourceDialogUdp": "UDP", + "createInternalResourceDialogSitePort": "站點埠", + "createInternalResourceDialogSitePortDescription": "使用此埠在連接到用戶端時訪問站點上的資源。", + "createInternalResourceDialogTargetConfiguration": "目標配置", + "createInternalResourceDialogDestinationIPDescription": "站點網路上資源的 IP 或主機名地址。", + "createInternalResourceDialogDestinationPortDescription": "資源在目標 IP 上可訪問的埠。", + "createInternalResourceDialogCancel": "取消", + "createInternalResourceDialogCreateResource": "創建資源", + "createInternalResourceDialogSuccess": "成功", + "createInternalResourceDialogInternalResourceCreatedSuccessfully": "內部資源創建成功", + "createInternalResourceDialogError": "錯誤", + "createInternalResourceDialogFailedToCreateInternalResource": "創建內部資源失敗", + "createInternalResourceDialogNameRequired": "名稱為必填項", + "createInternalResourceDialogNameMaxLength": "名稱長度必須小於 255 個字元", + "createInternalResourceDialogPleaseSelectSite": "請選擇一個站點", + "createInternalResourceDialogProxyPortMin": "代理埠必須至少為 1", + "createInternalResourceDialogProxyPortMax": "代理埠必須小於 65536", + "createInternalResourceDialogInvalidIPAddressFormat": "無效的 IP 位址格式", + "createInternalResourceDialogDestinationPortMin": "目標埠必須至少為 1", + "createInternalResourceDialogDestinationPortMax": "目標埠必須小於 65536", + "siteConfiguration": "配置", + "siteAcceptClientConnections": "接受用戶端連接", + "siteAcceptClientConnectionsDescription": "允許其他設備透過此 Newt 實例使用用戶端作為閘道器連接。", + "siteAddress": "站點地址", + "siteAddressDescription": "指定主機的 IP 位址以供用戶端連接。這是 Pangolin 網路中站點的內部地址,供用戶端訪問。必須在 Org 子網內。", + "autoLoginExternalIdp": "自動使用外部 IDP 登錄", + "autoLoginExternalIdpDescription": "立即將用戶重定向到外部 IDP 進行身份驗證。", + "selectIdp": "選擇 IDP", + "selectIdpPlaceholder": "選擇一個 IDP...", + "selectIdpRequired": "在啟用自動登錄時,請選擇一個 IDP。", + "autoLoginTitle": "重定向中", + "autoLoginDescription": "正在將您重定向到外部身份提供商進行身份驗證。", + "autoLoginProcessing": "準備身份驗證...", + "autoLoginRedirecting": "重定向到登錄...", + "autoLoginError": "自動登錄錯誤", + "autoLoginErrorNoRedirectUrl": "未從身份提供商收到重定向 URL。", + "autoLoginErrorGeneratingUrl": "生成身份驗證 URL 失敗。", + "remoteExitNodeManageRemoteExitNodes": "遠程節點", + "remoteExitNodeDescription": "自我主機一個或多個遠程節點來擴展您的網路連接並減少對雲的依賴性", + "remoteExitNodes": "節點", + "searchRemoteExitNodes": "搜索節點...", + "remoteExitNodeAdd": "添加節點", + "remoteExitNodeErrorDelete": "刪除節點時出錯", + "remoteExitNodeQuestionRemove": "您確定要從組織中刪除該節點嗎?", + "remoteExitNodeMessageRemove": "一旦刪除,該節點將不再能夠訪問。", + "remoteExitNodeConfirmDelete": "確認刪除節點", + "remoteExitNodeDelete": "刪除節點", + "sidebarRemoteExitNodes": "遠程節點", + "remoteExitNodeCreate": { + "title": "創建節點", + "description": "創建一個新節點來擴展您的網路連接", + "viewAllButton": "查看所有節點", + "strategy": { + "title": "創建策略", + "description": "選擇此選項以手動配置您的節點或生成新憑據。", + "adopt": { + "title": "採納節點", + "description": "如果您已經擁有該節點的憑據,請選擇此項。" + }, + "generate": { + "title": "生成金鑰", + "description": "如果您想為節點生成新金鑰,請選擇此選項" + } + }, + "adopt": { + "title": "採納現有節點", + "description": "輸入您想要採用的現有節點的憑據", + "nodeIdLabel": "節點 ID", + "nodeIdDescription": "您想要採用的現有節點的 ID", + "secretLabel": "金鑰", + "secretDescription": "現有節點的秘密金鑰", + "submitButton": "採用節點" + }, + "generate": { + "title": "生成的憑據", + "description": "使用這些生成的憑據來配置您的節點", + "nodeIdTitle": "節點 ID", + "secretTitle": "金鑰", + "saveCredentialsTitle": "將憑據添加到配置中", + "saveCredentialsDescription": "將這些憑據添加到您的自託管 Pangolin 節點設定檔中以完成連接。", + "submitButton": "創建節點" + }, + "validation": { + "adoptRequired": "在通過現有節點時需要節點ID和金鑰" + }, + "errors": { + "loadDefaultsFailed": "無法載入預設值", + "defaultsNotLoaded": "預設值未載入", + "createFailed": "創建節點失敗" + }, + "success": { + "created": "節點創建成功" + } + }, + "remoteExitNodeSelection": "節點選擇", + "remoteExitNodeSelectionDescription": "為此本地站點選擇要路由流量的節點", + "remoteExitNodeRequired": "必須為本地站點選擇節點", + "noRemoteExitNodesAvailable": "無可用節點", + "noRemoteExitNodesAvailableDescription": "此組織沒有可用的節點。首先創建一個節點來使用本地站點。", + "exitNode": "出口節點", + "country": "國家", + "rulesMatchCountry": "當前基於源 IP", + "managedSelfHosted": { + "title": "託管自託管", + "description": "更可靠、維護成本更低的自架 Pangolin 伺服器,並附帶額外的附加功能", + "introTitle": "託管式自架 Pangolin", + "introDescription": "這是一種部署選擇,為那些希望簡潔和額外可靠的人設計,同時仍然保持他們的數據的私密性和自我託管性。", + "introDetail": "通過此選項,您仍然運行您自己的 Pangolin 節點 — — 您的隧道、SSL 終止,並且流量在您的伺服器上保持所有狀態。 不同之處在於,管理和監測是通過我們的雲層儀錶板進行的,該儀錶板開啟了一些好處:", + "benefitSimplerOperations": { + "title": "簡單的操作", + "description": "無需運行您自己的郵件伺服器或設置複雜的警報。您將從方框中獲得健康檢查和下限提醒。" + }, + "benefitAutomaticUpdates": { + "title": "自動更新", + "description": "雲儀錶板快速演化,所以您可以獲得新的功能和錯誤修復,而不必每次手動拉取新的容器。" + }, + "benefitLessMaintenance": { + "title": "減少維護時間", + "description": "沒有要管理的資料庫遷移、備份或額外的基礎設施。我們在雲端處理這個問題。" + }, + "benefitCloudFailover": { + "title": "雲端故障轉移", + "description": "如果您的節點發生故障,您的隧道可以暫時故障轉移到我們的雲端存取點,直到您將節點恢復線上狀態。" + }, + "benefitHighAvailability": { + "title": "高可用率(PoPs)", + "description": "您還可以將多個節點添加到您的帳戶中以獲取冗餘和更好的性能。" + }, + "benefitFutureEnhancements": { + "title": "將來的改進", + "description": "我們正在計劃添加更多的分析、警報和管理工具,使你的部署更加有力。" + }, + "docsAlert": { + "text": "在我們中更多地了解管理下的自託管選項", + "documentation": "文件" + }, + "convertButton": "將此節點轉換為管理自託管的" + }, + "internationaldomaindetected": "檢測到國際域", + "willbestoredas": "儲存為:", + "roleMappingDescription": "確定當用戶啟用自動配送時如何分配他們的角色。", + "selectRole": "選擇角色", + "roleMappingExpression": "表達式", + "selectRolePlaceholder": "選擇角色", + "selectRoleDescription": "選擇一個角色,從此身份提供商分配給所有用戶", + "roleMappingExpressionDescription": "輸入一個 JMESPath 表達式來從 ID 令牌提取角色資訊", + "idpTenantIdRequired": "租戶 ID 是必需的", + "invalidValue": "無效的值", + "idpTypeLabel": "身份提供者類型", + "roleMappingExpressionPlaceholder": "例如: contains(group, 'admin' &'Admin' || 'Member'", + "idpGoogleConfiguration": "Google 配置", + "idpGoogleConfigurationDescription": "配置您的 Google OAuth2 憑據", + "idpGoogleClientIdDescription": "您的 Google OAuth2 用戶端 ID", + "idpGoogleClientSecretDescription": "您的 Google OAuth2 用戶端金鑰", + "idpAzureConfiguration": "Azure Entra ID 配置", + "idpAzureConfigurationDescription": "配置您的 Azure Entra ID OAuth2 憑據", + "idpTenantId": "租戶 ID", + "idpTenantIdPlaceholder": "您的租戶 ID", + "idpAzureTenantIdDescription": "您的 Azure 租戶ID (在 Azure Active Directory 概覽中發現)", + "idpAzureClientIdDescription": "您的 Azure 應用程式註冊用戶端 ID", + "idpAzureClientSecretDescription": "您的 Azure 應用程式註冊用戶端金鑰", + "idpGoogleTitle": "Google", + "idpGoogleAlt": "Google", + "idpAzureTitle": "Azure Entra ID", + "idpAzureAlt": "Azure", + "idpGoogleConfigurationTitle": "Google 配置", + "idpAzureConfigurationTitle": "Azure Entra ID 配置", + "idpTenantIdLabel": "租戶 ID", + "idpAzureClientIdDescription2": "您的 Azure 應用程式註冊用戶端 ID", + "idpAzureClientSecretDescription2": "您的 Azure 應用程式註冊用戶端金鑰", + "idpGoogleDescription": "Google OAuth2/OIDC 提供商", + "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", + "subnet": "子網", + "subnetDescription": "此組織網路配置的子網。", + "authPage": "認證頁面", + "authPageDescription": "配置您的組織認證頁面", + "authPageDomain": "認證頁面域", + "noDomainSet": "沒有域設置", + "changeDomain": "更改域", + "selectDomain": "選擇域", + "restartCertificate": "重新啟動證書", + "editAuthPageDomain": "編輯認證頁面域", + "setAuthPageDomain": "設置認證頁面域", + "failedToFetchCertificate": "獲取證書失敗", + "failedToRestartCertificate": "重新啟動證書失敗", + "addDomainToEnableCustomAuthPages": "為您的組織添加域名以啟用自訂認證頁面", + "selectDomainForOrgAuthPage": "選擇組織認證頁面的域", + "domainPickerProvidedDomain": "提供的域", + "domainPickerFreeProvidedDomain": "免費提供的域", + "domainPickerVerified": "已驗證", + "domainPickerUnverified": "未驗證", + "domainPickerInvalidSubdomainStructure": "此子域包含無效的字元或結構。當您保存時,它將被自動清除。", + "domainPickerError": "錯誤", + "domainPickerErrorLoadDomains": "載入組織域名失敗", + "domainPickerErrorCheckAvailability": "檢查域可用性失敗", + "domainPickerInvalidSubdomain": "無效的子域", + "domainPickerInvalidSubdomainRemoved": "輸入 \"{sub}\" 已被移除,因為其無效。", + "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" 無法為 {domain} 變為有效。", + "domainPickerSubdomainSanitized": "子域已淨化", + "domainPickerSubdomainCorrected": "\"{sub}\" 已被更正為 \"{sanitized}\"", + "orgAuthSignInTitle": "登錄到您的組織", + "orgAuthChooseIdpDescription": "選擇您的身份提供商以繼續", + "orgAuthNoIdpConfigured": "此機構沒有配置任何身份提供者。您可以使用您的 Pangolin 身份登錄。", + "orgAuthSignInWithPangolin": "使用 Pangolin 登錄", + "subscriptionRequiredToUse": "需要訂閱才能使用此功能。", + "idpDisabled": "身份提供者已禁用。", + "orgAuthPageDisabled": "組織認證頁面已禁用。", + "domainRestartedDescription": "域驗證重新啟動成功", + "resourceAddEntrypointsEditFile": "編輯文件:config/traefik/traefik_config.yml", + "resourceExposePortsEditFile": "編輯文件:docker-compose.yml", + "emailVerificationRequired": "需要電子郵件驗證。 請通過 {dashboardUrl}/auth/login 再次登錄以完成此步驟。 然後,回到這裡。", + "twoFactorSetupRequired": "需要設置雙因素身份驗證。 請通過 {dashboardUrl}/auth/login 再次登錄以完成此步驟。 然後,回到這裡。", + "additionalSecurityRequired": "需要額外的安全", + "organizationRequiresAdditionalSteps": "這個組織需要額外的安全步驟才能訪問資源。", + "completeTheseSteps": "完成這些步驟", + "enableTwoFactorAuthentication": "啟用兩步驗證", + "completeSecuritySteps": "完成安全步驟", + "securitySettings": "安全設定", + "securitySettingsDescription": "配置您組織的安全策略", + "requireTwoFactorForAllUsers": "所有用戶需要兩步驗證", + "requireTwoFactorDescription": "如果啟用,此組織的所有內部用戶必須啟用雙重身份驗證才能訪問組織。", + "requireTwoFactorDisabledDescription": "此功能需要有效的許可證(企業)或活動訂閱(SaS)", + "requireTwoFactorCannotEnableDescription": "您必須為您的帳戶啟用雙重身份驗證才能對所有用戶", + "maxSessionLength": "最大會話長度", + "maxSessionLengthDescription": "設置用戶會話的最長時間。此後用戶需要重新驗證。", + "maxSessionLengthDisabledDescription": "此功能需要有效的許可證(企業)或活動訂閱(SaS)", + "selectSessionLength": "選擇會話長度", + "unenforced": "未執行", + "1Hour": "1 小時", + "3Hours": "3 小時", + "6Hours": "6 小時", + "12Hours": "12 小時", + "1DaySession": "1天", + "3Days": "3 天", + "7Days": "7 天", + "14Days": "14 天", + "30DaysSession": "30 天", + "90DaysSession": "90 天", + "180DaysSession": "180天", + "passwordExpiryDays": "密碼過期", + "editPasswordExpiryDescription": "設置用戶需要更改密碼之前的天數。", + "selectPasswordExpiry": "選擇密碼過期", + "30Days": "30 天", + "1Day": "1天", + "60Days": "60天", + "90Days": "90 天", + "180Days": "180天", + "1Year": "1 年", + "subscriptionBadge": "需要訂閱", + "securityPolicyChangeWarning": "安全政策更改警告", + "securityPolicyChangeDescription": "您即將更改安全政策設置。保存後,您可能需要重新認證以遵守這些政策更新。 所有不符合要求的用戶也需要重新認證。", + "securityPolicyChangeConfirmMessage": "我確認", + "securityPolicyChangeWarningText": "這將影響組織中的所有用戶", + "authPageErrorUpdateMessage": "更新身份驗證頁面設置時出錯", + "authPageErrorUpdate": "無法更新認證頁面", + "authPageUpdated": "身份驗證頁面更新成功", + "healthCheckNotAvailable": "本地的", + "rewritePath": "重寫路徑", + "rewritePathDescription": "在轉發到目標之前,可以選擇重寫路徑。", + "continueToApplication": "繼續應用", + "checkingInvite": "正在檢查邀請", + "setResourceHeaderAuth": "設置 ResourceHeaderAuth", + "resourceHeaderAuthRemove": "移除 Header 身份驗證", + "resourceHeaderAuthRemoveDescription": "已成功刪除 Header 身份驗證。", + "resourceErrorHeaderAuthRemove": "刪除 Header 身份驗證失敗", + "resourceErrorHeaderAuthRemoveDescription": "無法刪除資源的 Header 身份驗證。", + "resourceHeaderAuthProtectionEnabled": "Header 認證已啟用", + "resourceHeaderAuthProtectionDisabled": "Header 身份驗證已禁用", + "headerAuthRemove": "刪除 Header 認證", + "headerAuthAdd": "添加頁首認證", + "resourceErrorHeaderAuthSetup": "設置頁首認證失敗", + "resourceErrorHeaderAuthSetupDescription": "無法設置資源的 Header 身份驗證。", + "resourceHeaderAuthSetup": "Header 認證設置成功", + "resourceHeaderAuthSetupDescription": "Header 認證已成功設置。", + "resourceHeaderAuthSetupTitle": "設置 Header 身份驗證", + "resourceHeaderAuthSetupTitleDescription": "使用 HTTP 頭身份驗證來設置基本身份驗證資訊(使用者名稱和密碼)。使用 https://username:password@resource.example.com 訪問它", + "resourceHeaderAuthSubmit": "設置 Header 身份驗證", + "actionSetResourceHeaderAuth": "設置 Header 身份驗證", + "enterpriseEdition": "企業版", + "unlicensed": "未授權", + "beta": "測試版", + "manageClients": "管理用戶端", + "manageClientsDescription": "用戶端是可以連接到您的站點的設備", + "licenseTableValidUntil": "有效期至", + "saasLicenseKeysSettingsTitle": "企業許可證", + "saasLicenseKeysSettingsDescription": "為自我託管的 Pangolin 實例生成和管理企業許可證金鑰", + "sidebarEnterpriseLicenses": "許可協議", + "generateLicenseKey": "生成許可證金鑰", + "generateLicenseKeyForm": { + "validation": { + "emailRequired": "請輸入一個有效的電子郵件地址", + "useCaseTypeRequired": "請選擇一個使用的案例類型", + "firstNameRequired": "必填名", + "lastNameRequired": "姓氏是必填項", + "primaryUseRequired": "請描述您的主要使用", + "jobTitleRequiredBusiness": "企業使用必須有職位頭銜。", + "industryRequiredBusiness": "商業使用需要工業", + "stateProvinceRegionRequired": "州/省/地區是必填項", + "postalZipCodeRequired": "郵政編碼是必需的", + "companyNameRequiredBusiness": "企業使用需要公司名稱", + "countryOfResidenceRequiredBusiness": "商業使用必須是居住國", + "countryRequiredPersonal": "國家需要個人使用", + "agreeToTermsRequired": "您必須同意條款", + "complianceConfirmationRequired": "您必須確認遵守 Fossorial Commercial License" + }, + "useCaseOptions": { + "personal": { + "title": "個人使用", + "description": "個人非商業用途,如學習、個人項目或實驗。" + }, + "business": { + "title": "商業使用", + "description": "供組織、公司或商業或創收活動使用。" + } + }, + "steps": { + "emailLicenseType": { + "title": "電子郵件和許可證類型", + "description": "輸入您的電子郵件並選擇您的許可證類型" + }, + "personalInformation": { + "title": "個人資訊", + "description": "告訴我們自己的資訊" + }, + "contactInformation": { + "title": "聯繫資訊", + "description": "您的聯繫資訊" + }, + "termsGenerate": { + "title": "條款並生成", + "description": "審閱並接受條款生成您的許可證" + } + }, + "alerts": { + "commercialUseDisclosure": { + "title": "使用情況披露", + "description": "選擇能準確反映您預定用途的許可等級。 個人許可證允許對個人、非商業性或小型商業活動免費使用軟體,年收入毛額不到 100,000 美元。 超出這些限度的任何用途,包括在企業、組織內的用途。 或其他創收環境——需要有效的企業許可證和支付適用的許可證費用。 所有用戶,不論是個人還是企業,都必須遵守寄養商業許可證條款。" + }, + "trialPeriodInformation": { + "title": "試用期資訊", + "description": "此許可證金鑰使企業特性能夠持續 7 天的評價。 在評估期過後繼續訪問付費功能需要在有效的個人或企業許可證下啟用。對於企業許可證,請聯絡 Sales@pangolin.net。" + } + }, + "form": { + "useCaseQuestion": "您是否正在使用 Pangolin 進行個人或商業使用?", + "firstName": "名字", + "lastName": "名字", + "jobTitle": "工作頭銜:", + "primaryUseQuestion": "您主要計劃使用 Pangolin 嗎?", + "industryQuestion": "您的行業是什麼?", + "prospectiveUsersQuestion": "您期望有多少預期用戶?", + "prospectiveSitesQuestion": "您期望有多少站點(隧道)?", + "companyName": "公司名稱", + "countryOfResidence": "居住國", + "stateProvinceRegion": "州/省/地區", + "postalZipCode": "郵政編碼", + "companyWebsite": "公司網站", + "companyPhoneNumber": "公司電話號碼", + "country": "國家", + "phoneNumberOptional": "電話號碼 (可選)", + "complianceConfirmation": "我確認我提供的資料是準確的,我遵守了寄養商業許可證。 報告不準確的資訊或錯誤的產品使用是違反許可證的行為,可能導致您的金鑰被撤銷。" + }, + "buttons": { + "close": "關閉", + "previous": "上一個", + "next": "下一個", + "generateLicenseKey": "生成許可證金鑰" + }, + "toasts": { + "success": { + "title": "許可證金鑰生成成功", + "description": "您的許可證金鑰已經生成並準備使用。" + }, + "error": { + "title": "生成許可證金鑰失敗", + "description": "生成許可證金鑰時出錯。" + } + } + }, + "priority": "優先權", + "priorityDescription": "先評估更高優先度線路。優先度 = 100 意味著自動排序(系統決定). 使用另一個數字強制執行手動優先度。", + "instanceName": "實例名稱", + "pathMatchModalTitle": "配置路徑匹配", + "pathMatchModalDescription": "根據傳入請求的路徑設置匹配方式。", + "pathMatchType": "匹配類型", + "pathMatchPrefix": "前綴", + "pathMatchExact": "精準的", + "pathMatchRegex": "正則表達式", + "pathMatchValue": "路徑值", + "clear": "清空", + "saveChanges": "保存更改", + "pathMatchRegexPlaceholder": "^/api/.*", + "pathMatchDefaultPlaceholder": "/路徑", + "pathMatchPrefixHelp": "範例: /api 匹配/api, /api/users 等。", + "pathMatchExactHelp": "範例:/api 匹配僅限/api", + "pathMatchRegexHelp": "例如:^/api/.* 匹配/api/why", + "pathRewriteModalTitle": "配置路徑重寫", + "pathRewriteModalDescription": "在轉發到目標之前變換匹配的路徑。", + "pathRewriteType": "重寫類型", + "pathRewritePrefixOption": "前綴 - 替換前綴", + "pathRewriteExactOption": "精確-替換整個路徑", + "pathRewriteRegexOption": "正則表達式 - 替換模式", + "pathRewriteStripPrefixOption": "刪除前綴 - 刪除前綴", + "pathRewriteValue": "重寫值", + "pathRewriteRegexPlaceholder": "/new/$1", + "pathRewriteDefaultPlaceholder": "/new-path", + "pathRewritePrefixHelp": "用此值替換匹配的前綴", + "pathRewriteExactHelp": "當路徑匹配時用此值替換整個路徑", + "pathRewriteRegexHelp": "使用抓取組,如$1,$2來替換", + "pathRewriteStripPrefixHelp": "留空以脫離前綴或提供新的前綴", + "pathRewritePrefix": "前綴", + "pathRewriteExact": "精準的", + "pathRewriteRegex": "正則表達式", + "pathRewriteStrip": "帶狀圖", + "pathRewriteStripLabel": "條形圖", + "sidebarEnableEnterpriseLicense": "啟用企業許可證", + "cannotbeUndone": "無法撤消。", + "toConfirm": "確認", + "deleteClientQuestion": "您確定要從站點和組織中刪除客戶嗎?", + "clientMessageRemove": "一旦刪除,用戶端將無法連接到站點。", + "sidebarLogs": "日誌", + "request": "請求", + "logs": "日誌", + "logsSettingsDescription": "監視從此 orginization 中收集的日誌", + "searchLogs": "搜索日誌...", + "action": "行動", + "actor": "執行者", + "timestamp": "時間戳", + "accessLogs": "訪問日誌", + "exportCsv": "導出 CSV", + "actorId": "執行者 ID", + "allowedByRule": "根據規則允許", + "allowedNoAuth": "無認證", + "validAccessToken": "有效訪問令牌", + "validHeaderAuth": "有效的 Header 身份驗證", + "validPincode": "有效的 Pincode", + "validPassword": "有效密碼", + "validEmail": "有效的 email", + "validSSO": "有效的 SSO", + "resourceBlocked": "資源被阻止", + "droppedByRule": "被規則刪除", + "noSessions": "無會話", + "temporaryRequestToken": "臨時請求令牌", + "noMoreAuthMethods": "無有效授權", + "ip": "IP", + "reason": "原因", + "requestLogs": "請求日誌", + "host": "主機", + "location": "地點", + "actionLogs": "操作日誌", + "sidebarLogsRequest": "請求日誌", + "sidebarLogsAccess": "訪問日誌", + "sidebarLogsAction": "操作日誌", + "logRetention": "日誌保留", + "logRetentionDescription": "管理不同類型的日誌為這個機構保留多長時間或禁用這些日誌", + "requestLogsDescription": "查看此機構資源的詳細請求日誌", + "logRetentionRequestLabel": "請求日誌保留", + "logRetentionRequestDescription": "保留請求日誌的時間", + "logRetentionAccessLabel": "訪問日誌保留", + "logRetentionAccessDescription": "保留訪問日誌的時間", + "logRetentionActionLabel": "動作日誌保留", + "logRetentionActionDescription": "保留操作日誌的時間", + "logRetentionDisabled": "已禁用", + "logRetention3Days": "3 天", + "logRetention7Days": "7 天", + "logRetention14Days": "14 天", + "logRetention30Days": "30 天", + "logRetention90Days": "90 天", + "logRetentionForever": "永遠的", + "actionLogsDescription": "查看此機構執行的操作歷史", + "accessLogsDescription": "查看此機構資源的訪問認證請求", + "licenseRequiredToUse": "需要企業許可證才能使用此功能。", + "certResolver": "證書解決器", + "certResolverDescription": "選擇用於此資源的證書解析器。", + "selectCertResolver": "選擇證書解析", + "enterCustomResolver": "輸入自訂解析器", + "preferWildcardCert": "喜歡通配符證書", + "unverified": "未驗證", + "domainSetting": "域設置", + "domainSettingDescription": "配置您的域的設置", + "preferWildcardCertDescription": "嘗試生成通配符證書(需要正確配置的證書解析器)。", + "recordName": "記錄名稱", + "auto": "自動操作", + "TTL": "TTL", + "howToAddRecords": "如何添加記錄", + "dnsRecord": "DNS 記錄", + "required": "必填", + "domainSettingsUpdated": "域設置更新成功", + "orgOrDomainIdMissing": "缺少機構或域 ID", + "loadingDNSRecords": "正在載入 DNS 記錄...", + "olmUpdateAvailableInfo": "有最新版本的 Olm 可用。請更新到最新版本以獲取最佳體驗。", + "client": "用戶端:", + "proxyProtocol": "代理協議設置", + "proxyProtocolDescription": "配置代理協議以保留 TCP/UDP 服務的用戶端 IP 位址。", + "enableProxyProtocol": "啟用代理協議", + "proxyProtocolInfo": "為 TCP/UDP 後端保留用戶端 IP 位址", + "proxyProtocolVersion": "代理協議版本", + "version1": " 版本 1 (推薦)", + "version2": "版本 2", + "versionDescription": "版本 1 是基於文本和廣泛支持的版本。版本 2 是二進制和更有效率但不那麼相容。", + "warning": "警告", + "proxyProtocolWarning": "您的後端應用程式必須配置為接受代理協議連接。如果您的後端不支持代理協議,啟用這將會中斷所有連接。 請務必從 Traefik 配置您的後端到信任代理協議標題。", + "restarting": "正在重啟...", + "manual": "手動模式", + "messageSupport": "消息支持", + "supportNotAvailableTitle": "支持不可用", + "supportNotAvailableDescription": "支持現在不可用。您可以發送電子郵件到 support@pangolin.net。", + "supportRequestSentTitle": "支持請求已發送", + "supportRequestSentDescription": "您的消息已成功發送。", + "supportRequestFailedTitle": "發送請求失敗", + "supportRequestFailedDescription": "發送您的支持請求時出錯。", + "supportSubjectRequired": "主題是必填項", + "supportSubjectMaxLength": "主題必須是 255 個或更少的字元", + "supportMessageRequired": "消息是必填項", + "supportReplyTo": "回復給", + "supportSubject": "議題", + "supportSubjectPlaceholder": "輸入主題", + "supportMessage": "留言", + "supportMessagePlaceholder": "輸入您的消息", + "supportSending": "正在發送...", + "supportSend": "發送", + "supportMessageSent": "消息已發送!", + "supportWillContact": "我們很快就會聯繫起來!", + "selectLogRetention": "選擇保留日誌", + "showColumns": "顯示列", + "hideColumns": "隱藏列", + "columnVisibility": "列可見性", + "toggleColumn": "切換 {columnName} 列", + "allColumns": "全部列", + "defaultColumns": "默認列", + "customizeView": "自訂視圖", + "viewOptions": "查看選項", + "selectAll": "選擇所有", + "selectNone": "沒有選擇", + "selectedResources": "選定的資源", + "enableSelected": "啟用選中的", + "disableSelected": "禁用選中的", + "checkSelectedStatus": "檢查選中的狀態" +} \ No newline at end of file diff --git a/next.config.ts b/next.config.ts index a211a701a..05ed8e620 100644 --- a/next.config.ts +++ b/next.config.ts @@ -7,6 +7,9 @@ const nextConfig: NextConfig = { eslint: { ignoreDuringBuilds: true }, + experimental: { + reactCompiler: true + }, output: "standalone" }; diff --git a/package-lock.json b/package-lock.json index 57aa95dab..0f8f480cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,11 @@ "version": "0.0.0", "license": "SEE LICENSE IN LICENSE AND README.md", "dependencies": { - "@asteasolutions/zod-to-openapi": "8.1.0", - "@aws-sdk/client-s3": "3.922.0", - "@faker-js/faker": "^10.1.0", - "@headlessui/react": "^2.2.9", + "@asteasolutions/zod-to-openapi": "8.2.0", + "@aws-sdk/client-s3": "3.948.0", + "@faker-js/faker": "10.1.0", + "@headlessui/react": "2.2.9", "@hookform/resolvers": "5.2.2", - "@libsql/client": "^0.15.15", "@monaco-editor/react": "^4.7.0", "@node-rs/argon2": "^2.0.2", "@oslojs/crypto": "1.0.1", @@ -27,88 +26,93 @@ "@radix-ui/react-icons": "1.3.2", "@radix-ui/react-label": "2.1.8", "@radix-ui/react-popover": "1.1.15", - "@radix-ui/react-progress": "^1.1.8", + "@radix-ui/react-progress": "1.1.8", "@radix-ui/react-radio-group": "1.3.8", - "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-scroll-area": "1.2.10", "@radix-ui/react-select": "2.2.6", "@radix-ui/react-separator": "1.1.8", "@radix-ui/react-slot": "1.2.4", "@radix-ui/react-switch": "1.2.6", "@radix-ui/react-tabs": "1.1.13", "@radix-ui/react-toast": "1.2.15", - "@radix-ui/react-tooltip": "^1.2.8", - "@react-email/components": "0.5.7", - "@react-email/render": "^1.3.2", - "@react-email/tailwind": "1.2.2", - "@simplewebauthn/browser": "^13.2.2", - "@simplewebauthn/server": "^13.2.2", - "@tailwindcss/forms": "^0.5.10", - "@tanstack/react-query": "^5.90.6", + "@radix-ui/react-tooltip": "1.2.8", + "@react-email/components": "1.0.1", + "@react-email/render": "2.0.0", + "@react-email/tailwind": "2.0.1", + "@simplewebauthn/browser": "13.2.2", + "@simplewebauthn/server": "13.2.2", + "@tailwindcss/forms": "0.5.10", + "@tanstack/react-query": "5.90.12", "@tanstack/react-table": "8.21.3", "arctic": "^3.7.0", "axios": "^1.13.2", + "better-sqlite3": "11.7.0", "canvas-confetti": "1.9.4", - "class-variance-authority": "^0.7.1", + "class-variance-authority": "0.7.1", "clsx": "2.1.1", "cmdk": "1.1.1", - "cookie": "^1.0.2", + "cookie": "1.1.1", "cookie-parser": "1.4.7", - "cookies": "^0.9.1", + "cookies": "0.9.1", "cors": "2.8.5", - "crypto-js": "^4.2.0", + "crypto-js": "4.2.0", + "d3": "7.9.0", "date-fns": "4.1.0", - "drizzle-orm": "0.44.7", + "drizzle-orm": "0.45.0", "eslint": "9.39.1", - "eslint-config-next": "16.0.3", - "express": "5.1.0", + "eslint-config-next": "16.0.8", + "express": "5.2.1", "express-rate-limit": "8.2.1", - "glob": "11.0.3", + "glob": "13.0.0", "helmet": "8.1.0", - "http-errors": "2.0.0", - "i": "^0.3.7", + "http-errors": "2.0.1", + "i": "0.3.7", "input-otp": "1.4.2", "ioredis": "5.8.2", - "jmespath": "^0.16.0", + "jmespath": "0.16.0", "js-yaml": "4.1.1", - "jsonwebtoken": "^9.0.2", - "lucide-react": "^0.552.0", + "jsonwebtoken": "9.0.3", + "lucide-react": "0.559.0", "maxmind": "5.0.1", "moment": "2.30.1", - "next": "15.5.6", - "next-intl": "^4.4.0", + "next": "15.5.9", + "next-intl": "4.5.8", "next-themes": "0.4.6", - "nextjs-toploader": "^3.9.17", + "nextjs-toploader": "3.9.17", "node-cache": "5.1.2", "node-fetch": "3.3.2", - "nodemailer": "7.0.10", - "npm": "^11.6.2", - "nprogress": "^0.2.0", + "nodemailer": "7.0.11", + "npm": "11.7.0", + "nprogress": "0.2.0", "oslo": "1.2.1", - "pg": "^8.16.2", - "posthog-node": "^5.11.2", + "pg": "8.16.3", + "posthog-node": "5.17.2", "qrcode.react": "4.2.0", - "react": "19.2.0", - "react-day-picker": "9.11.1", - "react-dom": "19.2.0", - "react-easy-sort": "^1.8.0", - "react-hook-form": "7.66.0", - "react-icons": "^5.5.0", + "react": "19.2.3", + "react-day-picker": "9.12.0", + "react-dom": "19.2.3", + "react-easy-sort": "1.8.0", + "react-hook-form": "7.68.0", + "react-icons": "5.5.0", "rebuild": "0.1.2", - "reodotdev": "^1.0.0", - "resend": "^6.4.2", - "semver": "^7.7.3", - "stripe": "18.2.1", - "swagger-ui-express": "^5.0.1", - "tailwind-merge": "3.3.1", - "tw-animate-css": "^1.3.8", - "uuid": "^13.0.0", + "recharts": "2.15.4", + "reodotdev": "1.0.0", + "resend": "6.6.0", + "semver": "7.7.3", + "stripe": "20.0.0", + "swagger-ui-express": "5.0.1", + "tailwind-merge": "3.4.0", + "topojson-client": "3.1.0", + "tw-animate-css": "1.4.0", + "uuid": "13.0.0", "vaul": "1.1.2", - "winston": "3.18.3", + "visionscarto-world-atlas": "1.0.0", + "winston": "3.19.0", "winston-daily-rotate-file": "5.0.0", "ws": "8.18.3", - "yaml": "^2.8.1", + "yaml": "2.8.2", "yargs": "18.0.0", - "zod": "4.1.12", + "zod": "4.1.13", "zod-validation-error": "5.0.0" }, "devDependencies": { @@ -117,34 +121,39 @@ "@react-email/preview-server": "4.3.2", "@tailwindcss/postcss": "^4.1.17", "@tanstack/react-query-devtools": "^5.90.2", + "@types/better-sqlite3": "7.6.12", "@types/cookie-parser": "1.4.10", "@types/cors": "2.8.19", - "@types/crypto-js": "^4.2.2", - "@types/express": "5.0.5", - "@types/express-session": "^1.18.2", - "@types/jmespath": "^0.15.2", + "@types/crypto-js": "4.2.2", + "@types/d3": "7.4.3", + "@types/express": "5.0.6", + "@types/express-session": "1.18.2", + "@types/jmespath": "0.15.2", "@types/js-yaml": "4.0.9", - "@types/jsonwebtoken": "^9.0.10", - "@types/node": "24.10.1", - "@types/nodemailer": "7.0.3", - "@types/nprogress": "^0.2.3", - "@types/pg": "8.15.6", - "@types/react": "19.2.2", - "@types/react-dom": "19.2.2", - "@types/semver": "^7.7.1", - "@types/swagger-ui-express": "^4.1.8", + "@types/jsonwebtoken": "9.0.10", + "@types/node": "24.10.2", + "@types/nodemailer": "7.0.4", + "@types/nprogress": "0.2.3", + "@types/pg": "8.16.0", + "@types/react": "19.2.7", + "@types/react-dom": "19.2.3", + "@types/semver": "7.7.1", + "@types/swagger-ui-express": "4.1.8", + "@types/topojson-client": "3.1.5", "@types/ws": "8.18.1", - "@types/yargs": "17.0.34", - "drizzle-kit": "0.31.6", - "esbuild": "0.27.0", - "esbuild-node-externals": "1.19.1", - "postcss": "^8", - "react-email": "4.3.2", - "tailwindcss": "^4.1.4", + "@types/yargs": "17.0.35", + "babel-plugin-react-compiler": "1.0.0", + "drizzle-kit": "0.31.8", + "esbuild": "0.27.1", + "esbuild-node-externals": "1.20.1", + "postcss": "8.5.6", + "prettier": "3.7.4", + "react-email": "5.0.7", + "tailwindcss": "4.1.17", "tsc-alias": "1.8.16", - "tsx": "4.20.6", - "typescript": "^5", - "typescript-eslint": "^8.46.3" + "tsx": "4.21.0", + "typescript": "5.9.3", + "typescript-eslint": "8.49.0" } }, "node_modules/@alloc/quick-lru": { @@ -174,9 +183,9 @@ } }, "node_modules/@asteasolutions/zod-to-openapi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@asteasolutions/zod-to-openapi/-/zod-to-openapi-8.1.0.tgz", - "integrity": "sha512-tQFxVs05J/6QXXqIzj6rTRk3nj1HFs4pe+uThwE95jL5II2JfpVXkK+CqkO7aT0Do5AYqO6LDrKpleLUFXgY+g==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@asteasolutions/zod-to-openapi/-/zod-to-openapi-8.2.0.tgz", + "integrity": "sha512-u05zNUirlukJAf9oEHmxSF31L1XQhz9XdpVILt7+xhrz65oQqBpiOWFkGvRWL0IpjOUJ878idKoNmYPxrFnkeg==", "license": "MIT", "dependencies": { "openapi3-ts": "^4.1.2" @@ -388,168 +397,113 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.922.0.tgz", - "integrity": "sha512-SZRaZUUAHCWfEyBf4SRSPd29ko4uFoJpfd0E/w1meE68XhFB52FTtz/71UqYcwqZmN+s7oUNFFZT+DE/dnQSEA==", + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.948.0.tgz", + "integrity": "sha512-uvEjds8aYA9SzhBS8RKDtsDUhNV9VhqKiHTcmvhM7gJO92q0WTn8/QeFTdNyLc6RxpiDyz+uBxS7PcdNiZzqfA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.922.0", - "@aws-sdk/credential-provider-node": "3.922.0", - "@aws-sdk/middleware-bucket-endpoint": "3.922.0", - "@aws-sdk/middleware-expect-continue": "3.922.0", - "@aws-sdk/middleware-flexible-checksums": "3.922.0", - "@aws-sdk/middleware-host-header": "3.922.0", - "@aws-sdk/middleware-location-constraint": "3.922.0", - "@aws-sdk/middleware-logger": "3.922.0", - "@aws-sdk/middleware-recursion-detection": "3.922.0", - "@aws-sdk/middleware-sdk-s3": "3.922.0", - "@aws-sdk/middleware-ssec": "3.922.0", - "@aws-sdk/middleware-user-agent": "3.922.0", - "@aws-sdk/region-config-resolver": "3.922.0", - "@aws-sdk/signature-v4-multi-region": "3.922.0", - "@aws-sdk/types": "3.922.0", - "@aws-sdk/util-endpoints": "3.922.0", - "@aws-sdk/util-user-agent-browser": "3.922.0", - "@aws-sdk/util-user-agent-node": "3.922.0", - "@aws-sdk/xml-builder": "3.921.0", - "@smithy/config-resolver": "^4.4.1", - "@smithy/core": "^3.17.2", - "@smithy/eventstream-serde-browser": "^4.2.4", - "@smithy/eventstream-serde-config-resolver": "^4.3.4", - "@smithy/eventstream-serde-node": "^4.2.4", - "@smithy/fetch-http-handler": "^5.3.5", - "@smithy/hash-blob-browser": "^4.2.5", - "@smithy/hash-node": "^4.2.4", - "@smithy/hash-stream-node": "^4.2.4", - "@smithy/invalid-dependency": "^4.2.4", - "@smithy/md5-js": "^4.2.4", - "@smithy/middleware-content-length": "^4.2.4", - "@smithy/middleware-endpoint": "^4.3.6", - "@smithy/middleware-retry": "^4.4.6", - "@smithy/middleware-serde": "^4.2.4", - "@smithy/middleware-stack": "^4.2.4", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/node-http-handler": "^4.4.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/smithy-client": "^4.9.2", - "@smithy/types": "^4.8.1", - "@smithy/url-parser": "^4.2.4", - "@smithy/util-base64": "^4.3.0", - "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.5", - "@smithy/util-defaults-mode-node": "^4.2.7", - "@smithy/util-endpoints": "^3.2.4", - "@smithy/util-middleware": "^4.2.4", - "@smithy/util-retry": "^4.2.4", - "@smithy/util-stream": "^4.5.5", - "@smithy/util-utf8": "^4.2.0", - "@smithy/util-waiter": "^4.2.4", - "@smithy/uuid": "^1.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sesv2": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sesv2/-/client-sesv2-3.910.0.tgz", - "integrity": "sha512-YKCXrzbEhplwsvjAnMKUB9lAfawFHMz7tPLL3dCnKQYeZOQqsYiUUPjkiB2Vq8uV+ALZqJ2FCph07pW7XZHqjg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.910.0", - "@aws-sdk/credential-provider-node": "3.910.0", - "@aws-sdk/middleware-host-header": "3.910.0", - "@aws-sdk/middleware-logger": "3.910.0", - "@aws-sdk/middleware-recursion-detection": "3.910.0", - "@aws-sdk/middleware-user-agent": "3.910.0", - "@aws-sdk/region-config-resolver": "3.910.0", - "@aws-sdk/signature-v4-multi-region": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@aws-sdk/util-endpoints": "3.910.0", - "@aws-sdk/util-user-agent-browser": "3.910.0", - "@aws-sdk/util-user-agent-node": "3.910.0", - "@smithy/config-resolver": "^4.3.2", - "@smithy/core": "^3.16.1", - "@smithy/fetch-http-handler": "^5.3.3", - "@smithy/hash-node": "^4.2.2", - "@smithy/invalid-dependency": "^4.2.2", - "@smithy/middleware-content-length": "^4.2.2", - "@smithy/middleware-endpoint": "^4.3.3", - "@smithy/middleware-retry": "^4.4.3", - "@smithy/middleware-serde": "^4.2.2", - "@smithy/middleware-stack": "^4.2.2", - "@smithy/node-config-provider": "^4.3.2", - "@smithy/node-http-handler": "^4.4.1", - "@smithy/protocol-http": "^5.3.2", - "@smithy/smithy-client": "^4.8.1", - "@smithy/types": "^4.7.1", - "@smithy/url-parser": "^4.2.2", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/credential-provider-node": "3.948.0", + "@aws-sdk/middleware-bucket-endpoint": "3.936.0", + "@aws-sdk/middleware-expect-continue": "3.936.0", + "@aws-sdk/middleware-flexible-checksums": "3.947.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-location-constraint": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.948.0", + "@aws-sdk/middleware-sdk-s3": "3.947.0", + "@aws-sdk/middleware-ssec": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.947.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/signature-v4-multi-region": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.947.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.7", + "@smithy/eventstream-serde-browser": "^4.2.5", + "@smithy/eventstream-serde-config-resolver": "^4.3.5", + "@smithy/eventstream-serde-node": "^4.2.5", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-blob-browser": "^4.2.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/hash-stream-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/md5-js": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.14", + "@smithy/middleware-retry": "^4.4.14", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.2", - "@smithy/util-defaults-mode-node": "^4.2.3", - "@smithy/util-endpoints": "^3.2.2", - "@smithy/util-middleware": "^4.2.2", - "@smithy/util-retry": "^4.2.2", + "@smithy/util-defaults-mode-browser": "^4.3.13", + "@smithy/util-defaults-mode-node": "^4.2.16", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-stream": "^4.5.6", "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.5", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/client-sso": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.910.0.tgz", - "integrity": "sha512-oEWXhe2RHiSPKxhrq1qp7M4fxOsxMIJc4d75z8tTLLm5ujlmTZYU3kd0l2uBBaZSlbkrMiefntT6XrGint1ibw==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.948.0.tgz", + "integrity": "sha512-iWjchXy8bIAVBUsKnbfKYXRwhLgRg3EqCQ5FTr3JbR+QR75rZm4ZOYXlvHGztVTmtAZ+PQVA1Y4zO7v7N87C0A==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.910.0", - "@aws-sdk/middleware-host-header": "3.910.0", - "@aws-sdk/middleware-logger": "3.910.0", - "@aws-sdk/middleware-recursion-detection": "3.910.0", - "@aws-sdk/middleware-user-agent": "3.910.0", - "@aws-sdk/region-config-resolver": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@aws-sdk/util-endpoints": "3.910.0", - "@aws-sdk/util-user-agent-browser": "3.910.0", - "@aws-sdk/util-user-agent-node": "3.910.0", - "@smithy/config-resolver": "^4.3.2", - "@smithy/core": "^3.16.1", - "@smithy/fetch-http-handler": "^5.3.3", - "@smithy/hash-node": "^4.2.2", - "@smithy/invalid-dependency": "^4.2.2", - "@smithy/middleware-content-length": "^4.2.2", - "@smithy/middleware-endpoint": "^4.3.3", - "@smithy/middleware-retry": "^4.4.3", - "@smithy/middleware-serde": "^4.2.2", - "@smithy/middleware-stack": "^4.2.2", - "@smithy/node-config-provider": "^4.3.2", - "@smithy/node-http-handler": "^4.4.1", - "@smithy/protocol-http": "^5.3.2", - "@smithy/smithy-client": "^4.8.1", - "@smithy/types": "^4.7.1", - "@smithy/url-parser": "^4.2.2", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.948.0", + "@aws-sdk/middleware-user-agent": "3.947.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.947.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.7", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.14", + "@smithy/middleware-retry": "^4.4.14", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.2", - "@smithy/util-defaults-mode-node": "^4.2.3", - "@smithy/util-endpoints": "^3.2.2", - "@smithy/util-middleware": "^4.2.2", - "@smithy/util-retry": "^4.2.2", + "@smithy/util-defaults-mode-browser": "^4.3.13", + "@smithy/util-defaults-mode-node": "^4.2.16", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -557,24 +511,23 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/core": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.910.0.tgz", - "integrity": "sha512-b/FVNyPxZMmBp+xDwANDgR6o5Ehh/RTY9U/labH56jJpte196Psru/FmQULX3S6kvIiafQA9JefWUq81SfWVLg==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/core": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.947.0.tgz", + "integrity": "sha512-Khq4zHhuAkvCFuFbgcy3GrZTzfSX7ZIjIcW1zRDxXRLZKRtuhnZdonqTUfaWi5K42/4OmxkYNpsO7X7trQOeHw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.910.0", - "@aws-sdk/xml-builder": "3.910.0", - "@smithy/core": "^3.16.1", - "@smithy/node-config-provider": "^4.3.2", - "@smithy/property-provider": "^4.2.2", - "@smithy/protocol-http": "^5.3.2", - "@smithy/signature-v4": "^5.3.2", - "@smithy/smithy-client": "^4.8.1", - "@smithy/types": "^4.7.1", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/xml-builder": "3.930.0", + "@smithy/core": "^3.18.7", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", "@smithy/util-base64": "^4.3.0", - "@smithy/util-middleware": "^4.2.2", + "@smithy/util-middleware": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -582,218 +535,198 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.910.0.tgz", - "integrity": "sha512-Os8I5XtTLBBVyHJLxrEB06gSAZeFMH2jVoKhAaFybjOTiV7wnjBgjvWjRfStnnXs7p9d+vc/gd6wIZHjony5YQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@smithy/property-provider": "^4.2.2", - "@smithy/types": "^4.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.910.0.tgz", - "integrity": "sha512-3KiGsTlqMnvthv90K88Uv3SvaUbmcTShBIVWYNaHdbrhrjVRR08dm2Y6XjQILazLf1NPFkxUou1YwCWK4nae1Q==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.947.0.tgz", + "integrity": "sha512-VR2V6dRELmzwAsCpK4GqxUi6UW5WNhAXS9F9AzWi5jvijwJo3nH92YNJUP4quMpgFZxJHEWyXLWgPjh9u0zYOA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@smithy/fetch-http-handler": "^5.3.3", - "@smithy/node-http-handler": "^4.4.1", - "@smithy/property-provider": "^4.2.2", - "@smithy/protocol-http": "^5.3.2", - "@smithy/smithy-client": "^4.8.1", - "@smithy/types": "^4.7.1", - "@smithy/util-stream": "^4.5.2", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.910.0.tgz", - "integrity": "sha512-/8x9LKKaLGarvF1++bFEFdIvd9/djBb+HTULbJAf4JVg3tUlpHtGe7uquuZaQkQGeW4XPbcpB9RMWx5YlZkw3w==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.947.0.tgz", + "integrity": "sha512-inF09lh9SlHj63Vmr5d+LmwPXZc2IbK8lAruhOr3KLsZAIHEgHgGPXWDC2ukTEMzg0pkexQ6FOhXXad6klK4RA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.910.0", - "@aws-sdk/credential-provider-env": "3.910.0", - "@aws-sdk/credential-provider-http": "3.910.0", - "@aws-sdk/credential-provider-process": "3.910.0", - "@aws-sdk/credential-provider-sso": "3.910.0", - "@aws-sdk/credential-provider-web-identity": "3.910.0", - "@aws-sdk/nested-clients": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@smithy/credential-provider-imds": "^4.2.2", - "@smithy/property-provider": "^4.2.2", - "@smithy/shared-ini-file-loader": "^4.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/util-stream": "^4.5.6", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.910.0.tgz", - "integrity": "sha512-Zz5tF/U4q9ir3rfVnPLlxbhMTHjPaPv78TarspFYn9mNN7cPVXBaXVVnMNu6ypZzBdTB8M44UYo827Qcw3kouA==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.948.0.tgz", + "integrity": "sha512-Cl//Qh88e8HBL7yYkJNpF5eq76IO6rq8GsatKcfVBm7RFVxCqYEPSSBtkHdbtNwQdRQqAMXc6E/lEB/CZUDxnA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.910.0", - "@aws-sdk/credential-provider-http": "3.910.0", - "@aws-sdk/credential-provider-ini": "3.910.0", - "@aws-sdk/credential-provider-process": "3.910.0", - "@aws-sdk/credential-provider-sso": "3.910.0", - "@aws-sdk/credential-provider-web-identity": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@smithy/credential-provider-imds": "^4.2.2", - "@smithy/property-provider": "^4.2.2", - "@smithy/shared-ini-file-loader": "^4.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/credential-provider-env": "3.947.0", + "@aws-sdk/credential-provider-http": "3.947.0", + "@aws-sdk/credential-provider-login": "3.948.0", + "@aws-sdk/credential-provider-process": "3.947.0", + "@aws-sdk/credential-provider-sso": "3.948.0", + "@aws-sdk/credential-provider-web-identity": "3.948.0", + "@aws-sdk/nested-clients": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.910.0.tgz", - "integrity": "sha512-l1lZfHIl/z0SxXibt7wMQ2HmRIyIZjlOrT6a554xlO//y671uxPPwScVw7QW4fPIvwfmKbl8dYCwGI//AgQ0bA==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-login": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.948.0.tgz", + "integrity": "sha512-gcKO2b6eeTuZGp3Vvgr/9OxajMrD3W+FZ2FCyJox363ZgMoYJsyNid1vuZrEuAGkx0jvveLXfwiVS0UXyPkgtw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@smithy/property-provider": "^4.2.2", - "@smithy/shared-ini-file-loader": "^4.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/nested-clients": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.910.0.tgz", - "integrity": "sha512-cwc9bmomjUqPDF58THUCmEnpAIsCFV3Y9FHlQmQbMkYUm7Wlrb5E2iFrZ4WDefAHuh25R/gtj+Yo74r3gl9kbw==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.948.0.tgz", + "integrity": "sha512-ep5vRLnrRdcsP17Ef31sNN4g8Nqk/4JBydcUJuFRbGuyQtrZZrVT81UeH2xhz6d0BK6ejafDB9+ZpBjXuWT5/Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.910.0", - "@aws-sdk/core": "3.910.0", - "@aws-sdk/token-providers": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@smithy/property-provider": "^4.2.2", - "@smithy/shared-ini-file-loader": "^4.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/credential-provider-env": "3.947.0", + "@aws-sdk/credential-provider-http": "3.947.0", + "@aws-sdk/credential-provider-ini": "3.948.0", + "@aws-sdk/credential-provider-process": "3.947.0", + "@aws-sdk/credential-provider-sso": "3.948.0", + "@aws-sdk/credential-provider-web-identity": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.910.0.tgz", - "integrity": "sha512-HFQgZm1+7WisJ8tqcZkNRRmnoFO+So+L12wViVxneVJ+OclfL2vE/CoKqHTozP6+JCOKMlv6Vi61Lu6xDtKdTA==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.947.0.tgz", + "integrity": "sha512-WpanFbHe08SP1hAJNeDdBDVz9SGgMu/gc0XJ9u3uNpW99nKZjDpvPRAdW7WLA4K6essMjxWkguIGNOpij6Do2Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.910.0", - "@aws-sdk/nested-clients": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@smithy/property-provider": "^4.2.2", - "@smithy/shared-ini-file-loader": "^4.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.910.0.tgz", - "integrity": "sha512-F9Lqeu80/aTM6S/izZ8RtwSmjfhWjIuxX61LX+/9mxJyEkgaECRxv0chsLQsLHJumkGnXRy/eIyMLBhcTPF5vg==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.948.0.tgz", + "integrity": "sha512-gqLhX1L+zb/ZDnnYbILQqJ46j735StfWV5PbDjxRzBKS7GzsiYoaf6MyHseEopmWrez5zl5l6aWzig7UpzSeQQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.910.0", - "@smithy/protocol-http": "^5.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/client-sso": "3.948.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/token-providers": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/middleware-logger": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.910.0.tgz", - "integrity": "sha512-3LJyyfs1USvRuRDla1pGlzGRtXJBXD1zC9F+eE9Iz/V5nkmhyv52A017CvKWmYoR0DM9dzjLyPOI0BSSppEaTw==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.948.0.tgz", + "integrity": "sha512-MvYQlXVoJyfF3/SmnNzOVEtANRAiJIObEUYYyjTqKZTmcRIVVky0tPuG26XnB8LmTYgtESwJIZJj/Eyyc9WURQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.910.0", - "@smithy/types": "^4.7.1", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/nested-clients": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.910.0.tgz", - "integrity": "sha512-m/oLz0EoCy+WoIVBnXRXJ4AtGpdl0kPE7U+VH9TsuUzHgxY1Re/176Q1HWLBRVlz4gr++lNsgsMWEC+VnAwMpw==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.948.0.tgz", + "integrity": "sha512-Qa8Zj+EAqA0VlAVvxpRnpBpIWJI9KUwaioY1vkeNVwXPlNaz9y9zCKVM9iU9OZ5HXpoUg6TnhATAHXHAE8+QsQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.910.0", - "@aws/lambda-invoke-store": "^0.0.1", - "@smithy/protocol-http": "^5.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/types": "3.936.0", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.910.0.tgz", - "integrity": "sha512-m13TmWHjIonWkIFi4O1GSsZKPzIf2sO9rUEj9fr1VwTA7Lblp6UaOcfiQHfhWXgxqYaSouvEvCtoqA3SttdPlw==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.947.0.tgz", + "integrity": "sha512-DS2tm5YBKhPW2PthrRBDr6eufChbwXe0NjtTZcYDfUCXf0OR+W6cIqyKguwHMJ+IyYdey30AfVw9/Lb5KB8U8A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.910.0", - "@aws-sdk/types": "3.910.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", "@aws-sdk/util-arn-parser": "3.893.0", - "@smithy/core": "^3.16.1", - "@smithy/node-config-provider": "^4.3.2", - "@smithy/protocol-http": "^5.3.2", - "@smithy/signature-v4": "^5.3.2", - "@smithy/smithy-client": "^4.8.1", - "@smithy/types": "^4.7.1", + "@smithy/core": "^3.18.7", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-middleware": "^4.2.2", - "@smithy/util-stream": "^4.5.2", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -801,68 +734,66 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.910.0.tgz", - "integrity": "sha512-djpnECwDLI/4sck1wxK/cZJmZX5pAhRvjONyJqr0AaOfJyuIAG0PHLe7xwCrv2rCAvIBR9ofnNFzPIGTJPDUwg==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.947.0.tgz", + "integrity": "sha512-7rpKV8YNgCP2R4F9RjWZFcD2R+SO/0R4VHIbY9iZJdH2MzzJ8ZG7h8dZ2m8QkQd1fjx4wrFJGGPJUTYXPV3baA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@aws-sdk/util-endpoints": "3.910.0", - "@smithy/core": "^3.16.1", - "@smithy/protocol-http": "^5.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@smithy/core": "^3.18.7", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/nested-clients": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.910.0.tgz", - "integrity": "sha512-Jr/smgVrLZECQgMyP4nbGqgJwzFFbkjOVrU8wh/gbVIZy1+Gu6R7Shai7KHDkEjwkGcHpN1MCCO67jTAOoSlMw==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/nested-clients": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.948.0.tgz", + "integrity": "sha512-zcbJfBsB6h254o3NuoEkf0+UY1GpE9ioiQdENWv7odo69s8iaGBEQ4BDpsIMqcuiiUXw1uKIVNxCB1gUGYz8lw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.910.0", - "@aws-sdk/middleware-host-header": "3.910.0", - "@aws-sdk/middleware-logger": "3.910.0", - "@aws-sdk/middleware-recursion-detection": "3.910.0", - "@aws-sdk/middleware-user-agent": "3.910.0", - "@aws-sdk/region-config-resolver": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@aws-sdk/util-endpoints": "3.910.0", - "@aws-sdk/util-user-agent-browser": "3.910.0", - "@aws-sdk/util-user-agent-node": "3.910.0", - "@smithy/config-resolver": "^4.3.2", - "@smithy/core": "^3.16.1", - "@smithy/fetch-http-handler": "^5.3.3", - "@smithy/hash-node": "^4.2.2", - "@smithy/invalid-dependency": "^4.2.2", - "@smithy/middleware-content-length": "^4.2.2", - "@smithy/middleware-endpoint": "^4.3.3", - "@smithy/middleware-retry": "^4.4.3", - "@smithy/middleware-serde": "^4.2.2", - "@smithy/middleware-stack": "^4.2.2", - "@smithy/node-config-provider": "^4.3.2", - "@smithy/node-http-handler": "^4.4.1", - "@smithy/protocol-http": "^5.3.2", - "@smithy/smithy-client": "^4.8.1", - "@smithy/types": "^4.7.1", - "@smithy/url-parser": "^4.2.2", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.948.0", + "@aws-sdk/middleware-user-agent": "3.947.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.947.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.7", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.14", + "@smithy/middleware-retry": "^4.4.14", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.2", - "@smithy/util-defaults-mode-node": "^4.2.3", - "@smithy/util-endpoints": "^3.2.2", - "@smithy/util-middleware": "^4.2.2", - "@smithy/util-retry": "^4.2.2", + "@smithy/util-defaults-mode-browser": "^4.3.13", + "@smithy/util-defaults-mode-node": "^4.2.16", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -870,116 +801,51 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.910.0.tgz", - "integrity": "sha512-gzQAkuHI3xyG6toYnH/pju+kc190XmvnB7X84vtN57GjgdQJICt9So/BD0U6h+eSfk9VBnafkVrAzBzWMEFZVw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.910.0", - "@smithy/node-config-provider": "^4.3.2", - "@smithy/types": "^4.7.1", - "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-middleware": "^4.2.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.910.0.tgz", - "integrity": "sha512-SM62pR9ozCNzbKuV315QSgR1Tkyy+0sKMzgGAufvOupuWBUaJgEuzCwfLEBhPiEODaQCdJ3UZGn0wYXxn8gXsA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@smithy/protocol-http": "^5.3.2", - "@smithy/signature-v4": "^5.3.2", - "@smithy/types": "^4.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/token-providers": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.910.0.tgz", - "integrity": "sha512-dQr3pFpzemKyrB7SEJ2ipPtWrZiL5vaimg2PkXpwyzGrigYRc8F2R9DMUckU5zi32ozvQqq4PI3bOrw6xUfcbQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.910.0", - "@aws-sdk/nested-clients": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@smithy/property-provider": "^4.2.2", - "@smithy/shared-ini-file-loader": "^4.3.2", - "@smithy/types": "^4.7.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/types": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.910.0.tgz", - "integrity": "sha512-o67gL3vjf4nhfmuSUNNkit0d62QJEwwHLxucwVJkR/rw9mfUtAWsgBs8Tp16cdUbMgsyQtCQilL8RAJDoGtadQ==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.947.0.tgz", + "integrity": "sha512-UaYmzoxf9q3mabIA2hc4T6x5YSFUG2BpNjAZ207EA1bnQMiK+d6vZvb83t7dIWL/U1de1sGV19c1C81Jf14rrA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.7.1", + "@aws-sdk/middleware-sdk-s3": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/util-endpoints": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.910.0.tgz", - "integrity": "sha512-6XgdNe42ibP8zCQgNGDWoOF53RfEKzpU/S7Z29FTTJ7hcZv0SytC0ZNQQZSx4rfBl036YWYwJRoJMlT4AA7q9A==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/token-providers": { + "version": "3.948.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.948.0.tgz", + "integrity": "sha512-V487/kM4Teq5dcr1t5K6eoUKuqlGr9FRWL3MIMukMERJXHZvio6kox60FZ/YtciRHRI75u14YUqm2Dzddcu3+A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.910.0", - "@smithy/types": "^4.7.1", - "@smithy/url-parser": "^4.2.2", - "@smithy/util-endpoints": "^3.2.2", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/nested-clients": "3.948.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.910.0.tgz", - "integrity": "sha512-iOdrRdLZHrlINk9pezNZ82P/VxO/UmtmpaOAObUN+xplCUJu31WNM2EE/HccC8PQw6XlAudpdA6HDTGiW6yVGg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.910.0", - "@smithy/types": "^4.7.1", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.910.0.tgz", - "integrity": "sha512-qNV+rywWQDOOWmGpNlWLCU6zkJurocTBB2uLSdQ8b6Xg6U/i1VTJsoUQ5fbhSQpp/SuBGiIglyB1gSc0th7hPw==", - "dev": true, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.947.0.tgz", + "integrity": "sha512-+vhHoDrdbb+zerV4noQk1DHaUMNzWFWPpPYjVTwW2186k5BEJIecAMChYkghRrBVJ3KPWP1+JnZwOd72F3d4rQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.910.0", - "@aws-sdk/types": "3.910.0", - "@smithy/node-config-provider": "^4.3.2", - "@smithy/types": "^4.7.1", + "@aws-sdk/middleware-user-agent": "3.947.0", + "@aws-sdk/types": "3.936.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -994,15 +860,52 @@ } } }, - "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/xml-builder": { - "version": "3.910.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.910.0.tgz", - "integrity": "sha512-UK0NzRknzUITYlkDibDSgkWvhhC11OLhhhGajl6pYCACup+6QE4SsLvmAGMkyNtGVCJ6Q+BM6PwDCBZyBgwl9A==", + "node_modules/@aws-sdk/client-sesv2": { + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sesv2/-/client-sesv2-3.946.0.tgz", + "integrity": "sha512-JYj3BPqgyRXgBjZ3Xvo4Abd+vLxcsHe4gb0TvwiSM/k7e6MRgBZoYwDOnwbNDs/62X1sn7MPHqqB3miuO4nR5g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.7.1", - "fast-xml-parser": "5.2.5", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.946.0", + "@aws-sdk/credential-provider-node": "3.946.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.946.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/signature-v4-multi-region": "3.946.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.946.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.7", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.14", + "@smithy/middleware-retry": "^4.4.14", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.13", + "@smithy/util-defaults-mode-node": "^4.2.16", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { @@ -1010,47 +913,48 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.922.0.tgz", - "integrity": "sha512-jdHs7uy7cSpiMvrxhYmqHyJxgK7hyqw4plG8OQ4YTBpq0SbfAxdoOuOkwJ1IVUUQho4otR1xYYjiX/8e8J8qwQ==", + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.946.0.tgz", + "integrity": "sha512-kGAs5iIVyUz4p6TX3pzG5q3cNxXnVpC4pwRC6DCSaSv9ozyPjc2d74FsK4fZ+J+ejtvCdJk72uiuQtWJc86Wuw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.922.0", - "@aws-sdk/middleware-host-header": "3.922.0", - "@aws-sdk/middleware-logger": "3.922.0", - "@aws-sdk/middleware-recursion-detection": "3.922.0", - "@aws-sdk/middleware-user-agent": "3.922.0", - "@aws-sdk/region-config-resolver": "3.922.0", - "@aws-sdk/types": "3.922.0", - "@aws-sdk/util-endpoints": "3.922.0", - "@aws-sdk/util-user-agent-browser": "3.922.0", - "@aws-sdk/util-user-agent-node": "3.922.0", - "@smithy/config-resolver": "^4.4.1", - "@smithy/core": "^3.17.2", - "@smithy/fetch-http-handler": "^5.3.5", - "@smithy/hash-node": "^4.2.4", - "@smithy/invalid-dependency": "^4.2.4", - "@smithy/middleware-content-length": "^4.2.4", - "@smithy/middleware-endpoint": "^4.3.6", - "@smithy/middleware-retry": "^4.4.6", - "@smithy/middleware-serde": "^4.2.4", - "@smithy/middleware-stack": "^4.2.4", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/node-http-handler": "^4.4.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/smithy-client": "^4.9.2", - "@smithy/types": "^4.8.1", - "@smithy/url-parser": "^4.2.4", + "@aws-sdk/core": "3.946.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.946.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.946.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.7", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.14", + "@smithy/middleware-retry": "^4.4.14", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.5", - "@smithy/util-defaults-mode-node": "^4.2.7", - "@smithy/util-endpoints": "^3.2.4", - "@smithy/util-middleware": "^4.2.4", - "@smithy/util-retry": "^4.2.4", + "@smithy/util-defaults-mode-browser": "^4.3.13", + "@smithy/util-defaults-mode-node": "^4.2.16", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -1059,22 +963,23 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.922.0.tgz", - "integrity": "sha512-EvfP4cqJfpO3L2v5vkIlTkMesPtRwWlMfsaW6Tpfm7iYfBOuTi6jx60pMDMTyJNVfh6cGmXwh/kj1jQdR+w99Q==", + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.946.0.tgz", + "integrity": "sha512-u2BkbLLVbMFrEiXrko2+S6ih5sUZPlbVyRPtXOqMHlCyzr70sE8kIiD6ba223rQeIFPcYfW/wHc6k4ihW2xxVg==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@aws-sdk/xml-builder": "3.921.0", - "@smithy/core": "^3.17.2", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/property-provider": "^4.2.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/signature-v4": "^5.3.4", - "@smithy/smithy-client": "^4.9.2", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/xml-builder": "3.930.0", + "@smithy/core": "^3.18.7", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", "@smithy/util-base64": "^4.3.0", - "@smithy/util-middleware": "^4.2.4", + "@smithy/util-middleware": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -1083,15 +988,16 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.922.0.tgz", - "integrity": "sha512-WikGQpKkROJSK3D3E7odPjZ8tU7WJp5/TgGdRuZw3izsHUeH48xMv6IznafpRTmvHcjAbDQj4U3CJZNAzOK/OQ==", + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.946.0.tgz", + "integrity": "sha512-P4l+K6wX1tf8LmWUvZofdQ+BgCNyk6Tb9u1H10npvqpuCD+dCM4pXIBq3PQcv/juUBOvLGGREo+Govuh3lfD0Q==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.922.0", - "@aws-sdk/types": "3.922.0", - "@smithy/property-provider": "^4.2.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/core": "3.946.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -1099,20 +1005,21 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.922.0.tgz", - "integrity": "sha512-i72DgHMK7ydAEqdzU0Duqh60Q8W59EZmRJ73y0Y5oFmNOqnYsAI+UXyOoCsubp+Dkr6+yOwAn1gPt1XGE9Aowg==", + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.946.0.tgz", + "integrity": "sha512-/zeOJ6E7dGZQ/l2k7KytEoPJX0APIhwt0A79hPf/bUpMF4dDs2P6JmchDrotk0a0Y/MIdNF8sBQ/MEOPnBiYoQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.922.0", - "@aws-sdk/types": "3.922.0", - "@smithy/fetch-http-handler": "^5.3.5", - "@smithy/node-http-handler": "^4.4.4", - "@smithy/property-provider": "^4.2.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/smithy-client": "^4.9.2", - "@smithy/types": "^4.8.1", - "@smithy/util-stream": "^4.5.5", + "@aws-sdk/core": "3.946.0", + "@aws-sdk/types": "3.936.0", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/util-stream": "^4.5.6", "tslib": "^2.6.2" }, "engines": { @@ -1120,23 +1027,45 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.922.0.tgz", - "integrity": "sha512-bVF+pI5UCLNkvbiZr/t2fgTtv84s8FCdOGAPxQiQcw5qOZywNuuCCY3wIIchmQr6GJr8YFkEp5LgDCac5EC5aQ==", + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.946.0.tgz", + "integrity": "sha512-Pdgcra3RivWj/TuZmfFaHbqsvvgnSKO0CxlRUMMr0PgBiCnUhyl+zBktdNOeGsOPH2fUzQpYhcUjYUgVSdcSDQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.922.0", - "@aws-sdk/credential-provider-env": "3.922.0", - "@aws-sdk/credential-provider-http": "3.922.0", - "@aws-sdk/credential-provider-process": "3.922.0", - "@aws-sdk/credential-provider-sso": "3.922.0", - "@aws-sdk/credential-provider-web-identity": "3.922.0", - "@aws-sdk/nested-clients": "3.922.0", - "@aws-sdk/types": "3.922.0", - "@smithy/credential-provider-imds": "^4.2.4", - "@smithy/property-provider": "^4.2.4", - "@smithy/shared-ini-file-loader": "^4.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/core": "3.946.0", + "@aws-sdk/credential-provider-env": "3.946.0", + "@aws-sdk/credential-provider-http": "3.946.0", + "@aws-sdk/credential-provider-login": "3.946.0", + "@aws-sdk/credential-provider-process": "3.946.0", + "@aws-sdk/credential-provider-sso": "3.946.0", + "@aws-sdk/credential-provider-web-identity": "3.946.0", + "@aws-sdk/nested-clients": "3.946.0", + "@aws-sdk/types": "3.936.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-login": { + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.946.0.tgz", + "integrity": "sha512-5iqLNc15u2Zx+7jOdQkIbP62N7n2031tw5hkmIG0DLnozhnk64osOh2CliiOE9x3c4P9Pf4frAwgyy9GzNTk2g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.946.0", + "@aws-sdk/nested-clients": "3.946.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -1144,22 +1073,23 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.922.0.tgz", - "integrity": "sha512-agCwaD6mBihToHkjycL8ObIS2XOnWypWZZWhJSoWyHwFrhEKz1zGvgylK9Dc711oUfU+zU6J8e0JPKNJMNb3BQ==", + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.946.0.tgz", + "integrity": "sha512-I7URUqnBPng1a5y81OImxrwERysZqMBREG6svhhGeZgxmqcpAZ8z5ywILeQXdEOCuuES8phUp/ojzxFjPXp/eA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.922.0", - "@aws-sdk/credential-provider-http": "3.922.0", - "@aws-sdk/credential-provider-ini": "3.922.0", - "@aws-sdk/credential-provider-process": "3.922.0", - "@aws-sdk/credential-provider-sso": "3.922.0", - "@aws-sdk/credential-provider-web-identity": "3.922.0", - "@aws-sdk/types": "3.922.0", - "@smithy/credential-provider-imds": "^4.2.4", - "@smithy/property-provider": "^4.2.4", - "@smithy/shared-ini-file-loader": "^4.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/credential-provider-env": "3.946.0", + "@aws-sdk/credential-provider-http": "3.946.0", + "@aws-sdk/credential-provider-ini": "3.946.0", + "@aws-sdk/credential-provider-process": "3.946.0", + "@aws-sdk/credential-provider-sso": "3.946.0", + "@aws-sdk/credential-provider-web-identity": "3.946.0", + "@aws-sdk/types": "3.936.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -1167,16 +1097,17 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.922.0.tgz", - "integrity": "sha512-1DZOYezT6okslpvMW7oA2q+y17CJd4fxjNFH0jtThfswdh9CtG62+wxenqO+NExttq0UMaKisrkZiVrYQBTShw==", + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.946.0.tgz", + "integrity": "sha512-GtGHX7OGqIeVQ3DlVm5RRF43Qmf3S1+PLJv9svrdvAhAdy2bUb044FdXXqrtSsIfpzTKlHgQUiRo5MWLd35Ntw==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.922.0", - "@aws-sdk/types": "3.922.0", - "@smithy/property-provider": "^4.2.4", - "@smithy/shared-ini-file-loader": "^4.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/core": "3.946.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -1184,18 +1115,19 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.922.0.tgz", - "integrity": "sha512-nbD3G3hShTYxLCkKMqLkLPtKwAAfxdY/k9jHtZmVBFXek2T6tQrqZHKxlAu+fd23Ga4/Aik7DLQQx1RA1a5ipg==", + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.946.0.tgz", + "integrity": "sha512-LeGSSt2V5iwYey1ENGY75RmoDP3bA2iE/py8QBKW8EDA8hn74XBLkprhrK5iccOvU3UGWY8WrEKFAFGNjJOL9g==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.922.0", - "@aws-sdk/core": "3.922.0", - "@aws-sdk/token-providers": "3.922.0", - "@aws-sdk/types": "3.922.0", - "@smithy/property-provider": "^4.2.4", - "@smithy/shared-ini-file-loader": "^4.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/client-sso": "3.946.0", + "@aws-sdk/core": "3.946.0", + "@aws-sdk/token-providers": "3.946.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -1203,17 +1135,18 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.922.0.tgz", - "integrity": "sha512-wjGIhgMHGGQfQTdFaJphNOKyAL8wZs6znJdHADPVURmgR+EWLyN/0fDO1u7wx8xaLMZpbHIFWBEvf9TritR/cQ==", + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.946.0.tgz", + "integrity": "sha512-ocBCvjWfkbjxElBI1QUxOnHldsNhoU0uOICFvuRDAZAoxvypJHN3m5BJkqb7gqorBbcv3LRgmBdEnWXOAvq+7Q==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.922.0", - "@aws-sdk/nested-clients": "3.922.0", - "@aws-sdk/types": "3.922.0", - "@smithy/property-provider": "^4.2.4", - "@smithy/shared-ini-file-loader": "^4.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/core": "3.946.0", + "@aws-sdk/nested-clients": "3.946.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -1221,16 +1154,16 @@ } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.922.0.tgz", - "integrity": "sha512-Dpr2YeOaLFqt3q1hocwBesynE3x8/dXZqXZRuzSX/9/VQcwYBFChHAm4mTAl4zuvArtDbLrwzWSxmOWYZGtq5w==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.936.0.tgz", + "integrity": "sha512-XLSVVfAorUxZh6dzF+HTOp4R1B5EQcdpGcPliWr0KUj2jukgjZEcqbBmjyMF/p9bmyQsONX80iURF1HLAlW0qg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", + "@aws-sdk/types": "3.936.0", "@aws-sdk/util-arn-parser": "3.893.0", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "@smithy/util-config-provider": "^4.2.0", "tslib": "^2.6.2" }, @@ -1239,14 +1172,14 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.922.0.tgz", - "integrity": "sha512-xmnLWMtmHJHJBupSWMUEW1gyxuRIeQ1Ov2xa8Tqq77fPr4Ft2AluEwiDMaZIMHoAvpxWKEEt9Si59Li7GIA+bQ==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.936.0.tgz", + "integrity": "sha512-Eb4ELAC23bEQLJmUMYnPWcjD3FZIsmz2svDiXEcxRkQU9r7NRID7pM7C5NPH94wOfiCk0b2Y8rVyFXW0lGQwbA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.936.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -1254,22 +1187,22 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.922.0.tgz", - "integrity": "sha512-G363np7YcJhf+gBucskdv8cOTbs2TRwocEzRupuqDIooGDlLBlfJrvwehdgtWR8l53yjJR3zcHvGrVPTe2h8Nw==", + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.947.0.tgz", + "integrity": "sha512-kXXxS2raNESNO+zR0L4YInVjhcGGNI2Mx0AE1ThRhDkAt2se3a+rGf9equ9YvOqA1m8Jl/GSI8cXYvSxXmS9Ag==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "3.922.0", - "@aws-sdk/types": "3.922.0", + "@aws-sdk/core": "3.947.0", + "@aws-sdk/types": "3.936.0", "@smithy/is-array-buffer": "^4.2.0", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", - "@smithy/util-middleware": "^4.2.4", - "@smithy/util-stream": "^4.5.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -1277,92 +1210,109 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.922.0.tgz", - "integrity": "sha512-HPquFgBnq/KqKRVkiuCt97PmWbKtxQ5iUNLEc6FIviqOoZTmaYG3EDsIbuFBz9C4RHJU4FKLmHL2bL3FEId6AA==", + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@aws-sdk/core": { + "version": "3.947.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.947.0.tgz", + "integrity": "sha512-Khq4zHhuAkvCFuFbgcy3GrZTzfSX7ZIjIcW1zRDxXRLZKRtuhnZdonqTUfaWi5K42/4OmxkYNpsO7X7trQOeHw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/xml-builder": "3.930.0", + "@smithy/core": "^3.18.7", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.922.0.tgz", - "integrity": "sha512-T4iqd7WQ2DDjCH/0s50mnhdoX+IJns83ZE+3zj9IDlpU0N2aq8R91IG890qTfYkUEdP9yRm0xir/CNed+v6Dew==", + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.936.0.tgz", + "integrity": "sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.936.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.922.0.tgz", - "integrity": "sha512-AkvYO6b80FBm5/kk2E636zNNcNgjztNNUxpqVx+huyGn9ZqGTzS4kLqW2hO6CBe5APzVtPCtiQsXL24nzuOlAg==", + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.936.0.tgz", + "integrity": "sha512-SCMPenDtQMd9o5da9JzkHz838w3327iqXk3cbNnXWqnNRx6unyW8FL0DZ84gIY12kAyVHz5WEqlWuekc15ehfw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.922.0.tgz", - "integrity": "sha512-TtSCEDonV/9R0VhVlCpxZbp/9sxQvTTRKzIf8LxW3uXpby6Wl8IxEciBJlxmSkoqxh542WRcko7NYODlvL/gDA==", + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.936.0.tgz", + "integrity": "sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@aws/lambda-invoke-store": "^0.1.1", - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@aws/lambda-invoke-store": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.1.1.tgz", - "integrity": "sha512-RcLam17LdlbSOSp9VxmUu1eI6Mwxp+OwhD2QhiSNmNCzoDb0EeUXTD2n/WbcnrAYMGlmf05th6QYq23VqvJqpA==", + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.936.0.tgz", + "integrity": "sha512-l4aGbHpXM45YNgXggIux1HgsCVAvvBoqHPkqLnqMl9QVapfuSTjJHfDYDsx1Xxct6/m7qSMUzanBALhiaGO2fA==", + "dev": true, "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.936.0", + "@aws/lambda-invoke-store": "^0.2.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "tslib": "^2.6.2" + }, "engines": { "node": ">=18.0.0" } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.922.0.tgz", - "integrity": "sha512-ygg8lME1oFAbsH42ed2wtGqfHLoT5irgx6VC4X98j79fV1qXEwwwbqMsAiMQ/HJehpjqAFRVsHox3MHLN48Z5A==", + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.946.0.tgz", + "integrity": "sha512-0UTFmFd8PX2k/jLu/DBmR+mmLQWAtUGHYps9Rjx3dcXNwaMLaa/39NoV3qn7Dwzfpqc6JZlZzBk+NDOCJIHW9g==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.922.0", - "@aws-sdk/types": "3.922.0", + "@aws-sdk/core": "3.946.0", + "@aws-sdk/types": "3.936.0", "@aws-sdk/util-arn-parser": "3.893.0", - "@smithy/core": "^3.17.2", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/signature-v4": "^5.3.4", - "@smithy/smithy-client": "^4.9.2", - "@smithy/types": "^4.8.1", + "@smithy/core": "^3.18.7", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-middleware": "^4.2.4", - "@smithy/util-stream": "^4.5.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -1371,13 +1321,13 @@ } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.922.0.tgz", - "integrity": "sha512-eHvSJZTSRJO+/tjjGD6ocnPc8q9o3m26+qbwQTu/4V6yOJQ1q+xkDZNqwJQphL+CodYaQ7uljp8g1Ji/AN3D9w==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.936.0.tgz", + "integrity": "sha512-/GLC9lZdVp05ozRik5KsuODR/N7j+W+2TbfdFL3iS+7un+gnP6hC8RDOZd6WhpZp7drXQ9guKiTAxkZQwzS8DA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -1385,17 +1335,18 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.922.0.tgz", - "integrity": "sha512-N4Qx/9KP3oVQBJOrSghhz8iZFtUC2NNeSZt88hpPhbqAEAtuX8aD8OzVcpnAtrwWqy82Yd2YTxlkqMGkgqnBsQ==", + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.946.0.tgz", + "integrity": "sha512-7QcljCraeaWQNuqmOoAyZs8KpZcuhPiqdeeKoRd397jVGNRehLFsZbIMOvwaluUDFY11oMyXOkQEERe1Zo2fCw==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.922.0", - "@aws-sdk/types": "3.922.0", - "@aws-sdk/util-endpoints": "3.922.0", - "@smithy/core": "^3.17.2", - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/core": "3.946.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@smithy/core": "^3.18.7", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -1403,47 +1354,48 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.922.0.tgz", - "integrity": "sha512-uYvKCF1TGh/MuJ4TMqmUM0Csuao02HawcseG4LUDyxdUsd/EFuxalWq1Cx4fKZQ2K8F504efZBjctMAMNY+l7A==", + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.946.0.tgz", + "integrity": "sha512-rjAtEguukeW8mlyEQMQI56vxFoyWlaNwowmz1p1rav948SUjtrzjHAp4TOQWhibb7AR7BUTHBCgIcyCRjBEf4g==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.922.0", - "@aws-sdk/middleware-host-header": "3.922.0", - "@aws-sdk/middleware-logger": "3.922.0", - "@aws-sdk/middleware-recursion-detection": "3.922.0", - "@aws-sdk/middleware-user-agent": "3.922.0", - "@aws-sdk/region-config-resolver": "3.922.0", - "@aws-sdk/types": "3.922.0", - "@aws-sdk/util-endpoints": "3.922.0", - "@aws-sdk/util-user-agent-browser": "3.922.0", - "@aws-sdk/util-user-agent-node": "3.922.0", - "@smithy/config-resolver": "^4.4.1", - "@smithy/core": "^3.17.2", - "@smithy/fetch-http-handler": "^5.3.5", - "@smithy/hash-node": "^4.2.4", - "@smithy/invalid-dependency": "^4.2.4", - "@smithy/middleware-content-length": "^4.2.4", - "@smithy/middleware-endpoint": "^4.3.6", - "@smithy/middleware-retry": "^4.4.6", - "@smithy/middleware-serde": "^4.2.4", - "@smithy/middleware-stack": "^4.2.4", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/node-http-handler": "^4.4.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/smithy-client": "^4.9.2", - "@smithy/types": "^4.8.1", - "@smithy/url-parser": "^4.2.4", + "@aws-sdk/core": "3.946.0", + "@aws-sdk/middleware-host-header": "3.936.0", + "@aws-sdk/middleware-logger": "3.936.0", + "@aws-sdk/middleware-recursion-detection": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.946.0", + "@aws-sdk/region-config-resolver": "3.936.0", + "@aws-sdk/types": "3.936.0", + "@aws-sdk/util-endpoints": "3.936.0", + "@aws-sdk/util-user-agent-browser": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.946.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.7", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.14", + "@smithy/middleware-retry": "^4.4.14", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.5", - "@smithy/util-defaults-mode-node": "^4.2.7", - "@smithy/util-endpoints": "^3.2.4", - "@smithy/util-middleware": "^4.2.4", - "@smithy/util-retry": "^4.2.4", + "@smithy/util-defaults-mode-browser": "^4.3.13", + "@smithy/util-defaults-mode-node": "^4.2.16", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -1452,15 +1404,15 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.922.0.tgz", - "integrity": "sha512-44Y/rNNwhngR2KHp6gkx//TOr56/hx6s4l+XLjOqH7EBCHL7XhnrT1y92L+DLiroVr1tCSmO8eHQwBv0Y2+mvw==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.936.0.tgz", + "integrity": "sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/config-resolver": "^4.4.1", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.936.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -1468,16 +1420,17 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.922.0.tgz", - "integrity": "sha512-mmsgEEL5pE+A7gFYiJMDBCLVciaXq4EFI5iAP7bPpnHvOplnNOYxVy2IreKMllGvrfjVyLnwxzZYlo5zZ65FWg==", + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.946.0.tgz", + "integrity": "sha512-61FZ685lKiJuQ06g6U7K3PL9EwKCxNm51wNlxyKV57nnl1GrLD0NC8O3/hDNkCQLNBArT9y3IXl2H7TtIxP8Jg==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.922.0", - "@aws-sdk/types": "3.922.0", - "@smithy/protocol-http": "^5.3.4", - "@smithy/signature-v4": "^5.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/middleware-sdk-s3": "3.946.0", + "@aws-sdk/types": "3.936.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -1485,17 +1438,18 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.922.0.tgz", - "integrity": "sha512-/inmPnjZE0ZBE16zaCowAvouSx05FJ7p6BQYuzlJ8vxEU0sS0Hf8fvhuiRnN9V9eDUPIBY+/5EjbMWygXL4wlQ==", + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.946.0.tgz", + "integrity": "sha512-a5c+rM6CUPX2ExmUZ3DlbLlS5rQr4tbdoGcgBsjnAHiYx8MuMNAI+8M7wfjF13i2yvUQj5WEIddvLpayfEZj9g==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.922.0", - "@aws-sdk/nested-clients": "3.922.0", - "@aws-sdk/types": "3.922.0", - "@smithy/property-provider": "^4.2.4", - "@smithy/shared-ini-file-loader": "^4.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/core": "3.946.0", + "@aws-sdk/nested-clients": "3.946.0", + "@aws-sdk/types": "3.936.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -1503,12 +1457,12 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.922.0.tgz", - "integrity": "sha512-eLA6XjVobAUAMivvM7DBL79mnHyrm+32TkXNWZua5mnxF+6kQCfblKKJvxMZLGosO53/Ex46ogim8IY5Nbqv2w==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.936.0.tgz", + "integrity": "sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -1528,15 +1482,15 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.922.0.tgz", - "integrity": "sha512-4ZdQCSuNMY8HMlR1YN4MRDdXuKd+uQTeKIr5/pIM+g3TjInZoj8imvXudjcrFGA63UF3t92YVTkBq88mg58RXQ==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.936.0.tgz", + "integrity": "sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/types": "^4.8.1", - "@smithy/url-parser": "^4.2.4", - "@smithy/util-endpoints": "^3.2.4", + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-endpoints": "^3.2.5", "tslib": "^2.6.2" }, "engines": { @@ -1556,27 +1510,28 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.922.0.tgz", - "integrity": "sha512-qOJAERZ3Plj1st7M4Q5henl5FRpE30uLm6L9edZqZXGR6c7ry9jzexWamWVpQ4H4xVAVmiO9dIEBAfbq4mduOA==", + "version": "3.936.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.936.0.tgz", + "integrity": "sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.936.0", + "@smithy/types": "^4.9.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.922.0.tgz", - "integrity": "sha512-NrPe/Rsr5kcGunkog0eBV+bY0inkRELsD2SacC4lQZvZiXf8VJ2Y7j+Yq1tB+h+FPLsdt3v9wItIvDf/laAm0Q==", + "version": "3.946.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.946.0.tgz", + "integrity": "sha512-a2UwwvzbK5AxHKUBupfg4s7VnkqRAHjYsuezHnKCniczmT4HZfP1NnfwwvLKEH8qaTrwenxjKSfq4UWmWkvG+Q==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.922.0", - "@aws-sdk/types": "3.922.0", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/middleware-user-agent": "3.946.0", + "@aws-sdk/types": "3.936.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -1592,12 +1547,12 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.921.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.921.0.tgz", - "integrity": "sha512-LVHg0jgjyicKKvpNIEMXIMr1EBViESxcPkqfOlT+X1FkmUMTNZEEVF18tOJg4m4hV5vxtkWcqtr4IEeWa1C41Q==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.930.0.tgz", + "integrity": "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" }, @@ -1606,10 +1561,9 @@ } }, "node_modules/@aws/lambda-invoke-store": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.0.1.tgz", - "integrity": "sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw==", - "dev": true, + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz", + "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==", "license": "Apache-2.0", "engines": { "node": ">=18.0.0" @@ -1630,9 +1584,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", - "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1679,13 +1633,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", - "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.3", - "@babel/types": "^7.28.2", + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -1695,12 +1649,12 @@ } }, "node_modules/@babel/generator/node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.4" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -1757,12 +1711,12 @@ } }, "node_modules/@babel/helper-module-imports/node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.4" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -1772,17 +1726,17 @@ } }, "node_modules/@babel/helper-module-imports/node_modules/@babel/traverse": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", - "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", + "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.4", + "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4", + "@babel/types": "^7.28.5", "debug": "^4.3.1" }, "engines": { @@ -1807,12 +1761,12 @@ } }, "node_modules/@babel/helper-module-transforms/node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.4" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -1822,17 +1776,17 @@ } }, "node_modules/@babel/helper-module-transforms/node_modules/@babel/traverse": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", - "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", + "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.4", + "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4", + "@babel/types": "^7.28.5", "debug": "^4.3.1" }, "engines": { @@ -1849,9 +1803,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1894,6 +1848,15 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", @@ -1909,12 +1872,12 @@ } }, "node_modules/@babel/template/node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.4" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -1942,13 +1905,13 @@ } }, "node_modules/@babel/types": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -2012,9 +1975,9 @@ "license": "Apache-2.0" }, "node_modules/@ecies/ciphers": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@ecies/ciphers/-/ciphers-0.2.4.tgz", - "integrity": "sha512-t+iX+Wf5nRKyNzk8dviW3Ikb/280+aEJAnw9YXvCp2tYGPSkMki+NRY+8aNLmVFv3eNtMdvViPNOPxS8SZNP+w==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@ecies/ciphers/-/ciphers-0.2.5.tgz", + "integrity": "sha512-GalEZH4JgOMHYYcYmVqnFirFsjZHeoGMDt9IxEnM9F7GRUUyUksJ7Ou53L83WHJq3RWKD3AcBpo0iQh0oMpf8A==", "dev": true, "license": "MIT", "engines": { @@ -2027,9 +1990,9 @@ } }, "node_modules/@emnapi/core": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz", - "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", + "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", "license": "MIT", "optional": true, "dependencies": { @@ -2038,9 +2001,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", - "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", "license": "MIT", "optional": true, "dependencies": { @@ -2510,9 +2473,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz", - "integrity": "sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.1.tgz", + "integrity": "sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==", "cpu": [ "ppc64" ], @@ -2527,9 +2490,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.0.tgz", - "integrity": "sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.1.tgz", + "integrity": "sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==", "cpu": [ "arm" ], @@ -2544,9 +2507,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.0.tgz", - "integrity": "sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.1.tgz", + "integrity": "sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==", "cpu": [ "arm64" ], @@ -2561,9 +2524,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.0.tgz", - "integrity": "sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.1.tgz", + "integrity": "sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==", "cpu": [ "x64" ], @@ -2578,9 +2541,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.0.tgz", - "integrity": "sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.1.tgz", + "integrity": "sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==", "cpu": [ "arm64" ], @@ -2595,9 +2558,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.0.tgz", - "integrity": "sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.1.tgz", + "integrity": "sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==", "cpu": [ "x64" ], @@ -2612,9 +2575,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.0.tgz", - "integrity": "sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.1.tgz", + "integrity": "sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==", "cpu": [ "arm64" ], @@ -2629,9 +2592,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.0.tgz", - "integrity": "sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.1.tgz", + "integrity": "sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==", "cpu": [ "x64" ], @@ -2646,9 +2609,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.0.tgz", - "integrity": "sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.1.tgz", + "integrity": "sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==", "cpu": [ "arm" ], @@ -2663,9 +2626,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.0.tgz", - "integrity": "sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.1.tgz", + "integrity": "sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==", "cpu": [ "arm64" ], @@ -2680,9 +2643,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.0.tgz", - "integrity": "sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.1.tgz", + "integrity": "sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==", "cpu": [ "ia32" ], @@ -2697,9 +2660,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.0.tgz", - "integrity": "sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.1.tgz", + "integrity": "sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==", "cpu": [ "loong64" ], @@ -2714,9 +2677,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.0.tgz", - "integrity": "sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.1.tgz", + "integrity": "sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==", "cpu": [ "mips64el" ], @@ -2731,9 +2694,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.0.tgz", - "integrity": "sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.1.tgz", + "integrity": "sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==", "cpu": [ "ppc64" ], @@ -2748,9 +2711,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.0.tgz", - "integrity": "sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.1.tgz", + "integrity": "sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==", "cpu": [ "riscv64" ], @@ -2765,9 +2728,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.0.tgz", - "integrity": "sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.1.tgz", + "integrity": "sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==", "cpu": [ "s390x" ], @@ -2782,9 +2745,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.0.tgz", - "integrity": "sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.1.tgz", + "integrity": "sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==", "cpu": [ "x64" ], @@ -2799,9 +2762,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.0.tgz", - "integrity": "sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.1.tgz", + "integrity": "sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==", "cpu": [ "arm64" ], @@ -2816,9 +2779,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.0.tgz", - "integrity": "sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.1.tgz", + "integrity": "sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==", "cpu": [ "x64" ], @@ -2833,9 +2796,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.0.tgz", - "integrity": "sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.1.tgz", + "integrity": "sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==", "cpu": [ "arm64" ], @@ -2850,9 +2813,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.0.tgz", - "integrity": "sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.1.tgz", + "integrity": "sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==", "cpu": [ "x64" ], @@ -2867,9 +2830,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.0.tgz", - "integrity": "sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.1.tgz", + "integrity": "sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==", "cpu": [ "arm64" ], @@ -2884,9 +2847,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.0.tgz", - "integrity": "sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.1.tgz", + "integrity": "sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==", "cpu": [ "x64" ], @@ -2901,9 +2864,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.0.tgz", - "integrity": "sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.1.tgz", + "integrity": "sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==", "cpu": [ "arm64" ], @@ -2918,9 +2881,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.0.tgz", - "integrity": "sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.1.tgz", + "integrity": "sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==", "cpu": [ "ia32" ], @@ -2935,9 +2898,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.0.tgz", - "integrity": "sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.1.tgz", + "integrity": "sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==", "cpu": [ "x64" ], @@ -2982,9 +2945,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -3029,9 +2992,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "license": "MIT", "dependencies": { "ajv": "^6.12.4", @@ -3040,7 +3003,7 @@ "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, @@ -3316,8 +3279,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", - "devOptional": true, "license": "MIT", + "optional": true, "engines": { "node": ">=18" } @@ -3329,7 +3292,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -3352,7 +3314,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -3375,7 +3336,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -3392,7 +3352,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -3409,7 +3368,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -3426,7 +3384,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -3443,7 +3400,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -3460,7 +3416,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -3477,7 +3432,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -3494,7 +3448,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -3511,7 +3464,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -3528,7 +3480,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -3551,7 +3502,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -3574,7 +3524,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -3597,7 +3546,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -3620,7 +3568,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -3643,7 +3590,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -3666,7 +3612,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -3689,7 +3634,6 @@ "cpu": [ "wasm32" ], - "dev": true, "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { @@ -3709,7 +3653,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ @@ -3729,7 +3672,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ @@ -3749,7 +3691,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ @@ -3793,6 +3734,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -3836,17 +3778,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", @@ -3869,219 +3800,48 @@ "integrity": "sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==", "license": "MIT" }, - "node_modules/@libsql/client": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/@libsql/client/-/client-0.15.15.tgz", - "integrity": "sha512-twC0hQxPNHPKfeOv3sNT6u2pturQjLcI+CnpTM0SjRpocEGgfiZ7DWKXLNnsothjyJmDqEsBQJ5ztq9Wlu470w==", + "node_modules/@lottiefiles/dotlottie-react": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-react/-/dotlottie-react-0.13.3.tgz", + "integrity": "sha512-V4FfdYlqzjBUX7f0KV6vfQOOI0Cp+3XeG/ZqSDFSEVg5P7fpROpDv5/I9aTM8sOCESK1SWT96Fem+QVUnBV1wQ==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@libsql/core": "^0.15.14", - "@libsql/hrana-client": "^0.7.0", - "js-base64": "^3.7.5", - "libsql": "^0.5.22", - "promise-limit": "^2.7.0" + "@lottiefiles/dotlottie-web": "0.42.0" + }, + "peerDependencies": { + "react": "^17 || ^18 || ^19" } }, - "node_modules/@libsql/core": { - "version": "0.15.15", - "resolved": "https://registry.npmjs.org/@libsql/core/-/core-0.15.15.tgz", - "integrity": "sha512-C88Z6UKl+OyuKKPwz224riz02ih/zHYI3Ho/LAcVOgjsunIRZoBw7fjRfaH9oPMmSNeQfhGklSG2il1URoOIsA==", + "node_modules/@lottiefiles/dotlottie-web": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-web/-/dotlottie-web-0.42.0.tgz", + "integrity": "sha512-Zr2LCaOAoPCsdAQgeLyCSiQ1+xrAJtRCyuEYDj0qR5heUwpc+Pxbb88JyTVumcXFfKOBMOMmrlsTScLz2mrvQQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@monaco-editor/loader": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.7.0.tgz", + "integrity": "sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==", "license": "MIT", "dependencies": { - "js-base64": "^3.7.5" + "state-local": "^1.0.6" } }, - "node_modules/@libsql/darwin-arm64": { - "version": "0.5.22", - "resolved": "https://registry.npmjs.org/@libsql/darwin-arm64/-/darwin-arm64-0.5.22.tgz", - "integrity": "sha512-4B8ZlX3nIDPndfct7GNe0nI3Yw6ibocEicWdC4fvQbSs/jdq/RC2oCsoJxJ4NzXkvktX70C1J4FcmmoBy069UA==", - "cpu": [ - "arm64" - ], + "node_modules/@monaco-editor/react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.7.0.tgz", + "integrity": "sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@libsql/darwin-x64": { - "version": "0.5.22", - "resolved": "https://registry.npmjs.org/@libsql/darwin-x64/-/darwin-x64-0.5.22.tgz", - "integrity": "sha512-ny2HYWt6lFSIdNFzUFIJ04uiW6finXfMNJ7wypkAD8Pqdm6nAByO+Fdqu8t7sD0sqJGeUCiOg480icjyQ2/8VA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@libsql/hrana-client": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@libsql/hrana-client/-/hrana-client-0.7.0.tgz", - "integrity": "sha512-OF8fFQSkbL7vJY9rfuegK1R7sPgQ6kFMkDamiEccNUvieQ+3urzfDFI616oPl8V7T9zRmnTkSjMOImYCAVRVuw==", - "license": "MIT", - "dependencies": { - "@libsql/isomorphic-fetch": "^0.3.1", - "@libsql/isomorphic-ws": "^0.1.5", - "js-base64": "^3.7.5", - "node-fetch": "^3.3.2" - } - }, - "node_modules/@libsql/isomorphic-fetch": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@libsql/isomorphic-fetch/-/isomorphic-fetch-0.3.1.tgz", - "integrity": "sha512-6kK3SUK5Uu56zPq/Las620n5aS9xJq+jMBcNSOmjhNf/MUvdyji4vrMTqD7ptY7/4/CAVEAYDeotUz60LNQHtw==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@libsql/isomorphic-ws": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@libsql/isomorphic-ws/-/isomorphic-ws-0.1.5.tgz", - "integrity": "sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==", - "license": "MIT", - "dependencies": { - "@types/ws": "^8.5.4", - "ws": "^8.13.0" - } - }, - "node_modules/@libsql/linux-arm-gnueabihf": { - "version": "0.5.22", - "resolved": "https://registry.npmjs.org/@libsql/linux-arm-gnueabihf/-/linux-arm-gnueabihf-0.5.22.tgz", - "integrity": "sha512-3Uo3SoDPJe/zBnyZKosziRGtszXaEtv57raWrZIahtQDsjxBVjuzYQinCm9LRCJCUT5t2r5Z5nLDPJi2CwZVoA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@libsql/linux-arm-musleabihf": { - "version": "0.5.22", - "resolved": "https://registry.npmjs.org/@libsql/linux-arm-musleabihf/-/linux-arm-musleabihf-0.5.22.tgz", - "integrity": "sha512-LCsXh07jvSojTNJptT9CowOzwITznD+YFGGW+1XxUr7fS+7/ydUrpDfsMX7UqTqjm7xG17eq86VkWJgHJfvpNg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@libsql/linux-arm64-gnu": { - "version": "0.5.22", - "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-gnu/-/linux-arm64-gnu-0.5.22.tgz", - "integrity": "sha512-KSdnOMy88c9mpOFKUEzPskSaF3VLflfSUCBwas/pn1/sV3pEhtMF6H8VUCd2rsedwoukeeCSEONqX7LLnQwRMA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@libsql/linux-arm64-musl": { - "version": "0.5.22", - "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-musl/-/linux-arm64-musl-0.5.22.tgz", - "integrity": "sha512-mCHSMAsDTLK5YH//lcV3eFEgiR23Ym0U9oEvgZA0667gqRZg/2px+7LshDvErEKv2XZ8ixzw3p1IrBzLQHGSsw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@libsql/linux-x64-gnu": { - "version": "0.5.22", - "resolved": "https://registry.npmjs.org/@libsql/linux-x64-gnu/-/linux-x64-gnu-0.5.22.tgz", - "integrity": "sha512-kNBHaIkSg78Y4BqAdgjcR2mBilZXs4HYkAmi58J+4GRwDQZh5fIUWbnQvB9f95DkWUIGVeenqLRFY2pcTmlsew==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@libsql/linux-x64-musl": { - "version": "0.5.22", - "resolved": "https://registry.npmjs.org/@libsql/linux-x64-musl/-/linux-x64-musl-0.5.22.tgz", - "integrity": "sha512-UZ4Xdxm4pu3pQXjvfJiyCzZop/9j/eA2JjmhMaAhe3EVLH2g11Fy4fwyUp9sT1QJYR1kpc2JLuybPM0kuXv/Tg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@libsql/win32-x64-msvc": { - "version": "0.5.22", - "resolved": "https://registry.npmjs.org/@libsql/win32-x64-msvc/-/win32-x64-msvc-0.5.22.tgz", - "integrity": "sha512-Fj0j8RnBpo43tVZUVoNK6BV/9AtDUM5S7DF3LB4qTYg1LMSZqi3yeCneUTLJD6XomQJlZzbI4mst89yspVSAnA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@lottiefiles/dotlottie-react": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-react/-/dotlottie-react-0.13.3.tgz", - "integrity": "sha512-V4FfdYlqzjBUX7f0KV6vfQOOI0Cp+3XeG/ZqSDFSEVg5P7fpROpDv5/I9aTM8sOCESK1SWT96Fem+QVUnBV1wQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@lottiefiles/dotlottie-web": "0.42.0" - }, - "peerDependencies": { - "react": "^17 || ^18 || ^19" - } - }, - "node_modules/@lottiefiles/dotlottie-web": { - "version": "0.42.0", - "resolved": "https://registry.npmjs.org/@lottiefiles/dotlottie-web/-/dotlottie-web-0.42.0.tgz", - "integrity": "sha512-Zr2LCaOAoPCsdAQgeLyCSiQ1+xrAJtRCyuEYDj0qR5heUwpc+Pxbb88JyTVumcXFfKOBMOMmrlsTScLz2mrvQQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@monaco-editor/loader": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.6.1.tgz", - "integrity": "sha512-w3tEnj9HYEC73wtjdpR089AqkUPskFRcdkxsiSFt3SoUc3OHpmu+leP94CXBm4mHfefmhsdfI0ZQu6qJ0wgtPg==", - "license": "MIT", - "dependencies": { - "state-local": "^1.0.6" - } - }, - "node_modules/@monaco-editor/react": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.7.0.tgz", - "integrity": "sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==", - "license": "MIT", - "dependencies": { - "@monaco-editor/loader": "^1.5.0" - }, - "peerDependencies": { - "monaco-editor": ">= 0.25.0 < 1", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } + "dependencies": { + "@monaco-editor/loader": "^1.5.0" + }, + "peerDependencies": { + "monaco-editor": ">= 0.25.0 < 1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.12", @@ -4102,24 +3862,24 @@ "license": "MIT" }, "node_modules/@next/env": { - "version": "15.5.6", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.6.tgz", - "integrity": "sha512-3qBGRW+sCGzgbpc5TS1a0p7eNxnOarGVQhZxfvTdnV0gFI61lX7QNtQ4V1TSREctXzYn5NetbUsLvyqwLFJM6Q==", + "version": "15.5.9", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.9.tgz", + "integrity": "sha512-4GlTZ+EJM7WaW2HEZcyU317tIQDjkQIyENDLxYJfSWlfqguN+dHkZgyQTV/7ykvobU7yEH5gKvreNrH4B6QgIg==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.0.3.tgz", - "integrity": "sha512-6sPWmZetzFWMsz7Dhuxsdmbu3fK+/AxKRtj7OB0/3OZAI2MHB/v2FeYh271LZ9abvnM1WIwWc/5umYjx0jo5sQ==", + "version": "16.0.8", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.0.8.tgz", + "integrity": "sha512-1miV0qXDcLUaOdHridVPCh4i39ElRIAraseVIbb3BEqyZ5ol9sPyjTP/GNTPV5rBxqxjF6/vv5zQTVbhiNaLqA==", "license": "MIT", "dependencies": { "fast-glob": "3.3.1" } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.6.tgz", - "integrity": "sha512-ES3nRz7N+L5Umz4KoGfZ4XX6gwHplwPhioVRc25+QNsDa7RtUF/z8wJcbuQ2Tffm5RZwuN2A063eapoJ1u4nPg==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.7.tgz", + "integrity": "sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==", "cpu": [ "arm64" ], @@ -4133,9 +3893,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.6.tgz", - "integrity": "sha512-JIGcytAyk9LQp2/nuVZPAtj8uaJ/zZhsKOASTjxDug0SPU9LAM3wy6nPU735M1OqacR4U20LHVF5v5Wnl9ptTA==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.7.tgz", + "integrity": "sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==", "cpu": [ "x64" ], @@ -4149,9 +3909,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.6.tgz", - "integrity": "sha512-qvz4SVKQ0P3/Im9zcS2RmfFL/UCQnsJKJwQSkissbngnB/12c6bZTCB0gHTexz1s6d/mD0+egPKXAIRFVS7hQg==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.7.tgz", + "integrity": "sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA==", "cpu": [ "arm64" ], @@ -4165,9 +3925,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.6.tgz", - "integrity": "sha512-FsbGVw3SJz1hZlvnWD+T6GFgV9/NYDeLTNQB2MXoPN5u9VA9OEDy6fJEfePfsUKAhJufFbZLgp0cPxMuV6SV0w==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.7.tgz", + "integrity": "sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==", "cpu": [ "arm64" ], @@ -4181,9 +3941,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.6.tgz", - "integrity": "sha512-3QnHGFWlnvAgyxFxt2Ny8PTpXtQD7kVEeaFat5oPAHHI192WKYB+VIKZijtHLGdBBvc16tiAkPTDmQNOQ0dyrA==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.7.tgz", + "integrity": "sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==", "cpu": [ "x64" ], @@ -4197,9 +3957,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.6.tgz", - "integrity": "sha512-OsGX148sL+TqMK9YFaPFPoIaJKbFJJxFzkXZljIgA9hjMjdruKht6xDCEv1HLtlLNfkx3c5w2GLKhj7veBQizQ==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.7.tgz", + "integrity": "sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==", "cpu": [ "x64" ], @@ -4213,9 +3973,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.6.tgz", - "integrity": "sha512-ONOMrqWxdzXDJNh2n60H6gGyKed42Ieu6UTVPZteXpuKbLZTH4G4eBMsr5qWgOBA+s7F+uB4OJbZnrkEDnZ5Fg==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.7.tgz", + "integrity": "sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==", "cpu": [ "arm64" ], @@ -4229,9 +3989,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.6.tgz", - "integrity": "sha512-pxK4VIjFRx1MY92UycLOOw7dTdvccWsNETQ0kDHkBlcFH1GrTLUjSiHU1ohrznnux6TqRHgv5oflhfIWZwVROQ==", + "version": "15.5.7", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.7.tgz", + "integrity": "sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw==", "cpu": [ "x64" ], @@ -4913,111 +4673,111 @@ "license": "MIT" }, "node_modules/@peculiar/asn1-android": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-android/-/asn1-android-2.5.0.tgz", - "integrity": "sha512-t8A83hgghWQkcneRsgGs2ebAlRe54ns88p7ouv8PW2tzF1nAW4yHcL4uZKrFpIU+uszIRzTkcCuie37gpkId0A==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-android/-/asn1-android-2.6.0.tgz", + "integrity": "sha512-cBRCKtYPF7vJGN76/yG8VbxRcHLPF3HnkoHhKOZeHpoVtbMYfY9ROKtH3DtYUY9m8uI1Mh47PRhHf2hSK3xcSQ==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.5.0", + "@peculiar/asn1-schema": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-cms": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.5.0.tgz", - "integrity": "sha512-p0SjJ3TuuleIvjPM4aYfvYw8Fk1Hn/zAVyPJZTtZ2eE9/MIer6/18ROxX6N/e6edVSfvuZBqhxAj3YgsmSjQ/A==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.0.tgz", + "integrity": "sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.5.0", - "@peculiar/asn1-x509": "^2.5.0", - "@peculiar/asn1-x509-attr": "^2.5.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "@peculiar/asn1-x509-attr": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-csr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.5.0.tgz", - "integrity": "sha512-ioigvA6WSYN9h/YssMmmoIwgl3RvZlAYx4A/9jD2qaqXZwGcNlAxaw54eSx2QG1Yu7YyBC5Rku3nNoHrQ16YsQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.0.tgz", + "integrity": "sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.5.0", - "@peculiar/asn1-x509": "^2.5.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-ecc": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.5.0.tgz", - "integrity": "sha512-t4eYGNhXtLRxaP50h3sfO6aJebUCDGQACoeexcelL4roMFRRVgB20yBIu2LxsPh/tdW9I282gNgMOyg3ywg/mg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.0.tgz", + "integrity": "sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.5.0", - "@peculiar/asn1-x509": "^2.5.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-pfx": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.5.0.tgz", - "integrity": "sha512-Vj0d0wxJZA+Ztqfb7W+/iu8Uasw6hhKtCdLKXLG/P3kEPIQpqGI4P4YXlROfl7gOCqFIbgsj1HzFIFwQ5s20ug==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.0.tgz", + "integrity": "sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ==", "license": "MIT", "dependencies": { - "@peculiar/asn1-cms": "^2.5.0", - "@peculiar/asn1-pkcs8": "^2.5.0", - "@peculiar/asn1-rsa": "^2.5.0", - "@peculiar/asn1-schema": "^2.5.0", + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-pkcs8": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-pkcs8": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.5.0.tgz", - "integrity": "sha512-L7599HTI2SLlitlpEP8oAPaJgYssByI4eCwQq2C9eC90otFpm8MRn66PpbKviweAlhinWQ3ZjDD2KIVtx7PaVw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.0.tgz", + "integrity": "sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.5.0", - "@peculiar/asn1-x509": "^2.5.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-pkcs9": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.5.0.tgz", - "integrity": "sha512-UgqSMBLNLR5TzEZ5ZzxR45Nk6VJrammxd60WMSkofyNzd3DQLSNycGWSK5Xg3UTYbXcDFyG8pA/7/y/ztVCa6A==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.0.tgz", + "integrity": "sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw==", "license": "MIT", "dependencies": { - "@peculiar/asn1-cms": "^2.5.0", - "@peculiar/asn1-pfx": "^2.5.0", - "@peculiar/asn1-pkcs8": "^2.5.0", - "@peculiar/asn1-schema": "^2.5.0", - "@peculiar/asn1-x509": "^2.5.0", - "@peculiar/asn1-x509-attr": "^2.5.0", + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-pfx": "^2.6.0", + "@peculiar/asn1-pkcs8": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "@peculiar/asn1-x509-attr": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-rsa": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.5.0.tgz", - "integrity": "sha512-qMZ/vweiTHy9syrkkqWFvbT3eLoedvamcUdnnvwyyUNv5FgFXA3KP8td+ATibnlZ0EANW5PYRm8E6MJzEB/72Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.0.tgz", + "integrity": "sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.5.0", - "@peculiar/asn1-x509": "^2.5.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-schema": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.5.0.tgz", - "integrity": "sha512-YM/nFfskFJSlHqv59ed6dZlLZqtZQwjRVJ4bBAiWV08Oc+1rSd5lDZcBEx0lGDHfSoH3UziI2pXt2UM33KerPQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz", + "integrity": "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==", "license": "MIT", "dependencies": { "asn1js": "^3.0.6", @@ -5026,75 +4786,60 @@ } }, "node_modules/@peculiar/asn1-x509": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.5.0.tgz", - "integrity": "sha512-CpwtMCTJvfvYTFMuiME5IH+8qmDe3yEWzKHe7OOADbGfq7ohxeLaXwQo0q4du3qs0AII3UbLCvb9NF/6q0oTKQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.0.tgz", + "integrity": "sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.5.0", + "@peculiar/asn1-schema": "^2.6.0", "asn1js": "^3.0.6", "pvtsutils": "^1.3.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/asn1-x509-attr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.5.0.tgz", - "integrity": "sha512-9f0hPOxiJDoG/bfNLAFven+Bd4gwz/VzrCIIWc1025LEI4BXO0U5fOCTNDPbbp2ll+UzqKsZ3g61mpBp74gk9A==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.0.tgz", + "integrity": "sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.5.0", - "@peculiar/asn1-x509": "^2.5.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "node_modules/@peculiar/x509": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.0.tgz", - "integrity": "sha512-Yc4PDxN3OrxUPiXgU63c+ZRXKGE8YKF2McTciYhUHFtHVB0KMnjeFSU0qpztGhsp4P0uKix4+J2xEpIEDu8oXg==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-cms": "^2.5.0", - "@peculiar/asn1-csr": "^2.5.0", - "@peculiar/asn1-ecc": "^2.5.0", - "@peculiar/asn1-pkcs9": "^2.5.0", - "@peculiar/asn1-rsa": "^2.5.0", - "@peculiar/asn1-schema": "^2.5.0", - "@peculiar/asn1-x509": "^2.5.0", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.2.tgz", + "integrity": "sha512-r2w1Hg6pODDs0zfAKHkSS5HLkOLSeburtcgwvlLLWWCixw+MmW3U6kD5ddyvc2Y2YdbGuVwCF2S2ASoU1cFAag==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-csr": "^2.6.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-pkcs9": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", "pvtsutils": "^1.3.6", "reflect-metadata": "^0.2.2", "tslib": "^2.8.1", "tsyringe": "^4.10.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, + }, "engines": { - "node": ">=14" + "node": ">=22.0.0" } }, "node_modules/@posthog/core": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.5.2.tgz", - "integrity": "sha512-iedUP3EnOPPxTA2VaIrsrd29lSZnUV+ZrMnvY56timRVeZAXoYCkmjfIs3KBAsF8OUT5h1GXLSkoQdrV0r31OQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.7.1.tgz", + "integrity": "sha512-kjK0eFMIpKo9GXIbts8VtAknsoZ18oZorANdtuTj1CbgS28t4ZVq//HAWhnxEuXRTrtkd+SUJ6Ux3j2Af8NCuA==", "license": "MIT", "dependencies": { "cross-spawn": "^7.0.6" } }, - "node_modules/@radix-ui/colors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/colors/-/colors-3.0.0.tgz", - "integrity": "sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==", - "dev": true, - "license": "MIT" - }, "node_modules/@radix-ui/number": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", @@ -5130,17 +4875,13 @@ } } }, - "node_modules/@radix-ui/react-avatar": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.11.tgz", - "integrity": "sha512-0Qk603AHGV28BOBO34p7IgD5m+V5Sg/YovfayABkoDDBM5d3NCx0Mp4gGrjzLGes1jV5eNOE1r3itqOR33VC6Q==", + "node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-context": "1.1.3", - "@radix-ui/react-primitive": "2.1.4", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-is-hydrated": "0.1.0", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -5157,11 +4898,14 @@ } } }, - "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-context": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.3.tgz", - "integrity": "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==", + "node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -5172,13 +4916,17 @@ } } }, - "node_modules/@radix-ui/react-avatar/node_modules/@radix-ui/react-primitive": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", - "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "node_modules/@radix-ui/react-avatar": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.11.tgz", + "integrity": "sha512-0Qk603AHGV28BOBO34p7IgD5m+V5Sg/YovfayABkoDDBM5d3NCx0Mp4gGrjzLGes1jV5eNOE1r3itqOR33VC6Q==", "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.2.4" + "@radix-ui/react-context": "1.1.3", + "@radix-ui/react-primitive": "2.1.4", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-is-hydrated": "0.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -5225,45 +4973,27 @@ } } }, - "node_modules/@radix-ui/react-collapsible": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", - "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-collection": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", - "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { @@ -5281,7 +5011,7 @@ } } }, - "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-slot": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", @@ -5299,22 +5029,37 @@ } } }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", - "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "node_modules/@radix-ui/react-collapsible": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", + "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-context": { + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-context": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", @@ -5329,26 +5074,13 @@ } } }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", - "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -5365,7 +5097,7 @@ } } }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-slot": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", @@ -5383,61 +5115,16 @@ } } }, - "node_modules/@radix-ui/react-direction": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", - "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", - "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-escape-keydown": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", - "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -5454,10 +5141,10 @@ } } }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", - "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -5469,15 +5156,13 @@ } } }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", - "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -5494,22 +5179,13 @@ } } }, - "node_modules/@radix-ui/react-icons": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.2.tgz", - "integrity": "sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==", - "license": "MIT", - "peerDependencies": { - "react": "^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@radix-ui/react-id": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", - "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -5521,74 +5197,54 @@ } } }, - "node_modules/@radix-ui/react-label": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz", - "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==", + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.4" - }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", - "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "node_modules/@radix-ui/react-context": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.3.tgz", + "integrity": "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==", "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.2.4" - }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-menu": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", - "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, @@ -5607,14 +5263,11 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -5625,27 +5278,13 @@ } } }, - "node_modules/@radix-ui/react-popover": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", - "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -5662,7 +5301,7 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", @@ -5680,46 +5319,32 @@ } } }, - "node_modules/@radix-ui/react-popper": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", - "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-rect": "1.1.1", - "@radix-ui/react-use-size": "1.1.1", - "@radix-ui/rect": "1.1.1" - }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-portal": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", - "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", "license": "MIT", "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -5736,14 +5361,13 @@ } } }, - "node_modules/@radix-ui/react-presence": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", - "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -5760,17 +5384,41 @@ } } }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.2.3" + "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, @@ -5783,14 +5431,11 @@ } } }, - "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -5801,14 +5446,13 @@ } } }, - "node_modules/@radix-ui/react-progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.8.tgz", - "integrity": "sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==", + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-context": "1.1.3", - "@radix-ui/react-primitive": "2.1.4" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -5825,10 +5469,28 @@ } } }, - "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-context": { + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.3.tgz", - "integrity": "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -5840,13 +5502,15 @@ } } }, - "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-primitive": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", - "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.2.4" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -5863,22 +5527,13 @@ } } }, - "node_modules/@radix-ui/react-radio-group": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz", - "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==", + "node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -5895,53 +5550,59 @@ } } }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", - "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-scroll-area": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", - "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", + "node_modules/@radix-ui/react-icons": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.2.tgz", + "integrity": "sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==", + "license": "MIT", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", "license": "MIT", "dependencies": { - "@radix-ui/number": "1.1.1", - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1" }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz", + "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", @@ -5957,13 +5618,12 @@ } } }, - "node_modules/@radix-ui/react-select": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", - "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", + "node_modules/@radix-ui/react-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", "license": "MIT", "dependencies": { - "@radix-ui/number": "1.1.1", "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", @@ -5975,13 +5635,11 @@ "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, @@ -6000,14 +5658,11 @@ } } }, - "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" - }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -6018,36 +5673,13 @@ } } }, - "node_modules/@radix-ui/react-separator": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.8.tgz", - "integrity": "sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.4" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", - "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.2.4" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -6064,10 +5696,10 @@ } } }, - "node_modules/@radix-ui/react-slot": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", - "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" @@ -6082,19 +5714,27 @@ } } }, - "node_modules/@radix-ui/react-switch": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", - "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "node_modules/@radix-ui/react-popover": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", + "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-previous": "1.1.1", - "@radix-ui/react-use-size": "1.1.1" + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", @@ -6111,54 +5751,28 @@ } } }, - "node_modules/@radix-ui/react-tabs": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", - "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-use-controllable-state": "1.2.2" - }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-toast": { - "version": "1.2.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.15.tgz", - "integrity": "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==", + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-collection": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-visually-hidden": "1.2.3" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -6175,46 +5789,40 @@ } } }, - "node_modules/@radix-ui/react-toggle": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz", - "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==", - "dev": true, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, - "node_modules/@radix-ui/react-toggle-group": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz", - "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==", - "dev": true, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-roving-focus": "1.1.11", - "@radix-ui/react-toggle": "1.1.10", - "@radix-ui/react-use-controllable-state": "1.2.2" + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -6231,24 +5839,28 @@ } } }, - "node_modules/@radix-ui/react-tooltip": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", - "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "@radix-ui/react-visually-hidden": "1.2.3" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", @@ -6265,7 +5877,7 @@ } } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-slot": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", @@ -6283,47 +5895,60 @@ } } }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", - "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", - "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.2", - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", - "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -6335,80 +5960,114 @@ } } }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", - "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.1" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-use-is-hydrated": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", - "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", "license": "MIT", "dependencies": { - "use-sync-external-store": "^1.5.0" + "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", - "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "node_modules/@radix-ui/react-progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.8.tgz", + "integrity": "sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==", "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.3", + "@radix-ui/react-primitive": "2.1.4" + }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", - "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "node_modules/@radix-ui/react-radio-group": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz", + "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==", "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", - "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", - "dependencies": { - "@radix-ui/rect": "1.1.1" - }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -6419,31 +6078,62 @@ } } }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", - "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.1" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true + }, + "@types/react-dom": { + "optional": true } } }, - "node_modules/@radix-ui/react-visually-hidden": { + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-slot": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", - "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.1.3" + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", @@ -6460,1382 +6150,1250 @@ } } }, - "node_modules/@radix-ui/rect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", - "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", - "license": "MIT" - }, - "node_modules/@react-aria/focus": { - "version": "3.21.2", - "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.21.2.tgz", - "integrity": "sha512-JWaCR7wJVggj+ldmM/cb/DXFg47CXR55lznJhZBh4XVqJjMKwaOOqpT5vNN7kpC1wUpXicGNuDnJDN1S/+6dhQ==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.25.6", - "@react-aria/utils": "^3.31.0", - "@react-types/shared": "^3.32.1", - "@swc/helpers": "^0.5.0", - "clsx": "^2.0.0" - }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-aria/interactions": { - "version": "3.25.6", - "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.25.6.tgz", - "integrity": "sha512-5UgwZmohpixwNMVkMvn9K1ceJe6TzlRlAfuYoQDUuOkk62/JVJNDLAPKIf5YMRc7d2B0rmfgaZLMtbREb0Zvkw==", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", "dependencies": { - "@react-aria/ssr": "^3.9.10", - "@react-aria/utils": "^3.31.0", - "@react-stately/flags": "^3.1.2", - "@react-types/shared": "^3.32.1", - "@swc/helpers": "^0.5.0" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-aria/ssr": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.10.tgz", - "integrity": "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", "dependencies": { - "@swc/helpers": "^0.5.0" - }, - "engines": { - "node": ">= 12" + "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-aria/utils": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.31.0.tgz", - "integrity": "sha512-ABOzCsZrWzf78ysswmguJbx3McQUja7yeGj6/vZo4JVsZNlxAN+E9rs381ExBRI0KzVo6iBTeX5De8eMZPJXig==", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", + "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", + "license": "MIT", "dependencies": { - "@react-aria/ssr": "^3.9.10", - "@react-stately/flags": "^3.1.2", - "@react-stately/utils": "^3.10.8", - "@react-types/shared": "^3.32.1", - "@swc/helpers": "^0.5.0", - "clsx": "^2.0.0" + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-email/body": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@react-email/body/-/body-0.1.0.tgz", - "integrity": "sha512-o1bcSAmDYNNHECbkeyceCVPGmVsYvT+O3sSO/Ct7apKUu3JphTi31hu+0Nwqr/pgV5QFqdoT5vdS3SW5DJFHgQ==", + "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/button": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.2.0.tgz", - "integrity": "sha512-8i+v6cMxr2emz4ihCrRiYJPp2/sdYsNNsBzXStlcA+/B9Umpm5Jj3WJKYpgTPM+aeyiqlG/MMI1AucnBm4f1oQ==", + "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", - "engines": { - "node": ">=18.0.0" + "dependencies": { + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-email/code-block": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@react-email/code-block/-/code-block-0.1.0.tgz", - "integrity": "sha512-jSpHFsgqnQXxDIssE4gvmdtFncaFQz5D6e22BnVjcCPk/udK+0A9jRwGFEG8JD2si9ZXBmU4WsuqQEczuZn4ww==", + "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "prismjs": "^1.30.0" - }, - "engines": { - "node": ">=18.0.0" + "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/code-inline": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@react-email/code-inline/-/code-inline-0.0.5.tgz", - "integrity": "sha512-MmAsOzdJpzsnY2cZoPHFPk6uDO/Ncpb4Kh1hAt9UZc1xOW3fIzpe1Pi9y9p6wwUmpaeeDalJxAxH6/fnTquinA==", + "node_modules/@radix-ui/react-select": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", + "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", "license": "MIT", - "engines": { - "node": ">=18.0.0" + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-email/column": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@react-email/column/-/column-0.0.13.tgz", - "integrity": "sha512-Lqq17l7ShzJG/d3b1w/+lVO+gp2FM05ZUo/nW0rjxB8xBICXOVv6PqjDnn3FXKssvhO5qAV20lHM6S+spRhEwQ==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/components": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.5.7.tgz", - "integrity": "sha512-ECyVoyDcev2FSQ7C0buXaIJ0+6MRDXNUbCOZwBRrlLdCCRjap2b4+MHrYSTXFzo5kqfjjRoyo/2PbJXFQni67g==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "@react-email/body": "0.1.0", - "@react-email/button": "0.2.0", - "@react-email/code-block": "0.1.0", - "@react-email/code-inline": "0.0.5", - "@react-email/column": "0.0.13", - "@react-email/container": "0.0.15", - "@react-email/font": "0.0.9", - "@react-email/head": "0.0.12", - "@react-email/heading": "0.0.15", - "@react-email/hr": "0.0.11", - "@react-email/html": "0.0.11", - "@react-email/img": "0.0.11", - "@react-email/link": "0.0.12", - "@react-email/markdown": "0.0.16", - "@react-email/preview": "0.0.13", - "@react-email/render": "1.4.0", - "@react-email/row": "0.0.12", - "@react-email/section": "0.0.16", - "@react-email/tailwind": "1.2.2", - "@react-email/text": "0.1.5" - }, - "engines": { - "node": ">=18.0.0" + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" - } - }, - "node_modules/@react-email/container": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@react-email/container/-/container-0.0.15.tgz", - "integrity": "sha512-Qo2IQo0ru2kZq47REmHW3iXjAQaKu4tpeq/M8m1zHIVwKduL2vYOBQWbC2oDnMtWPmkBjej6XxgtZByxM6cCFg==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-email/font": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/@react-email/font/-/font-0.0.9.tgz", - "integrity": "sha512-4zjq23oT9APXkerqeslPH3OZWuh5X4crHK6nx82mVHV2SrLba8+8dPEnWbaACWTNjOCbcLIzaC9unk7Wq2MIXw==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/head": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@react-email/head/-/head-0.0.12.tgz", - "integrity": "sha512-X2Ii6dDFMF+D4niNwMAHbTkeCjlYYnMsd7edXOsi0JByxt9wNyZ9EnhFiBoQdqkE+SMDcu8TlNNttMrf5sJeMA==", + "node_modules/@radix-ui/react-separator": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.8.tgz", + "integrity": "sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==", "license": "MIT", - "engines": { - "node": ">=18.0.0" + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" }, "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-email/heading": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@react-email/heading/-/heading-0.0.15.tgz", - "integrity": "sha512-xF2GqsvBrp/HbRHWEfOgSfRFX+Q8I5KBEIG5+Lv3Vb2R/NYr0s8A5JhHHGf2pWBMJdbP4B2WHgj/VUrhy8dkIg==", + "node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", "license": "MIT", - "engines": { - "node": ">=18.0.0" + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/hr": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@react-email/hr/-/hr-0.0.11.tgz", - "integrity": "sha512-S1gZHVhwOsd1Iad5IFhpfICwNPMGPJidG/Uysy1AwmspyoAP5a4Iw3OWEpINFdgh9MHladbxcLKO2AJO+cA9Lw==", + "node_modules/@radix-ui/react-switch": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", "license": "MIT", - "engines": { - "node": ">=18.0.0" + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-email/html": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@react-email/html/-/html-0.0.11.tgz", - "integrity": "sha512-qJhbOQy5VW5qzU74AimjAR9FRFQfrMa7dn4gkEXKMB/S9xZN8e1yC1uA9C15jkXI/PzmJ0muDIWmFwatm5/+VA==", + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/img": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@react-email/img/-/img-0.0.11.tgz", - "integrity": "sha512-aGc8Y6U5C3igoMaqAJKsCpkbm1XjguQ09Acd+YcTKwjnC2+0w3yGUJkjWB2vTx4tN8dCqQCXO8FmdJpMfOA9EQ==", + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", - "engines": { - "node": ">=18.0.0" + "dependencies": { + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-email/link": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@react-email/link/-/link-0.0.12.tgz", - "integrity": "sha512-vF+xxQk2fGS1CN7UPQDbzvcBGfffr+GjTPNiWM38fhBfsLv6A/YUfaqxWlmL7zLzVmo0K2cvvV9wxlSyNba1aQ==", + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", - "engines": { - "node": ">=18.0.0" + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/markdown": { - "version": "0.0.16", - "resolved": "https://registry.npmjs.org/@react-email/markdown/-/markdown-0.0.16.tgz", - "integrity": "sha512-KSUHmoBMYhvc6iGwlIDkm0DRGbGQ824iNjLMCJsBVUoKHGQYs7F/N3b1tnS1YzRUX+GwHIexSsHuIUEi1m+8OQ==", + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.13.tgz", + "integrity": "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==", "license": "MIT", "dependencies": { - "marked": "^15.0.12" - }, - "engines": { - "node": ">=18.0.0" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-email/preview": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@react-email/preview/-/preview-0.0.13.tgz", - "integrity": "sha512-F7j9FJ0JN/A4d7yr+aw28p4uX7VLWs7hTHtLo7WRyw4G+Lit6Zucq4UWKRxJC8lpsUdzVmG7aBJnKOT+urqs/w==", + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@react-email/preview-server/-/preview-server-4.3.2.tgz", - "integrity": "sha512-rBm2AJhOhfi8Fd8MAFN4DQ0FQtsqq38JjJIWvbHA0EYwbjNwODmtzRZCkbdp+8o6GL5PKiRcikF0FDzbOYAJ+w==", - "dev": true, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", "dependencies": { - "@babel/core": "7.26.10", - "@babel/parser": "7.27.0", - "@babel/traverse": "7.27.0", - "@lottiefiles/dotlottie-react": "0.13.3", - "@radix-ui/colors": "3.0.0", - "@radix-ui/react-collapsible": "1.1.12", - "@radix-ui/react-dropdown-menu": "2.1.16", - "@radix-ui/react-popover": "1.1.15", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-tabs": "1.1.13", - "@radix-ui/react-toggle-group": "1.1.11", - "@radix-ui/react-tooltip": "1.2.8", - "@types/node": "22.14.1", - "@types/normalize-path": "3.0.2", - "@types/react": "19.0.10", - "@types/react-dom": "19.0.4", - "@types/webpack": "5.28.5", - "autoprefixer": "10.4.21", - "clsx": "2.1.1", - "esbuild": "0.25.10", - "framer-motion": "12.23.22", - "json5": "2.2.3", - "log-symbols": "4.1.0", - "module-punycode": "npm:punycode@2.3.1", - "next": "15.5.2", - "node-html-parser": "7.0.1", - "ora": "5.4.1", - "pretty-bytes": "6.1.1", - "prism-react-renderer": "2.4.1", - "react": "19.0.0", - "react-dom": "19.0.0", - "sharp": "0.34.4", - "socket.io-client": "4.8.1", - "sonner": "2.0.3", - "source-map-js": "1.2.1", - "spamc": "0.0.5", - "stacktrace-parser": "0.1.11", - "tailwind-merge": "3.2.0", - "tailwindcss": "3.4.0", - "use-debounce": "10.0.4", - "zod": "3.24.3" - } - }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", - "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/android-arm": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", - "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/android-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", - "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@radix-ui/react-toast": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.15.tgz", + "integrity": "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/android-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", - "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", - "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/darwin-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", - "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", - "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", + "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", - "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/linux-arm": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", - "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/linux-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", - "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/linux-ia32": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", - "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", - "cpu": [ - "ia32" - ], - "dev": true, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/linux-loong64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", - "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", - "cpu": [ - "loong64" - ], - "dev": true, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", - "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", - "cpu": [ - "mips64el" - ], - "dev": true, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", - "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", - "cpu": [ - "ppc64" - ], - "dev": true, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", - "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", - "cpu": [ - "riscv64" - ], - "dev": true, + "node_modules/@radix-ui/react-use-is-hydrated": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz", + "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "use-sync-external-store": "^1.5.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/linux-s390x": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", - "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", - "cpu": [ - "s390x" - ], - "dev": true, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/linux-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", - "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", - "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", - "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", - "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", - "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", - "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/sunos-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", - "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/win32-arm64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", - "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, + "node_modules/@react-aria/focus": { + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.21.2.tgz", + "integrity": "sha512-JWaCR7wJVggj+ldmM/cb/DXFg47CXR55lznJhZBh4XVqJjMKwaOOqpT5vNN7kpC1wUpXicGNuDnJDN1S/+6dhQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.25.6", + "@react-aria/utils": "^3.31.0", + "@react-types/shared": "^3.32.1", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/win32-ia32": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", - "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "node_modules/@react-aria/interactions": { + "version": "3.25.6", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.25.6.tgz", + "integrity": "sha512-5UgwZmohpixwNMVkMvn9K1ceJe6TzlRlAfuYoQDUuOkk62/JVJNDLAPKIf5YMRc7d2B0rmfgaZLMtbREb0Zvkw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.10", + "@react-aria/utils": "^3.31.0", + "@react-stately/flags": "^3.1.2", + "@react-types/shared": "^3.32.1", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, - "node_modules/@react-email/preview-server/node_modules/@esbuild/win32-x64": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", - "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "node_modules/@react-aria/ssr": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.10.tgz", + "integrity": "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, "engines": { - "node": ">=18" + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, - "node_modules/@react-email/preview-server/node_modules/@next/env": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.2.tgz", - "integrity": "sha512-Qe06ew4zt12LeO6N7j8/nULSOe3fMXE4dM6xgpBQNvdzyK1sv5y4oAP3bq4LamrvGCZtmRYnW8URFCeX5nFgGg==", - "dev": true, - "license": "MIT" + "node_modules/@react-aria/utils": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.31.0.tgz", + "integrity": "sha512-ABOzCsZrWzf78ysswmguJbx3McQUja7yeGj6/vZo4JVsZNlxAN+E9rs381ExBRI0KzVo6iBTeX5De8eMZPJXig==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.10", + "@react-stately/flags": "^3.1.2", + "@react-stately/utils": "^3.10.8", + "@react-types/shared": "^3.32.1", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } }, - "node_modules/@react-email/preview-server/node_modules/@next/swc-darwin-arm64": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.2.tgz", - "integrity": "sha512-8bGt577BXGSd4iqFygmzIfTYizHb0LGWqH+qgIF/2EDxS5JsSdERJKA8WgwDyNBZgTIIA4D8qUtoQHmxIIquoQ==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@react-email/body": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@react-email/body/-/body-0.2.0.tgz", + "integrity": "sha512-9GCWmVmKUAoRfloboCd+RKm6X17xn7eGL7HnpAZUnjBXBilWCxsKnLMTC/ixSHDKS/A/057M1Tx6ZUXd89sVBw==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/preview-server/node_modules/@next/swc-darwin-x64": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.2.tgz", - "integrity": "sha512-2DjnmR6JHK4X+dgTXt5/sOCu/7yPtqpYt8s8hLkHFK3MGkka2snTv3yRMdHvuRtJVkPwCGsvBSwmoQCHatauFQ==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@react-email/button": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.2.0.tgz", + "integrity": "sha512-8i+v6cMxr2emz4ihCrRiYJPp2/sdYsNNsBzXStlcA+/B9Umpm5Jj3WJKYpgTPM+aeyiqlG/MMI1AucnBm4f1oQ==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">= 10" + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/preview-server/node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.2.tgz", - "integrity": "sha512-3j7SWDBS2Wov/L9q0mFJtEvQ5miIqfO4l7d2m9Mo06ddsgUK8gWfHGgbjdFlCp2Ek7MmMQZSxpGFqcC8zGh2AA==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@react-email/code-block": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@react-email/code-block/-/code-block-0.2.0.tgz", + "integrity": "sha512-eIrPW9PIFgDopQU0e/OPpwCW2QWQDtNZDSsiN4sJO8KdMnWWnXJicnRfzrit5rHwFo+Y98i+w/Y5ScnBAFr1dQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "prismjs": "^1.30.0" + }, "engines": { - "node": ">= 10" + "node": ">=22.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/preview-server/node_modules/@next/swc-linux-arm64-musl": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.2.tgz", - "integrity": "sha512-s6N8k8dF9YGc5T01UPQ08yxsK6fUow5gG1/axWc1HVVBYQBgOjca4oUZF7s4p+kwhkB1bDSGR8QznWrFZ/Rt5g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@react-email/code-inline": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@react-email/code-inline/-/code-inline-0.0.5.tgz", + "integrity": "sha512-MmAsOzdJpzsnY2cZoPHFPk6uDO/Ncpb4Kh1hAt9UZc1xOW3fIzpe1Pi9y9p6wwUmpaeeDalJxAxH6/fnTquinA==", + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/preview-server/node_modules/@next/swc-linux-x64-gnu": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.2.tgz", - "integrity": "sha512-o1RV/KOODQh6dM6ZRJGZbc+MOAHww33Vbs5JC9Mp1gDk8cpEO+cYC/l7rweiEalkSm5/1WGa4zY7xrNwObN4+Q==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@react-email/column": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@react-email/column/-/column-0.0.13.tgz", + "integrity": "sha512-Lqq17l7ShzJG/d3b1w/+lVO+gp2FM05ZUo/nW0rjxB8xBICXOVv6PqjDnn3FXKssvhO5qAV20lHM6S+spRhEwQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">= 10" + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/preview-server/node_modules/@next/swc-linux-x64-musl": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.2.tgz", - "integrity": "sha512-/VUnh7w8RElYZ0IV83nUcP/J4KJ6LLYliiBIri3p3aW2giF+PAVgZb6mk8jbQSB3WlTai8gEmCAr7kptFa1H6g==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@react-email/components": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@react-email/components/-/components-1.0.1.tgz", + "integrity": "sha512-HnL0Y/up61sOBQT2cQg9N/kCoW0bP727gDs2MkFWQYELg6+iIHidMDvENXFC0f1ZE6hTB+4t7sszptvTcJWsDA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@react-email/body": "0.2.0", + "@react-email/button": "0.2.0", + "@react-email/code-block": "0.2.0", + "@react-email/code-inline": "0.0.5", + "@react-email/column": "0.0.13", + "@react-email/container": "0.0.15", + "@react-email/font": "0.0.9", + "@react-email/head": "0.0.12", + "@react-email/heading": "0.0.15", + "@react-email/hr": "0.0.11", + "@react-email/html": "0.0.11", + "@react-email/img": "0.0.11", + "@react-email/link": "0.0.12", + "@react-email/markdown": "0.0.17", + "@react-email/preview": "0.0.13", + "@react-email/render": "2.0.0", + "@react-email/row": "0.0.12", + "@react-email/section": "0.0.16", + "@react-email/tailwind": "2.0.1", + "@react-email/text": "0.1.5" + }, "engines": { - "node": ">= 10" + "node": ">=22.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/preview-server/node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.2.tgz", - "integrity": "sha512-sMPyTvRcNKXseNQ/7qRfVRLa0VhR0esmQ29DD6pqvG71+JdVnESJaHPA8t7bc67KD5spP3+DOCNLhqlEI2ZgQg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@react-email/container": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@react-email/container/-/container-0.0.15.tgz", + "integrity": "sha512-Qo2IQo0ru2kZq47REmHW3iXjAQaKu4tpeq/M8m1zHIVwKduL2vYOBQWbC2oDnMtWPmkBjej6XxgtZByxM6cCFg==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">= 10" + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/preview-server/node_modules/@next/swc-win32-x64-msvc": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.2.tgz", - "integrity": "sha512-W5VvyZHnxG/2ukhZF/9Ikdra5fdNftxI6ybeVKYvBPDtyx7x4jPPSNduUkfH5fo3zG0JQ0bPxgy41af2JX5D4Q==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@react-email/font": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@react-email/font/-/font-0.0.9.tgz", + "integrity": "sha512-4zjq23oT9APXkerqeslPH3OZWuh5X4crHK6nx82mVHV2SrLba8+8dPEnWbaACWTNjOCbcLIzaC9unk7Wq2MIXw==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/head": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@react-email/head/-/head-0.0.12.tgz", + "integrity": "sha512-X2Ii6dDFMF+D4niNwMAHbTkeCjlYYnMsd7edXOsi0JByxt9wNyZ9EnhFiBoQdqkE+SMDcu8TlNNttMrf5sJeMA==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">= 10" + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/preview-server/node_modules/@radix-ui/react-slot": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", - "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", - "dev": true, + "node_modules/@react-email/heading": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@react-email/heading/-/heading-0.0.15.tgz", + "integrity": "sha512-xF2GqsvBrp/HbRHWEfOgSfRFX+Q8I5KBEIG5+Lv3Vb2R/NYr0s8A5JhHHGf2pWBMJdbP4B2WHgj/VUrhy8dkIg==", "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2" + "engines": { + "node": ">=18.0.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/hr": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/hr/-/hr-0.0.11.tgz", + "integrity": "sha512-S1gZHVhwOsd1Iad5IFhpfICwNPMGPJidG/Uysy1AwmspyoAP5a4Iw3OWEpINFdgh9MHladbxcLKO2AJO+cA9Lw==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/preview-server/node_modules/@types/node": { - "version": "22.14.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz", - "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==", - "dev": true, + "node_modules/@react-email/html": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/html/-/html-0.0.11.tgz", + "integrity": "sha512-qJhbOQy5VW5qzU74AimjAR9FRFQfrMa7dn4gkEXKMB/S9xZN8e1yC1uA9C15jkXI/PzmJ0muDIWmFwatm5/+VA==", "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/preview-server/node_modules/@types/react": { - "version": "19.0.10", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.10.tgz", - "integrity": "sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==", - "dev": true, + "node_modules/@react-email/img": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@react-email/img/-/img-0.0.11.tgz", + "integrity": "sha512-aGc8Y6U5C3igoMaqAJKsCpkbm1XjguQ09Acd+YcTKwjnC2+0w3yGUJkjWB2vTx4tN8dCqQCXO8FmdJpMfOA9EQ==", "license": "MIT", - "peer": true, - "dependencies": { - "csstype": "^3.0.2" + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/preview-server/node_modules/@types/react-dom": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz", - "integrity": "sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==", - "dev": true, + "node_modules/@react-email/link": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@react-email/link/-/link-0.0.12.tgz", + "integrity": "sha512-vF+xxQk2fGS1CN7UPQDbzvcBGfffr+GjTPNiWM38fhBfsLv6A/YUfaqxWlmL7zLzVmo0K2cvvV9wxlSyNba1aQ==", "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, "peerDependencies": { - "@types/react": "^19.0.0" + "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/preview-server/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, + "node_modules/@react-email/markdown": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/@react-email/markdown/-/markdown-0.0.17.tgz", + "integrity": "sha512-6op3AfsBC9BJKkhG+eoMFRFWlr0/f3FYbtQrK+VhGzJocEAY0WINIFN+W8xzXr//3IL0K/aKtnH3FtpIuescQQ==", "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "marked": "^15.0.12" }, "engines": { - "node": ">= 8.10.0" + "node": ">=22.0.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/preview": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@react-email/preview/-/preview-0.0.13.tgz", + "integrity": "sha512-F7j9FJ0JN/A4d7yr+aw28p4uX7VLWs7hTHtLo7WRyw4G+Lit6Zucq4UWKRxJC8lpsUdzVmG7aBJnKOT+urqs/w==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/preview-server/node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", + "node_modules/@react-email/render": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-email/render/-/render-2.0.0.tgz", + "integrity": "sha512-rdjNj6iVzv8kRKDPFas+47nnoe6B40+nwukuXwY4FCwM7XBg6tmYr+chQryCuavUj2J65MMf6fztk1bxOUiSVA==", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "html-to-text": "^9.0.5", + "prettier": "^3.5.3" }, "engines": { - "node": ">= 6" + "node": ">=22.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/preview-server/node_modules/esbuild": { - "version": "0.25.10", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", - "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", - "dev": true, - "hasInstallScript": true, + "node_modules/@react-email/row": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@react-email/row/-/row-0.0.12.tgz", + "integrity": "sha512-HkCdnEjvK3o+n0y0tZKXYhIXUNPDx+2vq1dJTmqappVHXS5tXS6W5JOPZr5j+eoZ8gY3PShI2LWj5rWF7ZEtIQ==", "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, "engines": { - "node": ">=18" + "node": ">=18.0.0" }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.10", - "@esbuild/android-arm": "0.25.10", - "@esbuild/android-arm64": "0.25.10", - "@esbuild/android-x64": "0.25.10", - "@esbuild/darwin-arm64": "0.25.10", - "@esbuild/darwin-x64": "0.25.10", - "@esbuild/freebsd-arm64": "0.25.10", - "@esbuild/freebsd-x64": "0.25.10", - "@esbuild/linux-arm": "0.25.10", - "@esbuild/linux-arm64": "0.25.10", - "@esbuild/linux-ia32": "0.25.10", - "@esbuild/linux-loong64": "0.25.10", - "@esbuild/linux-mips64el": "0.25.10", - "@esbuild/linux-ppc64": "0.25.10", - "@esbuild/linux-riscv64": "0.25.10", - "@esbuild/linux-s390x": "0.25.10", - "@esbuild/linux-x64": "0.25.10", - "@esbuild/netbsd-arm64": "0.25.10", - "@esbuild/netbsd-x64": "0.25.10", - "@esbuild/openbsd-arm64": "0.25.10", - "@esbuild/openbsd-x64": "0.25.10", - "@esbuild/openharmony-arm64": "0.25.10", - "@esbuild/sunos-x64": "0.25.10", - "@esbuild/win32-arm64": "0.25.10", - "@esbuild/win32-ia32": "0.25.10", - "@esbuild/win32-x64": "0.25.10" - } - }, - "node_modules/@react-email/preview-server/node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "dev": true, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" + } + }, + "node_modules/@react-email/section": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@react-email/section/-/section-0.0.16.tgz", + "integrity": "sha512-FjqF9xQ8FoeUZYKSdt8sMIKvoT9XF8BrzhT3xiFKdEMwYNbsDflcjfErJe3jb7Wj/es/lKTbV5QR1dnLzGpL3w==", "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0 || ^19.0 || ^19.0.0-rc" } }, - "node_modules/@react-email/preview-server/node_modules/next": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/next/-/next-15.5.2.tgz", - "integrity": "sha512-H8Otr7abj1glFhbGnvUt3gz++0AF1+QoCXEBmd/6aKbfdFwrn0LpA836Ed5+00va/7HQSDD+mOoVhn3tNy3e/Q==", - "dev": true, + "node_modules/@react-email/tailwind": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-2.0.1.tgz", + "integrity": "sha512-/xq0IDYVY7863xPY7cdI45Xoz7M6CnIQBJcQvbqN7MNVpopfH9f+mhjayV1JGfKaxlGWuxfLKhgi9T2shsnEFg==", "license": "MIT", "dependencies": { - "@next/env": "15.5.2", - "@swc/helpers": "0.5.15", - "caniuse-lite": "^1.0.30001579", - "postcss": "8.4.31", - "styled-jsx": "5.1.6" - }, - "bin": { - "next": "dist/bin/next" + "tailwindcss": "^4.1.12" }, "engines": { - "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "15.5.2", - "@next/swc-darwin-x64": "15.5.2", - "@next/swc-linux-arm64-gnu": "15.5.2", - "@next/swc-linux-arm64-musl": "15.5.2", - "@next/swc-linux-x64-gnu": "15.5.2", - "@next/swc-linux-x64-musl": "15.5.2", - "@next/swc-win32-arm64-msvc": "15.5.2", - "@next/swc-win32-x64-msvc": "15.5.2", - "sharp": "^0.34.3" + "node": ">=22.0.0" }, "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.51.1", - "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "sass": "^1.3.0" + "@react-email/body": "0.2.0", + "@react-email/button": "0.2.0", + "@react-email/code-block": "0.2.0", + "@react-email/code-inline": "0.0.5", + "@react-email/container": "0.0.15", + "@react-email/heading": "0.0.15", + "@react-email/hr": "0.0.11", + "@react-email/img": "0.0.11", + "@react-email/link": "0.0.12", + "@react-email/preview": "0.0.13", + "@react-email/text": "0.1.5", + "react": "^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { - "@opentelemetry/api": { + "@react-email/body": { "optional": true }, - "@playwright/test": { + "@react-email/button": { "optional": true }, - "babel-plugin-react-compiler": { + "@react-email/code-block": { "optional": true }, - "sass": { + "@react-email/code-inline": { "optional": true - } - } - }, - "node_modules/@react-email/preview-server/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@react-email/preview-server/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" + "@react-email/container": { + "optional": true }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/@react-email/preview-server/node_modules/react": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", - "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-email/preview-server/node_modules/react-dom": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", - "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "scheduler": "^0.25.0" - }, - "peerDependencies": { - "react": "^19.0.0" - } - }, - "node_modules/@react-email/preview-server/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/@react-email/preview-server/node_modules/scheduler": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", - "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@react-email/preview-server/node_modules/tailwind-merge": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.2.0.tgz", - "integrity": "sha512-FQT/OVqCD+7edmmJpsgCsY820RTD5AkBryuG5IUqR5YQZSdj5xlH5nLgH7YPths7WsLPSpSBNneJdM8aS8aeFA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" - } - }, - "node_modules/@react-email/preview-server/node_modules/tailwindcss": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz", - "integrity": "sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.19.1", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@react-email/preview-server/node_modules/tailwindcss/node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "@react-email/heading": { + "optional": true }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { + "@react-email/hr": { + "optional": true + }, + "@react-email/img": { + "optional": true + }, + "@react-email/link": { "optional": true }, - "ts-node": { + "@react-email/preview": { "optional": true } } }, - "node_modules/@react-email/preview-server/node_modules/tailwindcss/node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/@react-email/preview-server/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@react-email/preview-server/node_modules/zod": { - "version": "3.24.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.3.tgz", - "integrity": "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/@react-email/render": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.4.0.tgz", - "integrity": "sha512-ZtJ3noggIvW1ZAryoui95KJENKdCzLmN5F7hyZY1F/17B1vwzuxHB7YkuCg0QqHjDivc5axqYEYdIOw4JIQdUw==", - "license": "MIT", - "dependencies": { - "html-to-text": "^9.0.5", - "prettier": "^3.5.3", - "react-promise-suspense": "^0.3.4" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^18.0 || ^19.0 || ^19.0.0-rc" - } - }, - "node_modules/@react-email/row": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@react-email/row/-/row-0.0.12.tgz", - "integrity": "sha512-HkCdnEjvK3o+n0y0tZKXYhIXUNPDx+2vq1dJTmqappVHXS5tXS6W5JOPZr5j+eoZ8gY3PShI2LWj5rWF7ZEtIQ==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" - } - }, - "node_modules/@react-email/section": { - "version": "0.0.16", - "resolved": "https://registry.npmjs.org/@react-email/section/-/section-0.0.16.tgz", - "integrity": "sha512-FjqF9xQ8FoeUZYKSdt8sMIKvoT9XF8BrzhT3xiFKdEMwYNbsDflcjfErJe3jb7Wj/es/lKTbV5QR1dnLzGpL3w==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" - } - }, - "node_modules/@react-email/tailwind": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-1.2.2.tgz", - "integrity": "sha512-heO9Khaqxm6Ulm6p7HQ9h01oiiLRrZuuEQuYds/O7Iyp3c58sMVHZGIxiRXO/kSs857NZQycpjewEVKF3jhNTw==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "react": "^18.0 || ^19.0 || ^19.0.0-rc" - } - }, "node_modules/@react-email/text": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@react-email/text/-/text-0.1.5.tgz", "integrity": "sha512-o5PNHFSE085VMXayxH+SJ1LSOtGsTv+RpNKnTiJDrJUwoBu77G3PlKOsZZQHCNyD28WsQpl9v2WcJLbQudqwPg==", "license": "MIT", + "peer": true, "engines": { "node": ">=18.0.0" }, @@ -7931,12 +7489,12 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.4.tgz", - "integrity": "sha512-Z4DUr/AkgyFf1bOThW2HwzREagee0sB5ycl+hDiSZOfRLW8ZgrOjDi6g8mHH19yyU5E2A/64W3z6SMIf5XiUSQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.5.tgz", + "integrity": "sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -7969,16 +7527,16 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.1.tgz", - "integrity": "sha512-BciDJ5hkyYEGBBKMbjGB1A/Zq8bYZ41Zo9BMnGdKF6QD1fY4zIkYx6zui/0CHaVGnv6h0iy8y4rnPX9CPCAPyQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.3.tgz", + "integrity": "sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.4", - "@smithy/types": "^4.8.1", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-endpoints": "^3.2.4", - "@smithy/util-middleware": "^4.2.4", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", "tslib": "^2.6.2" }, "engines": { @@ -7986,18 +7544,18 @@ } }, "node_modules/@smithy/core": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.17.2.tgz", - "integrity": "sha512-n3g4Nl1Te+qGPDbNFAYf+smkRVB+JhFsGy9uJXXZQEufoP4u0r+WLh6KvTDolCswaagysDc/afS1yvb2jnj1gQ==", + "version": "3.18.7", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.7.tgz", + "integrity": "sha512-axG9MvKhMWOhFbvf5y2DuyTxQueO0dkedY9QC3mAfndLosRI/9LJv8WaL0mw7ubNhsO4IuXX9/9dYGPFvHrqlw==", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^4.2.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-middleware": "^4.2.4", - "@smithy/util-stream": "^4.5.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", "@smithy/util-utf8": "^4.2.0", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" @@ -8007,15 +7565,15 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.4.tgz", - "integrity": "sha512-YVNMjhdz2pVto5bRdux7GMs0x1m0Afz3OcQy/4Yf9DH4fWOtroGH7uLvs7ZmDyoBJzLdegtIPpXrpJOZWvUXdw==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.5.tgz", + "integrity": "sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.4", - "@smithy/property-provider": "^4.2.4", - "@smithy/types": "^4.8.1", - "@smithy/url-parser": "^4.2.4", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", "tslib": "^2.6.2" }, "engines": { @@ -8023,13 +7581,13 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.4.tgz", - "integrity": "sha512-aV8blR9RBDKrOlZVgjOdmOibTC2sBXNiT7WA558b4MPdsLTV6sbyc1WIE9QiIuYMJjYtnPLciefoqSW8Gi+MZQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.5.tgz", + "integrity": "sha512-Ogt4Zi9hEbIP17oQMd68qYOHUzmH47UkK7q7Gl55iIm9oKt27MUGrC5JfpMroeHjdkOliOA4Qt3NQ1xMq/nrlA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "@smithy/util-hex-encoding": "^4.2.0", "tslib": "^2.6.2" }, @@ -8038,13 +7596,13 @@ } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.4.tgz", - "integrity": "sha512-d5T7ZS3J/r8P/PDjgmCcutmNxnSRvPH1U6iHeXjzI50sMr78GLmFcrczLw33Ap92oEKqa4CLrkAPeSSOqvGdUA==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.5.tgz", + "integrity": "sha512-HohfmCQZjppVnKX2PnXlf47CW3j92Ki6T/vkAT2DhBR47e89pen3s4fIa7otGTtrVxmj7q+IhH0RnC5kpR8wtw==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.4", - "@smithy/types": "^4.8.1", + "@smithy/eventstream-serde-universal": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8052,12 +7610,12 @@ } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.4.tgz", - "integrity": "sha512-lxfDT0UuSc1HqltOGsTEAlZ6H29gpfDSdEPTapD5G63RbnYToZ+ezjzdonCCH90j5tRRCw3aLXVbiZaBW3VRVg==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.5.tgz", + "integrity": "sha512-ibjQjM7wEXtECiT6my1xfiMH9IcEczMOS6xiCQXoUIYSj5b1CpBbJ3VYbdwDy8Vcg5JHN7eFpOCGk8nyZAltNQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8065,13 +7623,13 @@ } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.4.tgz", - "integrity": "sha512-TPhiGByWnYyzcpU/K3pO5V7QgtXYpE0NaJPEZBCa1Y5jlw5SjqzMSbFiLb+ZkJhqoQc0ImGyVINqnq1ze0ZRcQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.5.tgz", + "integrity": "sha512-+elOuaYx6F2H6x1/5BQP5ugv12nfJl66GhxON8+dWVUEDJ9jah/A0tayVdkLRP0AeSac0inYkDz5qBFKfVp2Gg==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.4", - "@smithy/types": "^4.8.1", + "@smithy/eventstream-serde-universal": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8079,13 +7637,13 @@ } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.4.tgz", - "integrity": "sha512-GNI/IXaY/XBB1SkGBFmbW033uWA0tj085eCxYih0eccUe/PFR7+UBQv9HNDk2fD9TJu7UVsCWsH99TkpEPSOzQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.5.tgz", + "integrity": "sha512-G9WSqbST45bmIFaeNuP/EnC19Rhp54CcVdX9PDL1zyEB514WsDVXhlyihKlGXnRycmHNmVv88Bvvt4EYxWef/Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^4.2.4", - "@smithy/types": "^4.8.1", + "@smithy/eventstream-codec": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8093,14 +7651,14 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.5.tgz", - "integrity": "sha512-mg83SM3FLI8Sa2ooTJbsh5MFfyMTyNRwxqpKHmE0ICRIa66Aodv80DMsTQI02xBLVJ0hckwqTRr5IGAbbWuFLQ==", + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.6.tgz", + "integrity": "sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.4", - "@smithy/querystring-builder": "^4.2.4", - "@smithy/types": "^4.8.1", + "@smithy/protocol-http": "^5.3.5", + "@smithy/querystring-builder": "^4.2.5", + "@smithy/types": "^4.9.0", "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" }, @@ -8109,14 +7667,14 @@ } }, "node_modules/@smithy/hash-blob-browser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.5.tgz", - "integrity": "sha512-kCdgjD2J50qAqycYx0imbkA9tPtyQr1i5GwbK/EOUkpBmJGSkJe4mRJm+0F65TUSvvui1HZ5FFGFCND7l8/3WQ==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.6.tgz", + "integrity": "sha512-8P//tA8DVPk+3XURk2rwcKgYwFvwGwmJH/wJqQiSKwXZtf/LiZK+hbUZmPj/9KzM+OVSwe4o85KTp5x9DUZTjw==", "license": "Apache-2.0", "dependencies": { "@smithy/chunked-blob-reader": "^5.2.0", "@smithy/chunked-blob-reader-native": "^4.2.1", - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8124,12 +7682,12 @@ } }, "node_modules/@smithy/hash-node": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.4.tgz", - "integrity": "sha512-kKU0gVhx/ppVMntvUOZE7WRMFW86HuaxLwvqileBEjL7PoILI8/djoILw3gPQloGVE6O0oOzqafxeNi2KbnUJw==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.5.tgz", + "integrity": "sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" @@ -8139,12 +7697,12 @@ } }, "node_modules/@smithy/hash-stream-node": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.4.tgz", - "integrity": "sha512-amuh2IJiyRfO5MV0X/YFlZMD6banjvjAwKdeJiYGUbId608x+oSNwv3vlyW2Gt6AGAgl3EYAuyYLGRX/xU8npQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.5.tgz", + "integrity": "sha512-6+do24VnEyvWcGdHXomlpd0m8bfZePpUKBy7m311n+JuRwug8J4dCanJdTymx//8mi0nlkflZBvJe+dEO/O12Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -8153,12 +7711,12 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.4.tgz", - "integrity": "sha512-z6aDLGiHzsMhbS2MjetlIWopWz//K+mCoPXjW6aLr0mypF+Y7qdEh5TyJ20Onf9FbWHiWl4eC+rITdizpnXqOw==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.5.tgz", + "integrity": "sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8178,12 +7736,12 @@ } }, "node_modules/@smithy/md5-js": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.4.tgz", - "integrity": "sha512-h7kzNWZuMe5bPnZwKxhVbY1gan5+TZ2c9JcVTHCygB14buVGOZxLl+oGfpY2p2Xm48SFqEWdghpvbBdmaz3ncQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.5.tgz", + "integrity": "sha512-Bt6jpSTMWfjCtC0s79gZ/WZ1w90grfmopVOWqkI2ovhjpD5Q2XRXuecIPB9689L2+cCySMbaXDhBPU56FKNDNg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -8192,13 +7750,13 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.4.tgz", - "integrity": "sha512-hJRZuFS9UsElX4DJSJfoX4M1qXRH+VFiLMUnhsWvtOOUWRNvvOfDaUSdlNbjwv1IkpVjj/Rd/O59Jl3nhAcxow==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz", + "integrity": "sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8206,18 +7764,18 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.6.tgz", - "integrity": "sha512-PXehXofGMFpDqr933rxD8RGOcZ0QBAWtuzTgYRAHAL2BnKawHDEdf/TnGpcmfPJGwonhginaaeJIKluEojiF/w==", + "version": "4.3.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.14.tgz", + "integrity": "sha512-v0q4uTKgBM8dsqGjqsabZQyH85nFaTnFcgpWU1uydKFsdyyMzfvOkNum9G7VK+dOP01vUnoZxIeRiJ6uD0kjIg==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.17.2", - "@smithy/middleware-serde": "^4.2.4", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/shared-ini-file-loader": "^4.3.4", - "@smithy/types": "^4.8.1", - "@smithy/url-parser": "^4.2.4", - "@smithy/util-middleware": "^4.2.4", + "@smithy/core": "^3.18.7", + "@smithy/middleware-serde": "^4.2.6", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-middleware": "^4.2.5", "tslib": "^2.6.2" }, "engines": { @@ -8225,18 +7783,18 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.6.tgz", - "integrity": "sha512-OhLx131znrEDxZPAvH/OYufR9d1nB2CQADyYFN4C3V/NQS7Mg4V6uvxHC/Dr96ZQW8IlHJTJ+vAhKt6oxWRndA==", + "version": "4.4.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.14.tgz", + "integrity": "sha512-Z2DG8Ej7FyWG1UA+7HceINtSLzswUgs2np3sZX0YBBxCt+CXG4QUxv88ZDS3+2/1ldW7LqtSY1UO/6VQ1pND8Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/service-error-classification": "^4.2.4", - "@smithy/smithy-client": "^4.9.2", - "@smithy/types": "^4.8.1", - "@smithy/util-middleware": "^4.2.4", - "@smithy/util-retry": "^4.2.4", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/service-error-classification": "^4.2.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, @@ -8245,13 +7803,13 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.4.tgz", - "integrity": "sha512-jUr3x2CDhV15TOX2/Uoz4gfgeqLrRoTQbYAuhLS7lcVKNev7FeYSJ1ebEfjk+l9kbb7k7LfzIR/irgxys5ZTOg==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.6.tgz", + "integrity": "sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8259,12 +7817,12 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.4.tgz", - "integrity": "sha512-Gy3TKCOnm9JwpFooldwAboazw+EFYlC+Bb+1QBsSi5xI0W5lX81j/P5+CXvD/9ZjtYKRgxq+kkqd/KOHflzvgA==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.5.tgz", + "integrity": "sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8272,14 +7830,14 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.4.tgz", - "integrity": "sha512-3X3w7qzmo4XNNdPKNS4nbJcGSwiEMsNsRSunMA92S4DJLLIrH5g1AyuOA2XKM9PAPi8mIWfqC+fnfKNsI4KvHw==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.5.tgz", + "integrity": "sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.4", - "@smithy/shared-ini-file-loader": "^4.3.4", - "@smithy/types": "^4.8.1", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8287,15 +7845,15 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.4.tgz", - "integrity": "sha512-VXHGfzCXLZeKnFp6QXjAdy+U8JF9etfpUXD1FAbzY1GzsFJiDQRQIt2CnMUvUdz3/YaHNqT3RphVWMUpXTIODA==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.5.tgz", + "integrity": "sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/querystring-builder": "^4.2.4", - "@smithy/types": "^4.8.1", + "@smithy/abort-controller": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/querystring-builder": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8303,12 +7861,12 @@ } }, "node_modules/@smithy/property-provider": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.4.tgz", - "integrity": "sha512-g2DHo08IhxV5GdY3Cpt/jr0mkTlAD39EJKN27Jb5N8Fb5qt8KG39wVKTXiTRCmHHou7lbXR8nKVU14/aRUf86w==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.5.tgz", + "integrity": "sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8316,12 +7874,12 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", - "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.5.tgz", + "integrity": "sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8329,12 +7887,12 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.4.tgz", - "integrity": "sha512-KQ1gFXXC+WsbPFnk7pzskzOpn4s+KheWgO3dzkIEmnb6NskAIGp/dGdbKisTPJdtov28qNDohQrgDUKzXZBLig==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.5.tgz", + "integrity": "sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" }, @@ -8343,12 +7901,12 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.4.tgz", - "integrity": "sha512-aHb5cqXZocdzEkZ/CvhVjdw5l4r1aU/9iMEyoKzH4eXMowT6M0YjBpp7W/+XjkBnY8Xh0kVd55GKjnPKlCwinQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.5.tgz", + "integrity": "sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8356,24 +7914,24 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.4.tgz", - "integrity": "sha512-fdWuhEx4+jHLGeew9/IvqVU/fxT/ot70tpRGuOLxE3HzZOyKeTQfYeV1oaBXpzi93WOk668hjMuuagJ2/Qs7ng==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.5.tgz", + "integrity": "sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1" + "@smithy/types": "^4.9.0" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.3.4.tgz", - "integrity": "sha512-y5ozxeQ9omVjbnJo9dtTsdXj9BEvGx2X8xvRgKnV+/7wLBuYJQL6dOa/qMY6omyHi7yjt1OA97jZLoVRYi8lxA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.0.tgz", + "integrity": "sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8381,16 +7939,16 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.4.tgz", - "integrity": "sha512-ScDCpasxH7w1HXHYbtk3jcivjvdA1VICyAdgvVqKhKKwxi+MTwZEqFw0minE+oZ7F07oF25xh4FGJxgqgShz0A==", + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.5.tgz", + "integrity": "sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.2.0", - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-middleware": "^4.2.4", + "@smithy/util-middleware": "^4.2.5", "@smithy/util-uri-escape": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" @@ -8400,17 +7958,17 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.2.tgz", - "integrity": "sha512-gZU4uAFcdrSi3io8U99Qs/FvVdRxPvIMToi+MFfsy/DN9UqtknJ1ais+2M9yR8e0ASQpNmFYEKeIKVcMjQg3rg==", + "version": "4.9.10", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.10.tgz", + "integrity": "sha512-Jaoz4Jw1QYHc1EFww/E6gVtNjhoDU+gwRKqXP6C3LKYqqH2UQhP8tMP3+t/ePrhaze7fhLE8vS2q6vVxBANFTQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.17.2", - "@smithy/middleware-endpoint": "^4.3.6", - "@smithy/middleware-stack": "^4.2.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", - "@smithy/util-stream": "^4.5.5", + "@smithy/core": "^3.18.7", + "@smithy/middleware-endpoint": "^4.3.14", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-stream": "^4.5.6", "tslib": "^2.6.2" }, "engines": { @@ -8418,9 +7976,9 @@ } }, "node_modules/@smithy/types": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.8.1.tgz", - "integrity": "sha512-N0Zn0OT1zc+NA+UVfkYqQzviRh5ucWwO7mBV3TmHHprMnfcJNfhlPicDkBHi0ewbh+y3evR6cNAW0Raxvb01NA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.9.0.tgz", + "integrity": "sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -8430,13 +7988,13 @@ } }, "node_modules/@smithy/url-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.4.tgz", - "integrity": "sha512-w/N/Iw0/PTwJ36PDqU9PzAwVElo4qXxCC0eCTlUtIz/Z5V/2j/cViMHi0hPukSBHp4DVwvUlUhLgCzqSJ6plrg==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.5.tgz", + "integrity": "sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^4.2.4", - "@smithy/types": "^4.8.1", + "@smithy/querystring-parser": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8507,14 +8065,14 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.5.tgz", - "integrity": "sha512-GwaGjv/QLuL/QHQaqhf/maM7+MnRFQQs7Bsl6FlaeK6lm6U7mV5AAnVabw68cIoMl5FQFyKK62u7RWRzWL25OQ==", + "version": "4.3.13", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.13.tgz", + "integrity": "sha512-hlVLdAGrVfyNei+pKIgqDTxfu/ZI2NSyqj4IDxKd5bIsIqwR/dSlkxlPaYxFiIaDVrBy0he8orsFy+Cz119XvA==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.4", - "@smithy/smithy-client": "^4.9.2", - "@smithy/types": "^4.8.1", + "@smithy/property-provider": "^4.2.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8522,17 +8080,17 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.7.tgz", - "integrity": "sha512-6hinjVqec0WYGsqN7h9hL/ywfULmJJNXGXnNZW7jrIn/cFuC/aVlVaiDfBIJEvKcOrmN8/EgsW69eY0gXABeHw==", + "version": "4.2.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.16.tgz", + "integrity": "sha512-F1t22IUiJLHrxW9W1CQ6B9PN+skZ9cqSuzB18Eh06HrJPbjsyZ7ZHecAKw80DQtyGTRcVfeukKaCRYebFwclbg==", "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^4.4.1", - "@smithy/credential-provider-imds": "^4.2.4", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/property-provider": "^4.2.4", - "@smithy/smithy-client": "^4.9.2", - "@smithy/types": "^4.8.1", + "@smithy/config-resolver": "^4.4.3", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/smithy-client": "^4.9.10", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8540,13 +8098,13 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.4.tgz", - "integrity": "sha512-f+nBDhgYRCmUEDKEQb6q0aCcOTXRDqH5wWaFHJxt4anB4pKHlgGoYP3xtioKXH64e37ANUkzWf6p4Mnv1M5/Vg==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.5.tgz", + "integrity": "sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.4", - "@smithy/types": "^4.8.1", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8566,12 +8124,12 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.4.tgz", - "integrity": "sha512-fKGQAPAn8sgV0plRikRVo6g6aR0KyKvgzNrPuM74RZKy/wWVzx3BMk+ZWEueyN3L5v5EDg+P582mKU+sH5OAsg==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.5.tgz", + "integrity": "sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8579,13 +8137,13 @@ } }, "node_modules/@smithy/util-retry": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.4.tgz", - "integrity": "sha512-yQncJmj4dtv/isTXxRb4AamZHy4QFr4ew8GxS6XLWt7sCIxkPxPzINWd7WLISEFPsIan14zrKgvyAF+/yzfwoA==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.5.tgz", + "integrity": "sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==", "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^4.2.4", - "@smithy/types": "^4.8.1", + "@smithy/service-error-classification": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8593,14 +8151,14 @@ } }, "node_modules/@smithy/util-stream": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.5.tgz", - "integrity": "sha512-7M5aVFjT+HPilPOKbOmQfCIPchZe4DSBc1wf1+NvHvSoFTiFtauZzT+onZvCj70xhXd0AEmYnZYmdJIuwxOo4w==", + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.6.tgz", + "integrity": "sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^5.3.5", - "@smithy/node-http-handler": "^4.4.4", - "@smithy/types": "^4.8.1", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/types": "^4.9.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-hex-encoding": "^4.2.0", @@ -8637,13 +8195,13 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.4.tgz", - "integrity": "sha512-roKXtXIC6fopFvVOju8VYHtguc/jAcMlK8IlDOHsrQn0ayMkHynjm/D2DCMRf7MJFXzjHhlzg2edr3QPEakchQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.5.tgz", + "integrity": "sha512-Dbun99A3InifQdIrsXZ+QLcC0PGBPAdrl4cj1mTgJvyc9N2zf7QSxg8TBkzsCmGJdE3TLbO9ycwpY0EkWahQ/g==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.4", - "@smithy/types": "^4.8.1", + "@smithy/abort-controller": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -8691,15 +8249,228 @@ "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", "license": "MIT" }, + "node_modules/@swc/core": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.3.tgz", + "integrity": "sha512-Qd8eBPkUFL4eAONgGjycZXj1jFCBW8Fd+xF0PzdTlBCWQIV1xnUT7B93wUANtW3KGjl3TRcOyxwSx/u/jyKw/Q==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.25" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.15.3", + "@swc/core-darwin-x64": "1.15.3", + "@swc/core-linux-arm-gnueabihf": "1.15.3", + "@swc/core-linux-arm64-gnu": "1.15.3", + "@swc/core-linux-arm64-musl": "1.15.3", + "@swc/core-linux-x64-gnu": "1.15.3", + "@swc/core-linux-x64-musl": "1.15.3", + "@swc/core-win32-arm64-msvc": "1.15.3", + "@swc/core-win32-ia32-msvc": "1.15.3", + "@swc/core-win32-x64-msvc": "1.15.3" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.3.tgz", + "integrity": "sha512-AXfeQn0CvcQ4cndlIshETx6jrAM45oeUrK8YeEY6oUZU/qzz0Id0CyvlEywxkWVC81Ajpd8TQQ1fW5yx6zQWkQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.3.tgz", + "integrity": "sha512-p68OeCz1ui+MZYG4wmfJGvcsAcFYb6Sl25H9TxWl+GkBgmNimIiRdnypK9nBGlqMZAcxngNPtnG3kEMNnvoJ2A==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.3.tgz", + "integrity": "sha512-Nuj5iF4JteFgwrai97mUX+xUOl+rQRHqTvnvHMATL/l9xE6/TJfPBpd3hk/PVpClMXG3Uvk1MxUFOEzM1JrMYg==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.3.tgz", + "integrity": "sha512-2Nc/s8jE6mW2EjXWxO/lyQuLKShcmTrym2LRf5Ayp3ICEMX6HwFqB1EzDhwoMa2DcUgmnZIalesq2lG3krrUNw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.3.tgz", + "integrity": "sha512-j4SJniZ/qaZ5g8op+p1G9K1z22s/EYGg1UXIb3+Cg4nsxEpF5uSIGEE4mHUfA70L0BR9wKT2QF/zv3vkhfpX4g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.3.tgz", + "integrity": "sha512-aKttAZnz8YB1VJwPQZtyU8Uk0BfMP63iDMkvjhJzRZVgySmqt/apWSdnoIcZlUoGheBrcqbMC17GGUmur7OT5A==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.3.tgz", + "integrity": "sha512-oe8FctPu1gnUsdtGJRO2rvOUIkkIIaHqsO9xxN0bTR7dFTlPTGi2Fhk1tnvXeyAvCPxLIcwD8phzKg6wLv9yug==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.3.tgz", + "integrity": "sha512-L9AjzP2ZQ/Xh58e0lTRMLvEDrcJpR7GwZqAtIeNLcTK7JVE+QineSyHp0kLkO1rttCHyCy0U74kDTj0dRz6raA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.3.tgz", + "integrity": "sha512-B8UtogMzErUPDWUoKONSVBdsgKYd58rRyv2sHJWKOIMCHfZ22FVXICR4O/VwIYtlnZ7ahERcjayBHDlBZpR0aw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.3.tgz", + "integrity": "sha512-SpZKMR9QBTecHeqpzJdYEfgw30Oo8b/Xl6rjSzBt1g0ZsXyy60KLXrp6IagQyfTYqNYE/caDvwtF2FPn7pomog==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" } }, + "node_modules/@swc/types": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz", + "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, "node_modules/@tailwindcss/forms": { "version": "0.5.10", "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz", @@ -9044,9 +8815,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.90.6", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.6.tgz", - "integrity": "sha512-AnZSLF26R8uX+tqb/ivdrwbVdGemdEDm1Q19qM6pry6eOZ6bEYiY7mWhzXT1YDIPTNEVcZ5kYP9nWjoxDLiIVw==", + "version": "5.90.12", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.12.tgz", + "integrity": "sha512-T1/8t5DhV/SisWjDnaiU2drl6ySvsHj1bHBCWNXd+/T+Hh1cf6JodyEYMd5sgwm+b/mETT4EV3H+zCVczCU5hg==", "license": "MIT", "funding": { "type": "github", @@ -9054,9 +8825,9 @@ } }, "node_modules/@tanstack/query-devtools": { - "version": "5.90.1", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.90.1.tgz", - "integrity": "sha512-GtINOPjPUH0OegJExZ70UahT9ykmAhmtNVcmtdnOZbxLwT7R5OmRztR5Ahe3/Cu7LArEmR6/588tAycuaWb1xQ==", + "version": "5.91.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.91.1.tgz", + "integrity": "sha512-l8bxjk6BMsCaVQH6NzQEE/bEgFy1hAs5qbgXl0xhzezlaQbPk6Mgz9BqEg2vTLPOHD8N4k+w/gdgCbEzecGyNg==", "dev": true, "license": "MIT", "funding": { @@ -9065,13 +8836,13 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.90.6", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.6.tgz", - "integrity": "sha512-gB1sljYjcobZKxjPbKSa31FUTyr+ROaBdoH+wSSs9Dk+yDCmMs+TkTV3PybRRVLC7ax7q0erJ9LvRWnMktnRAw==", + "version": "5.90.12", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.12.tgz", + "integrity": "sha512-graRZspg7EoEaw0a8faiUASCyJrqjKPdqJ9EwuDRUF9mEYJ1YPczI9H+/agJ0mOJkPCJDk0lsz5QTrLZ/jQ2rg==", "license": "MIT", "peer": true, "dependencies": { - "@tanstack/query-core": "5.90.6" + "@tanstack/query-core": "5.90.12" }, "funding": { "type": "github", @@ -9082,20 +8853,20 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.90.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.90.2.tgz", - "integrity": "sha512-vAXJzZuBXtCQtrY3F/yUNJCV4obT/A/n81kb3+YqLbro5Z2+phdAbceO+deU3ywPw8B42oyJlp4FhO0SoivDFQ==", + "version": "5.91.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.91.1.tgz", + "integrity": "sha512-tRnJYwEbH0kAOuToy8Ew7bJw1lX3AjkkgSlf/vzb+NpnqmHPdWM+lA2DSdGQSLi1SU0PDRrrCI1vnZnci96CsQ==", "dev": true, "license": "MIT", "dependencies": { - "@tanstack/query-devtools": "5.90.1" + "@tanstack/query-devtools": "5.91.1" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.90.2", + "@tanstack/react-query": "^5.90.10", "react": "^18 || ^19" } }, @@ -9169,6 +8940,17 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/better-sqlite3": { + "version": "7.6.12", + "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.12.tgz", + "integrity": "sha512-fnQmj8lELIj7BSrZQAdBMHEHX8OZLYIHXqAKT1O7tDfLxaINzf00PMjw22r3N/xXh0w/sGHlO6SVaCQ2mj78lg==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/body-parser": { "version": "1.19.6", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", @@ -9217,168 +8999,414 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", "dev": true, "license": "MIT", "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "@types/d3-selection": "*" } }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.5.tgz", - "integrity": "sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ==", + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^5.0.0", - "@types/serve-static": "^1" + "@types/d3-selection": "*" } }, - "node_modules/@types/express-serve-static-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz", - "integrity": "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==", + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } + "license": "MIT" }, - "node_modules/@types/express-session": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-1.18.2.tgz", - "integrity": "sha512-k+I0BxwVXsnEU2hV77cCobC08kIsn4y44C3gC0b46uxZVMaXA04lSPgRLR/bSL2w0t0ShJiG8o4jPzRG/nscFg==", + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", "dev": true, "license": "MIT", "dependencies": { - "@types/express": "*" + "@types/d3-array": "*", + "@types/geojson": "*" } }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", "dev": true, "license": "MIT" }, - "node_modules/@types/jmespath": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@types/jmespath/-/jmespath-0.15.2.tgz", - "integrity": "sha512-pegh49FtNsC389Flyo9y8AfkVIZn9MMPE9yJrO9svhq6Fks2MwymULWjZqySuxmctd3ZH4/n7Mr98D+1Qo5vGA==", + "node_modules/@types/d3-dispatch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz", + "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==", "dev": true, "license": "MIT" }, - "node_modules/@types/js-yaml": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", - "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", + "dev": true, "license": "MIT" }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", "license": "MIT" }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.10", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", - "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", "dev": true, "license": "MIT", "dependencies": { - "@types/ms": "*", - "@types/node": "*" + "@types/d3-dsv": "*" } }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "node_modules/@types/d3-force": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", "dev": true, "license": "MIT" }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", "dev": true, "license": "MIT" }, - "node_modules/@types/node": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", - "devOptional": true, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "undici-types": "~7.16.0" + "@types/geojson": "*" } }, - "node_modules/@types/nodemailer": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-7.0.3.tgz", - "integrity": "sha512-fC8w49YQ868IuPWRXqPfLf+MuTRex5Z1qxMoG8rr70riqqbOp2F5xgOKE9fODEBPzpnvjkJXFgK6IL2xgMSTnA==", + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", "license": "MIT", "dependencies": { - "@aws-sdk/client-sesv2": "^3.839.0", - "@types/node": "*" + "@types/d3-color": "*" } }, - "node_modules/@types/normalize-path": { + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-polygon": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/normalize-path/-/normalize-path-3.0.2.tgz", - "integrity": "sha512-DO++toKYPaFn0Z8hQ7Tx+3iT9t77IJo/nDiqTXilgEP+kPNIYdpS9kh3fXuc53ugqwp9pxC1PVjCpV1tQDyqMA==", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", "dev": true, "license": "MIT" }, - "node_modules/@types/nprogress": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.3.tgz", + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz", + "integrity": "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express-session": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-1.18.2.tgz", + "integrity": "sha512-k+I0BxwVXsnEU2hV77cCobC08kIsn4y44C3gC0b46uxZVMaXA04lSPgRLR/bSL2w0t0ShJiG8o4jPzRG/nscFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jmespath": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@types/jmespath/-/jmespath-0.15.2.tgz", + "integrity": "sha512-pegh49FtNsC389Flyo9y8AfkVIZn9MMPE9yJrO9svhq6Fks2MwymULWjZqySuxmctd3ZH4/n7Mr98D+1Qo5vGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "license": "MIT" + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", + "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*", + "@types/node": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.2.tgz", + "integrity": "sha512-WOhQTZ4G8xZ1tjJTvKOpyEVSGgOTvJAfDK3FNFgELyaTpzhdgHVHeqW8V+UJvzF5BT+/B54T/1S2K6gd9c7bbA==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/nodemailer": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-7.0.4.tgz", + "integrity": "sha512-ee8fxWqOchH+Hv6MDDNNy028kwvVnLplrStm4Zf/3uHWw5zzo8FoYYeffpJtGs2wWysEumMH0ZIdMGMY1eMAow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@aws-sdk/client-sesv2": "^3.839.0", + "@types/node": "*" + } + }, + "node_modules/@types/nprogress": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.3.tgz", "integrity": "sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==", "dev": true, "license": "MIT" }, "node_modules/@types/pg": { - "version": "8.15.6", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.15.6.tgz", - "integrity": "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.16.0.tgz", + "integrity": "sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==", "devOptional": true, "license": "MIT", "peer": true, @@ -9388,13 +9416,6 @@ "pg-types": "^2.2.0" } }, - "node_modules/@types/prismjs": { - "version": "1.26.5", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", - "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", @@ -9410,20 +9431,20 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", - "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", + "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "devOptional": true, "license": "MIT", "peer": true, "dependencies": { - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/react-dom": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.2.tgz", - "integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", "peer": true, @@ -9439,9 +9460,9 @@ "license": "MIT" }, "node_modules/@types/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.0.tgz", - "integrity": "sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9449,25 +9470,13 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.9.tgz", - "integrity": "sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", "dev": true, "license": "MIT", "dependencies": { "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "<1" - } - }, - "node_modules/@types/serve-static/node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, @@ -9482,23 +9491,39 @@ "@types/serve-static": "*" } }, + "node_modules/@types/topojson-client": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/topojson-client/-/topojson-client-3.1.5.tgz", + "integrity": "sha512-C79rySTyPxnQNNguTZNI1Ct4D7IXgvyAs3p9HPecnl6mNrJ5+UhvGNYcZfpROYV2lMHI48kJPxwR+F9C6c7nmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/geojson": "*", + "@types/topojson-specification": "*" + } + }, + "node_modules/@types/topojson-specification": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/topojson-specification/-/topojson-specification-1.0.5.tgz", + "integrity": "sha512-C7KvcQh+C2nr6Y2Ub4YfgvWvWCgP2nOQMtfhlnwsRL4pYmmwzBS7HclGiS87eQfDOU/DLQpX6GEscviaz4yLIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/triple-beam": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", "license": "MIT" }, - "node_modules/@types/webpack": { - "version": "5.28.5", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.5.tgz", - "integrity": "sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==", - "dev": true, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "license": "MIT", - "dependencies": { - "@types/node": "*", - "tapable": "^2.2.0", - "webpack": "^5" - } + "optional": true }, "node_modules/@types/ws": { "version": "8.18.1", @@ -9510,9 +9535,9 @@ } }, "node_modules/@types/yargs": { - "version": "17.0.34", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.34.tgz", - "integrity": "sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, "license": "MIT", "dependencies": { @@ -9527,17 +9552,16 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.3.tgz", - "integrity": "sha512-sbaQ27XBUopBkRiuY/P9sWGOWUW4rl8fDoHIUmLpZd8uldsTyB4/Zg6bWTegPoTLnKj9Hqgn3QD6cjPNB32Odw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.49.0.tgz", + "integrity": "sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==", "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.46.3", - "@typescript-eslint/type-utils": "8.46.3", - "@typescript-eslint/utils": "8.46.3", - "@typescript-eslint/visitor-keys": "8.46.3", - "graphemer": "^1.4.0", + "@typescript-eslint/scope-manager": "8.49.0", + "@typescript-eslint/type-utils": "8.49.0", + "@typescript-eslint/utils": "8.49.0", + "@typescript-eslint/visitor-keys": "8.49.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" @@ -9550,7 +9574,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.46.3", + "@typescript-eslint/parser": "^8.49.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -9565,16 +9589,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.3.tgz", - "integrity": "sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.49.0.tgz", + "integrity": "sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.46.3", - "@typescript-eslint/types": "8.46.3", - "@typescript-eslint/typescript-estree": "8.46.3", - "@typescript-eslint/visitor-keys": "8.46.3", + "@typescript-eslint/scope-manager": "8.49.0", + "@typescript-eslint/types": "8.49.0", + "@typescript-eslint/typescript-estree": "8.49.0", + "@typescript-eslint/visitor-keys": "8.49.0", "debug": "^4.3.4" }, "engines": { @@ -9590,13 +9614,13 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.3.tgz", - "integrity": "sha512-Fz8yFXsp2wDFeUElO88S9n4w1I4CWDTXDqDr9gYvZgUpwXQqmZBr9+NTTql5R3J7+hrJZPdpiWaB9VNhAKYLuQ==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.49.0.tgz", + "integrity": "sha512-/wJN0/DKkmRUMXjZUXYZpD1NEQzQAAn9QWfGwo+Ai8gnzqH7tvqS7oNVdTjKqOcPyVIdZdyCMoqN66Ia789e7g==", "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.3", - "@typescript-eslint/types": "^8.46.3", + "@typescript-eslint/tsconfig-utils": "^8.49.0", + "@typescript-eslint/types": "^8.49.0", "debug": "^4.3.4" }, "engines": { @@ -9611,13 +9635,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.3.tgz", - "integrity": "sha512-FCi7Y1zgrmxp3DfWfr+3m9ansUUFoy8dkEdeQSgA9gbm8DaHYvZCdkFRQrtKiedFf3Ha6VmoqoAaP68+i+22kg==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.49.0.tgz", + "integrity": "sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.3", - "@typescript-eslint/visitor-keys": "8.46.3" + "@typescript-eslint/types": "8.49.0", + "@typescript-eslint/visitor-keys": "8.49.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9628,9 +9652,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.3.tgz", - "integrity": "sha512-GLupljMniHNIROP0zE7nCcybptolcH8QZfXOpCfhQDAdwJ/ZTlcaBOYebSOZotpti/3HrHSw7D3PZm75gYFsOA==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.49.0.tgz", + "integrity": "sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9644,14 +9668,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.3.tgz", - "integrity": "sha512-ZPCADbr+qfz3aiTTYNNkCbUt+cjNwI/5McyANNrFBpVxPt7GqpEYz5ZfdwuFyGUnJ9FdDXbGODUu6iRCI6XRXw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.49.0.tgz", + "integrity": "sha512-KTExJfQ+svY8I10P4HdxKzWsvtVnsuCifU5MvXrRwoP2KOlNZ9ADNEWWsQTJgMxLzS5VLQKDjkCT/YzgsnqmZg==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.3", - "@typescript-eslint/typescript-estree": "8.46.3", - "@typescript-eslint/utils": "8.46.3", + "@typescript-eslint/types": "8.49.0", + "@typescript-eslint/typescript-estree": "8.49.0", + "@typescript-eslint/utils": "8.49.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -9668,9 +9692,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.3.tgz", - "integrity": "sha512-G7Ok9WN/ggW7e/tOf8TQYMaxgID3Iujn231hfi0Pc7ZheztIJVpO44ekY00b7akqc6nZcvregk0Jpah3kep6hA==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.49.0.tgz", + "integrity": "sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9681,20 +9705,19 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.3.tgz", - "integrity": "sha512-f/NvtRjOm80BtNM5OQtlaBdM5BRFUv7gf381j9wygDNL+qOYSNOgtQ/DCndiYi80iIOv76QqaTmp4fa9hwI0OA==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.49.0.tgz", + "integrity": "sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA==", "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.46.3", - "@typescript-eslint/tsconfig-utils": "8.46.3", - "@typescript-eslint/types": "8.46.3", - "@typescript-eslint/visitor-keys": "8.46.3", + "@typescript-eslint/project-service": "8.49.0", + "@typescript-eslint/tsconfig-utils": "8.49.0", + "@typescript-eslint/types": "8.49.0", + "@typescript-eslint/visitor-keys": "8.49.0", "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", + "tinyglobby": "^0.2.15", "ts-api-utils": "^2.1.0" }, "engines": { @@ -9717,34 +9740,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -9761,15 +9756,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.3.tgz", - "integrity": "sha512-VXw7qmdkucEx9WkmR3ld/u6VhRyKeiF1uxWwCy/iuNfokjJ7VhsgLSOTjsol8BunSw190zABzpwdNsze2Kpo4g==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.49.0.tgz", + "integrity": "sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA==", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.3", - "@typescript-eslint/types": "8.46.3", - "@typescript-eslint/typescript-estree": "8.46.3" + "@typescript-eslint/scope-manager": "8.49.0", + "@typescript-eslint/types": "8.49.0", + "@typescript-eslint/typescript-estree": "8.49.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9784,12 +9779,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.3.tgz", - "integrity": "sha512-uk574k8IU0rOF/AjniX8qbLSGURJVUCeM5e4MIMKBFFi8weeiLrG1fyQejyLXQpRZbU/1BuQasleV/RfHC3hHg==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.49.0.tgz", + "integrity": "sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.3", + "@typescript-eslint/types": "8.49.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -10050,224 +10045,36 @@ "win32" ] }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dev": true, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "license": "MIT", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-phases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "acorn": "^8.14.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -10290,9 +10097,9 @@ } }, "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10358,13 +10165,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, - "license": "MIT" - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -10403,13 +10203,6 @@ "@oslojs/jwt": "0.2.0" } }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, - "license": "MIT" - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -10640,42 +10433,15 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, - "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "node_modules/atomically": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.0.tgz", + "integrity": "sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "stubborn-fs": "^2.0.0", + "when-exit": "^2.1.4" } }, "node_modules/available-typed-arrays": { @@ -10722,6 +10488,17 @@ "node": ">= 0.4" } }, + "node_modules/babel-plugin-react-compiler": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-react-compiler/-/babel-plugin-react-compiler-1.0.0.tgz", + "integrity": "sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.26.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -10760,14 +10537,26 @@ } }, "node_modules/baseline-browser-mapping": { - "version": "2.8.16", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.16.tgz", - "integrity": "sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.4.tgz", + "integrity": "sha512-ZCQ9GEWl73BVm8bu5Fts8nt7MHdbt5vY9bP6WGnUh+r3l8M7CgfyTlwsgCbMC66BNxPr6Xoce3j66Ms5YUQTNA==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.js" } }, + "node_modules/better-sqlite3": { + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.7.0.tgz", + "integrity": "sha512-mXpa5jnIKKHeoGzBrUJrc65cXFKcILGZpU3FXR0pradUEm9MA7UZz02qfEejaMcm9iXrSOCenwwYMJ/tZ1y5Ig==", + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -10794,36 +10583,49 @@ } }, "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", + "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", - "debug": "^4.4.0", + "debug": "^4.4.3", "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", + "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "license": "ISC" + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } }, "node_modules/bowser": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.12.1.tgz", - "integrity": "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", + "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", "license": "MIT" }, "node_modules/brace-expansion": { @@ -10849,9 +10651,9 @@ } }, "node_modules/browserslist": { - "version": "4.26.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", - "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "funding": [ { "type": "opencollective", @@ -10869,11 +10671,11 @@ "license": "MIT", "peer": true, "dependencies": { - "baseline-browser-mapping": "^2.8.9", - "caniuse-lite": "^1.0.30001746", - "electron-to-chromium": "^1.5.227", - "node-releases": "^2.0.21", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -10985,20 +10787,10 @@ "node": ">=6" } }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001750", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001750.tgz", - "integrity": "sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ==", + "version": "1.0.30001759", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz", + "integrity": "sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==", "funding": [ { "type": "opencollective", @@ -11057,15 +10849,11 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0" - } + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" }, "node_modules/citty": { "version": "0.1.6", @@ -11089,19 +10877,6 @@ "url": "https://polar.sh/cva" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cli-spinners": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", @@ -11231,13 +11006,13 @@ } }, "node_modules/color": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/color/-/color-5.0.2.tgz", - "integrity": "sha512-e2hz5BzbUPcYlIRHo8ieAhYgoajrJr+hWoceg6E345TPsATMUKqDgzt8fSXZJJbxfpiPzkWyphz8yn8At7q3fA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", + "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", "license": "MIT", "dependencies": { - "color-convert": "^3.0.1", - "color-string": "^2.0.0" + "color-convert": "^3.1.3", + "color-string": "^2.1.3" }, "engines": { "node": ">=18" @@ -11262,9 +11037,9 @@ "license": "MIT" }, "node_modules/color-string": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.2.tgz", - "integrity": "sha512-RxmjYxbWemV9gKu4zPgiZagUxbH3RQpEIO77XoSSX0ivgABDZ+h8Zuash/EMFLTI4N9QgFPOJ6JQpPZKFxa+dA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", + "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", "license": "MIT", "dependencies": { "color-name": "^2.0.0" @@ -11274,18 +11049,18 @@ } }, "node_modules/color-string/node_modules/color-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.2.tgz", - "integrity": "sha512-9vEt7gE16EW7Eu7pvZnR0abW9z6ufzhXxGXZEVU9IqPdlsUiMwJeJfRtq0zePUmnbHGT9zajca7mX8zgoayo4A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", "license": "MIT", "engines": { "node": ">=12.20" } }, "node_modules/color/node_modules/color-convert": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.2.tgz", - "integrity": "sha512-UNqkvCDXstVck3kdowtOTWROIJQwafjOfXSmddoDrXo4cewMKmusCeF22Q24zvjR8nwWib/3S/dfyzPItPEiJg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", + "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", "license": "MIT", "dependencies": { "color-name": "^2.0.0" @@ -11295,9 +11070,9 @@ } }, "node_modules/color/node_modules/color-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.2.tgz", - "integrity": "sha512-9vEt7gE16EW7Eu7pvZnR0abW9z6ufzhXxGXZEVU9IqPdlsUiMwJeJfRtq0zePUmnbHGT9zajca7mX8zgoayo4A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", "license": "MIT", "engines": { "node": ">=12.20" @@ -11331,6 +11106,54 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, + "node_modules/conf": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/conf/-/conf-15.0.2.tgz", + "integrity": "sha512-JBSrutapCafTrddF9dH3lc7+T2tBycGF4uPkI4Js+g4vLLEhG6RZcFi3aJd5zntdf5tQxAejJt8dihkoQ/eSJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "atomically": "^2.0.3", + "debounce-fn": "^6.0.0", + "dot-prop": "^10.0.0", + "env-paths": "^3.0.0", + "json-schema-typed": "^8.0.1", + "semver": "^7.7.2", + "uint8array-extras": "^1.5.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conf/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/conf/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, "node_modules/confbox": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", @@ -11349,15 +11172,16 @@ } }, "node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/content-type": { @@ -11376,12 +11200,16 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", "license": "MIT", "engines": { "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/cookie-parser": { @@ -11479,55 +11307,422 @@ "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", "license": "MIT" }, - "node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "license": "ISC", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "engines": { + "node": ">=12" } }, - "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, "engines": { - "node": ">= 6" + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "license": "ISC", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "license": "ISC", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" } }, - "node_modules/cssesc": { + "node_modules/d3-drag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "license": "ISC", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, "bin": { - "cssesc": "bin/cssesc" + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" }, "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "devOptional": true, - "license": "MIT" + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "license": "ISC", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -11624,6 +11819,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/debounce-fn": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-6.0.0.tgz", + "integrity": "sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -11647,42 +11858,43 @@ "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "license": "MIT" }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "license": "MIT", "dependencies": { - "clone": "^1.0.2" + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "license": "MIT", "engines": { - "node": ">=0.8" + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, "node_modules/define-data-property": { @@ -11719,6 +11931,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "license": "ISC", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -11762,13 +11983,6 @@ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", "license": "MIT" }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -11782,13 +11996,6 @@ "node": ">=8" } }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, - "license": "MIT" - }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -11801,6 +12008,16 @@ "node": ">=0.10.0" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -11843,10 +12060,13 @@ } }, "node_modules/dompurify": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz", - "integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==", - "license": "(MPL-2.0 OR Apache-2.0)" + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.7.tgz", + "integrity": "sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } }, "node_modules/domutils": { "version": "3.2.2", @@ -11862,6 +12082,22 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dot-prop": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-10.1.0.tgz", + "integrity": "sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^5.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/dotenv": { "version": "17.2.3", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", @@ -11876,9 +12112,9 @@ } }, "node_modules/drizzle-kit": { - "version": "0.31.6", - "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.6.tgz", - "integrity": "sha512-/B4e/4pwnx25QwD5xXgdpo1S+077a2VZdosXbItE/oNmUgQwZydGDz9qJYmnQl/b+5IX0rLfwRhrPnroGtrg8Q==", + "version": "0.31.8", + "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.8.tgz", + "integrity": "sha512-O9EC/miwdnRDY10qRxM8P3Pg8hXe3LyU4ZipReKOgTwn4OqANmftj8XJz1UPUAS6NMHf0E2htjsbQujUTkncCg==", "dev": true, "license": "MIT", "dependencies": { @@ -12376,9 +12612,9 @@ } }, "node_modules/drizzle-orm": { - "version": "0.44.7", - "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.44.7.tgz", - "integrity": "sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ==", + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.45.0.tgz", + "integrity": "sha512-lyd9VRk3SXKRjV/gQckQzmJgkoYMvVG3A2JAV0vh3L+Lwk+v9+rK5Gj0H22y+ZBmxsrRBgJ5/RbQCN7DWd1dtQ==", "license": "Apache-2.0", "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", @@ -12518,6 +12754,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, "license": "MIT" }, "node_modules/ecdsa-sig-formatter": { @@ -12554,9 +12791,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.235", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.235.tgz", - "integrity": "sha512-i/7ntLFwOdoHY7sgjlTIDo4Sl8EdoTjWIaKinYOVfC6bOp71bmwenyZthWHcasxgHDNWbWxvG9M3Ia116zIaYQ==", + "version": "1.5.266", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.266.tgz", + "integrity": "sha512-kgWEglXvkEfMH7rxP5OSZZwnaDWT7J9EoZCujhnpLbfi0bbNtRkgdX2E3gt0Uer11c61qCYktB3hwkAS325sJg==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -12601,60 +12838,6 @@ "node": ">=10.2.0" } }, - "node_modules/engine.io-client": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz", - "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.17.1", - "xmlhttprequest-ssl": "~2.1.1" - } - }, - "node_modules/engine.io-client/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/engine.io-client/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/engine.io-parser": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", @@ -12788,6 +12971,19 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/es-abstract": { "version": "1.24.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", @@ -12901,13 +13097,6 @@ "node": ">= 0.4" } }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, - "license": "MIT" - }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", @@ -12971,9 +13160,9 @@ "license": "MIT" }, "node_modules/esbuild": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.0.tgz", - "integrity": "sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==", + "version": "0.27.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.1.tgz", + "integrity": "sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -12985,38 +13174,38 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.0", - "@esbuild/android-arm": "0.27.0", - "@esbuild/android-arm64": "0.27.0", - "@esbuild/android-x64": "0.27.0", - "@esbuild/darwin-arm64": "0.27.0", - "@esbuild/darwin-x64": "0.27.0", - "@esbuild/freebsd-arm64": "0.27.0", - "@esbuild/freebsd-x64": "0.27.0", - "@esbuild/linux-arm": "0.27.0", - "@esbuild/linux-arm64": "0.27.0", - "@esbuild/linux-ia32": "0.27.0", - "@esbuild/linux-loong64": "0.27.0", - "@esbuild/linux-mips64el": "0.27.0", - "@esbuild/linux-ppc64": "0.27.0", - "@esbuild/linux-riscv64": "0.27.0", - "@esbuild/linux-s390x": "0.27.0", - "@esbuild/linux-x64": "0.27.0", - "@esbuild/netbsd-arm64": "0.27.0", - "@esbuild/netbsd-x64": "0.27.0", - "@esbuild/openbsd-arm64": "0.27.0", - "@esbuild/openbsd-x64": "0.27.0", - "@esbuild/openharmony-arm64": "0.27.0", - "@esbuild/sunos-x64": "0.27.0", - "@esbuild/win32-arm64": "0.27.0", - "@esbuild/win32-ia32": "0.27.0", - "@esbuild/win32-x64": "0.27.0" + "@esbuild/aix-ppc64": "0.27.1", + "@esbuild/android-arm": "0.27.1", + "@esbuild/android-arm64": "0.27.1", + "@esbuild/android-x64": "0.27.1", + "@esbuild/darwin-arm64": "0.27.1", + "@esbuild/darwin-x64": "0.27.1", + "@esbuild/freebsd-arm64": "0.27.1", + "@esbuild/freebsd-x64": "0.27.1", + "@esbuild/linux-arm": "0.27.1", + "@esbuild/linux-arm64": "0.27.1", + "@esbuild/linux-ia32": "0.27.1", + "@esbuild/linux-loong64": "0.27.1", + "@esbuild/linux-mips64el": "0.27.1", + "@esbuild/linux-ppc64": "0.27.1", + "@esbuild/linux-riscv64": "0.27.1", + "@esbuild/linux-s390x": "0.27.1", + "@esbuild/linux-x64": "0.27.1", + "@esbuild/netbsd-arm64": "0.27.1", + "@esbuild/netbsd-x64": "0.27.1", + "@esbuild/openbsd-arm64": "0.27.1", + "@esbuild/openbsd-x64": "0.27.1", + "@esbuild/openharmony-arm64": "0.27.1", + "@esbuild/sunos-x64": "0.27.1", + "@esbuild/win32-arm64": "0.27.1", + "@esbuild/win32-ia32": "0.27.1", + "@esbuild/win32-x64": "0.27.1" } }, "node_modules/esbuild-node-externals": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/esbuild-node-externals/-/esbuild-node-externals-1.19.1.tgz", - "integrity": "sha512-edyCKL8PLs/uamOJUkvjn2TMOdbRaQmQ9l/LOLnUEOEhzpVk/PkyiRyllKac2GX9Y+8NqGTO4DhrHT92b4nHxQ==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/esbuild-node-externals/-/esbuild-node-externals-1.20.1.tgz", + "integrity": "sha512-uVs+TC+PBiav2LoTz8WZT/ootINw9Rns5JJyVznlfZH1qOyZxWCPzeXklY04UtZut5qUeFFaEWtcH7XoMwiTTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13130,12 +13319,12 @@ } }, "node_modules/eslint-config-next": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.0.3.tgz", - "integrity": "sha512-5F6qDjcZldf0Y0ZbqvWvap9xzYUxyDf7/of37aeyhvkrQokj/4bT1JYWZdlWUr283aeVa+s52mPq9ogmGg+5dw==", + "version": "16.0.8", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.0.8.tgz", + "integrity": "sha512-8J5cOAboXIV3f8OD6BOyj7Fik6n/as7J4MboiUSExWruf/lCu1OPR3ZVSdnta6WhzebrmAATEmNSBZsLWA6kbg==", "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "16.0.3", + "@next/eslint-plugin-next": "16.0.8", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", @@ -13513,15 +13702,11 @@ "node": ">= 0.6" } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" }, "node_modules/execa": { "version": "5.1.1", @@ -13548,19 +13733,20 @@ } }, "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "peer": true, "dependencies": { "accepts": "^2.0.0", - "body-parser": "^2.2.0", + "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", + "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", @@ -13627,9 +13813,9 @@ } }, "node_modules/exsolve": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", - "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", "dev": true, "license": "MIT" }, @@ -13639,6 +13825,15 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, + "node_modules/fast-equals": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.3.3.tgz", + "integrity": "sha512-/boTcHZeIAQ2r/tL11voclBHDeP9WPxLt+tyAbVSyyXuUFyh0Tne7gJZTqGbxnvj79TjLdCXLOY7UIPhyG5MTw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -13809,9 +14004,9 @@ } }, "node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -13822,7 +14017,11 @@ "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/find-up": { @@ -13905,6 +14104,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -13921,6 +14121,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -13930,9 +14131,9 @@ } }, "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -13987,48 +14188,6 @@ "node": ">= 0.6" } }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/framer-motion": { - "version": "12.23.22", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.22.tgz", - "integrity": "sha512-ZgGvdxXCw55ZYvhoZChTlG6pUuehecgvEAJz0BHoC5pQKW1EC5xf1Mul1ej5+ai+pVY0pylyFfdl45qnM1/GsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "motion-dom": "^12.23.21", - "motion-utils": "^12.23.6", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "@emotion/is-prop-valid": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@emotion/is-prop-valid": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, "node_modules/fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", @@ -14214,9 +14373,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.12.0.tgz", - "integrity": "sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -14226,21 +14385,15 @@ } }, "node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", - "license": "ISC", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", + "minimatch": "^10.1.1", "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, "engines": { "node": "20 || >=22" }, @@ -14260,18 +14413,11 @@ "node": ">=10.13.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "license": "BSD-2-Clause" - }, "node_modules/glob/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "license": "ISC", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/brace-expansion": "^5.0.0" }, @@ -14347,12 +14493,6 @@ "dev": true, "license": "ISC" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "license": "MIT" - }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -14440,16 +14580,6 @@ "node": ">= 0.4" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, "node_modules/helmet": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/helmet/-/helmet-8.1.0.tgz", @@ -14510,28 +14640,23 @@ } }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/human-signals": { @@ -14649,6 +14774,15 @@ "node": ">= 0.4" } }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/intl-messageformat": { "version": "10.7.18", "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.18.tgz", @@ -14880,6 +15014,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -14916,16 +15051,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -15086,19 +15211,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -15179,6 +15291,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -15190,42 +15303,11 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", - "devOptional": true, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "devOptional": true, "license": "MIT", "bin": { "jiti": "lib/jiti-cli.mjs" @@ -15282,19 +15364,19 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "license": "MIT" }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "license": "MIT" }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "dev": true, + "license": "BSD-2-Clause" + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -15314,12 +15396,12 @@ } }, "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", "license": "MIT", "dependencies": { - "jws": "^3.2.2", + "jws": "^4.0.1", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", @@ -15351,9 +15433,9 @@ } }, "node_modules/jwa": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", - "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", "license": "MIT", "dependencies": { "buffer-equal-constant-time": "^1.0.1", @@ -15362,12 +15444,12 @@ } }, "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", "license": "MIT", "dependencies": { - "jwa": "^1.4.1", + "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, @@ -15375,6 +15457,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "license": "MIT", "dependencies": { "tsscmp": "1.0.6" @@ -15680,3872 +15763,2877 @@ "linux" ], "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", - "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", - "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.30.2", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", - "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/loader-runner": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", - "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "license": "MIT" - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "license": "MIT" - }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "license": "MIT" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "license": "MIT" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "license": "MIT" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "license": "MIT" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/logform": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", - "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", - "license": "MIT", - "dependencies": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lucide-react": { - "version": "0.552.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.552.0.tgz", - "integrity": "sha512-g9WCjmfwqbexSnZE+2cl21PCfXOcqnGeWeMTNAOGEfpPbm/ZF4YIq77Z8qWrxbu660EKuLB4nSLggoKnCb+isw==", - "license": "ISC", - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/marked": { - "version": "15.0.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", - "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/maxmind": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/maxmind/-/maxmind-5.0.1.tgz", - "integrity": "sha512-hYxQxvHkBUlyF34f7IlQOb60rytezCi2oZ8H/BtZpcoodXTlcK1eLgf7kY2TofHqBC3o+Hqtvde9kS72gFQSDw==", - "license": "MIT", - "dependencies": { - "mmdb-lib": "3.0.1", - "tiny-lru": "11.4.5" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "license": "Unlicense", - "optional": true, - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/memfs-browser": { - "version": "3.5.10302", - "resolved": "https://registry.npmjs.org/memfs-browser/-/memfs-browser-3.5.10302.tgz", - "integrity": "sha512-JJTc/nh3ig05O0gBBGZjTCPOyydaTxNF0uHYBrcc1gHNnO+KIHIvo0Y1FKCJsaei6FCl8C6xfQomXqu+cuzkIw==", - "license": "Unlicense", - "optional": true, - "dependencies": { - "memfs": "3.5.3" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mini-svg-data-uri": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", - "license": "MIT", - "bin": { - "mini-svg-data-uri": "cli.js" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mmdb-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mmdb-lib/-/mmdb-lib-3.0.1.tgz", - "integrity": "sha512-dyAyMR+cRykZd1mw5altC9f4vKpCsuywPwo8l/L5fKqDay2zmqT0mF/BvUoXnQiqGn+nceO914rkPKJoyFnGxA==", - "license": "MIT", - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/module-punycode": { - "name": "punycode", - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/monaco-editor": { - "version": "0.54.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.54.0.tgz", - "integrity": "sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==", - "license": "MIT", - "dependencies": { - "dompurify": "3.1.7", - "marked": "14.0.0" - } - }, - "node_modules/monaco-editor/node_modules/marked": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", - "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/motion-dom": { - "version": "12.23.23", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz", - "integrity": "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "motion-utils": "^12.23.6" - } - }, - "node_modules/motion-utils": { - "version": "12.23.6", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", - "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/mylas": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/mylas/-/mylas-2.1.13.tgz", - "integrity": "sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/raouldeheer" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/napi-postinstall": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", - "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", - "license": "MIT", - "bin": { - "napi-postinstall": "lib/cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/napi-postinstall" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT" - }, - "node_modules/next": { - "version": "15.5.6", - "resolved": "https://registry.npmjs.org/next/-/next-15.5.6.tgz", - "integrity": "sha512-zTxsnI3LQo3c9HSdSf91O1jMNsEzIXDShXd4wVdg9y5shwLqBXi4ZtUUJyB86KGVSJLZx0PFONvO54aheGX8QQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@next/env": "15.5.6", - "@swc/helpers": "0.5.15", - "caniuse-lite": "^1.0.30001579", - "postcss": "8.4.31", - "styled-jsx": "5.1.6" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "15.5.6", - "@next/swc-darwin-x64": "15.5.6", - "@next/swc-linux-arm64-gnu": "15.5.6", - "@next/swc-linux-arm64-musl": "15.5.6", - "@next/swc-linux-x64-gnu": "15.5.6", - "@next/swc-linux-x64-musl": "15.5.6", - "@next/swc-win32-arm64-msvc": "15.5.6", - "@next/swc-win32-x64-msvc": "15.5.6", - "sharp": "^0.34.3" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.51.1", - "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "@playwright/test": { - "optional": true - }, - "babel-plugin-react-compiler": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next-intl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.4.0.tgz", - "integrity": "sha512-QHqnP9V9Pe7Tn0PdVQ7u1Z8k9yCkW5SJKeRy2g5gxzhSt/C01y3B9qNxuj3Fsmup/yreIHe6osxU6sFa+9WIkQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/amannn" - } - ], - "license": "MIT", - "dependencies": { - "@formatjs/intl-localematcher": "^0.5.4", - "negotiator": "^1.0.0", - "use-intl": "^4.4.0" - }, - "peerDependencies": { - "next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0", - "typescript": "^5.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/next-themes": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", - "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" - } - }, - "node_modules/next/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/nextjs-toploader": { - "version": "3.9.17", - "resolved": "https://registry.npmjs.org/nextjs-toploader/-/nextjs-toploader-3.9.17.tgz", - "integrity": "sha512-9OF0KSSLtoSAuNg2LZ3aTl4hR9mBDj5L9s9DZiFCbMlXehyICGjkIz5dVGzuATU2bheJZoBdFgq9w07AKSuQQw==", - "license": "MIT", - "dependencies": { - "nprogress": "^0.2.0", - "prop-types": "^15.8.1" - }, - "funding": { - "url": "https://buymeacoffee.com/thesgj" - }, - "peerDependencies": { - "next": ">= 6.0.0", - "react": ">= 16.0.0", - "react-dom": ">= 16.0.0" - } - }, - "node_modules/node-cache": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", - "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", - "license": "MIT", - "dependencies": { - "clone": "2.x" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "deprecated": "Use your platform's native DOMException instead", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/node-html-parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-7.0.1.tgz", - "integrity": "sha512-KGtmPY2kS0thCWGK0VuPyOS+pBKhhe8gXztzA2ilAOhbUbxa9homF1bOyKvhGzMLXUoRds9IOmr/v5lr/lqNmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "css-select": "^5.1.0", - "he": "1.2.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.23", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.23.tgz", - "integrity": "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==", - "license": "MIT" - }, - "node_modules/nodemailer": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.10.tgz", - "integrity": "sha512-Us/Se1WtT0ylXgNFfyFSx4LElllVLJXQjWi2Xz17xWw7amDKO2MLtFnVp1WACy7GkVGs+oBlRopVNUzlrGSw1w==", - "license": "MIT-0", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm": { - "version": "11.6.2", - "resolved": "https://registry.npmjs.org/npm/-/npm-11.6.2.tgz", - "integrity": "sha512-7iKzNfy8lWYs3zq4oFPa8EXZz5xt9gQNKJZau3B1ErLBb6bF7sBJ00x09485DOvRT2l5Gerbl3VlZNT57MxJVA==", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/package-json", - "@npmcli/promise-spawn", - "@npmcli/redact", - "@npmcli/run-script", - "@sigstore/tuf", - "abbrev", - "archy", - "cacache", - "chalk", - "ci-info", - "cli-columns", - "fastest-levenshtein", - "fs-minipass", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", - "is-cidr", - "json-parse-even-better-errors", - "libnpmaccess", - "libnpmdiff", - "libnpmexec", - "libnpmfund", - "libnpmorg", - "libnpmpack", - "libnpmpublish", - "libnpmsearch", - "libnpmteam", - "libnpmversion", - "make-fetch-happen", - "minimatch", - "minipass", - "minipass-pipeline", - "ms", - "node-gyp", - "nopt", - "npm-audit-report", - "npm-install-checks", - "npm-package-arg", - "npm-pick-manifest", - "npm-profile", - "npm-registry-fetch", - "npm-user-validate", - "p-map", - "pacote", - "parse-conflict-json", - "proc-log", - "qrcode-terminal", - "read", - "semver", - "spdx-expression-parse", - "ssri", - "supports-color", - "tar", - "text-table", - "tiny-relative-date", - "treeverse", - "validate-npm-package-name", - "which" - ], - "license": "Artistic-2.0", - "workspaces": [ - "docs", - "smoke-tests", - "mock-globals", - "mock-registry", - "workspaces/*" - ], - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^9.1.6", - "@npmcli/config": "^10.4.2", - "@npmcli/fs": "^4.0.0", - "@npmcli/map-workspaces": "^5.0.0", - "@npmcli/package-json": "^7.0.1", - "@npmcli/promise-spawn": "^8.0.3", - "@npmcli/redact": "^3.2.2", - "@npmcli/run-script": "^10.0.0", - "@sigstore/tuf": "^4.0.0", - "abbrev": "^3.0.1", - "archy": "~1.0.0", - "cacache": "^20.0.1", - "chalk": "^5.6.2", - "ci-info": "^4.3.1", - "cli-columns": "^4.0.0", - "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.3", - "glob": "^11.0.3", - "graceful-fs": "^4.2.11", - "hosted-git-info": "^9.0.2", - "ini": "^5.0.0", - "init-package-json": "^8.2.2", - "is-cidr": "^6.0.1", - "json-parse-even-better-errors": "^4.0.0", - "libnpmaccess": "^10.0.3", - "libnpmdiff": "^8.0.9", - "libnpmexec": "^10.1.8", - "libnpmfund": "^7.0.9", - "libnpmorg": "^8.0.1", - "libnpmpack": "^9.0.9", - "libnpmpublish": "^11.1.2", - "libnpmsearch": "^9.0.1", - "libnpmteam": "^8.0.2", - "libnpmversion": "^8.0.2", - "make-fetch-happen": "^15.0.2", - "minimatch": "^10.0.3", - "minipass": "^7.1.1", - "minipass-pipeline": "^1.2.4", - "ms": "^2.1.2", - "node-gyp": "^11.4.2", - "nopt": "^8.1.0", - "npm-audit-report": "^6.0.0", - "npm-install-checks": "^7.1.2", - "npm-package-arg": "^13.0.1", - "npm-pick-manifest": "^11.0.1", - "npm-profile": "^12.0.0", - "npm-registry-fetch": "^19.0.0", - "npm-user-validate": "^3.0.0", - "p-map": "^7.0.3", - "pacote": "^21.0.3", - "parse-conflict-json": "^4.0.0", - "proc-log": "^5.0.0", - "qrcode-terminal": "^0.12.0", - "read": "^4.1.0", - "semver": "^7.7.3", - "spdx-expression-parse": "^4.0.0", - "ssri": "^12.0.0", - "supports-color": "^10.2.2", - "tar": "^7.5.1", - "text-table": "~0.2.0", - "tiny-relative-date": "^2.0.2", - "treeverse": "^3.0.0", - "validate-npm-package-name": "^6.0.2", - "which": "^5.0.0" - }, - "bin": { - "npm": "bin/npm-cli.js", - "npx": "bin/npx-cli.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/npm/node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/npm/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "inBundle": true, - "license": "MIT", + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "inBundle": true, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/@isaacs/fs-minipass": { + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { "version": "4.0.1", - "inBundle": true, - "license": "ISC", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "license": "MIT", "dependencies": { - "minipass": "^7.0.4" + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" }, "engines": { - "node": ">=18.0.0" + "node": ">= 12.0.0" } }, - "node_modules/npm/node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/@npmcli/agent": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^11.2.1", - "socks-proxy-agent": "^8.0.3" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "9.1.6", - "inBundle": true, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "license": "ISC", "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^4.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/map-workspaces": "^5.0.0", - "@npmcli/metavuln-calculator": "^9.0.2", - "@npmcli/name-from-folder": "^3.0.0", - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/query": "^4.0.0", - "@npmcli/redact": "^3.0.0", - "@npmcli/run-script": "^10.0.0", - "bin-links": "^5.0.0", - "cacache": "^20.0.1", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^9.0.0", - "json-stringify-nice": "^1.1.4", - "lru-cache": "^11.2.1", - "minimatch": "^10.0.3", - "nopt": "^8.0.0", - "npm-install-checks": "^7.1.0", - "npm-package-arg": "^13.0.0", - "npm-pick-manifest": "^11.0.1", - "npm-registry-fetch": "^19.0.0", - "pacote": "^21.0.2", - "parse-conflict-json": "^4.0.0", - "proc-log": "^5.0.0", - "proggy": "^3.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^3.0.1", - "semver": "^7.3.7", - "ssri": "^12.0.0", - "treeverse": "^3.0.0", - "walk-up-path": "^4.0.0" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "yallist": "^3.0.2" } }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "10.4.2", - "inBundle": true, + "node_modules/lucide-react": { + "version": "0.559.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.559.0.tgz", + "integrity": "sha512-3ymrkBPXWk3U2bwUDg6TdA6hP5iGDMgPEAMLhchEgTQmA+g0Zk24tOtKtXMx35w1PizTmsBC3RhP88QYm+7mHQ==", "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@npmcli/map-workspaces": "^5.0.0", - "@npmcli/package-json": "^7.0.0", - "ci-info": "^4.0.0", - "ini": "^5.0.0", - "nopt": "^8.1.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "walk-up-path": "^4.0.0" + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 18" } }, - "node_modules/npm/node_modules/@npmcli/fs": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 0.4" } }, - "node_modules/npm/node_modules/@npmcli/git": { - "version": "7.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/maxmind": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/maxmind/-/maxmind-5.0.1.tgz", + "integrity": "sha512-hYxQxvHkBUlyF34f7IlQOb60rytezCi2oZ8H/BtZpcoodXTlcK1eLgf7kY2TofHqBC3o+Hqtvde9kS72gFQSDw==", + "license": "MIT", "dependencies": { - "@npmcli/promise-spawn": "^8.0.0", - "ini": "^5.0.0", - "lru-cache": "^11.2.1", - "npm-pick-manifest": "^11.0.1", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^5.0.0" + "mmdb-lib": "3.0.1", + "tiny-lru": "11.4.5" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=12", + "npm": ">=6" } }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 0.8" } }, - "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "license": "Unlicense", + "optional": true, "dependencies": { - "@npmcli/name-from-folder": "^3.0.0", - "@npmcli/package-json": "^7.0.0", - "glob": "^11.0.3", - "minimatch": "^10.0.3" + "fs-monkey": "^1.0.4" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 4.0.0" } }, - "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "9.0.2", - "inBundle": true, - "license": "ISC", + "node_modules/memfs-browser": { + "version": "3.5.10302", + "resolved": "https://registry.npmjs.org/memfs-browser/-/memfs-browser-3.5.10302.tgz", + "integrity": "sha512-JJTc/nh3ig05O0gBBGZjTCPOyydaTxNF0uHYBrcc1gHNnO+KIHIvo0Y1FKCJsaei6FCl8C6xfQomXqu+cuzkIw==", + "license": "Unlicense", + "optional": true, "dependencies": { - "cacache": "^20.0.0", - "json-parse-even-better-errors": "^4.0.0", - "pacote": "^21.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "memfs": "3.5.3" } }, - "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 8" } }, - "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "7.0.1", - "inBundle": true, - "license": "ISC", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { - "@npmcli/git": "^7.0.0", - "glob": "^11.0.3", - "hosted-git-info": "^9.0.0", - "json-parse-even-better-errors": "^4.0.0", - "proc-log": "^5.0.0", - "semver": "^7.5.3", - "validate-npm-package-license": "^3.0.4" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8.6" } }, - "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "8.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "which": "^5.0.0" + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 0.6" } }, - "node_modules/npm/node_modules/@npmcli/query": { - "version": "4.0.1", - "inBundle": true, - "license": "ISC", + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^7.0.0" + "mime-db": "^1.54.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/npm/node_modules/@npmcli/redact": { - "version": "3.2.2", - "inBundle": true, - "license": "ISC", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=6" } }, - "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "10.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "node-gyp": "^11.0.0", - "proc-log": "^5.0.0", - "which": "^5.0.0" - }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "inBundle": true, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" + "bin": { + "mini-svg-data-uri": "cli.js" } }, - "node_modules/npm/node_modules/@sigstore/bundle": { - "version": "4.0.0", - "inBundle": true, - "license": "Apache-2.0", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "*" } }, - "node_modules/npm/node_modules/@sigstore/core": { - "version": "3.0.0", - "inBundle": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.17.0 || >=22.9.0" + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.5.0", - "inBundle": true, - "license": "Apache-2.0", + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/npm/node_modules/@sigstore/sign": { - "version": "4.0.1", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.0.0", - "@sigstore/protobuf-specs": "^0.5.0", - "make-fetch-happen": "^15.0.2", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1" - }, + "node_modules/mmdb-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mmdb-lib/-/mmdb-lib-3.0.1.tgz", + "integrity": "sha512-dyAyMR+cRykZd1mw5altC9f4vKpCsuywPwo8l/L5fKqDay2zmqT0mF/BvUoXnQiqGn+nceO914rkPKJoyFnGxA==", + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10", + "npm": ">=6" } }, - "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "4.0.0", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0", - "tuf-js": "^4.0.0" - }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "*" } }, - "node_modules/npm/node_modules/@sigstore/verify": { - "version": "3.0.0", - "inBundle": true, - "license": "Apache-2.0", + "node_modules/monaco-editor": { + "version": "0.55.1", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.55.1.tgz", + "integrity": "sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==", + "license": "MIT", "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.0.0", - "@sigstore/protobuf-specs": "^0.5.0" + "dompurify": "3.2.7", + "marked": "14.0.0" + } + }, + "node_modules/monaco-editor/node_modules/marked": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", + "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 18" } }, - "node_modules/npm/node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "inBundle": true, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mylas": { + "version": "2.1.14", + "resolved": "https://registry.npmjs.org/mylas/-/mylas-2.1.14.tgz", + "integrity": "sha512-BzQguy9W9NJgoVn2mRWzbFrFWWztGCcng2QI9+41frfk+Athwgx3qhqhvStz7ExeUUu7Kzw427sNzHpEZNINog==", + "dev": true, "license": "MIT", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=16.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/raouldeheer" } }, - "node_modules/npm/node_modules/@tufjs/models": { - "version": "4.0.0", - "inBundle": true, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.5" + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/npm/node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/napi-postinstall" } }, - "node_modules/npm/node_modules/abbrev": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT" }, - "node_modules/npm/node_modules/agent-base": { - "version": "7.1.4", - "inBundle": true, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", "engines": { - "node": ">= 14" + "node": ">= 0.6" } }, - "node_modules/npm/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, + "node_modules/next": { + "version": "15.5.9", + "resolved": "https://registry.npmjs.org/next/-/next-15.5.9.tgz", + "integrity": "sha512-agNLK89seZEtC5zUHwtut0+tNrc0Xw4FT/Dg+B/VLEo9pAcS9rtTKpek3V6kVcVwsB2YlqMaHdfZL4eLEVYuCg==", "license": "MIT", + "peer": true, + "dependencies": { + "@next/env": "15.5.9", + "@swc/helpers": "0.5.15", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.5.7", + "@next/swc-darwin-x64": "15.5.7", + "@next/swc-linux-arm64-gnu": "15.5.7", + "@next/swc-linux-arm64-musl": "15.5.7", + "@next/swc-linux-x64-gnu": "15.5.7", + "@next/swc-linux-x64-musl": "15.5.7", + "@next/swc-win32-arm64-msvc": "15.5.7", + "@next/swc-win32-x64-msvc": "15.5.7", + "sharp": "^0.34.3" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.51.1", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } } }, - "node_modules/npm/node_modules/ansi-styles": { - "version": "6.2.3", - "inBundle": true, + "node_modules/next-intl": { + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.5.8.tgz", + "integrity": "sha512-BdN6494nvt09WtmW5gbWdwRhDDHC/Sg7tBMhN7xfYds3vcRCngSDXat81gmJkblw9jYOv8zXzzFJyu5VYXnJzg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/amannn" + } + ], "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@formatjs/intl-localematcher": "^0.5.4", + "@swc/core": "^1.15.2", + "negotiator": "^1.0.0", + "next-intl-swc-plugin-extractor": "^4.5.8", + "po-parser": "^1.0.2", + "use-intl": "^4.5.8" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0", + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/npm/node_modules/aproba": { - "version": "2.1.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/archy": { - "version": "1.0.0", - "inBundle": true, + "node_modules/next-intl-swc-plugin-extractor": { + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/next-intl-swc-plugin-extractor/-/next-intl-swc-plugin-extractor-4.5.8.tgz", + "integrity": "sha512-hscCKUv+5GQ0CCNbvqZ8gaxnAGToCgDTbL++jgCq8SCk/ljtZDEeQZcMk46Nm6Ynn49Q/JKF4Npo/Sq1mpbusA==", "license": "MIT" }, - "node_modules/npm/node_modules/balanced-match": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" + "node_modules/next-themes": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", + "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } }, - "node_modules/npm/node_modules/bin-links": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", + "node_modules/next/node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", "dependencies": { - "cmd-shim": "^7.0.0", - "npm-normalize-package-bin": "^4.0.0", - "proc-log": "^5.0.0", - "read-cmd-shim": "^5.0.0", - "write-file-atomic": "^6.0.0" + "tslib": "^2.8.0" + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^10 || ^12 || >=14" } }, - "node_modules/npm/node_modules/binary-extensions": { - "version": "3.1.0", - "inBundle": true, + "node_modules/nextjs-toploader": { + "version": "3.9.17", + "resolved": "https://registry.npmjs.org/nextjs-toploader/-/nextjs-toploader-3.9.17.tgz", + "integrity": "sha512-9OF0KSSLtoSAuNg2LZ3aTl4hR9mBDj5L9s9DZiFCbMlXehyICGjkIz5dVGzuATU2bheJZoBdFgq9w07AKSuQQw==", "license": "MIT", - "engines": { - "node": ">=18.20" + "dependencies": { + "nprogress": "^0.2.0", + "prop-types": "^15.8.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://buymeacoffee.com/thesgj" + }, + "peerDependencies": { + "next": ">= 6.0.0", + "react": ">= 16.0.0", + "react-dom": ">= 16.0.0" } }, - "node_modules/npm/node_modules/brace-expansion": { - "version": "2.0.2", - "inBundle": true, + "node_modules/node-abi": { + "version": "3.78.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.78.0.tgz", + "integrity": "sha512-E2wEyrgX/CqvicaQYU3Ze1PFGjc4QYPGsjUrlYkqAE0WjHEZwgOsGMPMzkMse4LjJbDmaEuDX3CM036j5K2DSQ==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/npm/node_modules/cacache": { - "version": "20.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^4.0.0", - "fs-minipass": "^3.0.0", - "glob": "^11.0.3", - "lru-cache": "^11.1.0", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^12.0.0", - "unique-filename": "^4.0.0" + "semver": "^7.3.5" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10" } }, - "node_modules/npm/node_modules/chalk": { - "version": "5.6.2", - "inBundle": true, + "node_modules/node-cache": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", + "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "dependencies": { + "clone": "2.x" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/npm/node_modules/chownr": { - "version": "3.0.0", - "inBundle": true, - "license": "BlueOak-1.0.0", "engines": { - "node": ">=18" + "node": ">= 8.0.0" } }, - "node_modules/npm/node_modules/ci-info": { - "version": "4.3.1", + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" } ], - "inBundle": true, "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cidr-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "ip-regex": "5.0.0" - }, - "engines": { - "node": ">=20" + "node": ">=10.5.0" } }, - "node_modules/npm/node_modules/cli-columns": { - "version": "4.0.0", - "inBundle": true, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "license": "MIT", "dependencies": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "7.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/color-convert": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/npm/node_modules/color-name": { - "version": "1.1.4", - "inBundle": true, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "license": "MIT" }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" + "node_modules/nodemailer": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.11.tgz", + "integrity": "sha512-gnXhNRE0FNhD7wPSCGhdNh46Hs6nm+uTyg+Kq0cZukNQiYdnCsoQjodNP9BQVG9XrcK/v6/MgpAPBUFyzh9pvw==", + "license": "MIT-0", + "engines": { + "node": ">=6.0.0" + } }, - "node_modules/npm/node_modules/cross-spawn": { - "version": "7.0.6", - "inBundle": true, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/cross-spawn/node_modules/isexe": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "inBundle": true, - "license": "ISC", + "node_modules/npm": { + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-11.7.0.tgz", + "integrity": "sha512-wiCZpv/41bIobCoJ31NStIWKfAxxYyD1iYnWCtiyns8s5v3+l8y0HCP/sScuH6B5+GhIfda4HQKiqeGZwJWhFw==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/metavuln-calculator", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/redact", + "@npmcli/run-script", + "@sigstore/tuf", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "spdx-expression-parse", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which" + ], + "license": "Artistic-2.0", + "workspaces": [ + "docs", + "smoke-tests", + "mock-globals", + "mock-registry", + "workspaces/*" + ], "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^9.1.9", + "@npmcli/config": "^10.4.5", + "@npmcli/fs": "^5.0.0", + "@npmcli/map-workspaces": "^5.0.3", + "@npmcli/metavuln-calculator": "^9.0.3", + "@npmcli/package-json": "^7.0.4", + "@npmcli/promise-spawn": "^9.0.1", + "@npmcli/redact": "^4.0.0", + "@npmcli/run-script": "^10.0.3", + "@sigstore/tuf": "^4.0.0", + "abbrev": "^4.0.0", + "archy": "~1.0.0", + "cacache": "^20.0.3", + "chalk": "^5.6.2", + "ci-info": "^4.3.1", + "cli-columns": "^4.0.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^13.0.0", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^9.0.2", + "ini": "^6.0.0", + "init-package-json": "^8.2.4", + "is-cidr": "^6.0.1", + "json-parse-even-better-errors": "^5.0.0", + "libnpmaccess": "^10.0.3", + "libnpmdiff": "^8.0.12", + "libnpmexec": "^10.1.11", + "libnpmfund": "^7.0.12", + "libnpmorg": "^8.0.1", + "libnpmpack": "^9.0.12", + "libnpmpublish": "^11.1.3", + "libnpmsearch": "^9.0.1", + "libnpmteam": "^8.0.2", + "libnpmversion": "^8.0.3", + "make-fetch-happen": "^15.0.3", + "minimatch": "^10.1.1", + "minipass": "^7.1.1", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^12.1.0", + "nopt": "^9.0.0", + "npm-audit-report": "^7.0.0", + "npm-install-checks": "^8.0.0", + "npm-package-arg": "^13.0.2", + "npm-pick-manifest": "^11.0.3", + "npm-profile": "^12.0.1", + "npm-registry-fetch": "^19.1.1", + "npm-user-validate": "^4.0.0", + "p-map": "^7.0.4", + "pacote": "^21.0.4", + "parse-conflict-json": "^5.0.1", + "proc-log": "^6.1.0", + "qrcode-terminal": "^0.12.0", + "read": "^5.0.1", + "semver": "^7.7.3", + "spdx-expression-parse": "^4.0.0", + "ssri": "^13.0.0", + "supports-color": "^10.2.2", + "tar": "^7.5.2", + "text-table": "~0.2.0", + "tiny-relative-date": "^2.0.2", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^7.0.0", + "which": "^6.0.0" }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/cssesc": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", "bin": { - "cssesc": "bin/cssesc" + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" }, "engines": { - "node": ">=4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/debug": { - "version": "4.4.3", - "inBundle": true, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" + "path-key": "^3.0.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/npm/node_modules/diff": { - "version": "8.0.2", - "inBundle": true, - "license": "BSD-3-Clause", "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/npm/node_modules/eastasianwidth": { - "version": "0.2.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/emoji-regex": { - "version": "8.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/encoding": { - "version": "0.1.13", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" + "node": ">=8" } }, - "node_modules/npm/node_modules/env-paths": { - "version": "2.2.1", + "node_modules/npm/node_modules/@isaacs/balanced-match": { + "version": "4.0.1", "inBundle": true, "license": "MIT", "engines": { - "node": ">=6" + "node": "20 || >=22" } }, - "node_modules/npm/node_modules/err-code": { - "version": "2.0.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/exponential-backoff": { - "version": "3.1.2", - "inBundle": true, - "license": "Apache-2.0" - }, - "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.16", + "node_modules/npm/node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", "inBundle": true, "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/npm/node_modules/foreground-child": { - "version": "3.3.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/fs-minipass": { - "version": "3.0.3", - "inBundle": true, - "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "@isaacs/balanced-match": "^4.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "20 || >=22" } }, - "node_modules/npm/node_modules/glob": { - "version": "11.0.3", + "node_modules/npm/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "minipass": "^7.0.4" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18.0.0" } }, - "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.11", + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/hosted-git-info": { - "version": "9.0.2", + "node_modules/npm/node_modules/@npmcli/agent": { + "version": "4.0.0", "inBundle": true, "license": "ISC", - "dependencies": { - "lru-cache": "^11.1.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.2.0", - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/http-proxy-agent": { - "version": "7.0.2", - "inBundle": true, - "license": "MIT", "dependencies": { "agent-base": "^7.1.0", - "debug": "^4.3.4" + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": ">= 14" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/https-proxy-agent": { - "version": "7.0.6", + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "9.1.9", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^5.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/metavuln-calculator": "^9.0.2", + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/query": "^5.0.0", + "@npmcli/redact": "^4.0.0", + "@npmcli/run-script": "^10.0.0", + "bin-links": "^6.0.0", + "cacache": "^20.0.1", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^9.0.0", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^11.2.1", + "minimatch": "^10.0.3", + "nopt": "^9.0.0", + "npm-install-checks": "^8.0.0", + "npm-package-arg": "^13.0.0", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "pacote": "^21.0.2", + "parse-conflict-json": "^5.0.1", + "proc-log": "^6.0.0", + "proggy": "^4.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "semver": "^7.3.7", + "ssri": "^13.0.0", + "treeverse": "^3.0.0", + "walk-up-path": "^4.0.0" }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/npm/node_modules/iconv-lite": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "bin": { + "arborist": "bin/index.js" }, "engines": { - "node": ">=0.10.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/ignore-walk": { - "version": "8.0.0", + "node_modules/npm/node_modules/@npmcli/config": { + "version": "10.4.5", "inBundle": true, "license": "ISC", "dependencies": { - "minimatch": "^10.0.3" + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "ci-info": "^4.0.0", + "ini": "^6.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "walk-up-path": "^4.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/imurmurhash": { - "version": "0.1.4", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/npm/node_modules/ini": { + "node_modules/npm/node_modules/@npmcli/fs": { "version": "5.0.0", "inBundle": true, "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/init-package-json": { - "version": "8.2.2", - "inBundle": true, - "license": "ISC", "dependencies": { - "@npmcli/package-json": "^7.0.0", - "npm-package-arg": "^13.0.0", - "promzard": "^2.0.0", - "read": "^4.0.0", - "semver": "^7.7.2", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^6.0.2" + "semver": "^7.3.5" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/ip-address": { - "version": "10.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/npm/node_modules/ip-regex": { - "version": "5.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/is-cidr": { - "version": "6.0.1", + "node_modules/npm/node_modules/@npmcli/git": { + "version": "7.0.1", "inBundle": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "cidr-regex": "5.0.1" + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^6.0.0" }, "engines": { - "node": ">=20" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "4.0.0", "inBundle": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "npm-bundled": "^5.0.0", + "npm-normalize-package-bin": "^5.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/isexe": { - "version": "3.1.1", + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "5.0.3", "inBundle": true, "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "glob": "^13.0.0", + "minimatch": "^10.0.3" + }, "engines": { - "node": ">=16" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/jackspeak": { - "version": "4.1.1", + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "9.0.3", "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "cacache": "^20.0.0", + "json-parse-even-better-errors": "^5.0.0", + "pacote": "^21.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/json-parse-even-better-errors": { + "node_modules/npm/node_modules/@npmcli/name-from-folder": { "version": "4.0.0", "inBundle": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/json-stringify-nice": { - "version": "1.1.4", + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "5.0.0", "inBundle": true, "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/jsonparse": { - "version": "1.3.1", - "engines": [ - "node >= 0.2.0" - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff": { - "version": "6.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.5.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/libnpmaccess": { - "version": "10.0.3", + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "7.0.4", "inBundle": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^13.0.0", - "npm-registry-fetch": "^19.0.0" + "@npmcli/git": "^7.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmdiff": { - "version": "8.0.9", + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.1.6", - "@npmcli/installed-package-contents": "^3.0.0", - "binary-extensions": "^3.0.0", - "diff": "^8.0.2", - "minimatch": "^10.0.3", - "npm-package-arg": "^13.0.0", - "pacote": "^21.0.2", - "tar": "^7.5.1" + "which": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmexec": { - "version": "10.1.8", + "node_modules/npm/node_modules/@npmcli/query": { + "version": "5.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.1.6", - "@npmcli/package-json": "^7.0.0", - "@npmcli/run-script": "^10.0.0", - "ci-info": "^4.0.0", - "npm-package-arg": "^13.0.0", - "pacote": "^21.0.2", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "read": "^4.0.0", - "semver": "^7.3.7", - "signal-exit": "^4.1.0", - "walk-up-path": "^4.0.0" + "postcss-selector-parser": "^7.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmfund": { - "version": "7.0.9", + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "4.0.0", "inBundle": true, "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^9.1.6" - }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmorg": { - "version": "8.0.1", + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "10.0.3", "inBundle": true, "license": "ISC", "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^19.0.0" + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0", + "which": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmpack": { - "version": "9.0.9", + "node_modules/npm/node_modules/@sigstore/bundle": { + "version": "4.0.0", "inBundle": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "@npmcli/arborist": "^9.1.6", - "@npmcli/run-script": "^10.0.0", - "npm-package-arg": "^13.0.0", - "pacote": "^21.0.2" + "@sigstore/protobuf-specs": "^0.5.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmpublish": { - "version": "11.1.2", + "node_modules/npm/node_modules/@sigstore/core": { + "version": "3.0.0", "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/package-json": "^7.0.0", - "ci-info": "^4.0.0", - "npm-package-arg": "^13.0.0", - "npm-registry-fetch": "^19.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.7", - "sigstore": "^4.0.0", - "ssri": "^12.0.0" - }, + "license": "Apache-2.0", "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmsearch": { - "version": "9.0.1", + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.5.0", "inBundle": true, - "license": "ISC", + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/sign": { + "version": "4.0.1", + "inBundle": true, + "license": "Apache-2.0", "dependencies": { - "npm-registry-fetch": "^19.0.0" + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmteam": { - "version": "8.0.2", + "node_modules/npm/node_modules/@sigstore/sign/node_modules/proc-log": { + "version": "5.0.0", "inBundle": true, "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "4.0.0", + "inBundle": true, + "license": "Apache-2.0", "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^19.0.0" + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmversion": { - "version": "8.0.2", + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "3.0.0", "inBundle": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "@npmcli/git": "^7.0.0", - "@npmcli/run-script": "^10.0.0", - "json-parse-even-better-errors": "^4.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.7" + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/lru-cache": { - "version": "11.2.2", + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", "inBundle": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/make-fetch-happen": { - "version": "15.0.2", + "node_modules/npm/node_modules/@tufjs/models": { + "version": "4.0.0", "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/agent": "^4.0.0", - "cacache": "^20.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "ssri": "^12.0.0" + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minimatch": { - "version": "10.0.3", + "node_modules/npm/node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", "inBundle": true, "license": "ISC", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "20 || >=22" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/minipass": { - "version": "7.1.2", + "node_modules/npm/node_modules/abbrev": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/aproba": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } + "license": "MIT" }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "2.0.1", + "node_modules/npm/node_modules/bin-links": { + "version": "6.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "cmd-shim": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "proc-log": "^6.0.0", + "read-cmd-shim": "^6.0.0", + "write-file-atomic": "^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass-fetch": { - "version": "4.0.1", + "node_modules/npm/node_modules/binary-extensions": { + "version": "3.1.0", "inBundle": true, "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^3.0.1" - }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=18.20" }, - "optionalDependencies": { - "encoding": "^0.1.13" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/minipass-flush": { - "version": "1.0.5", + "node_modules/npm/node_modules/brace-expansion": { + "version": "2.0.2", "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" + "balanced-match": "^1.0.0" } }, - "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", + "node_modules/npm/node_modules/cacache": { + "version": "20.0.3", "inBundle": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "@npmcli/fs": "^5.0.0", + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^13.0.0", + "unique-filename": "^5.0.0" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", + "node_modules/npm/node_modules/chalk": { + "version": "5.6.2", "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", + "node_modules/npm/node_modules/chownr": { + "version": "3.0.0", "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/npm/node_modules/minipass-sized": { - "version": "1.0.3", + "node_modules/npm/node_modules/ci-info": { + "version": "4.3.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", + "node_modules/npm/node_modules/cidr-regex": { + "version": "5.0.1", "inBundle": true, - "license": "ISC", + "license": "BSD-2-Clause", "dependencies": { - "yallist": "^4.0.0" + "ip-regex": "5.0.0" }, "engines": { - "node": ">=8" + "node": ">=20" } }, - "node_modules/npm/node_modules/minizlib": { - "version": "3.1.0", + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", "inBundle": true, "license": "MIT", "dependencies": { - "minipass": "^7.1.2" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 18" + "node": ">= 10" } }, - "node_modules/npm/node_modules/ms": { - "version": "2.1.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/mute-stream": { - "version": "2.0.0", + "node_modules/npm/node_modules/cmd-shim": { + "version": "8.0.0", "inBundle": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/negotiator": { - "version": "1.0.0", + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "license": "ISC" }, - "node_modules/npm/node_modules/node-gyp": { - "version": "11.4.2", + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", "inBundle": true, "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^14.0.3", - "nopt": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "tar": "^7.4.3", - "tinyglobby": "^0.2.12", - "which": "^5.0.0" - }, "bin": { - "node-gyp": "bin/node-gyp.js" + "cssesc": "bin/cssesc" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=4" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/@npmcli/agent": { - "version": "3.0.0", + "node_modules/npm/node_modules/debug": { + "version": "4.4.3", "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" + "ms": "^2.1.3" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/npm/node_modules/node-gyp/node_modules/cacache": { - "version": "19.0.1", + "node_modules/npm/node_modules/diff": { + "version": "8.0.2", "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^4.0.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^12.0.0", - "tar": "^7.4.3", - "unique-filename": "^4.0.0" - }, + "license": "BSD-3-Clause", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=0.3.1" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/glob": { - "version": "10.4.5", + "node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", "inBundle": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "inBundle": true, + "license": "MIT", + "optional": true, "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "iconv-lite": "^0.6.2" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/jackspeak": { - "version": "3.4.3", + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/lru-cache": { - "version": "10.4.3", + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", "inBundle": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/npm/node_modules/node-gyp/node_modules/make-fetch-happen": { - "version": "14.0.3", + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.3", "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^3.0.0", - "cacache": "^19.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "ssri": "^12.0.0" - }, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "inBundle": true, + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 4.9.1" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.5", + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.3", "inBundle": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "minipass": "^7.0.3" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/path-scurry": { - "version": "1.11.1", + "node_modules/npm/node_modules/glob": { + "version": "13.0.0", "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/nopt": { - "version": "8.1.0", + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "9.0.2", "inBundle": true, "license": "ISC", "dependencies": { - "abbrev": "^3.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" + "lru-cache": "^11.1.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/npm-audit-report": { - "version": "6.0.0", + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.2.0", "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } + "license": "BSD-2-Clause" }, - "node_modules/npm/node_modules/npm-bundled": { - "version": "4.0.0", + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "7.0.2", "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "npm-normalize-package-bin": "^4.0.0" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 14" } }, - "node_modules/npm/node_modules/npm-install-checks": { - "version": "7.1.2", + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "7.0.6", "inBundle": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "semver": "^7.1.1" + "agent-base": "^7.1.2", + "debug": "4" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 14" } }, - "node_modules/npm/node_modules/npm-package-arg": { - "version": "13.0.1", + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", "inBundle": true, - "license": "ISC", + "license": "MIT", + "optional": true, "dependencies": { - "hosted-git-info": "^9.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/npm-packlist": { - "version": "10.0.2", + "node_modules/npm/node_modules/ignore-walk": { + "version": "8.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "ignore-walk": "^8.0.0", - "proc-log": "^5.0.0" + "minimatch": "^10.0.3" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "11.0.1", + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^7.1.0", - "npm-normalize-package-bin": "^4.0.0", - "npm-package-arg": "^13.0.0", - "semver": "^7.3.5" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=0.8.19" } }, - "node_modules/npm/node_modules/npm-profile": { - "version": "12.0.0", + "node_modules/npm/node_modules/ini": { + "version": "6.0.0", "inBundle": true, "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^19.0.0", - "proc-log": "^5.0.0" - }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "19.0.0", + "node_modules/npm/node_modules/init-package-json": { + "version": "8.2.4", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/redact": "^3.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^15.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minizlib": "^3.0.1", + "@npmcli/package-json": "^7.0.0", "npm-package-arg": "^13.0.0", - "proc-log": "^5.0.0" + "promzard": "^3.0.1", + "read": "^5.0.1", + "semver": "^7.7.2", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^7.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/npm-user-validate": { - "version": "3.0.0", + "node_modules/npm/node_modules/ip-address": { + "version": "10.0.1", "inBundle": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 12" } }, - "node_modules/npm/node_modules/p-map": { - "version": "7.0.3", + "node_modules/npm/node_modules/ip-regex": { + "version": "5.0.0", "inBundle": true, "license": "MIT", "engines": { - "node": ">=18" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/package-json-from-dist": { - "version": "1.0.1", - "inBundle": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/npm/node_modules/pacote": { - "version": "21.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^7.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^10.0.0", - "cacache": "^20.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^13.0.0", - "npm-packlist": "^10.0.1", - "npm-pick-manifest": "^11.0.1", - "npm-registry-fetch": "^19.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^4.0.0", - "ssri": "^12.0.0", - "tar": "^7.4.3" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm/node_modules/parse-conflict-json": { - "version": "4.0.0", + "node_modules/npm/node_modules/is-cidr": { + "version": "6.0.1", "inBundle": true, - "license": "ISC", + "license": "BSD-2-Clause", "dependencies": { - "json-parse-even-better-errors": "^4.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" + "cidr-regex": "5.0.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=20" } }, - "node_modules/npm/node_modules/path-key": { - "version": "3.1.1", + "node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "inBundle": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/npm/node_modules/path-scurry": { - "version": "2.0.0", + "node_modules/npm/node_modules/isexe": { + "version": "3.1.1", "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, + "license": "ISC", "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, - "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "7.1.0", + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "5.0.0", "inBundle": true, "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, "engines": { - "node": ">=4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/proc-log": { - "version": "5.0.0", + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", "inBundle": true, "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/proggy": { - "version": "3.0.0", + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "10.0.3", "inBundle": true, "license": "ISC", + "dependencies": { + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0" + }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/promise-all-reject-late": { - "version": "1.0.1", + "node_modules/npm/node_modules/libnpmdiff": { + "version": "8.0.12", "inBundle": true, "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" + "dependencies": { + "@npmcli/arborist": "^9.1.9", + "@npmcli/installed-package-contents": "^4.0.0", + "binary-extensions": "^3.0.0", + "diff": "^8.0.2", + "minimatch": "^10.0.3", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", + "tar": "^7.5.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/promise-call-limit": { - "version": "3.0.2", + "node_modules/npm/node_modules/libnpmexec": { + "version": "10.1.11", "inBundle": true, "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" + "dependencies": { + "@npmcli/arborist": "^9.1.9", + "@npmcli/package-json": "^7.0.0", + "@npmcli/run-script": "^10.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "read": "^5.0.1", + "semver": "^7.3.7", + "signal-exit": "^4.1.0", + "walk-up-path": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/promise-retry": { - "version": "2.0.1", + "node_modules/npm/node_modules/libnpmfund": { + "version": "7.0.12", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "@npmcli/arborist": "^9.1.9" }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/promzard": { - "version": "2.0.0", + "node_modules/npm/node_modules/libnpmorg": { + "version": "8.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "read": "^4.0.0" + "aproba": "^2.0.0", + "npm-registry-fetch": "^19.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/qrcode-terminal": { - "version": "0.12.0", - "inBundle": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/read": { - "version": "4.1.0", + "node_modules/npm/node_modules/libnpmpack": { + "version": "9.0.12", "inBundle": true, "license": "ISC", "dependencies": { - "mute-stream": "^2.0.0" + "@npmcli/arborist": "^9.1.9", + "@npmcli/run-script": "^10.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/read-cmd-shim": { - "version": "5.0.0", + "node_modules/npm/node_modules/libnpmpublish": { + "version": "11.1.3", "inBundle": true, "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^7.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.7", + "sigstore": "^4.0.0", + "ssri": "^13.0.0" + }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/retry": { - "version": "0.12.0", + "node_modules/npm/node_modules/libnpmsearch": { + "version": "9.0.1", "inBundle": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^19.0.0" + }, "engines": { - "node": ">= 4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/npm/node_modules/semver": { - "version": "7.7.3", + "node_modules/npm/node_modules/libnpmteam": { + "version": "8.0.2", "inBundle": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^19.0.0" }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/shebang-command": { - "version": "2.0.0", + "node_modules/npm/node_modules/libnpmversion": { + "version": "8.0.3", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "shebang-regex": "^3.0.0" + "@npmcli/git": "^7.0.0", + "@npmcli/run-script": "^10.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.7" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/shebang-regex": { - "version": "3.0.0", + "node_modules/npm/node_modules/lru-cache": { + "version": "11.2.2", "inBundle": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=8" + "node": "20 || >=22" } }, - "node_modules/npm/node_modules/signal-exit": { - "version": "4.1.0", + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "15.0.3", "inBundle": true, "license": "ISC", - "engines": { - "node": ">=14" + "dependencies": { + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "ssri": "^13.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/sigstore": { - "version": "4.0.0", + "node_modules/npm/node_modules/minimatch": { + "version": "10.1.1", "inBundle": true, - "license": "Apache-2.0", + "license": "BlueOak-1.0.0", "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.0.0", - "@sigstore/protobuf-specs": "^0.5.0", - "@sigstore/sign": "^4.0.0", - "@sigstore/tuf": "^4.0.0", - "@sigstore/verify": "^3.0.0" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/smart-buffer": { - "version": "4.2.0", + "node_modules/npm/node_modules/minipass": { + "version": "7.1.2", "inBundle": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/npm/node_modules/socks": { - "version": "2.8.7", + "node_modules/npm/node_modules/minipass-collect": { + "version": "2.0.1", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ip-address": "^10.0.1", - "smart-buffer": "^4.2.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "8.0.5", + "node_modules/npm/node_modules/minipass-fetch": { + "version": "5.0.0", "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" }, "engines": { - "node": ">= 14" + "node": "^20.17.0 || >=22.9.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/npm/node_modules/spdx-correct": { - "version": "3.2.0", + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", "inBundle": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { - "version": "3.0.1", + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.5.0", - "inBundle": true, - "license": "CC-BY-3.0" - }, - "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "4.0.0", + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.22", - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/npm/node_modules/ssri": { - "version": "12.0.0", + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "yallist": "^4.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/string-width": { - "version": "4.2.3", + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "minipass": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/npm/node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/npm/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/npm/node_modules/minizlib": { + "version": "3.1.0", "inBundle": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "minipass": "^7.1.2" }, "engines": { - "node": ">=8" + "node": ">= 18" } }, - "node_modules/npm/node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/negotiator": { + "version": "1.0.0", "inBundle": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/npm/node_modules/supports-color": { - "version": "10.2.2", + "node_modules/npm/node_modules/node-gyp": { + "version": "12.1.0", "inBundle": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^15.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.2", + "tinyglobby": "^0.2.12", + "which": "^6.0.0" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/tar": { - "version": "7.5.1", + "node_modules/npm/node_modules/nopt": { + "version": "9.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=18" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/tar/node_modules/yallist": { - "version": "5.0.0", + "node_modules/npm/node_modules/npm-audit-report": { + "version": "7.0.0", "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "engines": { - "node": ">=18" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/text-table": { - "version": "0.2.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/tiny-relative-date": { - "version": "2.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/tinyglobby": { - "version": "0.2.15", + "node_modules/npm/node_modules/npm-bundled": { + "version": "5.0.0", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "npm-normalize-package-bin": "^5.0.0" }, "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", + "node_modules/npm/node_modules/npm-install-checks": { + "version": "8.0.0", "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "inBundle": true, - "license": "MIT", - "peer": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/treeverse": { - "version": "3.0.0", + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "5.0.0", "inBundle": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/tuf-js": { - "version": "4.0.0", + "node_modules/npm/node_modules/npm-package-arg": { + "version": "13.0.2", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@tufjs/models": "4.0.0", - "debug": "^4.4.1", - "make-fetch-happen": "^15.0.0" + "hosted-git-info": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^7.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/unique-filename": { - "version": "4.0.0", + "node_modules/npm/node_modules/npm-packlist": { + "version": "10.0.3", "inBundle": true, "license": "ISC", "dependencies": { - "unique-slug": "^5.0.0" + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/unique-slug": { - "version": "5.0.0", + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "11.0.3", "inBundle": true, "license": "ISC", "dependencies": { - "imurmurhash": "^0.1.4" + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/validate-npm-package-license": { - "version": "3.0.4", + "node_modules/npm/node_modules/npm-profile": { + "version": "12.0.1", "inBundle": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { - "version": "3.0.1", + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "19.1.1", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "@npmcli/redact": "^4.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "6.0.2", + "node_modules/npm/node_modules/npm-user-validate": { + "version": "4.0.0", "inBundle": true, - "license": "ISC", + "license": "BSD-2-Clause", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/walk-up-path": { - "version": "4.0.0", + "node_modules/npm/node_modules/p-map": { + "version": "7.0.4", "inBundle": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/which": { - "version": "5.0.0", + "node_modules/npm/node_modules/pacote": { + "version": "21.0.4", "inBundle": true, "license": "ISC", "dependencies": { - "isexe": "^3.1.1" + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^4.0.0", + "ssri": "^13.0.0", + "tar": "^7.4.3" }, "bin": { - "node-which": "bin/which.js" + "pacote": "bin/index.js" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/wrap-ansi": { - "version": "8.1.0", + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "5.0.1", "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "json-parse-even-better-errors": "^5.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", + "node_modules/npm/node_modules/path-scurry": { + "version": "2.0.0", "inBundle": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=10" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "7.1.0", "inBundle": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.2.2", + "node_modules/npm/node_modules/proc-log": { + "version": "6.1.0", "inBundle": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=12" - }, + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/proggy": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", + "node_modules/npm/node_modules/promise-call-limit": { + "version": "3.0.2", "inBundle": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, + "license": "ISC", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.2", + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", "inBundle": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "err-code": "^2.0.2", + "retry": "^0.12.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=10" } }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "6.0.0", + "node_modules/npm/node_modules/promzard": { + "version": "3.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" + "read": "^5.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/yallist": { - "version": "4.0.0", + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", "inBundle": true, - "license": "ISC" - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", - "license": "MIT" + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/npm/node_modules/read": { + "version": "5.0.1", + "inBundle": true, + "license": "ISC", "dependencies": { - "boolbase": "^1.0.0" + "mute-stream": "^3.0.0" }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nypm": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.0.tgz", - "integrity": "sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.4.0", - "pathe": "^2.0.3", - "pkg-types": "^2.0.0", - "tinyexec": "^0.3.2" - }, - "bin": { - "nypm": "dist/cli.mjs" - }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", "engines": { - "node": "^14.16.0 || >=16.10.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "inBundle": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 4" } }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "inBundle": true, "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.7.3", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", + "node_modules/npm/node_modules/signal-exit": { + "version": "4.1.0", + "inBundle": true, + "license": "ISC", "engines": { - "node": ">= 0.4" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", + "node_modules/npm/node_modules/sigstore": { + "version": "4.0.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.0.0", + "@sigstore/tuf": "^4.0.0", + "@sigstore/verify": "^3.0.0" + }, "engines": { - "node": ">= 0.4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/object-treeify": { - "version": "1.1.33", - "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz", - "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==", - "dev": true, + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "inBundle": true, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "node_modules/npm/node_modules/socks": { + "version": "2.8.7", + "inBundle": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/object.entries": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "inBundle": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": ">= 0.4" + "node": ">= 14" } }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "license": "MIT", + "node_modules/npm/node_modules/spdx-correct": { + "version": "3.2.0", + "inBundle": true, + "license": "Apache-2.0", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.5.0", + "inBundle": true, + "license": "CC-BY-3.0" }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "inBundle": true, "license": "MIT", "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.22", + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "13.0.0", + "inBundle": true, "license": "ISC", "dependencies": { - "wrappy": "1" + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "node_modules/npm/node_modules/string-width": { + "version": "4.2.3", + "inBundle": true, "license": "MIT", "dependencies": { - "fn.name": "1.x.x" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, + "node_modules/npm/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/openapi3-ts": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-4.5.0.tgz", - "integrity": "sha512-jaL+HgTq2Gj5jRcfdutgRGLosCy/hT8sQf6VOy+P+g36cZOjI1iukdPnijC+4CmeRzg/jEllJUboEic2FhxhtQ==", + "node_modules/npm/node_modules/supports-color": { + "version": "10.2.2", + "inBundle": true, "license": "MIT", - "dependencies": { - "yaml": "^2.8.0" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/optimist": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", - "integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==", - "license": "MIT/X11", + "node_modules/npm/node_modules/tar": { + "version": "7.5.2", + "inBundle": true, + "license": "BlueOak-1.0.0", "dependencies": { - "wordwrap": "~0.0.2" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, + "node_modules/npm/node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 0.8.0" + "node": ">=18" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tinyglobby": { + "version": "0.2.15", + "inBundle": true, "license": "MIT", "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, + "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "inBundle": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "inBundle": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "peer": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/oslo": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/oslo/-/oslo-1.2.1.tgz", - "integrity": "sha512-HfIhB5ruTdQv0XX2XlncWQiJ5SIHZ7NHZhVyHth0CSZ/xzge00etRyYy/3wp/Dsu+PkxMC+6+B2lS/GcKoewkA==", - "deprecated": "Package is no longer supported. Please see https://oslojs.dev for the successor project.", - "license": "MIT", - "dependencies": { - "@node-rs/argon2": "1.7.0", - "@node-rs/bcrypt": "1.9.0" + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/oslo/node_modules/@emnapi/core": { - "version": "0.45.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-0.45.0.tgz", - "integrity": "sha512-DPWjcUDQkCeEM4VnljEOEcXdAD7pp8zSZsgOujk/LGIwCXWbXJngin+MO4zbH429lzeC3WbYLGjE2MaUOwzpyw==", + "node_modules/npm/node_modules/tuf-js": { + "version": "4.0.0", + "inBundle": true, "license": "MIT", - "optional": true, "dependencies": { - "tslib": "^2.4.0" + "@tufjs/models": "4.0.0", + "debug": "^4.4.1", + "make-fetch-happen": "^15.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/oslo/node_modules/@emnapi/runtime": { - "version": "0.45.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-0.45.0.tgz", - "integrity": "sha512-Txumi3td7J4A/xTTwlssKieHKTGl3j4A1tglBx72auZ49YK7ePY6XZricgIg9mnZT4xPfA+UPCUdnhRuEFDL+w==", - "license": "MIT", - "optional": true, + "node_modules/npm/node_modules/unique-filename": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", "dependencies": { - "tslib": "^2.4.0" + "unique-slug": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/oslo/node_modules/@node-rs/argon2": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2/-/argon2-1.7.0.tgz", - "integrity": "sha512-zfULc+/tmcWcxn+nHkbyY8vP3+MpEqKORbszt4UkpqZgBgDAAIYvuDN/zukfTgdmo6tmJKKVfzigZOPk4LlIog==", - "license": "MIT", - "engines": { - "node": ">= 10" + "node_modules/npm/node_modules/unique-slug": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" }, - "optionalDependencies": { - "@node-rs/argon2-android-arm-eabi": "1.7.0", - "@node-rs/argon2-android-arm64": "1.7.0", - "@node-rs/argon2-darwin-arm64": "1.7.0", - "@node-rs/argon2-darwin-x64": "1.7.0", - "@node-rs/argon2-freebsd-x64": "1.7.0", - "@node-rs/argon2-linux-arm-gnueabihf": "1.7.0", - "@node-rs/argon2-linux-arm64-gnu": "1.7.0", - "@node-rs/argon2-linux-arm64-musl": "1.7.0", - "@node-rs/argon2-linux-x64-gnu": "1.7.0", - "@node-rs/argon2-linux-x64-musl": "1.7.0", - "@node-rs/argon2-wasm32-wasi": "1.7.0", - "@node-rs/argon2-win32-arm64-msvc": "1.7.0", - "@node-rs/argon2-win32-ia32-msvc": "1.7.0", - "@node-rs/argon2-win32-x64-msvc": "1.7.0" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/oslo/node_modules/@node-rs/argon2-android-arm-eabi": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-android-arm-eabi/-/argon2-android-arm-eabi-1.7.0.tgz", - "integrity": "sha512-udDqkr5P9E+wYX1SZwAVPdyfYvaF4ry9Tm+R9LkfSHbzWH0uhU6zjIwNRp7m+n4gx691rk+lqqDAIP8RLKwbhg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/oslo/node_modules/@node-rs/argon2-android-arm64": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-android-arm64/-/argon2-android-arm64-1.7.0.tgz", - "integrity": "sha512-s9j/G30xKUx8WU50WIhF0fIl1EdhBGq0RQ06lEhZ0Gi0ap8lhqbE2Bn5h3/G2D1k0Dx+yjeVVNmt/xOQIRG38A==", - "cpu": [ - "arm64" - ], + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/oslo/node_modules/@node-rs/argon2-darwin-arm64": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-darwin-arm64/-/argon2-darwin-arm64-1.7.0.tgz", - "integrity": "sha512-ZIz4L6HGOB9U1kW23g+m7anGNuTZ0RuTw0vNp3o+2DWpb8u8rODq6A8tH4JRL79S+Co/Nq608m9uackN2pe0Rw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", "engines": { - "node": ">= 10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/oslo/node_modules/@node-rs/argon2-darwin-x64": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-darwin-x64/-/argon2-darwin-x64-1.7.0.tgz", - "integrity": "sha512-5oi/pxqVhODW/pj1+3zElMTn/YukQeywPHHYDbcAW3KsojFjKySfhcJMd1DjKTc+CHQI+4lOxZzSUzK7mI14Hw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "node_modules/npm/node_modules/walk-up-path": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", "engines": { - "node": ">= 10" + "node": "20 || >=22" } }, - "node_modules/oslo/node_modules/@node-rs/argon2-freebsd-x64": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-freebsd-x64/-/argon2-freebsd-x64-1.7.0.tgz", - "integrity": "sha512-Ify08683hA4QVXYoIm5SUWOY5DPIT/CMB0CQT+IdxQAg/F+qp342+lUkeAtD5bvStQuCx/dFO3bnnzoe2clMhA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/npm/node_modules/which": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, "engines": { - "node": ">= 10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/oslo/node_modules/@node-rs/argon2-linux-arm-gnueabihf": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm-gnueabihf/-/argon2-linux-arm-gnueabihf-1.7.0.tgz", - "integrity": "sha512-7DjDZ1h5AUHAtRNjD19RnQatbhL+uuxBASuuXIBu4/w6Dx8n7YPxwTP4MXfsvuRgKuMWiOb/Ub/HJ3kXVCXRkg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/npm/node_modules/write-file-atomic": { + "version": "7.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, "engines": { - "node": ">= 10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/oslo/node_modules/@node-rs/argon2-linux-arm64-gnu": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm64-gnu/-/argon2-linux-arm64-gnu-1.7.0.tgz", - "integrity": "sha512-nJDoMP4Y3YcqGswE4DvP080w6O24RmnFEDnL0emdI8Nou17kNYBzP2546Nasx9GCyLzRcYQwZOUjrtUuQ+od2g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } + "node_modules/npm/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" }, - "node_modules/oslo/node_modules/@node-rs/argon2-linux-arm64-musl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm64-musl/-/argon2-linux-arm64-musl-1.7.0.tgz", - "integrity": "sha512-BKWS8iVconhE3jrb9mj6t1J9vwUqQPpzCbUKxfTGJfc+kNL58F1SXHBoe2cDYGnHrFEHTY0YochzXoAfm4Dm/A==", - "cpu": [ - "arm64" - ], + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", + "license": "MIT" + }, + "node_modules/nypm": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.0.tgz", + "integrity": "sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "pathe": "^2.0.3", + "pkg-types": "^2.0.0", + "tinyexec": "^0.3.2" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, "engines": { - "node": ">= 10" + "node": "^14.16.0 || >=16.10.0" } }, - "node_modules/oslo/node_modules/@node-rs/argon2-linux-x64-gnu": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-x64-gnu/-/argon2-linux-x64-gnu-1.7.0.tgz", - "integrity": "sha512-EmgqZOlf4Jurk/szW1iTsVISx25bKksVC5uttJDUloTgsAgIGReCpUUO1R24pBhu9ESJa47iv8NSf3yAfGv6jQ==", - "cpu": [ - "x64" - ], + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">= 10" + "node": ">=0.10.0" } }, - "node_modules/oslo/node_modules/@node-rs/argon2-linux-x64-musl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-x64-musl/-/argon2-linux-x64-musl-1.7.0.tgz", - "integrity": "sha512-/o1efYCYIxjfuoRYyBTi2Iy+1iFfhqHCvvVsnjNSgO1xWiWrX0Rrt/xXW5Zsl7vS2Y+yu8PL8KFWRzZhaVxfKA==", - "cpu": [ - "x64" - ], + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">= 10" + "node": ">= 6" } }, - "node_modules/oslo/node_modules/@node-rs/argon2-wasm32-wasi": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-wasm32-wasi/-/argon2-wasm32-wasi-1.7.0.tgz", - "integrity": "sha512-Evmk9VcxqnuwQftfAfYEr6YZYSPLzmKUsbFIMep5nTt9PT4XYRFAERj7wNYp+rOcBenF3X4xoB+LhwcOMTNE5w==", - "cpu": [ - "wasm32" - ], + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^0.45.0", - "@emnapi/runtime": "^0.45.0", - "@tybys/wasm-util": "^0.8.1", - "memfs-browser": "^3.4.13000" - }, "engines": { - "node": ">=14.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/oslo/node_modules/@node-rs/argon2-win32-arm64-msvc": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-arm64-msvc/-/argon2-win32-arm64-msvc-1.7.0.tgz", - "integrity": "sha512-qgsU7T004COWWpSA0tppDqDxbPLgg8FaU09krIJ7FBl71Sz8SFO40h7fDIjfbTT5w7u6mcaINMQ5bSHu75PCaA==", - "cpu": [ - "arm64" - ], + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">= 10" + "node": ">= 0.4" } }, - "node_modules/oslo/node_modules/@node-rs/argon2-win32-ia32-msvc": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-ia32-msvc/-/argon2-win32-ia32-msvc-1.7.0.tgz", - "integrity": "sha512-JGafwWYQ/HpZ3XSwP4adQ6W41pRvhcdXvpzIWtKvX+17+xEXAe2nmGWM6s27pVkg1iV2ZtoYLRDkOUoGqZkCcg==", - "cpu": [ - "ia32" - ], + "node_modules/object-treeify": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz", + "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { "node": ">= 10" } }, - "node_modules/oslo/node_modules/@node-rs/argon2-win32-x64-msvc": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-x64-msvc/-/argon2-win32-x64-msvc-1.7.0.tgz", - "integrity": "sha512-9oq4ShyFakw8AG3mRls0AoCpxBFcimYx7+jvXeAf2OqKNO+mSA6eZ9z7KQeVCi0+SOEUYxMGf5UiGiDb9R6+9Q==", - "cpu": [ - "x64" - ], + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, "engines": { - "node": ">= 10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/oslo/node_modules/@tybys/wasm-util": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.8.3.tgz", - "integrity": "sha512-Z96T/L6dUFFxgFJ+pQtkPpne9q7i6kIPYCFnQBHSgSPV9idTsKfIhCss0h5iM9irweZCatkrdeP8yi5uM1eX6Q==", + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "license": "MIT", - "optional": true, "dependencies": { - "tslib": "^2.4.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -19554,4048 +18642,3763 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "license": "MIT", "dependencies": { - "callsites": "^3.0.0" + "ee-first": "1.1.1" }, "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/parseley": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", - "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", "license": "MIT", "dependencies": { - "leac": "^0.6.0", - "peberminta": "^0.9.0" + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" }, "funding": { - "url": "https://ko-fi.com/killymxi" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/openapi3-ts": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-4.5.0.tgz", + "integrity": "sha512-jaL+HgTq2Gj5jRcfdutgRGLosCy/hT8sQf6VOy+P+g36cZOjI1iukdPnijC+4CmeRzg/jEllJUboEic2FhxhtQ==", "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "yaml": "^2.8.0" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==", + "license": "MIT/X11", + "dependencies": { + "wordwrap": "~0.0.2" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/oslo": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/oslo/-/oslo-1.2.1.tgz", + "integrity": "sha512-HfIhB5ruTdQv0XX2XlncWQiJ5SIHZ7NHZhVyHth0CSZ/xzge00etRyYy/3wp/Dsu+PkxMC+6+B2lS/GcKoewkA==", + "deprecated": "Package is no longer supported. Please see https://oslojs.dev for the successor project.", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@node-rs/argon2": "1.7.0", + "@node-rs/bcrypt": "1.9.0" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" + "node_modules/oslo/node_modules/@emnapi/core": { + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-0.45.0.tgz", + "integrity": "sha512-DPWjcUDQkCeEM4VnljEOEcXdAD7pp8zSZsgOujk/LGIwCXWbXJngin+MO4zbH429lzeC3WbYLGjE2MaUOwzpyw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } }, - "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "license": "BlueOak-1.0.0", + "node_modules/oslo/node_modules/@emnapi/runtime": { + "version": "0.45.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-0.45.0.tgz", + "integrity": "sha512-Txumi3td7J4A/xTTwlssKieHKTGl3j4A1tglBx72auZ49YK7ePY6XZricgIg9mnZT4xPfA+UPCUdnhRuEFDL+w==", + "license": "MIT", + "optional": true, "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, + "tslib": "^2.4.0" + } + }, + "node_modules/oslo/node_modules/@node-rs/argon2": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2/-/argon2-1.7.0.tgz", + "integrity": "sha512-zfULc+/tmcWcxn+nHkbyY8vP3+MpEqKORbszt4UkpqZgBgDAAIYvuDN/zukfTgdmo6tmJKKVfzigZOPk4LlIog==", + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">= 10" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "optionalDependencies": { + "@node-rs/argon2-android-arm-eabi": "1.7.0", + "@node-rs/argon2-android-arm64": "1.7.0", + "@node-rs/argon2-darwin-arm64": "1.7.0", + "@node-rs/argon2-darwin-x64": "1.7.0", + "@node-rs/argon2-freebsd-x64": "1.7.0", + "@node-rs/argon2-linux-arm-gnueabihf": "1.7.0", + "@node-rs/argon2-linux-arm64-gnu": "1.7.0", + "@node-rs/argon2-linux-arm64-musl": "1.7.0", + "@node-rs/argon2-linux-x64-gnu": "1.7.0", + "@node-rs/argon2-linux-x64-musl": "1.7.0", + "@node-rs/argon2-wasm32-wasi": "1.7.0", + "@node-rs/argon2-win32-arm64-msvc": "1.7.0", + "@node-rs/argon2-win32-ia32-msvc": "1.7.0", + "@node-rs/argon2-win32-x64-msvc": "1.7.0" + } + }, + "node_modules/oslo/node_modules/@node-rs/argon2-android-arm-eabi": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-android-arm-eabi/-/argon2-android-arm-eabi-1.7.0.tgz", + "integrity": "sha512-udDqkr5P9E+wYX1SZwAVPdyfYvaF4ry9Tm+R9LkfSHbzWH0uhU6zjIwNRp7m+n4gx691rk+lqqDAIP8RLKwbhg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", - "license": "ISC", + "node_modules/oslo/node_modules/@node-rs/argon2-android-arm64": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-android-arm64/-/argon2-android-arm64-1.7.0.tgz", + "integrity": "sha512-s9j/G30xKUx8WU50WIhF0fIl1EdhBGq0RQ06lEhZ0Gi0ap8lhqbE2Bn5h3/G2D1k0Dx+yjeVVNmt/xOQIRG38A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "20 || >=22" + "node": ">= 10" } }, - "node_modules/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "node_modules/oslo/node_modules/@node-rs/argon2-darwin-arm64": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-darwin-arm64/-/argon2-darwin-arm64-1.7.0.tgz", + "integrity": "sha512-ZIz4L6HGOB9U1kW23g+m7anGNuTZ0RuTw0vNp3o+2DWpb8u8rODq6A8tH4JRL79S+Co/Nq608m9uackN2pe0Rw==", + "cpu": [ + "arm64" + ], "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, + "node_modules/oslo/node_modules/@node-rs/argon2-darwin-x64": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-darwin-x64/-/argon2-darwin-x64-1.7.0.tgz", + "integrity": "sha512-5oi/pxqVhODW/pj1+3zElMTn/YukQeywPHHYDbcAW3KsojFjKySfhcJMd1DjKTc+CHQI+4lOxZzSUzK7mI14Hw==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/peberminta": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", - "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==", + "node_modules/oslo/node_modules/@node-rs/argon2-freebsd-x64": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-freebsd-x64/-/argon2-freebsd-x64-1.7.0.tgz", + "integrity": "sha512-Ify08683hA4QVXYoIm5SUWOY5DPIT/CMB0CQT+IdxQAg/F+qp342+lUkeAtD5bvStQuCx/dFO3bnnzoe2clMhA==", + "cpu": [ + "x64" + ], "license": "MIT", - "funding": { - "url": "https://ko-fi.com/killymxi" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/pg": { - "version": "8.16.3", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", - "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", + "node_modules/oslo/node_modules/@node-rs/argon2-linux-arm-gnueabihf": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm-gnueabihf/-/argon2-linux-arm-gnueabihf-1.7.0.tgz", + "integrity": "sha512-7DjDZ1h5AUHAtRNjD19RnQatbhL+uuxBASuuXIBu4/w6Dx8n7YPxwTP4MXfsvuRgKuMWiOb/Ub/HJ3kXVCXRkg==", + "cpu": [ + "arm" + ], "license": "MIT", - "peer": true, - "dependencies": { - "pg-connection-string": "^2.9.1", - "pg-pool": "^3.10.1", - "pg-protocol": "^1.10.3", - "pg-types": "2.2.0", - "pgpass": "1.0.5" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 16.0.0" - }, - "optionalDependencies": { - "pg-cloudflare": "^1.2.7" - }, - "peerDependencies": { - "pg-native": ">=3.0.1" - }, - "peerDependenciesMeta": { - "pg-native": { - "optional": true - } + "node": ">= 10" } }, - "node_modules/pg-cloudflare": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz", - "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==", + "node_modules/oslo/node_modules/@node-rs/argon2-linux-arm64-gnu": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm64-gnu/-/argon2-linux-arm64-gnu-1.7.0.tgz", + "integrity": "sha512-nJDoMP4Y3YcqGswE4DvP080w6O24RmnFEDnL0emdI8Nou17kNYBzP2546Nasx9GCyLzRcYQwZOUjrtUuQ+od2g==", + "cpu": [ + "arm64" + ], "license": "MIT", - "optional": true - }, - "node_modules/pg-connection-string": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", - "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", - "license": "MIT" - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "license": "ISC", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4.0.0" + "node": ">= 10" } }, - "node_modules/pg-pool": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz", - "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==", + "node_modules/oslo/node_modules/@node-rs/argon2-linux-arm64-musl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-arm64-musl/-/argon2-linux-arm64-musl-1.7.0.tgz", + "integrity": "sha512-BKWS8iVconhE3jrb9mj6t1J9vwUqQPpzCbUKxfTGJfc+kNL58F1SXHBoe2cDYGnHrFEHTY0YochzXoAfm4Dm/A==", + "cpu": [ + "arm64" + ], "license": "MIT", - "peerDependencies": { - "pg": ">=8.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/pg-protocol": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", - "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", - "license": "MIT" + "node_modules/oslo/node_modules/@node-rs/argon2-linux-x64-gnu": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-x64-gnu/-/argon2-linux-x64-gnu-1.7.0.tgz", + "integrity": "sha512-EmgqZOlf4Jurk/szW1iTsVISx25bKksVC5uttJDUloTgsAgIGReCpUUO1R24pBhu9ESJa47iv8NSf3yAfGv6jQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "node_modules/oslo/node_modules/@node-rs/argon2-linux-x64-musl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-linux-x64-musl/-/argon2-linux-x64-musl-1.7.0.tgz", + "integrity": "sha512-/o1efYCYIxjfuoRYyBTi2Iy+1iFfhqHCvvVsnjNSgO1xWiWrX0Rrt/xXW5Zsl7vS2Y+yu8PL8KFWRzZhaVxfKA==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">= 10" } }, - "node_modules/pgpass": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "node_modules/oslo/node_modules/@node-rs/argon2-wasm32-wasi": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-wasm32-wasi/-/argon2-wasm32-wasi-1.7.0.tgz", + "integrity": "sha512-Evmk9VcxqnuwQftfAfYEr6YZYSPLzmKUsbFIMep5nTt9PT4XYRFAERj7wNYp+rOcBenF3X4xoB+LhwcOMTNE5w==", + "cpu": [ + "wasm32" + ], "license": "MIT", + "optional": true, "dependencies": { - "split2": "^4.1.0" + "@emnapi/core": "^0.45.0", + "@emnapi/runtime": "^0.45.0", + "@tybys/wasm-util": "^0.8.1", + "memfs-browser": "^3.4.13000" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "node_modules/oslo/node_modules/@node-rs/argon2-win32-arm64-msvc": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-arm64-msvc/-/argon2-win32-arm64-msvc-1.7.0.tgz", + "integrity": "sha512-qgsU7T004COWWpSA0tppDqDxbPLgg8FaU09krIJ7FBl71Sz8SFO40h7fDIjfbTT5w7u6mcaINMQ5bSHu75PCaA==", + "cpu": [ + "arm64" + ], "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, + "node_modules/oslo/node_modules/@node-rs/argon2-win32-ia32-msvc": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-ia32-msvc/-/argon2-win32-ia32-msvc-1.7.0.tgz", + "integrity": "sha512-JGafwWYQ/HpZ3XSwP4adQ6W41pRvhcdXvpzIWtKvX+17+xEXAe2nmGWM6s27pVkg1iV2ZtoYLRDkOUoGqZkCcg==", + "cpu": [ + "ia32" + ], "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, + "node_modules/oslo/node_modules/@node-rs/argon2-win32-x64-msvc": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@node-rs/argon2-win32-x64-msvc/-/argon2-win32-x64-msvc-1.7.0.tgz", + "integrity": "sha512-9oq4ShyFakw8AG3mRls0AoCpxBFcimYx7+jvXeAf2OqKNO+mSA6eZ9z7KQeVCi0+SOEUYxMGf5UiGiDb9R6+9Q==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 6" + "node": ">= 10" } }, - "node_modules/pkg-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", - "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", - "dev": true, + "node_modules/oslo/node_modules/@tybys/wasm-util": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.8.3.tgz", + "integrity": "sha512-Z96T/L6dUFFxgFJ+pQtkPpne9q7i6kIPYCFnQBHSgSPV9idTsKfIhCss0h5iM9irweZCatkrdeP8yi5uM1eX6Q==", "license": "MIT", + "optional": true, "dependencies": { - "confbox": "^0.2.2", - "exsolve": "^1.0.7", - "pathe": "^2.0.3" + "tslib": "^2.4.0" } }, - "node_modules/plimit-lit": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/plimit-lit/-/plimit-lit-1.6.1.tgz", - "integrity": "sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==", - "dev": true, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "license": "MIT", "dependencies": { - "queue-lit": "^1.5.1" + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" }, - "engines": { - "node": ">=12" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "license": "MIT", "engines": { "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" }, - "engines": { - "node": "^10 || ^12 || >=14" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=10" }, - "peerDependencies": { - "postcss": "^8.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-js": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", - "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "license": "MIT", "dependencies": { - "camelcase-css": "^2.0.1" + "p-limit": "^3.0.2" }, "engines": { - "node": "^12 || ^14 || >= 16" + "node": ">=10" }, - "peerDependencies": { - "postcss": "^8.4.21" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.1.1" + "callsites": "^3.0.0" }, "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" + "node": ">=6" } }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, + "node_modules/parseley": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", + "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", "license": "MIT", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "leac": "^0.6.0", + "peberminta": "^0.9.0" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://ko-fi.com/killymxi" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "license": "MIT", - "dependencies": { - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" }, - "node_modules/posthog-node": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-5.11.2.tgz", - "integrity": "sha512-z+XekcBUmGePMsjPlGaEF2bJFiDHKHYPQjS4OEw4YPDQz8s7Owuim/L7xNX+6UJkyIRniBza9iC7bW8yrGTv1g==", - "license": "MIT", + "node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "license": "BlueOak-1.0.0", "dependencies": { - "@posthog/core": "1.5.2" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=20" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "license": "MIT", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 0.8.0" + "node": "20 || >=22" } }, - "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/pretty-bytes": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", - "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/prism-react-renderer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", - "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/prismjs": "^1.26.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.0.0" - } + "license": "MIT" }, - "node_modules/prismjs": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "node_modules/peberminta": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", + "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==", "license": "MIT", - "engines": { - "node": ">=6" + "funding": { + "url": "https://ko-fi.com/killymxi" } }, - "node_modules/promise-limit": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/promise-limit/-/promise-limit-2.7.0.tgz", - "integrity": "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==", - "license": "ISC" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, + "node_modules/pg": { + "version": "8.16.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", + "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", "license": "MIT", + "peer": true, "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "pg-connection-string": "^2.9.1", + "pg-pool": "^3.10.1", + "pg-protocol": "^1.10.3", + "pg-types": "2.2.0", + "pgpass": "1.0.5" }, "engines": { - "node": ">= 6" + "node": ">= 16.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.2.7" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "node_modules/pg-cloudflare": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz", + "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==", "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", + "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/pg-pool": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz", + "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==", "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" + "peerDependencies": { + "pg": ">=8.0" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "node_modules/pg-protocol": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", "license": "MIT" }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/pvtsutils": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", - "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", "license": "MIT", "dependencies": { - "tslib": "^2.8.1" + "split2": "^4.1.0" } }, - "node_modules/pvutils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", - "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/qrcode.react": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/qrcode.react/-/qrcode.react-4.2.0.tgz", - "integrity": "sha512-QpgqWi8rD9DsS9EP3z7BT+5lY5SFhsqGjpgW5DY/i3mK4M9DTBNz3ErMi8BWYEfI3L0d8GIbGmcdFAS1uIRGjA==", - "license": "ISC", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" } }, - "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "license": "BSD-3-Clause", + "node_modules/plimit-lit": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/plimit-lit/-/plimit-lit-1.6.1.tgz", + "integrity": "sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==", + "dev": true, + "license": "MIT", "dependencies": { - "side-channel": "^1.1.0" + "queue-lit": "^1.5.1" }, "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "node_modules/po-parser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/po-parser/-/po-parser-1.0.2.tgz", + "integrity": "sha512-yTIQL8PZy7V8c0psPoJUx7fayez+Mo/53MZgX9MPuPHx+Dt+sRPNuRbI+6Oqxnddhkd68x4Nlgon/zizL1Xg+w==", "license": "MIT" }, - "node_modules/queue-lit": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/queue-lit/-/queue-lit-1.5.2.tgz", - "integrity": "sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==", - "dev": true, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "opencollective", + "url": "https://opencollective.com/postcss/" }, { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", - "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.7.0", - "unpipe": "1.0.0" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": ">= 0.10" + "node": "^10 || ^12 || >=14" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=4" } }, - "node_modules/react": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", - "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/react-day-picker": { - "version": "9.11.1", - "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.11.1.tgz", - "integrity": "sha512-l3ub6o8NlchqIjPKrRFUCkTUEq6KwemQlfv3XZzzwpUeGwmDJ+0u0Upmt38hJyd7D/vn2dQoOoLV/qAp0o3uUw==", + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", "license": "MIT", - "dependencies": { - "@date-fns/tz": "^1.4.1", - "date-fns": "^4.1.0", - "date-fns-jalali": "^4.1.0-0" - }, "engines": { - "node": ">=18" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/gpbl" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/react-dom": { - "version": "19.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", - "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "scheduler": "^0.27.0" - }, - "peerDependencies": { - "react": "^19.2.0" + "node": ">=0.10.0" } }, - "node_modules/react-easy-sort": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/react-easy-sort/-/react-easy-sort-1.8.0.tgz", - "integrity": "sha512-6CUvG0rPyO8H9MTel38r/gmPemIKcOSkvgZQtrxILYFPfGZnmkLVU3YSVHEg22D+pJMoeVRdJpuF2kD2dqeIEw==", + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", "license": "MIT", "dependencies": { - "tslib": "^2.8.1" + "xtend": "^4.0.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "react": ">=16.4.0", - "react-dom": ">=16.4.0" + "node": ">=0.10.0" } }, - "node_modules/react-email": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/react-email/-/react-email-4.3.2.tgz", - "integrity": "sha512-WaZcnv9OAIRULY236zDRdk+8r511ooJGH5UOb7FnVsV33hGPI+l5aIZ6drVjXi4QrlLTmLm8PsYvmXRSv31MPA==", - "dev": true, + "node_modules/posthog-node": { + "version": "5.17.2", + "resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-5.17.2.tgz", + "integrity": "sha512-lz3YJOr0Nmiz0yHASaINEDHqoV+0bC3eD8aZAG+Ky292dAnVYul+ga/dMX8KCBXg8hHfKdxw0SztYD5j6dgUqQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.0", - "@babel/traverse": "^7.27.0", - "chokidar": "^4.0.3", - "commander": "^13.0.0", - "debounce": "^2.0.0", - "esbuild": "^0.25.0", - "glob": "^11.0.0", - "jiti": "2.4.2", - "log-symbols": "^7.0.0", - "mime-types": "^3.0.0", - "normalize-path": "^3.0.0", - "nypm": "0.6.0", - "ora": "^8.0.0", - "prompts": "2.4.2", - "socket.io": "^4.8.1", - "tsconfig-paths": "4.2.0" - }, - "bin": { - "email": "dist/index.js" + "@posthog/core": "1.7.1" }, "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/react-email/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/react-email/node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" + "node": ">=20" } }, - "node_modules/react-email/node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=18" + "node": ">= 0.8.0" } }, - "node_modules/react-email/node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/prettier": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", + "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "bin": { + "prettier": "bin/prettier.cjs" + }, "engines": { - "node": ">=18" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/react-email/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/react-email/node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } + "node_modules/promise-limit": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/promise-limit/-/promise-limit-2.7.0.tgz", + "integrity": "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==", + "license": "ISC" }, - "node_modules/react-email/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, "engines": { - "node": ">=18" + "node": ">= 6" } }, - "node_modules/react-email/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "node_modules/react-email/node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, "engines": { - "node": ">=18" + "node": ">= 0.10" } }, - "node_modules/react-email/node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/react-email/node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], - "dev": true, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "tslib": "^2.8.1" } }, - "node_modules/react-email/node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], - "dev": true, + "node_modules/pvutils": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=16.0.0" } }, - "node_modules/react-email/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/qrcode.react": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/qrcode.react/-/qrcode.react-4.2.0.tgz", + "integrity": "sha512-QpgqWi8rD9DsS9EP3z7BT+5lY5SFhsqGjpgW5DY/i3mK4M9DTBNz3ErMi8BWYEfI3L0d8GIbGmcdFAS1uIRGjA==", + "license": "ISC", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, "engines": { - "node": ">=18" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/react-email/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" + }, + "node_modules/queue-lit": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/queue-lit/-/queue-lit-1.5.2.tgz", + "integrity": "sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/react-email/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } ], - "dev": true, + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">= 0.6" } }, - "node_modules/react-email/node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], - "dev": true, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, "engines": { - "node": ">=18" + "node": ">= 0.10" } }, - "node_modules/react-email/node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, "engines": { - "node": ">=18" + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/react-email/node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, "engines": { - "node": ">=18" + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/react-email/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "node_modules/react": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "license": "MIT", + "peer": true, "engines": { - "node": ">=18" + "node": ">=0.10.0" } }, - "node_modules/react-email/node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/react-day-picker": { + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.12.0.tgz", + "integrity": "sha512-t8OvG/Zrciso5CQJu5b1A7yzEmebvST+S3pOVQJWxwjjVngyG/CA2htN/D15dLI4uTEuLLkbZyS4YYt480FAtA==", "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "@date-fns/tz": "^1.4.1", + "date-fns": "^4.1.0", + "date-fns-jalali": "^4.1.0-0" + }, "engines": { "node": ">=18" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "react": ">=16.8.0" } }, - "node_modules/react-email/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" + "peer": true, + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.3" } }, - "node_modules/react-email/node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/react-easy-sort": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/react-easy-sort/-/react-easy-sort-1.8.0.tgz", + "integrity": "sha512-6CUvG0rPyO8H9MTel38r/gmPemIKcOSkvgZQtrxILYFPfGZnmkLVU3YSVHEg22D+pJMoeVRdJpuF2kD2dqeIEw==", "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], + "dependencies": { + "tslib": "^2.8.1" + }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "react": ">=16.4.0", + "react-dom": ">=16.4.0" } }, - "node_modules/react-email/node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "cpu": [ - "x64" - ], + "node_modules/react-email": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/react-email/-/react-email-5.0.7.tgz", + "integrity": "sha512-JsWzxl3O82Gw9HRRNJm8VjQLB8c7R5TGbP89Ffj+/Qdb2H2N4J0XRXkhqiucMvmucuqNqe9mNndZkh3jh638xA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], + "dependencies": { + "@babel/parser": "^7.27.0", + "@babel/traverse": "^7.27.0", + "chokidar": "^4.0.3", + "commander": "^13.0.0", + "conf": "^15.0.2", + "debounce": "^2.0.0", + "esbuild": "^0.25.0", + "glob": "^11.0.0", + "jiti": "2.4.2", + "log-symbols": "^7.0.0", + "mime-types": "^3.0.0", + "normalize-path": "^3.0.0", + "nypm": "0.6.0", + "ora": "^8.0.0", + "prompts": "2.4.2", + "socket.io": "^4.8.1", + "tsconfig-paths": "4.2.0" + }, + "bin": { + "email": "dist/index.js" + }, "engines": { - "node": ">=18" + "node": ">=20.0.0" } }, - "node_modules/react-email/node_modules/@esbuild/win32-arm64": { + "node_modules/react-email/node_modules/@esbuild/aix-ppc64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", "cpu": [ - "arm64" + "ppc64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "aix" ], "engines": { "node": ">=18" } }, - "node_modules/react-email/node_modules/@esbuild/win32-ia32": { + "node_modules/react-email/node_modules/@esbuild/android-arm": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", "cpu": [ - "ia32" + "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "android" ], "engines": { "node": ">=18" } }, - "node_modules/react-email/node_modules/@esbuild/win32-x64": { + "node_modules/react-email/node_modules/@esbuild/android-arm64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "android" ], "engines": { "node": ">=18" } }, - "node_modules/react-email/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/react-email/node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-email/node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/react-email/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/react-email/node_modules/esbuild": { + "node_modules/react-email/node_modules/@esbuild/android-x64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" - } - }, - "node_modules/react-email/node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-email/node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-email/node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" } }, - "node_modules/react-email/node_modules/log-symbols": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", - "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "node_modules/react-email/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "is-unicode-supported": "^2.0.0", - "yoctocolors": "^2.1.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-email/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "node_modules/react-email/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-email/node_modules/ora": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", - "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "node_modules/react-email/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^5.3.0", - "cli-cursor": "^5.0.0", - "cli-spinners": "^2.9.2", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^2.0.0", - "log-symbols": "^6.0.0", - "stdin-discarder": "^0.2.2", - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-email/node_modules/ora/node_modules/log-symbols": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", - "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "node_modules/react-email/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^5.3.0", - "is-unicode-supported": "^1.3.0" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-email/node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "node_modules/react-email/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/react-email/node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "node_modules/react-email/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-email/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/react-email/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "ISC", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, - "node_modules/react-email/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "node_modules/react-email/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-email/node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "node_modules/react-email/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], "dev": true, "license": "MIT", - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/react-hook-form": { - "version": "7.66.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.66.0.tgz", - "integrity": "sha512-xXBqsWGKrY46ZqaHDo+ZUYiMUgi8suYu5kdrS20EG8KiL7VRQitEbNjm+UcrDYrNi1YLyfpmAeGjCZYXLT9YBw==", + "node_modules/react-email/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, "license": "MIT", - "peer": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-hook-form" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18 || ^19" + "node": ">=18" } }, - "node_modules/react-icons": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", - "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", + "node_modules/react-email/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, "license": "MIT", - "peerDependencies": { - "react": "*" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/react-promise-suspense": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/react-promise-suspense/-/react-promise-suspense-0.3.4.tgz", - "integrity": "sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==", + "node_modules/react-email/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, "license": "MIT", - "dependencies": { - "fast-deep-equal": "^2.0.1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/react-promise-suspense/node_modules/fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", - "license": "MIT" + "node_modules/react-email/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/react-remove-scroll": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", - "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", + "node_modules/react-email/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.3.7", - "react-style-singleton": "^2.2.3", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.3", - "use-sidecar": "^1.1.3" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node": ">=18" } }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "node_modules/react-email/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "react-style-singleton": "^2.2.2", - "tslib": "^2.0.0" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node": ">=18" } }, - "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "node_modules/react-email/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "get-nonce": "^1.0.0", - "tslib": "^2.0.0" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node": ">=18" } }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "node_modules/react-email/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "pify": "^2.3.0" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/react-email/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "optional": true, + "os": [ + "openharmony" + ], "engines": { - "node": ">= 6" + "node": ">=18" } }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "node_modules/react-email/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "node": ">=18" } }, - "node_modules/rebuild": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/rebuild/-/rebuild-0.1.2.tgz", - "integrity": "sha512-EtDZ5IapND57htCrOOcfH7MzXCQKivzSZUIZIuc8H0xDHfmi9HDBZIyjT7Neh5GcUoxQ6hfsXluC+UrYLgGbZg==", - "dependencies": { - "optimist": "0.3.x" - }, - "bin": { - "rebuild": "cli.js" - }, + "node_modules/react-email/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=0.8.8" + "node": ">=18" } }, - "node_modules/redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "node_modules/react-email/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "node_modules/react-email/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "redis-errors": "^1.0.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "license": "Apache-2.0" - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "node_modules/react-email/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, "engines": { - "node": ">= 0.4" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "node_modules/react-email/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/reodotdev": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/reodotdev/-/reodotdev-1.0.0.tgz", - "integrity": "sha512-wXe1vJucZjrhQL0SxOL9EvmJrtbMCIEGMdZX5lj/57n2T3UhBHZsAcM5TQASJ0T6ZBbrETRnMhH33bsbJeRO6Q==", - "license": "MIT" - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/react-email/node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "node_modules/react-email/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, "license": "MIT" }, - "node_modules/resend": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/resend/-/resend-6.4.2.tgz", - "integrity": "sha512-YnxmwneltZtjc7Xff+8ZjG1/xPLdstCiqsedgO/JxWTf7vKRAPCx6CkhQ3ZXskG0mrmf8+I5wr/wNRd8PQMUfw==", + "node_modules/react-email/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "svix": "1.76.1" + "bin": { + "esbuild": "bin/esbuild" }, "engines": { "node": ">=18" }, - "peerDependencies": { - "@react-email/render": "*" - }, - "peerDependenciesMeta": { - "@react-email/render": { - "optional": true - } + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "license": "MIT", + "node_modules/react-email/node_modules/glob": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" }, "bin": { - "resolve": "bin/resolve" + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">= 0.4" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/react-email/node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "dev": true, "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "license": "MIT", "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" + "node": ">=12" }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "node_modules/react-email/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, "engines": { - "node": ">=0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "node_modules/react-email/node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/react-email/node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "license": "MIT", + "node_modules/react-email/node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/safe-stable-stringify": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "node_modules/react-email/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "license": "MIT" - }, - "node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "node_modules/react-email/node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", "dev": true, "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "node_modules/react-email/node_modules/ora/node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/react-email/node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true, "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" + "engines": { + "node": ">=12" }, - "peerDependencies": { - "ajv": "^8.8.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "node_modules/react-email/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, - "license": "MIT" - }, - "node_modules/selderee": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", - "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", "license": "MIT", "dependencies": { - "parseley": "^0.12.0" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" }, "funding": { - "url": "https://ko-fi.com/killymxi" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "node_modules/react-email/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "node_modules/react-email/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.3.5", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">= 18" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "node_modules/react-email/node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "randombytes": "^2.1.0" + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "node_modules/react-hook-form": { + "version": "7.68.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.68.0.tgz", + "integrity": "sha512-oNN3fjrZ/Xo40SWlHf1yCjlMK417JxoSJVUXQjGdvdRCU07NTFei1i1f8ApUAts+IVh14e4EdakeLEA+BEAs/Q==", "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, + "peer": true, "engines": { - "node": ">= 18" + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" } }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "node_modules/react-icons": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-remove-scroll": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, - "engines": { - "node": ">= 0.4" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "node_modules/react-smooth": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", + "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/sharp": { - "version": "0.34.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz", - "integrity": "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==", - "devOptional": true, - "hasInstallScript": true, - "license": "Apache-2.0", + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", "dependencies": { - "@img/colour": "^1.0.0", - "detect-libc": "^2.1.0", - "semver": "^7.7.2" + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=10" }, - "funding": { - "url": "https://opencollective.com/libvips" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.4", - "@img/sharp-darwin-x64": "0.34.4", - "@img/sharp-libvips-darwin-arm64": "1.2.3", - "@img/sharp-libvips-darwin-x64": "1.2.3", - "@img/sharp-libvips-linux-arm": "1.2.3", - "@img/sharp-libvips-linux-arm64": "1.2.3", - "@img/sharp-libvips-linux-ppc64": "1.2.3", - "@img/sharp-libvips-linux-s390x": "1.2.3", - "@img/sharp-libvips-linux-x64": "1.2.3", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", - "@img/sharp-libvips-linuxmusl-x64": "1.2.3", - "@img/sharp-linux-arm": "0.34.4", - "@img/sharp-linux-arm64": "0.34.4", - "@img/sharp-linux-ppc64": "0.34.4", - "@img/sharp-linux-s390x": "0.34.4", - "@img/sharp-linux-x64": "0.34.4", - "@img/sharp-linuxmusl-arm64": "0.34.4", - "@img/sharp-linuxmusl-x64": "0.34.4", - "@img/sharp-wasm32": "0.34.4", - "@img/sharp-win32-arm64": "0.34.4", - "@img/sharp-win32-ia32": "0.34.4", - "@img/sharp-win32-x64": "0.34.4" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", "dependencies": { - "shebang-regex": "^3.0.0" + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">= 14.18.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", + "node_modules/rebuild": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/rebuild/-/rebuild-0.1.2.tgz", + "integrity": "sha512-EtDZ5IapND57htCrOOcfH7MzXCQKivzSZUIZIuc8H0xDHfmi9HDBZIyjT7Neh5GcUoxQ6hfsXluC+UrYLgGbZg==", "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "optimist": "0.3.x" }, - "engines": { - "node": ">= 0.4" + "bin": { + "rebuild": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.8.8" } }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "node_modules/recharts": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.4.tgz", + "integrity": "sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^18.3.1", + "react-smooth": "^4.0.4", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" }, "engines": { - "node": ">= 0.4" + "node": ">=14" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "decimal.js-light": "^2.4.1" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, + "node_modules/recharts/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "license": "MIT" }, - "node_modules/slash": { + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", "license": "MIT", + "dependencies": { + "redis-errors": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/socket.io": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", - "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", - "dev": true, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "license": "MIT", "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "cors": "~2.8.5", - "debug": "~4.3.2", - "engine.io": "~6.6.0", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.4" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { - "node": ">=10.2.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/socket.io-adapter": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", - "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", - "dev": true, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "license": "MIT", "dependencies": { - "debug": "~4.3.4", - "ws": "~8.17.1" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/socket.io-adapter/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "node_modules/reodotdev": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/reodotdev/-/reodotdev-1.0.0.tgz", + "integrity": "sha512-wXe1vJucZjrhQL0SxOL9EvmJrtbMCIEGMdZX5lj/57n2T3UhBHZsAcM5TQASJ0T6ZBbrETRnMhH33bsbJeRO6Q==", + "license": "MIT" + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/socket.io-adapter/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/resend": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/resend/-/resend-6.6.0.tgz", + "integrity": "sha512-d1WoOqSxj5x76JtQMrieNAG1kZkh4NU4f+Je1yq4++JsDpLddhEwnJlNfvkCzvUuZy9ZquWmMMAm2mENd2JvRw==", "license": "MIT", + "dependencies": { + "svix": "1.76.1" + }, "engines": { - "node": ">=10.0.0" + "node": ">=20" }, "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "@react-email/render": "*" }, "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { + "@react-email/render": { "optional": true } } }, - "node_modules/socket.io-client": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", - "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", - "dev": true, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "license": "MIT", "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.2", - "engine.io-client": "~6.6.1", - "socket.io-parser": "~4.2.4" + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "engines": { - "node": ">=10.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/socket.io-client/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=4" } }, - "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", - "dev": true, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, "engines": { - "node": ">=10.0.0" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "license": "Unlicense" + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 18" } }, - "node_modules/socket.io/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" + "queue-microtask": "^1.2.2" } }, - "node_modules/socket.io/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" }, "engines": { - "node": ">=6.0" + "node": ">=0.4" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/socket.io/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/socket.io/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/socket.io/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=10" } }, - "node_modules/sonner": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.3.tgz", - "integrity": "sha512-njQ4Hht92m0sMqqHVDL32V2Oun9W1+PHO9NDv9FHfJjT3JT22IG4Jpo3FPQy+mouRKCXFWO+r67v6MrHX2zeIA==", - "dev": true, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/selderee": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", + "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", "license": "MIT", - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "dependencies": { + "parseley": "^0.12.0" + }, + "funding": { + "url": "https://ko-fi.com/killymxi" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", + "node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 18" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" } }, - "node_modules/spamc": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/spamc/-/spamc-0.0.5.tgz", - "integrity": "sha512-jYXItuZuiWZyG9fIdvgTUbp2MNRuyhuSwvvhhpPJd4JK/9oSZxkD7zAj53GJtowSlXwCJzLg6sCKAoE9wXsKgg==", - "dev": true - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "license": "ISC", + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, "engines": { - "node": ">= 10.x" + "node": ">= 0.4" } }, - "node_modules/stable-hash": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", - "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", - "license": "MIT" - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, "engines": { - "node": "*" + "node": ">= 0.4" } }, - "node_modules/stacktrace-parser": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", - "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", - "dev": true, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "license": "MIT", "dependencies": { - "type-fest": "^0.7.1" + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">= 0.4" } }, - "node_modules/standard-as-callback": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", - "license": "MIT" - }, - "node_modules/state-local": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz", - "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==", - "license": "MIT" + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", + "node_modules/sharp": { + "version": "0.34.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.4.tgz", + "integrity": "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.0", + "semver": "^7.7.2" + }, "engines": { - "node": ">= 0.8" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.4", + "@img/sharp-darwin-x64": "0.34.4", + "@img/sharp-libvips-darwin-arm64": "1.2.3", + "@img/sharp-libvips-darwin-x64": "1.2.3", + "@img/sharp-libvips-linux-arm": "1.2.3", + "@img/sharp-libvips-linux-arm64": "1.2.3", + "@img/sharp-libvips-linux-ppc64": "1.2.3", + "@img/sharp-libvips-linux-s390x": "1.2.3", + "@img/sharp-libvips-linux-x64": "1.2.3", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", + "@img/sharp-libvips-linuxmusl-x64": "1.2.3", + "@img/sharp-linux-arm": "0.34.4", + "@img/sharp-linux-arm64": "0.34.4", + "@img/sharp-linux-ppc64": "0.34.4", + "@img/sharp-linux-s390x": "0.34.4", + "@img/sharp-linux-x64": "0.34.4", + "@img/sharp-linuxmusl-arm64": "0.34.4", + "@img/sharp-linuxmusl-x64": "0.34.4", + "@img/sharp-wasm32": "0.34.4", + "@img/sharp-win32-arm64": "0.34.4", + "@img/sharp-win32-ia32": "0.34.4", + "@img/sharp-win32-x64": "0.34.4" } }, - "node_modules/stdin-discarder": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", - "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", - "dev": true, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "shebang-regex": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/stop-iteration-iterator": { + "node_modules/side-channel": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" }, "engines": { - "node": ">=8" + "node": ">=10.2.0" } }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" - }, - "engines": { - "node": ">= 0.4" + "debug": "~4.3.4", + "ws": "~8.17.1" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "node_modules/socket.io-adapter/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10.0.0" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "node_modules/socket.io/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ms": "^2.1.3" }, "engines": { - "node": ">=12" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/socket.io/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/socket.io/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "node_modules/socket.io/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/stripe": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/stripe/-/stripe-18.2.1.tgz", - "integrity": "sha512-GwB1B7WSwEBzW4dilgyJruUYhbGMscrwuyHsPUmSRKrGHZ5poSh2oU9XKdii5BFVJzXHn35geRvGJ6R8bYcp8w==", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, "license": "MIT", "dependencies": { - "qs": "^6.11.0" - }, + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", "engines": { - "node": ">=12.*" - }, - "peerDependencies": { - "@types/node": ">=12.x.x" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "node": ">= 10.x" } }, - "node_modules/strnum": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", - "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], + "node_modules/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", "license": "MIT" }, - "node_modules/styled-jsx": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", - "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", "license": "MIT", - "dependencies": { - "client-only": "0.0.1" - }, "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } + "node": "*" } }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", + "license": "MIT" + }, + "node_modules/state-local": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz", + "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==", + "license": "MIT" }, - "node_modules/sucrase/node_modules/brace-expansion": { + "node_modules/statuses": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">= 0.8" } }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sucrase/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "engines": { + "node": ">= 0.4" } }, - "node_modules/sucrase/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "safe-buffer": "~5.2.0" } }, - "node_modules/sucrase/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/svix": { - "version": "1.76.1", - "resolved": "https://registry.npmjs.org/svix/-/svix-1.76.1.tgz", - "integrity": "sha512-CRuDWBTgYfDnBLRaZdKp9VuoPcNUq9An14c/k+4YJ15Qc5Grvf66vp0jvTltd4t7OIRj+8lM1DAgvSgvf7hdLw==", - "license": "MIT", - "dependencies": { - "@stablelib/base64": "^1.0.0", - "@types/node": "^22.7.5", - "es6-promise": "^4.2.8", - "fast-sha256": "^1.3.0", - "url-parse": "^1.5.10", - "uuid": "^10.0.0" - } + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" }, - "node_modules/svix/node_modules/@types/node": { - "version": "22.19.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.0.tgz", - "integrity": "sha512-xpr/lmLPQEj+TUnHmR+Ab91/glhJvsqcjB+yY0Ix9GO70H6Lb4FHH5GeqdOE5btAx7eIMwuHkp4H2MSkLcqWbA==", + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/svix/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, - "node_modules/svix/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/swagger-ui-dist": { - "version": "5.29.4", - "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.29.4.tgz", - "integrity": "sha512-gJFDz/gyLOCQtWwAgqs6Rk78z9ONnqTnlW11gimG9nLap8drKa3AJBKpzIQMIjl5PD2Ix+Tn+mc/tfoT2tgsng==", - "license": "Apache-2.0", "dependencies": { - "@scarf/scarf": "=1.4.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/swagger-ui-express": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.1.tgz", - "integrity": "sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==", + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "license": "MIT", "dependencies": { - "swagger-ui-dist": ">=5.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { - "node": ">= v0.10.32" + "node": ">= 0.4" }, - "peerDependencies": { - "express": ">=4.0.0 || >=5.0.0-beta" - } - }, - "node_modules/tabbable": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.3.0.tgz", - "integrity": "sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==", - "license": "MIT" - }, - "node_modules/tailwind-merge": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", - "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==", - "license": "MIT", "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tailwindcss": { - "version": "4.1.17", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.17.tgz", - "integrity": "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==", + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "license": "MIT", - "peer": true + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } }, - "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", - "dev": true, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/terser": { - "version": "5.44.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", - "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.15.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", - "dev": true, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "license": "MIT" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "license": "MIT", "dependencies": { - "any-promise": "^1.0.0" + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { - "thenify": ">= 3.1.0 < 4" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.8" - } - }, - "node_modules/tiny-lru": { - "version": "11.4.5", - "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.4.5.tgz", - "integrity": "sha512-hkcz3FjNJfKXjV4mjQ1OrXSLAehg8Hw+cEZclOVT+5c/cWQWImQ9wolzTjth+dmmDe++p3bme3fTxz6Q4Etsqw==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "node": ">=8" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, "engines": { - "node": ">=8.0" + "node": ">=4" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.6" + "node": ">=6" } }, - "node_modules/triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "license": "MIT", "engines": { - "node": ">= 14.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "node_modules/stripe": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-20.0.0.tgz", + "integrity": "sha512-EaZeWpbJOCcDytdjKSwdrL5BxzbDGNueiCfHjHXlPdBQvLqoxl6AAivC35SPzTmVXJb5duXQlXFGS45H0+e6Gg==", "license": "MIT", + "dependencies": { + "qs": "^6.11.0" + }, "engines": { - "node": ">=18.12" + "node": ">=16" }, "peerDependencies": { - "typescript": ">=4.8.4" + "@types/node": ">=16" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true, - "license": "Apache-2.0" + "node_modules/strnum": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" }, - "node_modules/tsc-alias": { - "version": "1.8.16", - "resolved": "https://registry.npmjs.org/tsc-alias/-/tsc-alias-1.8.16.tgz", - "integrity": "sha512-QjCyu55NFyRSBAl6+MTFwplpFcnm2Pq01rR/uxfqJoLMm6X3O14KEGtaSDZpJYaE1bJBGDjD0eSuiIWPe2T58g==", + "node_modules/stubborn-fs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz", + "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", "dev": true, "license": "MIT", "dependencies": { - "chokidar": "^3.5.3", - "commander": "^9.0.0", - "get-tsconfig": "^4.10.0", - "globby": "^11.0.4", - "mylas": "^2.1.9", - "normalize-path": "^3.0.0", - "plimit-lit": "^1.2.6" - }, - "bin": { - "tsc-alias": "dist/bin/index.js" - }, - "engines": { - "node": ">=16.20.2" + "stubborn-utils": "^1.0.1" } }, - "node_modules/tsc-alias/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/stubborn-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz", + "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==", "dev": true, + "license": "MIT" + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "client-only": "0.0.1" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 12.0.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } } }, - "node_modules/tsc-alias/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/tsc-alias/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/tsc-alias/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/tsc-alias/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "node_modules/svix": { + "version": "1.76.1", + "resolved": "https://registry.npmjs.org/svix/-/svix-1.76.1.tgz", + "integrity": "sha512-CRuDWBTgYfDnBLRaZdKp9VuoPcNUq9An14c/k+4YJ15Qc5Grvf66vp0jvTltd4t7OIRj+8lM1DAgvSgvf7hdLw==", "license": "MIT", "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "@stablelib/base64": "^1.0.0", + "@types/node": "^22.7.5", + "es6-promise": "^4.2.8", + "fast-sha256": "^1.3.0", + "url-parse": "^1.5.10", + "uuid": "^10.0.0" } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/svix/node_modules/@types/node": { + "version": "22.19.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.1.tgz", + "integrity": "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==", "license": "MIT", "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "undici-types": "~6.21.0" } }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "node_modules/svix/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" }, - "node_modules/tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "node_modules/svix/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", - "engines": { - "node": ">=0.6.x" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/tsx": { - "version": "4.20.6", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", - "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", - "dev": true, + "node_modules/swagger-ui-dist": { + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.30.3.tgz", + "integrity": "sha512-giQl7/ToPxCqnUAx2wpnSnDNGZtGzw1LyUw6ZitIpTmdrvpxKFY/94v1hihm0zYNpgp1/VY0jTDk//R0BBgnRQ==", + "license": "Apache-2.0", + "dependencies": { + "@scarf/scarf": "=1.4.0" + } + }, + "node_modules/swagger-ui-express": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.1.tgz", + "integrity": "sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==", "license": "MIT", "dependencies": { - "esbuild": "~0.25.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" + "swagger-ui-dist": ">=5.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">= v0.10.32" }, - "optionalDependencies": { - "fsevents": "~2.3.3" + "peerDependencies": { + "express": ">=4.0.0 || >=5.0.0-beta" } }, - "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } + "node_modules/tabbable": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.3.0.tgz", + "integrity": "sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==", + "license": "MIT" }, - "node_modules/tsx/node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=18" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tsx/node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/tailwind-merge": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", + "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" } }, - "node_modules/tsx/node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/tailwindcss": { + "version": "4.1.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.17.tgz", + "integrity": "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } + "peer": true }, - "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", - "cpu": [ - "arm64" - ], + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">=18" + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/tsx/node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" - ], + "node_modules/terser": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/tsx/node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, "engines": { - "node": ">=18" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "node_modules/tsx/node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } + "license": "MIT" + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" }, - "node_modules/tsx/node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/tiny-lru": { + "version": "11.4.5", + "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.4.5.tgz", + "integrity": "sha512-hkcz3FjNJfKXjV4mjQ1OrXSLAehg8Hw+cEZclOVT+5c/cWQWImQ9wolzTjth+dmmDe++p3bme3fTxz6Q4Etsqw==", + "license": "BSD-3-Clause", "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/tsx/node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, "engines": { - "node": ">=18" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], - "dev": true, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "is-number": "^7.0.0" + }, "engines": { - "node": ">=18" + "node": ">=8.0" } }, - "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], - "dev": true, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=0.6" } }, - "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "node_modules/topojson-client": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", + "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", + "license": "ISC", + "dependencies": { + "commander": "2" + }, + "bin": { + "topo2geo": "bin/topo2geo", + "topomerge": "bin/topomerge", + "topoquantize": "bin/topoquantize" } }, - "node_modules/tsx/node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], - "dev": true, + "node_modules/topojson-client/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">= 14.0.0" } }, - "node_modules/tsx/node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" } }, - "node_modules/tsx/node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], + "node_modules/tsc-alias": { + "version": "1.8.16", + "resolved": "https://registry.npmjs.org/tsc-alias/-/tsc-alias-1.8.16.tgz", + "integrity": "sha512-QjCyu55NFyRSBAl6+MTFwplpFcnm2Pq01rR/uxfqJoLMm6X3O14KEGtaSDZpJYaE1bJBGDjD0eSuiIWPe2T58g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "dependencies": { + "chokidar": "^3.5.3", + "commander": "^9.0.0", + "get-tsconfig": "^4.10.0", + "globby": "^11.0.4", + "mylas": "^2.1.9", + "normalize-path": "^3.0.0", + "plimit-lit": "^1.2.6" + }, + "bin": { + "tsc-alias": "dist/bin/index.js" + }, "engines": { - "node": ">=18" + "node": ">=16.20.2" } }, - "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], + "node_modules/tsc-alias/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, "engines": { - "node": ">=18" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/tsx/node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "cpu": [ - "arm64" - ], + "node_modules/tsc-alias/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], "engines": { - "node": ">=18" + "node": "^12.20.0 || >=14" } }, - "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "cpu": [ - "x64" - ], + "node_modules/tsc-alias/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">=18" + "node": ">= 6" } }, - "node_modules/tsx/node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], + "node_modules/tsc-alias/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], "engines": { - "node": ">=18" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/tsx/node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "cpu": [ - "x64" - ], + "node_modules/tsc-alias/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], + "dependencies": { + "picomatch": "^2.2.1" + }, "engines": { - "node": ">=18" + "node": ">=8.10.0" } }, - "node_modules/tsx/node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "node_modules/tsx/node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", - "cpu": [ - "ia32" - ], - "dev": true, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/tsx/node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=18" + "node": ">=0.6.x" } }, - "node_modules/tsx/node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", "dev": true, - "hasInstallScript": true, "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, "bin": { - "esbuild": "bin/esbuild" + "tsx": "dist/cli.mjs" }, "engines": { - "node": ">=18" + "node": ">=18.0.0" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" + "fsevents": "~2.3.3" } }, "node_modules/tsyringe": { @@ -23638,13 +22441,19 @@ } }, "node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.3.0.tgz", + "integrity": "sha512-d9CwU93nN0IA1QL+GSNDdwLAu1Ew5ZjTwupvedwg3WdfoH6pIDvYQ2hV0Uc2nKBLPq7NB5apCx57MLS5qlmO5g==", "dev": true, "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/type-is": { @@ -23750,15 +22559,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.3.tgz", - "integrity": "sha512-bAfgMavTuGo+8n6/QQDVQz4tZ4f7Soqg53RbrlZQEoAltYop/XR4RAts/I0BrO3TTClTSTFJ0wYbla+P8cEWJA==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.49.0.tgz", + "integrity": "sha512-zRSVH1WXD0uXczCXw+nsdjGPUdx4dfrs5VQoHnUWmv1U3oNlAKv4FUNdLDhVUg+gYn+a5hUESqch//Rv5wVhrg==", "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.46.3", - "@typescript-eslint/parser": "8.46.3", - "@typescript-eslint/typescript-estree": "8.46.3", - "@typescript-eslint/utils": "8.46.3" + "@typescript-eslint/eslint-plugin": "8.49.0", + "@typescript-eslint/parser": "8.49.0", + "@typescript-eslint/typescript-estree": "8.49.0", + "@typescript-eslint/utils": "8.49.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -23772,6 +22581,19 @@ "typescript": ">=4.8.4 <6.0.0" } }, + "node_modules/uint8array-extras": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", @@ -23840,9 +22662,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz", + "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==", "funding": [ { "type": "opencollective", @@ -23909,23 +22731,10 @@ } } }, - "node_modules/use-debounce": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-10.0.4.tgz", - "integrity": "sha512-6Cf7Yr7Wk7Kdv77nnJMf6de4HuDE4dTxKij+RqE9rufDsI6zsbjyAxcH5y2ueJCQAnfgKbzXbZHYlkFwmBlWkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16.0.0" - }, - "peerDependencies": { - "react": "*" - } - }, "node_modules/use-intl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.4.0.tgz", - "integrity": "sha512-smFekJWtokDRBLC5/ZumlBREzdXOkw06+56Ifj2uRe9266Mk+yWQm2PcJO+EwlOE5sHIXHixOTzN6V8E0RGUbw==", + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.5.8.tgz", + "integrity": "sha512-rWPV2Sirw55BQbA/7ndUBtsikh8WXwBrUkZJ1mD35+emj/ogPPqgCZdv1DdrEFK42AjF1g5w8d3x8govhqPH6Q==", "license": "MIT", "dependencies": { "@formatjs/fast-memoize": "^2.2.0", @@ -24008,29 +22817,33 @@ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, - "node_modules/watchpack": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", - "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } + "node_modules/victory-vendor": { + "version": "36.9.2", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", + "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/visionscarto-world-atlas": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/visionscarto-world-atlas/-/visionscarto-world-atlas-1.0.0.tgz", + "integrity": "sha512-jHl/NQgASfw5ZML3cnbjdfr/gXK5zO8a2xKSoCVe+5+EsIaO9tMTh7SsnfhESnCpZ+Xb6XBeU91wiuyERUPshQ==", + "license": "BSD-3-Clause" }, "node_modules/web-streams-polyfill": { "version": "3.3.3", @@ -24041,111 +22854,12 @@ "node": ">= 8" } }, - "node_modules/webpack": { - "version": "5.102.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.1.tgz", - "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.8", - "@types/json-schema": "^7.0.15", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.15.0", - "acorn-import-phases": "^1.0.3", - "browserslist": "^4.26.3", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.3", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.3", - "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.4", - "webpack-sources": "^3.3.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", - "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/when-exit": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz", + "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==", "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } + "license": "MIT" }, "node_modules/which": { "version": "4.0.0", @@ -24249,9 +22963,9 @@ } }, "node_modules/winston": { - "version": "3.18.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.18.3.tgz", - "integrity": "sha512-NoBZauFNNWENgsnC9YpgyYwOVrl2m58PpQ8lNHjV3kosGs7KJ7Npk9pCUE+WJlawVSe8mykWDKWFSVfs3QO9ww==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", + "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", "license": "MIT", "peer": true, "dependencies": { @@ -24325,6 +23039,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -24343,6 +23058,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -24360,6 +23076,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -24369,12 +23086,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -24389,6 +23108,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -24401,6 +23121,7 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -24436,15 +23157,6 @@ } } }, - "node_modules/xmlhttprequest-ssl": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", - "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -24470,15 +23182,18 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { @@ -24556,9 +23271,9 @@ } }, "node_modules/zod": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", - "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", + "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "license": "MIT", "peer": true, "funding": { diff --git a/package.json b/package.json index 515a2f5bf..b5650e49a 100644 --- a/package.json +++ b/package.json @@ -22,24 +22,25 @@ "set:oss": "echo 'export const build = \"oss\" as any;' > server/build.ts && cp tsconfig.oss.json tsconfig.json", "set:saas": "echo 'export const build = \"saas\" as any;' > server/build.ts && cp tsconfig.saas.json tsconfig.json", "set:enterprise": "echo 'export const build = \"enterprise\" as any;' > server/build.ts && cp tsconfig.enterprise.json tsconfig.json", - "set:sqlite": "echo 'export * from \"./sqlite\";' > server/db/index.ts", - "set:pg": "echo 'export * from \"./pg\";' > server/db/index.ts", + "set:sqlite": "echo 'export * from \"./sqlite\";\nexport const driver: \"pg\" | \"sqlite\" = \"sqlite\";' > server/db/index.ts", + "set:pg": "echo 'export * from \"./pg\";\nexport const driver: \"pg\" | \"sqlite\" = \"pg\";' > server/db/index.ts", "next:build": "next build", "build:sqlite": "mkdir -p dist && next build && node esbuild.mjs -e server/index.ts -o dist/server.mjs && node esbuild.mjs -e server/setup/migrationsSqlite.ts -o dist/migrations.mjs", "build:pg": "mkdir -p dist && next build && node esbuild.mjs -e server/index.ts -o dist/server.mjs && node esbuild.mjs -e server/setup/migrationsPg.ts -o dist/migrations.mjs", "start": "ENVIRONMENT=prod node dist/migrations.mjs && ENVIRONMENT=prod NODE_ENV=development node --enable-source-maps dist/server.mjs", "email": "email dev --dir server/emails/templates --port 3005", - "build:cli": "node esbuild.mjs -e cli/index.ts -o dist/cli.mjs" + "build:cli": "node esbuild.mjs -e cli/index.ts -o dist/cli.mjs", + "format": "prettier --write ." }, "dependencies": { - "@asteasolutions/zod-to-openapi": "8.1.0", - "@aws-sdk/client-s3": "3.922.0", - "@faker-js/faker": "^10.1.0", - "@headlessui/react": "^2.2.9", + "@asteasolutions/zod-to-openapi": "8.2.0", + "@aws-sdk/client-s3": "3.948.0", + "@faker-js/faker": "10.1.0", + "@headlessui/react": "2.2.9", "@hookform/resolvers": "5.2.2", - "@libsql/client": "^0.15.15", - "@monaco-editor/react": "^4.7.0", - "@node-rs/argon2": "^2.0.2", + "@libsql/client": "0.15.15", + "@monaco-editor/react": "4.7.0", + "@node-rs/argon2": "2.0.2", "@oslojs/crypto": "1.0.1", "@oslojs/encoding": "1.1.0", "@radix-ui/react-avatar": "1.1.11", @@ -50,129 +51,130 @@ "@radix-ui/react-icons": "1.3.2", "@radix-ui/react-label": "2.1.8", "@radix-ui/react-popover": "1.1.15", - "@radix-ui/react-progress": "^1.1.8", + "@radix-ui/react-progress": "1.1.8", "@radix-ui/react-radio-group": "1.3.8", - "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-scroll-area": "1.2.10", "@radix-ui/react-select": "2.2.6", "@radix-ui/react-separator": "1.1.8", "@radix-ui/react-slot": "1.2.4", "@radix-ui/react-switch": "1.2.6", "@radix-ui/react-tabs": "1.1.13", "@radix-ui/react-toast": "1.2.15", - "@radix-ui/react-tooltip": "^1.2.8", - "@react-email/components": "0.5.7", - "@react-email/render": "^1.3.2", - "@react-email/tailwind": "1.2.2", - "@simplewebauthn/browser": "^13.2.2", - "@simplewebauthn/server": "^13.2.2", - "@tailwindcss/forms": "^0.5.10", - "@tanstack/react-query": "^5.90.6", + "@radix-ui/react-tooltip": "1.2.8", + "@react-email/components": "1.0.1", + "@react-email/render": "2.0.0", + "@react-email/tailwind": "2.0.1", + "@simplewebauthn/browser": "13.2.2", + "@simplewebauthn/server": "13.2.2", + "@tailwindcss/forms": "0.5.10", + "@tanstack/react-query": "5.90.12", "@tanstack/react-table": "8.21.3", - "arctic": "^3.7.0", - "axios": "^1.13.2", + "arctic": "3.7.0", + "axios": "1.13.2", "canvas-confetti": "1.9.4", - "class-variance-authority": "^0.7.1", + "class-variance-authority": "0.7.1", "clsx": "2.1.1", "cmdk": "1.1.1", - "cookie": "^1.0.2", + "cookie": "1.1.1", "cookie-parser": "1.4.7", - "cookies": "^0.9.1", + "cookies": "0.9.1", "cors": "2.8.5", - "crypto-js": "^4.2.0", + "crypto-js": "4.2.0", + "d3": "7.9.0", "date-fns": "4.1.0", - "drizzle-orm": "0.44.7", + "drizzle-orm": "0.45.0", "eslint": "9.39.1", - "eslint-config-next": "16.0.3", - "express": "5.1.0", + "eslint-config-next": "16.0.8", + "express": "5.2.1", "express-rate-limit": "8.2.1", - "glob": "11.0.3", + "glob": "13.0.0", "helmet": "8.1.0", - "http-errors": "2.0.0", - "i": "^0.3.7", + "http-errors": "2.0.1", + "i": "0.3.7", "input-otp": "1.4.2", "ioredis": "5.8.2", - "jmespath": "^0.16.0", + "jmespath": "0.16.0", "js-yaml": "4.1.1", - "jsonwebtoken": "^9.0.2", - "lucide-react": "^0.552.0", + "jsonwebtoken": "9.0.3", + "lucide-react": "0.559.0", "maxmind": "5.0.1", "moment": "2.30.1", - "next": "15.5.6", - "next-intl": "^4.4.0", + "next": "15.5.9", + "next-intl": "4.5.8", "next-themes": "0.4.6", - "nextjs-toploader": "^3.9.17", + "nextjs-toploader": "3.9.17", "node-cache": "5.1.2", "node-fetch": "3.3.2", - "nodemailer": "7.0.10", - "npm": "^11.6.2", - "nprogress": "^0.2.0", + "nodemailer": "7.0.11", + "npm": "11.7.0", + "nprogress": "0.2.0", "oslo": "1.2.1", - "pg": "^8.16.2", - "posthog-node": "^5.11.2", + "pg": "8.16.3", + "posthog-node": "5.17.2", "qrcode.react": "4.2.0", - "react": "19.2.0", - "react-day-picker": "9.11.1", - "react-dom": "19.2.0", - "react-easy-sort": "^1.8.0", - "react-hook-form": "7.66.0", - "react-icons": "^5.5.0", + "react": "19.2.3", + "react-day-picker": "9.12.0", + "react-dom": "19.2.3", + "react-easy-sort": "1.8.0", + "react-hook-form": "7.68.0", + "react-icons": "5.5.0", "rebuild": "0.1.2", - "reodotdev": "^1.0.0", - "resend": "^6.4.2", - "semver": "^7.7.3", - "stripe": "18.2.1", - "swagger-ui-express": "^5.0.1", - "tailwind-merge": "3.3.1", - "tw-animate-css": "^1.3.8", - "uuid": "^13.0.0", + "recharts": "2.15.4", + "reodotdev": "1.0.0", + "resend": "6.6.0", + "semver": "7.7.3", + "stripe": "20.0.0", + "swagger-ui-express": "5.0.1", + "tailwind-merge": "3.4.0", + "topojson-client": "3.1.0", + "tw-animate-css": "1.4.0", + "uuid": "13.0.0", "vaul": "1.1.2", - "winston": "3.18.3", + "visionscarto-world-atlas": "1.0.0", + "winston": "3.19.0", "winston-daily-rotate-file": "5.0.0", "ws": "8.18.3", - "yaml": "^2.8.1", + "yaml": "2.8.2", "yargs": "18.0.0", - "zod": "4.1.12", + "zod": "4.1.13", "zod-validation-error": "5.0.0" }, "devDependencies": { "@dotenvx/dotenvx": "1.51.1", "@esbuild-plugins/tsconfig-paths": "0.1.2", - "@react-email/preview-server": "4.3.2", - "@tanstack/react-query-devtools": "^5.90.2", - "@tailwindcss/postcss": "^4.1.17", + "@tailwindcss/postcss": "4.1.17", + "@tanstack/react-query-devtools": "5.91.1", "@types/cookie-parser": "1.4.10", "@types/cors": "2.8.19", - "@types/crypto-js": "^4.2.2", - "@types/express": "5.0.5", - "@types/express-session": "^1.18.2", - "@types/jmespath": "^0.15.2", - "@types/js-yaml": "4.0.9", - "@types/jsonwebtoken": "^9.0.10", - "@types/nprogress": "^0.2.3", - "@types/node": "24.10.1", - "@types/nodemailer": "7.0.3", - "@types/pg": "8.15.6", - "@types/react": "19.2.2", - "@types/react-dom": "19.2.2", - "@types/semver": "^7.7.1", - "@types/swagger-ui-express": "^4.1.8", + "@types/crypto-js": "4.2.2", + "@types/d3": "7.4.3", + "@types/express": "5.0.6", + "@types/express-session": "1.18.2", + "@types/jmespath": "0.15.2", + "@types/jsonwebtoken": "9.0.10", + "@types/node": "24.10.2", + "@types/nodemailer": "7.0.4", + "@types/nprogress": "0.2.3", + "@types/pg": "8.16.0", + "@types/react": "19.2.7", + "@types/react-dom": "19.2.3", + "@types/semver": "7.7.1", + "@types/swagger-ui-express": "4.1.8", + "@types/topojson-client": "3.1.5", "@types/ws": "8.18.1", - "@types/yargs": "17.0.34", - "drizzle-kit": "0.31.6", - "esbuild": "0.27.0", - "esbuild-node-externals": "1.19.1", - "postcss": "^8", - "react-email": "4.3.2", - "tailwindcss": "^4.1.4", + "@types/yargs": "17.0.35", + "@types/js-yaml": "4.0.9", + "babel-plugin-react-compiler": "1.0.0", + "drizzle-kit": "0.31.8", + "esbuild": "0.27.1", + "esbuild-node-externals": "1.20.1", + "postcss": "8.5.6", + "prettier": "3.7.4", + "react-email": "5.0.7", + "tailwindcss": "4.1.17", "tsc-alias": "1.8.16", - "tsx": "4.20.6", - "typescript": "^5", - "typescript-eslint": "^8.46.3" - }, - "overrides": { - "emblor": { - "react": "19.0.0", - "react-dom": "19.0.0" - } + "tsx": "4.21.0", + "typescript": "5.9.3", + "typescript-eslint": "8.49.0" } } diff --git a/postcss.config.mjs b/postcss.config.mjs index 9d3299ad5..19b5e42fc 100644 --- a/postcss.config.mjs +++ b/postcss.config.mjs @@ -1,8 +1,8 @@ /** @type {import('postcss-load-config').Config} */ const config = { plugins: { - "@tailwindcss/postcss": {}, - }, + "@tailwindcss/postcss": {} + } }; export default config; diff --git a/src/app/favicon.ico b/public/favicon.ico similarity index 100% rename from src/app/favicon.ico rename to public/favicon.ico diff --git a/public/screenshots/create-resource.png b/public/screenshots/create-resource.png deleted file mode 100644 index 3b21f22bbbaf15afd2c9cee7381caae6cd808966..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 703526 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

-3Y>a(-z!Uyzs0TzX4haRZl#iSwPI>s~A z=kGCX9l#v-JX-c(F&8}bm{B~99ar;W!n@dZ zH=skFKq`@i$>5b{Bjnp`^=d(0YVLw{8oG_}dw`DJoN*+0Uag8WZYCBv$gg;SE))eh zxiy-ZXb$H;gutY9zbh^!MaE%AY0L>E&4PgAM8sU!2l^{dP=a^%{iwLOfj;&Q408gB z19MZ!$yP*;nAj9PzwO#w(Q7_d6}hF&-U8W3(UI}#wPDkeG_Z^a&&}cSw^{=gg6Qz| zhiNp^65p-Kg?++vvd)hQ=B#^ z6DQ?oaYCBJyLF9(sY(RrqpP;)RO`oKid<#W8Hx^Qs_)0{)HETPhOm~CoKxZ-RoRb{ zeDUWs`}tiojuh7nfziPz>-DDkuwA7}(YKC}m#qFMgG$g-;BW(lpJlbt5O$;#qL|vG z^v5$-A%ikG_&LkPdf6HPa<|DiOV`CYyvz7FSG^BN+Tr0keFkpr?&*q(w9?kNY>5jUsH6wy4nIr=7P`Uf#Azb8#7KRC0Mzr^esY zE`CPgDk-YiPxbc*i2nfSb|8CNgN)@Vs>q+K2rnobscnTqJhjwM3E^<;oBntpOOHmanPF zhl0|Q7^!L?Qx`KUt?)z}r*)ZQF*e&Yu6_Ufso7gNm*3N~m9r-EVe>uP63ncqgQaf9IG}|fYz7 z1XBL!(}lf6!<7VO=J$AvM8+=IE7pAzO4_lJZw{F2&dd47?6u-S!8jh}B zWhvj2@f#b1W7I2qQz&h^3X9)u^OR@n-HOnFvwWl3zKc=bp z5RZCtdy*gLAL-jl<2bt8Ax>iDPq}D;PJ?K+np4b>gza9%xf(Hl9>>OmKj~+WiPzXKbE^`pBYsm6sYm2sq!tKPRsKU_sTAOB5EsH^~ zj#{g`OE&$~JfasmFj;2-bXcl|3Ic2rpV!>SE5MiZiN@U^!S-qG=-@|1;Y{ZKTO+aJj$_uDA|K+K2kC9`qOQbIS%arFr&Wq$hx+~+UDI*B?w zV`8MWDB9q393HUMQjTB3B0MD>J&DV(8PnTbgZ(x?=yk%8AyX#xj};pWBoVCrn|PIf zjE4UqtddUv1>kYnJSf*OK@Jd1@q7r(#w_XX%?Lt5T|`i>Pp)Lt_@ey$K5PNYk zu{Wkoh6B^cNppXI|46LLnAh~f7!cGI04{0jTFg#JRTb-LxT-3cZyqw*I?Z}v+V%Zt zieu(?_j@)hudQLtGe}fMhda1R9S5OYZCjOw(_bRMFFP(M-25UqeDel=Ls<0Z&KbgX z-<+n4G#Qq$HqPp|LVnMOYm6NrbBBxfHqq{F*!+D4cqEu4Y(B2OCNtxLXKhnV`9iV;aRC~EyZ%iH529w zxGY|AN#ChUqAiXU;JaX6eaAb!Q_&gj*H;tNA6_SpAo!@ZlY{7o&nef=|3xFVh=>%W zH>#R?MZ&t&ZcJn$xw@#jzn3kkOITB$mW6OhY=<^|>qO-Wb+|i+6V^TGFso4Y_t2td z=j@oN+MjT8vEoYU_jQvBkLv2A zj;o(lcTTz#Qh1NwN)#SlY^negm*f+c_YNcO3KNWw1vSyeGLc5chXGvwaeB{xV(0}v zUPkljHYoChq$CMuBT1z4DPy8V6_A-yI6`E8)&jtGkr`yaq4do^sl>klj}SwIvyCbZ(w{?)J5J$n%7nWcc`njA0#-$8X6KS=WZu;jds z7?DVGdv|>lF|dL0X(CkUHC>{Dd=nsp-h5#;>^H!EZ(tM1J!=E>o^#CU6K3%1(a z0_GpvoTaqGJ8OH2**!CstN;2rHu(%)J(?1@nh*s%z;-DRqErk?=#5-{!XU-!;^*RO z{^g0H?Jg<`gWV3+7IkAC_xSxzYLs2=U)|oA{xY+1NG+!QfzboyN}IAJP54pO)GNp@ zEV}9$9xUmN4yv+%__Z`cOWlaXyW)I`OjosEv|%yNM$AkzXqN-3Du{I&dirOMgEcx& z&bqx@lSF1}p8#n9_)osfpM8oxsw}ty_OhyH$-frK2(1kbg;1P7o(?i!Nf8K$F7p$A zHF?UD04`QJEiJ8Csi|iay01`uJL!|^&1Xu<=6WOQlAg5hHKk$(L(b8mc@U8BCGIVK z8Nudb4?r&Xg&n5O0wWaMu(Jsd-@QA-U{t@iy6h>W7oe(%5r#T$*_o$yPex6&s^>=OQ*=fHC?dXERe+Sv= zkGl5ei}^kKC5N`NAOvitnS=P6*YB48XXMGh3)PiI_Q{brH369msw_v++R%~OK%gb2 z>5;qoOQ?8+w={&TB6%B}pt4cWH%fro4RSLDJ#LaEfqm&kOiYa5WN?Ojp0s#&sZ`Q5 z(K)gBB@mGW%=#jNWffl2er)#HDL?_C`sJ>Ac=6u=1OkX0)ErtTEYf)HrCm>l*mkzT zojVstz@+!>h&FSiH-W(OYD`1n8fcRIW`P2*03esuz$Np8lZorNGs?c}T^#IWU&2V; z$^$`)+o21}Eyy4U{!4MQpA8oW$eY?ma>@GS?l3%p-$;IMMF=B%)v`}pDd@*%MYJj* z%-GDE7*me!ATGS9#QJqi#5DEz{0D!IDa84OO8 zb4)~ye{z%{Am}gS`_A=FWhvW&LrQI*<~&Rt>kJ7JRHzSMb0|!y%4?a{%4qz6eMMpi zErtc!4{9e>q038B)iu2XHRzQUjLAc5MqlXBTOvOc%4iNxc8`^-#QO=I7K54hlR`JK zw)lgDeJ#Jk&t2O;@g5u;weCtp6S{qx(D2MECV!HrwZtnLF{9$duZ3X9=u^E1KQST5 z(g(ZjCvrl+%D+|*Hc6Q5+bRLNAUUATS1<(P>JrteSTM>Wl5rVV&3zS|z2nK2{($*C zI5_568r*hYw+;wLLBw%PoR7Y!3!|f`=p#FJ2d^Pne_TRBj^IsaR2c6pjf?~t_t6Vj z&)gTV7e$CVE>(Phc}Km(;dVs>>0^3i8hHyZZzC%$iWQX0Zh?;y%Kr)S|z_&#}KuUmCSCmq(H6!0){6p0PldUA4l))lOSJEhKD2RiN!I-fgK0qUCFSO z_!8IypMsHX?d)>4B^;Yl&}px{jfPyK0nmr#5UWJ(cf@^p7XhGG1&7Uv8KD%R6rTG! z&lk27$$W-n1pB4pK|%1GMTfSBtXHaUOh$hqJi#nAP_D$0*TWy}aIRUJvwM^ zq6KU-i-*Xg=Fl|s{mraFTYW6qq1ArgS|ln8-~KUPBZhdRw<4f-Pk=zF+JwAkAXX3& zg2VhgDaP-#@LP}Qw`1q`TIg@=Tn?&R20xWqQK)HeXTE2Xt(59qec*LFdX8u8uyy~K zo39>gsM=+FgomMF`ay@$9~lbXpDc-wUsOhPX+L$T>gaKQ?$Tpq&Lhf#n)Cc=A|5vQ|itf7$aWVdd8+YRSVNB3MKgIw6gJdpus<*@KCvDhAMfXbbh~}4;W&lyfSb=CKCg{zpYA`}2oW_PXbB`d)SYno0RUTkXozldZVoHr#Bb|ZPFR@ya!7d)lp&W~ z30TNJOneHZa3~tAK%DN-8c~J$=<+1d7k??J2do^~XVf%D?3^`OiP(SHe%whspaPXc>47q(M^L zt+$1Qo_bWVZvImc|8wrkMdq;gT-P9lS6Q_9KH_D}ZE7!7Om6IT9k8Vn7P)Zl@#L#=N%_WH`}B z#r;k)SvkNQ69dw7P)o4Rx4gaG!K!IXEEr9?Ro~L0x#7V>0IXGocQ$ulP9S2`3}xvR z`oXwyk7FY0la~p2I00fg$s{QuBQhL$wpI*h&_2t4o-jI(Oz^!3kCO!xs)=8|a&mI& zT?pwvA|ns{iKd#k4lPh&LPB8gzZ%-Lc$D;}6!7;>-tzb7EG#R-d2haZ88^H=HB{Qt-T zkXz4^zGw;Rkib9u5xjV(O^Fu!vv0P1IhgtW$5&iQV%WvIKhOm!TlxfZKcs~(W>+qVz92hA(YhvH0QB4 z_S}j&C3jozNdLe(N`pTBKd^uRou62EDc49wh=1{oSutXv#ExnWy$@j8OZe z-U*?joc6JsUb=Fl_@wSj@B~g-o;1bpHx(ADP3>HljC{~cOZxbozQN!f(3~rJ@X>yO ztVS=oM~J(lJWNeZQTe1AVOoaBCkyU&d{G_jBajS21_@emqaa98l|4R>=i6KSzZu}c z_}~LHiE*!fhI^j*!UY1U*jNHHh3PN<1+mW0_Ysg=XBnOy+K~zK?QoYHY<&O-pG}o5 z3wT`*_}*!X55!TueNDgOr_tny=T%qEbQl3BQn-82rtG-Su(EnLk@m1ZYg7{5&~|@t zB(xOJy93^%l3$XB*V2%gwg)=-lnO%IX3*A5(M_%X0PvcPM)0){yllPOXxawJ(qGUZ z@ODMfBiPjq4Sv8O8Zd1Z9q{b=HT^*#3W)^`)*%%4+>=mH<-@M~(*2>+<=h3=B6SE9 z_qA2Mw2iKx7+-o`8Hn$h6#l)uytuo!XG)pi7Qi@OA6x5rZ@iNkj4ouAD4j~Xfzv7y z18K+pdGnHi7%qZ{uuDeg`XmO-mC7O(HPaCRNO7YeIYPHY*aZ_+rQQbqk@$-y#9tNK zRfe}E$jsdQr3c%K>qRLDs{!K&`nC|2k`db|(zZY%AMXf0E>v!FFYa!Ya4xvl%21lb zqw6Ds8pOkI=WqycJm}};_A-oRu2oZwqiq^gN_&tB)|ke%d937x@MmVSjbDAC#DJlU z(XN`%Aja8S2ype#RBm23yeDY}P1QXTaTtGEDkPTe79j}N1+_GSQnX`x!Wh<~>TM6m z$$f6wqRDX#+QU5&yARqAX8bBpPAWk&)!Re0&jkE>)@8jo)`5SM>w@&%JHJOcpS!Mb zn$r5@?B%QHe!BVn7qu9s7!_)on%o|L+F_qE!y4}|7KpucNvEAnqdYtTRDT8(vxPO_ zEt6lu5gjz0$fX)fqZPc_4T#RsL|DpRc0M9B%zJuZtlL@=x@P5FO8MW(@F=KPn`F55 zVq(#lkBi0SNT1vgo%RLH1I%{owo7eFa~Je#y!MDj@&cxRL0~1ERtyv2&P%qw_E0~X zsIY^IaXqN;|91N$67)BpF}w5hOniSgFr|I)VJ67c$<>MS{7xpE1p~o>=%YA?f=u+YH4}v1|$yynn>*%LKHaQm;p-CQT zM34ssdvhG_wSA@83H*CqcW(+8!h8GxF{rMwoU4raEA4(K2ZM^2m#LMZ?e3KaNH0}hsi}bx?&6@(LEG+g zGTUgXiG=c5J;I%?$GX4~7{-3CkQREV0aX9@`cyG?hr2dKx&^++_Wy*+CX>BFelP1zGJl%sQH zIWwlzfw#X!dIhL(+0%aI?ZO*m2(ZBCp?OM}nanCv3wtE1sV)U+zxwULeD zz4H;zTtIG!hdT(#tTABhb$031UIX0Z%b`^6U_VN5|5t79YAaYcY7KI2YXP!3+%zMKF$QAJ%OUi4o`rtr~=sb35*1wt%<^7NjiO?TxTxwFA#Z2Tf>O9>WYejy^u_E ztBeP>pIYRf>>>RDJtvYos%f2pU7zPe#cujN&+a;uV>2&lMD(@7541|@g>QOYqR(Na zDu+bb*4h?8XQq^!)#?uKIUS!oL9~em4`Rles93 zr9^K;gzO(iN+^vXc{v05jG-ekT)n{>BKaRcbe%e}$BlDex`!S%pAN8?j(2LcDO0Z8 zzKxhJ^SW1e1zxWxH7jFd3b1hI?Te`D;5?qDQ5?o|xSnAG{3`O{VC5m^@|Z00NVi-3 zWNGH{;V7+&>$pH=iP#c|8 zc@g~xj4ynaVVuV+HkRRm#O+m&^m>m>`IH+MzIuu%vcCW|C8ge{UmA%YEME>_zmgn( zop&DGxi(qw)?L0n4F)|R6OJ}nShx(-GBS)NbDU;6ZCi2J{EpJPP5(7YK{%7xt63~Y z>gt>F@}wcD*SuHfU_or#AZGpbv>M~cAHwu5=P^>(A6tmwr-6#((&>J@#ycl&y+dvL zO)6FnjdZ@t`6uJ8^U|?x6+&rUYMFbHqy(^6Do`^U`t9gm(m&0ZAH1c^mLTuXqFVdN z69&kRzgnG~c&#&kjV8KGB)$^=u>CANiZxh+mTgLCz;3BJ_Xh(0^dpRl+~#hkZCYHR zJN>Ts+9_HCK}=hqtgNgUes~f#Hg>c@34=PSOY$8IVh|m{E?|`+?#_R_fPG^-TW-LR ziuAGCL`rXep)TBS5kpp2H{&}EfpDNsU1Otgj8GUk!SBiG=|B1*H+!$alvOC*^940u zENOB8mKzo+b~G#8D)V@~r>GGiaPL-jeqpa>^-NDsSMps_0Yd=>kdP`?+itu<-;qj} z%@VHQ`y70BrikC#Z@_bnoCD?(Y#bbyp_;Sfp4)4#Z;y@NwW^M}k~tl|^NKzog0mYs zT>?bhs~}XLxTDoZ`Ll%wtK?A%9E}1g8`y_BxOxjcun%T$4(pwF|^XHc@!%g(MRsF z(b1!uLr0hakLM+xg!s&UJE$E-$ilJ?RUOPRxjfeP;;bsVj#bdj=l%%7yVMHcBa9(itq5i&B^ zZD5AY1;;KMIZ%Tb-$l#ZJUCL3lokFZA{EqFs`~l4gMe9zho)q;N9w@Lk5YOH94BS% zy6?wZ9M3)4^jfsNxsJGak1?(;5>?V?25s3eB+k?tHO{meg0(m&3Je^GN20RNHJ{ho z`pHf7ekAt$no9r5{|;hnXHLm?NGNfof}D4*vl`L&_`0zfqVKy>KZv}M(?nInDw-k& zw;iedX^jM9%XPv5q(slqUA@Zz$}sSu(<-WQ$d4)hPioC#7JNX6!aA8`}iXj&%_?g{yw1g|d$OuC1($!Rp_MMwL{23K)BAa4Na z)%KVRi><*2FUI6Pb8$uH@9d>jRT6#c^Yd!g0*mAh+Vqv5R_R2w9mO6 zwT#f#<|8HB*@;leY8x4$$4$hP%an=m{6rB;NtQu*`unNKJA|r6MG{0#8fjm*KHj@c z1^jB1E+bo{?f9ppYRe#Dg96~^{;WxhNnxW>jjE|+8gpCPwZRrjSEv-h6}^uKSN_z!ri zdu``29;_*ERZ0QrOb)Jo;Fkld3)1UH&R8>`(9xig!&Vsbu%o6&9SJ%>ca4nFr zm4b{6SuyA+6!`v2x(y$eJNRCwLXi+m-Gx96Hvyq^WA#NCEut-9iu-$4s(}WbA%YM6&AXND$E`n@ zn@qNbQ+DAv32jn zp-y8V5xQe(5)6?G;jC`?oOiJB&LQf3-D@ct*#>||$vsrlF)EZyC-j05=rlQD%oX%= z@2((Lo$zw_G&8^{^gXxBWE}8R8A;c@nV(|EcN_(L>1aGUt0=s%euEU52uBXsmgCXm zb63bEZjijDrT{)tFu{@)nSE6Hs*6Es`c4MLWQF~l^Q7f_rQswl!7z$F#F1aYtR`q1 zs1f%A0%cOAZb4ZD-B;bs<bYN&G)E#5~DrJ|b;SYkdY`0xhL<9;E(H1I|+UXRQ9miJ@GG!NiYwn8BP`WBPe>1wL%A=qd*SxP={SVwl$ z6y&CaXZ54{-}no09nXz;g1o{6j2XF&u8E_|qE;#@sxUSi&L5px^)^gWsa!Gmo>$LN zRYjYr*qo~MXN*(l1l9Hx<>e1%VPk&9{mhj@lGoKm8A@vl6r#qXU7r`n!^8XKB=ClY z036Ora`WBY${E$$^w&`Qe59^w*|5amP`-sL&n{)+voG(GI-2>GpPi6nOg!?wsW$pT z0$TOJePD77C7UHS42ItnvK2-=X6N^nc3f`^o#2-2i)6yc`m3=@E{uc1%W}SOin`(= z?M?Cbfw5bm1NIXR>s-~v-hD2QftCF4*(a&}dB+a11r=GQ9298>+mJMr@KBb)(%=a#Uj@r#d$^pAIFeiTPecDR2`eT@Zk?Cjmm*I?&gbVeNUU1&Yadi=4wg(Z=lT za2v@lk#=y=jZ8SOr+Ps{5{ru6&+iuE4MhZYShI@;=&3sGhHN`NLjx$p#|jEI@vD7) zgb4<(nkqGUU-7)&CoLz<0A4{UJgbvzm)@>TF1AO|h^f^(MErgyyVI!;zQ#aH-?m|q z77Afhh~s%8Z@(19!lJ@T*EsW`fo9s5MIDIHEICvK3Ke~0ZSPa`EG3(efeyV^ngmtX z;-c1gGJoDj{z)o5mg_WHo?+7C8cgYv7Bc?)>XL~-@cQopqD2Dm|7k5k;% zxi|@y1y0r-aB=^szWp~V=YO`b(!YjM%XaD`D|+&ZRhvzH@9kDDQOh||i=}`;*%bTA zBBL94vwqmr#{YO>{Wwq8V+ZyQpOP|nia&t1D=h)#1B?prSNERao0&H_SbijuEU1=F z@qhw%=0Bal%&7~IP?F#%JIa4tMUAL}nRWI%a-e-=2Rvo7EI^9JYdWT_M>6J?|2B|( zBnqb@GV;aQW>VQ_b93{uh5UR<5|`%lX>$b)t}wu$lVdZJudvXA$f$>7f;REXrAyvB z|2h2>R)^i3&x(q35=bmySRfVnX@(w)DechL*^T-1;bC8ab60trJ^W18;p0GCrlmBl z@#1U;RLi{d@V7~KL##cYnjNHo28ls=q>alIa zABdYMe_j^l&_^<~o>_F-V(&pT7Cniab0v7VrDXB#Tbkjwg-)XJUB12c%PR0>i3c9Y6ls}1`Ew4Qp>#T;eD7^VDJ+Pjs-~y(%GH>+>2-)236xD zj-HTa0DY-Aec^I#(Msg?ifFtZ9Kw?#5jLp8E%pTq`|P%c1nirA<5Y(*P@*jbgnljpdA>+kK&4hwrzSWHXNpyel4c`On(xLU&islh0iH8tJYy;D|FvhU$}8wX*W z=eaq(v2|_59tkgx+Y0M_=NHvXlC)O`WqMjLax+?wKM*h+~Vd?SRTw<&n>+yiOp>aJY4872{N#oACkJCC1+ zI8Plr8()qk*vvlJH?pSNo8NONFPg7~5l0W`xGbM=VR(Fz3p6r@rSgS>=q98mJtF++ zxVuvoGmJ}eJULKlL4D(Y{kl3tdRYF>4z7K<%i(6Rhk#8hvD@>wq>Ei|8)A6iA(8lH zpVA|(hsx94?qleFc%#ppyjSsSroZKO{MR4yo1cgg)Q`ujb9>yd+yg;R=p1Y)AtM@m zbu~-XX$~J99SMnMgCuw;6;;DPJhH%-IgG``GmePR;Nbpv2rltCvNvB@Kvz0MP^C`4 zXXd40>FWES-WH{j#=+{vw-jMCKFi?CzXPz*6hB)FLZg^V^=A@YUqNnd z<$zLEh*@-wUo)a8RK)6-y@g*yWOJ7e`X!0D{TVt)PI0enO|+DlWF^xIf!n zIf$gs(^JB9)0Dh#F8bxzx$$P#Tui&E+o8{a$#fh|k&G*hfVY37YNnvJwtIGnX=SR* zpG;zRclZ8WP|ItkShc9sE^jNoeCEAm#1`1YBxE;oV|Qf#8aOf}yz!Kd&59FWd@4M1 z2~4?J+GYK)cWQ!x014c?`4}X~fcbiC8!dC{+Ou%yY;+)c}Qtnm~9756xYj#p4%N=btYS;<`k|)Q;D)mhq+z ziZgkgse;MX^5PcJ+$PI}Zj4n`pCj&E&EEXTe4HEh&_q-Ial`mM{wS zHw%UcZB~&%o*9)(%UFyghz{WLIC8txV&^NLIQ{PJF4Iy`5u_zm zrjzn(NbnfZE{PVmy~EFTWr168hqHe21z$+xGUezlP|N)o3lyN~3_kdN@leGm*ZqYd z)xm4-rrkdfSC$Qmgu6Xbg<`2r8vCO1M%Tlw_Xj3@d6X`w^_ra{1EGaTsWZDkOk1M3 z_?u4LP12S9{c4HxkWYey*EMAxPob`%Q?jSF2PN8GByCDVdB8MAY_)1U>231F^ZD2b z5=LlaC3(}NA6`FVS zW*2s!UUs*L9+t6qaMMUh24dg?-SHlj;n-M|;&}H0zPEv9RH_~y`9%9QrlpoZoM*op z2WJ3Y{W<#x!wliyy+3>Z^yB-zJ*I!QTU0g%9&%A!+IF2EU>*@)s5?pr>dh3MYsdt` z^A{J+_-{?D4pFwB)|@NbYC)MWIblvG=(C1V8ZenC8_&T`q4klxC4c6FU;2$mjF6dG z0={ZZHCc2F2+xFw2fmA>=IMj^Ck*swyaG$rrTtVot`MWc2=_|H;^G+mNL*~JFz__d zx$alAjVCbYWrd}&n!iDSsggXf6}adn@%j?I1suK=)q84*>|ZLy&?)r6d~Cgf4=Obf zf~#Alz@klU6?lLOqzDAjgnPXa0)-H}(B{H#zCZUXV1cS95eH$u-JjiEg_%Pef}5SB7~Ggxu^ei|2^?EiKB{_nKA4+L&baSj znVgcArZJb6=QTE<%KR(DgVqc}j)mGMeGrH_arW&GYS;v0wt~t_D=K`zH#MtN9on>R z`9=t}L9yC?BW7kcQLuEw00nqp@jNzYRtQnFuo5JmC72J!yFa~>PnV?ThMlc&1Q*~S zSj8rm-A~^wT&vcP(!QXf`S|PBJcP?4c)yhKBI0hY%2-kpt$Z*PnYH>r1xI{Py&xoKLU{9cXj`RO|?N9x@7fbxFM3^O3 z#gkOcdM?X8xrlPJ1?teuUAC))Xp|zanZka4CQp=;a6 zvMSK`3z;Loh3rIMNH6}(X5Jg7U56ef>1|qK=8N*JD6FikGecTy$$+3eO1m8qjTbj9QN?T#B5e%mGv3Fi zV#yw5Q8=7u2aSx--y`rsIP@gL$^Y&n{Fm?~-QT|(&M)M3l{#tc0_l6Wgy%#$hP`!!Hd^bg@|)eaz#n;0Acwz_GQQ$PFNle2>x?^w}H;k8(q?VYEEk(o$W`-llN5 zaE%*Z>^Gbxj4WD24foXpq6I81DP^9rKDx8~xu9@T7n9>=xElQ8B@Y=;Hwi<3y1y*b`49 zeeFW4NilJFj{rytAwxmHp18XXR!FLlKCyjZv-bR@He{}0+_a4F>XoW9`;>j?z|Z#j zRttn`1-M%o-ldVqb^-C1AePXyF_&&hAAP2*ZLFdtGcy?ooSDo_nGjwAqD`C_xjOe9 z4Sj|$EN_hxQbJ|(nQ#4gcxrCgu8r0vo90BNk>>q zUGNTbn!qp5+$7&AS(!R?#BfQB)Ex-7K@;CDCx;POAb}oXhFl&EW#a|X-SF(Yzv5rn z!8cPiOkO}a@Xeov@m*q!;LSzasi>DObkfqqG)(Ja#N$y3a!W*s@hIsFE)QZPi)Z{f z!H!d~1+6ss5X*6q*z9GztAKmWOydtbI1!5ums9Hot*RXOjhR2CXoO)+jcUVf<$WQW z3(9d4ogU4pgv`G^0t}9Di^E_p)y=+E*Ti zv|VRy7rgjsf5x~hWqaEFjinenly*(M{<#+J3slgz{Mr7$+Iar^&HUG~{=fN2pHpvd zcJ)poVl8|zP&A{UP2l(=P+6pztQ6rMVa(S()vsa9lypmwfeY+vQJ zx?M_>5myh#q-mR!V9RZQF-1;X{JW);?XnQ3X^T%mNl8WkzN>ffv<^I@o}lC4*7<^U zTWKj(Ln&lzY|JW2nHtiNVQm|Vm+HD((c8c}%?4;vAZIi!mfLD+Xy{W2fO_I-lAWMC zce=t~di~%r>hqNFp0X)LQ|dYP?HZ9DuX`{cy!j9Zck4_a$0q8Rz|)vZD0(SL)@WXs zq=eyIz^Iw+xpY#?j%!ee@c3K(O-{q<$t)AD{*DQQhl4P6kK@=-7mr%xURHB7vI`V0 zFN7QkNhe(UGGeb`nBdQNgb_oF0=_{+s_1zKQhsc)IJ1hS(~iXzfT7GsCgs_vpvYGkE`IlIeeeh-VZ&jg94uGJ0Y7DFgILA);4+ zoEODUXb1N=JvglE4dV{%{_xJvp`iV#eSpZAaPO^p*?CEwR*oM6#-1L;`N{@fQBhH_ zzk3i|*7+G3sluVVE?<6JB;(r6vFGxh68BQm;~OK)&CZGfM_*!zmh$A()HrB3kTRd1 z6|(NoxxFZ9EaC(bfdPfsj#iH*DF-c3zXR?$1pq-;wVd>?Y@h8!iEp!d-jSjbt$@MP z!Xt$mfN%Lg0R|c)NrpiAdJyE6grt%w@2swk8%Oaa`MtLDs_D)0rKg@+(&R^YSU~FL z^hFDfQhe<;5i9KjQ+ew{VZsW0?AA42laZm}-0s4>-Ut!f(fz<5p-`_7d z7ho3e4ScaJMHAZqfkn6_90fO9sR#&jwss;_Xjb&0IBcm9t{!n%Bv0`t;B$BF*jaKT zL#ci{Q>d1#ujZojZTRf2gI_i8HG~8#i`p}a5$kJR1C!T*3ZxNVBDciiH#fWU$E1_l zg#rH@g6bI?iywaN9)b;x_$2>l9E1zZlOT1p^u)lkhLw_ATem)* z3*-Z*q<*s+J*}K;rT|B)W*L!^x8BB;WsObND-dz*r1dU0waz z%?&pA^a^1k8I08pi=`(%eBSOnX(w~}ukJ8ELv^Ud?~!itQ*embmi|bF=S$xjgsBnm z{#l_PkX6c0YAMZ7nUm9#85ZF`KaZWn$H3jvWg0>>2IF;OabJ}c$Qx5mORqzuitA>59XvQn zWOgt1=iZeRjGPlYMsM+HM{a1MAA)A_Eh`iwGIR^>#mA}j=lZH#oZsIU^@%;4+BfN~_<9msN( zN&~}a&@A1U{l&g%4-w9X#ZSZpi*?ovG12a*4GA{;`=2>fX5xNLe%~pO&ykk$m5WQ^ zjyyR<0E#wMAQpz|;h@V~tQcv?r=`a~Vn1m2y~W!ri2?C18JY`6jeWZb!Vw=WS^hM=KIzrN$G4e|1Uxh9Vm6*K2U1UOMAw-H@1q8h-%KIw_`s zYO3VAUPP+2Rq6KbNklM=o9Vtq5@$!(`(|miq%>io)&MI+|NNE#nUoZ*S68ZyySh}G zu7OGhiMDP%XkAY7{kia@d^6&~J2`nj0Nm7$hva^X5WyA;!tTGghyN{;`}>ZBk>&AV?QT5;?_a4k{~>wE z*9<*BKcC;wknog_iyTo`Q&(5y9@thye*jjEV}F4*QaCt$-I6HTREjO(`G`y)Wn$pO zsZJJvA|90>hw{DPC-HPM5XS~l}x#~m^N>Gd|h0D z{C$;*DPw7w$>~67cpyA1C-9w*?a!U&19AaCY*Yi zF)@Z=68(LB2UUF50LI$3OKX}!*Y3;#i2<@m97l+V=k5n-x%xeCo=8hsq2yY={J*f( z({J9cun>X+ALN6Ald)2HJo~v>dvO_*=Sx4AlPdG1-S&xDgi(M# z?tOm$=h4RzX6Cc^+H0@9*4k^m@8!LKGsAl<2DF<^?0bEtoP*cw=ts!Hw3})+OrOP< zG;fel{Y~w_GY8zomFj}e`)+4@Zd1+pnZJY9{nLQRtqS*jc6I;;l8vnglwa@c>@Z|; zC6t$!8>-!#%MgmLix4XD*Rq+7*!}%Vjk;~l zj%5Y60i>Uwn!0-b(`I!=b#=cY->kG5!X zP--6+K}l3*8Ns3x3e&J`c-sd&RZs~7*mVSK{CPpLX{O#?0VG(>)QXnbhd?pG${s!SUZ51*%yr9ovQ;|vruKp8I|2;P+lyPu0cU-9Q+^?Sq~@EGC?_yL{N(5Q+%J=j2ydPKvdi5-@S-{9J0ag?5_*nv1w7kwn+p zrQPBS)kH8=hF=rzkE&hhQFF3rky{}idTVrg!rdxVzuLKT3;*vz5Fsp-15P66;>o%T z-2ZjHX^|Ns5FekBX?k1G)&DX#%!bL<#s+wB6%6(^Ho_on|M9Nn>ufp7PP|>7X6_Jc z_v_KWMPEDTQb%_eGBJrVk7{g0SJy1`HF9BRW1|wu&tDC#8W<>+tk7p;UkgQmTFQt+ zt{Xf&wNMi|^G2S`m`;X1_FdU~@sYy?D*X39vqcC|B!H`%=;&y3m!96Y(~VDvug&A|g9Et+9L2?035Ig?hDT*c{ z`O~&{QtSy_Vm|uBB?b8jpx^x)7ypF-Hp_8u@4-jX)&IW#rb7mD_3BknJ3NCAB2MCA z!`s)X>9pljF0e`AV5ik8(KJ>;ifi9t_=M7_T$DfDi7N($&fw^y)OH!@XB8SCql1c3lA zAm5^T`-UXJLChT&(7kTl8ZKeI+PL#P2FkJpFj&%`w<_=QD1m05X#dRf9Qd+x!yTs; zj;|CpM&@gdr^`#?fg~RaEJ*`!W%+C9b1Y<#rM4>)fM@=M(+@e3ba+@^>e*`Az1*+T zUF#t;y&Uun;POQkHnxQ34Vj6_%)Q4R%pMxYM;U!mxVf+Ba&CcMz5G16wcU=(XUaWLsn@hy`GN50W`nW0 zx!p|_1B2o`USP{2S{~nKWK05(G3S9@4_(}wSo3$TK4V$ckM)uZZWg_NA2H}knPY5a zy=`_96%}P>+ju#|6S3LYx*YQMtr)1w{nBJZ#AyK$3ybv;S_M}#v1HC)_Zk(7kDJ4q zq{u==-`~yyd`!{}4Kwuo{Nn@K4B!^sxIM~rajit#uMn$o=SHL%He2lmXtw6=pk5Hs zcLWGCX&D)pn*{1o^Yik$i=WWlipy5C7ZVppZ}sCVHb^fmmb>)i^GX}I4&q;3)qMQWyU6_D5&4;SmkIB#$x+qOj$( zhsEuxI}JVZ8aA3JSpBwT@55Y6VuR-l-N;J5p3T}SX^p1_A=mCo#Ro5wu77CqW|Y5U z|Mn=*^>cSNT5ARypO?O7<>M7KrTTSvXn2HfpWa-&Nd{J_v6Hzsnc#ZbT@IAx*^@g` zktTDeo_XU+*DhXK9($zQKp^5OlweO1C*COI%Pd|Bbv^Fe=4l{WE#k`7x!u>G+c&x5 z#~)s0m()q*Gb%-wUl1P5O(^~nm(+-OV4DwbPMA>V0(sramWSS2`Ulz_NqNnR~OkD0$>f7!=ibka>@)4xNmRHNW&Zb zBWc|xo@r3xz9?IH^7hQ3km1Fdws*o6f5D@%t*Al?p(Izi_&q3aeG@^5B-mu}Y2ZZ-y=IZ&Edy%%02jOC?R$nn^NV zHp+;`T%uGYnHr0)>6~i|-yp&kzl$DClSPy!Kx?Eu@Jp+&#y#di39|Ktd1X#s#F#VI zEw!?Q;Y$mj)0{KX%)L|Gx%T~hP6`w#huZub4x zT`xjrkm+10dHH0(Q-CK`Zvm?8rDN!*D$2`0uh{{@3bj=sBU|dO;o%R2%i@`Qxp{dZ zF(ks}g20j)WWGd@a)9l7B3dIwL6iRhB#@9i?vn2fI^zsiRFsr-GVoaAlm^l!gZ)Xx zdJG-{NJT(^!>IR`o>@2-G^s=_*P>N4P%}gQKTPK7o!sfLf`w?8e%0-b>Avhoz`F@ak2q@IFR1?r&{ytf@YO&1-#`GREL)RsJcyC%vUceP8TNfW6f%b@haHQqT>;*h~d>t43TG$VJ) z>wriN%Dn<9s&O37N13aJM(Zdc7bwt&olP}zbu&I7RVs%Anx}FRgWBg_N zu*mp}VJ+t0c~2IXzOZjvw~`n9w|avKg}i;M#MrjtZI)E(!1!EWU$lj?4=;r5u`cTC z$dA2J5xxlubUI9{A-GguWV3i-=M~m6U%pP^; J{M8>czC%+%=llY-XO|IZ@fT>a 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

k84GqqWMVdG{%MSv6?b!hbnvi=~Re|a+X3iZsG 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

yO}y-|42) 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

Om^ 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�PXf3nWxf1{RD9#C0s8sLo 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 A`~Uy| diff --git a/public/screenshots/create-site.png b/public/screenshots/create-site.png index b5ff804822b4ff754df7f97242df40460e1af500..8d12a962eabbe4f155fa03894110e3f31c7b9151 100644 GIT binary patch literal 504790 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

8Pw&JO2 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%0DhB%@E|!`;hpr7JOTMvC;*fZ@otANJ-Fep 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
(tymf#p$2n9i2W08D5JcKK<9R@d+t|=s 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 literal 730130 zcmeFZcT`jB);+8UBA}vzpi~tR=_nw*h)NYudI#wcAoP+@1O=4d1JXo#4G=nn(2*`6 zy+jB-6ltM{-{ze6oO|EsP2|g42@eYdN&lmnU zCY?TeD<_SMH1I@XFRSfz?i>~K+1GhFmHR)>os&E#_x!1v`}x%=5>Gu%FM)M*wnKi;omKAP{fPJPCGRq?X0ZA1^j$~AH z`e6@W%sF14cbp>=NiXF8l9|a&NkDk%+8xQa=gt!lF4Q;Vsk4IwO1w`Fb@ctuUi$NA zf8(G*@8(0Q_AjEJ!g0njrgD%-`1=+0^(;F7rdQ6clas|2}%9q z9+oW{TfE`v96K>@glKone~Ccfrl&8|=AU0<{ZE|rj-(NeG-I_+3VK(Xv{}2@ATAx& z7y1GO>KviS6M!-%#$NxQ_5K@c`Y)dp_=A#2N#BK6Yt^D8_1mSHv1Iz)Mt|v=o%0>zj_6xd zK={OJ$o}R6zxK}q%kt@xX(Ocif&M3wKfLUho}yuu`s?D{N)JBU)c-$X%-_`Rr1lA{ z4L<$PERQ)-k}4mTxEow1`Jb`XZ!hnpc99H&0@9QJ#kzit6Plym8X?C{Lkc4PBYz%u zCj$K}mFqvVHh>>*RqNRea}N;wXRK3_*Vhwqb?rZ5n36_Zmo5z_k|}r4{6{YSb1ty4 zS$x93)Ls9uk^f%%|CurVyYByoyZqN?{%bS;E{6E8&HUG9{%bS8taA8oZu)O-`gh&w zbFQSqU`lgAdU-j2O>J#@em=Xfu<)0{LQWkWoiDE*(wX0|gZ&RK7U zRrWGDdHataMwc&NZdqDdnykIe{@|AxvQaA0Rjd(`GO5yib9QNMt&nhK4Ut0eC)PFh zmn40rqzi>YIrOTEE3znyD_yX|OIU0^;l_}#+MniHV2Tk~DC;#DfSw=P_G_efZn#>B)Vwor>hdi+nO%y*3S)kDgAww#=tv4w?&`KU`flZ_;9=Sa=HKqN-0945B&ynrcyo()a zudto4USs<|Jo+zOd$+!C^F1x_P@Z~;<9sKHa;_F#aG`ExYZ$%AgEEnSEH@(oE1!_9 zmzS=|OcPQ6#00H>(>@kVsw;lDlx~7)3q4!FzHnMs>R)zgS51697z--xrfRh6+#S}g z!{jqZD{OUb(Dh=S^Nxl8pgN84q^qO-j3*}-`UeLof~h!zJjD&G$0+NQq;Ts1nR)=- zUJv=Bi2Dmm^uK~f!<#!i@OQgm!YesvE-2O(85ucR&JTV9|20ym$Ecznv9s37-W&bv#^8D`ClLDZ!Hav0MUY3@pPVgzVYU4YdK4)*HOi2 zorhCQ*Zlul5B7*@G6CCh%85!a{BFix`wm0yFT997!Ug@}=`SyWjpsXK%UK=?3f|JK z*cl2_|I@oJsS#D!jNMrFD$yB$nnF^4WjNF&*k;q>PVH;|#1FDoHgb06djg);6VdoH zBHrQAzJufr3k&=HY4FGt0{@jK7a`zuvdD!RE(2QtB&fp2#cFJAZK1U3dR!YP&zb&Q zfUCN`JM~o#m@IioC(`c<8_~;1$CJa|z`~ETEPq7qKi&N=9ne|(N~K*}TeIyS7@z`D z<=F72A>DiBi`!ORX1d-@j}YrKhnrDe%29@QMEPslOcGJy+|cN zK0dwMynK9=&CQtI6}jBP*UPJuVqgGGn8}tGBAkw^@O7K~Ygfl<>F9#!MO>fzoQBCS z8JuYCj&bsE`|VP38|bMr+`gTgAvR3&PoDHr)yT-`4g^XKbZvC!Lv~WCJ+>FDQfzPi z5tRSt;!865Qd*7-4o2Gs)3}U`t3((W8XC@5Y1YdY$D-$MP?(b8450 zG#3c#lO8KfbjGq9AK`4rD#Y^6`wTt8AykbF2(i03+_1CitstpCEJo7E2QV38Ac$@n zA$L+(wZJ~i$ufWb^zR(dtrL(@aeRnDM>MU{#3o!C0P$_4jH`?qc>OTox8z<^J!j-4 z_w=om0tQI7G$$t~yHhKOmqxwB*z$@B^V~3f{^7>P#((ZDHq?`5>~*vTw-2@qLd_v) zI(qu45v!126-O%0t~Z2Pfl3AnJ)(R^nFaG(2?%W8Q@!}o`s?C$WY;_Z!Jp@8R({u* z8epAwtgZlTKF6-rxMUzDj5gN#+u6=!ip(ozl#jqRzae`^tDP)t#s*+St7|zM8mY_# zPU2ed+S*!ap(jrs>||u6{kaXr5(KQzxsjR`Wg#fG?7g0tTSdPrO|5Ew20WH5QDVs)eGJYasI3p{JOJa!D6|YPv zfL`j7jw)n|n{pEo6&WDeY6GV^j5ZnpU$=3-Z5t?iwqcnl$)U%Bg0Bk4DgF%MqhQ}1 zgRwzGj-xjOO<7Qhj#0Y*XDInQ2UjonQogTrULMe@vY&~moznemK-#FVnEkEhg1*YW zfv&EuS-t^iu{XKa4;M6))hX_e%~ZKEmQOya(C7;qDGCLgyX76ZxRwy=@hI#W8_(jq zU14EY7M1l$AxGIq`bmE{tdaMn?pyDA-Tkd7Ux%;Z-aiIl=gOG|%IV;dsRos>y`i=@0CU(u5&&^}zK%aVlo z@q?`Uzz7+0sKwbj+mg|4T`TryxbgM6p5p^A@Ig<)ghH7A&PxB8#4mMQ_{MY;dmaQW zt*j*3Cq8@D9DAoGEiH{?ZTT}G3=kF(VQ++}3R^sV#t+yDHgh*TG*nSbopc05Sq$?d zs;#9qJr7M}YxJa0ac>(*?+;n4MJH;tmbSKKSd+kL^o-1UM$xvC?VfjnFZZ*v*Z_sN0H9|9#yeC65a z-Q7ss#sy4`7F=JlVs8O6-rV$KlEKWd>wJj;h2q!VY5RGJOCvnnON_-25$JLOa_ZUo z#t*fDj+>~H`F(Vwv8!HKKMmtA9Q=$R(kRfn4iq<^ zc>3ZvyM+1c4?`N$$J%77~lY%OVLP(64M zEj5bY^Enmp#vvwV>yOqGeFVh9HU|F%*7e>BTh>spX0E57oB!&XT_NtD0^pyK@ZUc06(h@tsEcLSG&@kH zr?^;Th`JjP5b&VvCaM3@`g$+E@OZKZ6mS2m_Nt1~08o1YMIgykbn~vt;VB&h&NkFOHCUFyC*#w~6s^cwKt5fRHL1)~l7n)KZn?mNUYAjxp@Ihtfx-Fyy^;z@C?rth=95xv!e^SwdQe@-_L_ zMCe46gqK^go+`0AgAcaMN<6kN1Tux5Eh}KfKqzfK|Fb$IfS~28U1(M%xf?-oaB*@{^{*kn+KiVSO%;}d z_HuN4rlE`Ses=lFm7#IRYENh9G8q8x6t3ClX5486D4|;n(+Oq-p{Ez{9W#)Qdqfm= zlU0u@zV; zzm;3l`x>84FYqP{8vee6iXG!`0|Nv0x}~OagGX5G1Wk|MC2;k;%xkta`6esjcUONe z>x{TaGv3x(f1Rq}h{sDX-U{7AGdT1FNKNwUeTZ}v56UcA)&CqnyUUgaS(f0N+h(=l zo=_2+DE*3jcvIo^hkmU=p=-+8Vw5m?5gHgnbogQ+XUmuZSxHg;wL;c#uxK>*{MIkg z;oX5isMh$^0P@5FL&Xr61{n&MC8d0MvEz%5N|gcWodRywz=sKJ#7ahc6oU36JiNYE zB+kyxEi&R;GeG)F9^PNRTJy7sY<5}MXWTiE*6kXhit$RYp{Jba&xQ--`Jn(U4}{R= zRo3`R6N(~KO9L511O+RYP%F~OgfUNR{9F57Z(FVmuF5p*57KKv~(_`!aP!FpB+f= zbeP{fsIt@tiGInx7ChnDuR>icU?m;+3#d{1TW6`-G!4RT?IsEo(j-B&G&FhT@E_YQCx`W@ zwEg3(xc!kU^P_@#Vf`xAH&&>}{M|Uyy$@D?!Fuw96H#$!Mfk527EH~!=S&}tJLHv> zmn*XKS~tlBHa_iak@tl#F)_u~D(+5zQA|Mai}r9)8;`QhRqHH$e@K2I@*Onz;2l&* zlj)n*kAuF`HTRu#W!uT>eEv+kdi*Z9yDgakg~u+o4W{5i1h=~ph!bASAr^Ie-f{bD z`0()XehZ6uMf-sZ1C1|b4vQKXg2PB$@?TL@?t1u}GxIJA&&Dx55@J+aNyUt_8rZ!5+06*7jRs>(VenqUbcRx$# zZD$E+a`kYR;u%od3BO-ay!Ofc+t}Fcj-2}Y&6KaSI6DNj*?HL`bjz*RimKixB<~w_ z$N7C%5}J=0&s_fd6N>YEY521({EAPQh^v~1#M>g94^LsX=-ZfIkaMDUx!0X&60CBs8Rbb z>JEocBJ*|D&Ah1xA?{nzK4L&!M~y@V1Bvhm6DV=~#&bLI^rpa+v#N{MllFY$)}Z-v zjP-n=M4eFmPk(L=^2GJQag~Q}4r}eVI#|p{MA%6EJpsTiv|hVWFR!w^C~M(9ymE!0H;W#+4_(dRWG1tYtbju2Fj@%g zl+jZ+J@*+Rhb9shH3OXibmfkaQs3G%)aSMU`nY-jcoC%~S2BfpUMp;PvZ868I&o7q zz5dC4pGZ2!ErvOLSg4 z{pGQfp4&azRil%N)WFueksi+(YJdcCADa*?r>h*4t&%n=pzPHp#B!&Tk@=if!Se1? z1Go>Fk5Vtu#;)@H%8w*`5bt^VO zM5k1nb9iTF$Dhz~TWn}zG&|?F#txRPhg3SlN;x%q3HDVQ3~;@AG>nOG&kBXeu51vc z$)GHkojVV8DvE^~?PJ7Ii*pAu(TVCmits-W>%aX9(5Wh`sAvPW|28M*n1m-Qi56O&dBmX&FMDxbpYU3{r5Sv7TfYmrgx&Tc5n0os1h@`8JOK63i7cQn#SqKQ*NfO4K`; z=k~cxt!M8*|QttWfmPG(~o*w+`ZNIgU~)!S4`&FK(@c zmD4()R6Q&6$X=g0Cgo5Z4!4hxI6|FaaXT8Wm^K5S69J419O^X~Q9+^X>3+N|;bXov z&)$v(etmX8!B9MHgMPyun&ji{6io7N&++HRDV}jNOF)0j`TNTn{Gi0ivn1yMIYszT z0VaU9o*rh1@6_1?KKRM%3nro;FF8b9SHJolrSOzE47?^)I6gt6N^g)>S4!sWH17g2 zCETqJqs*S#Bd4k;Xj753f-a$SPDq)UZADV_=1a(8eRlH=MebUb)*GJ5j{|jpRZsIK zaN0QBo$-i;;4*p1YIGBbS{M;`7_l{EC2V9dhW#mBO*`@>cc92sOV$^lxRjAN_U8&| zl>Qw1TrmIXc}Gkm#GhlQC<6SE(i-NtCXL`uH_`rPK$Rz;*K2`kH+~@_1knxB1`C5H zZLNz9td(aVwP-7riyNV-nk48hjbfLwYZ4RvH%6uzH-`+v+S+C~%D5Bj;*r>2fx~zt zh*WY6EG%&37`K~g5cQ8I=nYOiu%%_yjiSm^O?z`>!}pA=LjxBA;-^1u!sBm!(eUXo zF1e+tw;6DlB{q!OEu<~|T%$W1qslO3KM6lQ6uL5z$e-e|kgz#iS)Xb3VRCN!H*jkq zzI{77F`EvqU;Cs8iIXUmL{Td)Cn_}u8#p^GY}Ew30fqJ|`&x&4@8m}MO^fg5Dz`(Y zx2L6>KUJt-7*n}54X_h~&U!1dCVfJSa+^bNye{)Cdm9b~?*yiKqgn>bI3TXO&F;c| zrphExtepF~%3kuK%W}#gFx2tQvtq<36&AnX-bBH`$awsN7zdg1C!=mdANR1#+Jd3b zvv7r81PT2{TwLnD=&LW}8vCtw1wv)f=po~>I9pZp73Z%tpM^S3z!kJhJZJi$)*#F z2c|6MfCZ56XgVCQ2}Zc2)Vp)Um76ubwe{cMLbmQ7NK#F~^w|qv*G=1r@c*M@^H+gS zH?i+cc8!;ph9*igxdA4_x^lR`|2iN{C^v~+Cb^Gr#F6g?1_rXT+#jUWsxt3c>2x4{ z{1TV=#P-wld+D{;M#9Tv&?HF~-$1sX0BR{&rX11RjvcM{f)3)P=`{^J)YBK_b%8t! z5E874M=Wl2GgmZM`RNKEy+D>KvhrV1Z_ft1GU9(4YLaIoPopI~oa&Yp!AY(;({mpU zx1!J=DeqLm=fyS-x{v`YLwyPLR@qJq@a5 zMMLc5Exv(xT3`(&!1`e`{B%FOlyM7`#gBUW+cFtdT*@%2-L$W@NmUmns}}TrbGKJt z{{uB$bhv`j*Vf=L)^@Tmx}a^1@KzHTC8lbfBc}*Sr+?r`S=vyCjMF!fpD$U3&2i{~ zN2umkV%yS!27-KQA!>#I1Tldx6p6CZIQ$P zWChg~oh(iL8fPnjS6#l+D_saQ7`(BSDZFc&Jr}c#>dO|qSd~3GtB)SnJ;o(DrBJdY z**A%&x)m!6#uO3H8uW>5j2%&KjaptgqIHM)vFqyS&?t_TaRN>8qv^f%tdrj*`3*J{ zIW6O6hNU6ZTBDzW4Lb;Sy}i^G^z7AIx_mNkaeIu)ief%|prDR5d9A>ugGdcM@Wl02 zvOk2^VFOg|7>a|sEMlj0#Yx9n$~mE$HXRkiHHDcGZIq=#+uG+0aO_h>9u@dlp>c!%A_%(%V2I)#RXiOvb-QF!j=pBfYnX;3+@35o>oORLZGr&tHhjaOC}G8OznPIM z(mji(=h+$gMXdJu#zUCb^4F#f4YxVW>ij{~T$SE&V}}Ulluk1QLlsWEyw+`C*s0B- z542yIkGWt?TPp-RY#YwC1e+>?)9ZyawF2I>^Ny@g9}bxkJ9b#tqx#s=lYQJPaE)H? zmz`2uM>*R}V;o+G=A)BFEQY^*5mOSpT~Ztos_2uI^4Np4{jY|-fATh-V4^r~G<_Z{ zE`b1@$87cusC_lb*BHM@mcGmydMw0Zy@kjLL!{PAcI^bx$QdmVg$XSzWkmxjq(Uq7 zw6GoO1Shzd#KKQk0ffhZHK;WmEp0G>+p{+d!Cvg^RhV9_N<00yW9^(I$JvkM;gsgX z1sT^6dv%Lmo6E|lsLqI(TZe4|_2OJLOHJn4d^Qp@?i{JUwKeW#&FeCb1oQ2UH@Oc|%^~J{wSUc%L`U$>C%d9m3ZRKs;|Vv`rMER~Vr^ zQZ|9c<4$P-0vWm|jNchl4kq{f;icGq0vJ`r4Ph;bACfio^PJ$&vdpb8w>q(2iPO46 zg^?AodvoF}$nXfVwx6a}R5k0O{Z<(?$Xb6iwb2T^T(h*nm=hwj5N|R|k-D$NVOU=< zBLo^Q_=xE9o{Z_!Xl`@~6>(b+L7hyXf_?p5BeOoUM)%fE&X**zy;7UF?3W?a6REeee3ZCqVXH;=P6)Zpv0^SAT6HU< z96UUlAHbroLeh+@XQQU-|LpMoWuHG!;PmoyWu-t(jW8&Gy41`q$AAkK4q%7jLp5{h zI|+8^dZy0W$HV}nzc!>-u){IHJ67X@?bci6NqSK{{bv80#ULjmQ2Z#u5GL(mSzb_V z)hRwyF%S?@)>#>*hXGA?_g<$I>gZ^(d=tat*|tWPAw0SF&u8VYkl*8^4)Mo*r}xgf zKxct?=nZrVDDLPTmNU77+eH`p9f0z)9l%BufHo!==q|WpbSFb9$*0e`(JrC zJU%{-gY7 zZ+xL$jMikiKQ>HWGZzKpJN6t3&xMBrF%Rf>99IE>4Ahef5FbD|JB3h{?agy|vb?yg z$l1>5Gx=Sb^Y_F}btxlNZ@FEwGYo6n)v6F?7rZ?jGyAn@=If%XbV)qX+)bS?nMvVs zDnL3Ahe_?SNo=_WF2*iO9_m$3?k_q+F8i+r3_!(3{6w!jGr+e8=ex=hhE2RgRxdPF(=#w*ky?r_1e?-A_ zb%Z7ZKuVdHbYU==;H+!ZQ-Ra0VmP4s&~+C_1jaOPpaW#4y1iui`!RfRjagD z6!rv@OKm4ANYWs?i*=i!;GomvJ}m9UtnxCteK7B`xcGL0&j<52zRSez05MwZ-BEs+ z=32;UdXbGK*;!@qJ(_ZEJ4myxW=8#q-Q+FC{RU#7a66g`I5~soX9&N3J9*>NwLDFF zw?47Gw%rjQ-d+He4`q=Y0UZ@(LD%2C4e)c)5QPoJwK4V~IBsrs0JFXMVRhHmH((t?)kB)i- zf_FlgZ96kpX(jECdjVKD0eaVsk;%X#xloGAt8O>ytGwacXlM7ob`4W^pQZ%ZcCo^I7 z9EV4H5;>caHA;<;OIIwCUCaj&8_2!-s@-ATM4S&0xI>IfMvEo(AzVj$Yo$ikbi@TwA<-`7--&6nEHJm#%y71;QFkZ_0$=_ps$I8+tQ~@D6p8tl z0ba~3I^_c~!{}rg*s&ex#|l}*%hVm5%M*ct`43#e!7_xrTm6`V^KuAZ7M07Ye0n-H;pIgo6 zD<^)XLTYXmg2wFGL{HhqE1xh@y6ZNs0M;&z?Pd#K%Xce!3Hq z=SA##a~tH^2-(JZ^j6napWsA36;)Tdy&kMby3qL?Zz={B7^2dw&~srT8+9PZ!S@&< zvKmB7AEm_Oa$p2w?U4~j@+Q#Jaa;KawbCvzeo=SO<3p+J-h^RFMJGS0fekV^?gd=g z+i(bTMiJL0dEqd#vGBUOWixQyCJF<_FAORkVMVUSf=*}{ti5(uh7_~+5Bhwj%i!aY zcso9_VUdOSbPVeBNMtBYaj&_#S@B3khIIOOcCf*QI;Vb$ekwWGqM)-KT)@`uAZGF? z3b{Amd0_dGLl5pq;lF8*lzj@xteNN}SYWetQ4GzSKXjtGBDinMN&$zQF0af#0KLrJ z%LTtyc+{(>7iL(**21#U+d5q07*i@|ilslcSPc66NH{*M!H6K%U_UZ%B ziCBJV(tY{TeXOYgM^=*GrbYjlPzqBF0d4@XvVnedK~vZ>>so=^z9?4PBO8zjYTuEm zej}(4^gTtlB2hFFhyCGu9&6zq-RX%bPC)G8Uz->SD=J#g%6`dWY1ba+bretzOs?#2 z!BE$xrh4EL&QG@sOaQ_5ZybI=YO-@ax%j@3p7#NJw#&$Nt4pIFk>Z9MFkGN`lt-^y ziBr#4#R1fOcA3@hQGfgOXBxK3EGFtc9o-LTEfJdbvh0j1&$4i;d#ONZ8u;uP6h=$_ zO`+UT$R9fd8gvfR*E9FW!aVg*)sz@gaE#`8^p%}1ul?cUBr8X>))4=AD;aBF($ zB;6k*0i~7(SKUuPbA82$aKYIRfVS?L~Y8A{Aq4pO; z5p1MLhMuW_{%yMaf2&Ha=ABvW7bFtt+EZUY)d&Hg*BA;0KUUb%L3R34%Pw@(>#U^8 zK{S>VSO=-EdGL6#Gm%F$2-G`x4JH6xj_lUi*4jbE#H$5Z_mSFZZ8yFWVW7sYoZL$P z7)n0#kf`!zaBCK?=rOFqlV~%q{U-%^L|}4Uz#{DS|o8a);AlSdaMTY zl4xgF5k8!~f|!D;wTg)cA&KO~jHmlDCS#>$is1Q9c6bmlvLgU6^YO|>v`=huP~{}M z6iR~LO%Cbr09DZw>!PwLkHuugBj?}q@4@|7U+oqIM#@{9!aoX@)>4}E->B{#w$%O} z=|5Ng;t~3GdTZD%uJTr+63&ZlTO}rC*F>c6RfNZw99eRSge@_$wipd-a`bE%Rs(eI zxV#CI!{L@^lH2pU!>&}N?v0d^Ie*`*-!|CXSX!G(ep6=Fwf+iO)&@w>#>&1oTXROQ z1qK9w_6$$EtwY%qiF7{UmhRX`5Ej)RG6BM+MgBS+AkF~j=ft7^1-JF6MD^yRQz{*l z6j6&C2fq}bzstBWS&djGf4|);!tD*{#{`gV7)Boepmfk%q@GlDD3)Vr!N(i!^X!K7 zKwq!C!aB1S>YW)1fEoD5L1l?T2vil9da}BBR?Hs8;LNXVckHG>*KJ)BOMnVK%PTj% zu+TQVqpT9`-OkWABKMnxEd)0V4pYvSM(dcosi$pS5sWq>)ruCGWEfi!_7lZw*^sJol;VBO926?P72mrNy=sh z)UJ;B$oVP{koc1;Fyn{3um7e4oc+3y>m_Gb*XI@%7PgPPylUU=s^CK$Er|wrZvldM zj(cK>y}d)R5QzEm*ihga{djEedOq23;#A*avDTE=-V`-J4>j`Sm@jdepE=>zI+8kbf8832P`$Tz9dzxTk= zgaM^Vvl1vP4u(KzkVs>|x$}sGtLuxxpivKwmHK_C& zo&|3Gk%fc%1z49An_!p*sn)*>SuV zn>8Axrt$!^Q&_0P{=59y5MHI!Z{i0(EF@|Mmqv%yf%DJp@{~MPVQ7KeW8A` z1|D|!sh9soL{&3Noct8Oar&s-gi%*Ta{h3a*0|@>X2w`Y_UR0x!Oal^sIARZjjfbs z4L&+$r-j6Jmw3eRwCC{I?{~K1ffLy+v$twhQ$EvnoVLVaYH3IXQX~?kELAaferk$d z+Rg@HjiBn1Wl|SktMLp1ohccKCgrZ9H=T>)vhy0sxG4x*qfg%^3_}YdQBBN z#HJH5QTw13RF$Gw8MCJIOZ z)a>%L0&6?{fou;dF*s%3UXZ4qcsjfMd9UnL{HA>IG&4+3INhml&J;+`Fw9t=w?@V} zq`4W88#d!A>xA%2;dq|2A)!~6ABTtIEWu!~t9+qYro91Vxy!npSNi~PIZCkiHlrDq zl`qM)(Qkdf+X8>r6=>H^RBn7|4ThTdct-%F0$<$-ANowcu-~a!FFbPy_ugg4%yUcd z?1|1u5zpN5U~U$xo&v&?*53=Ex%p!4&K8# z7Ks$1AIYu_8qo_%jb4n0--d`+X~HIXa)n>}CyYSs^S%FINgoI2kH56Z?oz@C^5 z`eN`U*2Zn1QXl8*E~v?(JXhs;F#YUYK89sOz;2RKA&w(qQcuWxQRKAX#+N-{Q2II0 zJ)?7*EEyAMKG<$vF=0HCWsWGG>DjOr-E5&?vW2p+2laWS~;5 z6y^b9&GWb;wXSe^U(6-rS{)ge`_sWbdGN*;cYrfSX0txn@xtl~w5(O4AEou2{|%1` zP7(qNz+E|L?K!qIk1^PbLhYRCD5<(1IUf*lq0+kRKjqxvrD_)l5qik47JEKhUpz(c zLCsKw62?0}X9Oql)>VdoXIG4jDCIp7Z zfdNiIPa-O=)!eD$IL_Kks1MJ=bc?Ugo5DZgo(E?akluN&#}}mX#q$*@+yu5dg>#+L{uu^!vT=ww3N6SzmhU zj&5^iy+ZQFQO(YpY;C^3*=pI5iP(_29F{sIf;^!kqfGSC<}Ry8{Ughko1x}<~ocFQR$NO2o5 z*K{^N#T_1A0#44t{-Gi5!~!_jt@v!Dr%>O__0o5V=tI$>oy&s=H5|vc(nUKY@v}Qb z(?c*ogR!#zEwHEvJPwEO7sI{rgGwT{s0CpymMI9fa5E-bloP+cfqxPvY(4d?W)%pm zK#Le01o%o#AYY%evNwL4`|I$@vioQ=!;?Z)m2=}=2Cg2S>rSVlg`1~`@R62z7)o@w zP{dIOlmG5a!3Y$Dd4afS!mDwhLs9$*`t;cuHxsSFv-|TaQ+WJ%6*(sg(9zCvf;~WI z{^5Zde54hM%=*V=>(`N=(tP14fu#PhGnGS1ZdY zIwnFcm>;z5gQ~PKp+$1hKV?;krF!waH9)J8f&UTix#G({?ne(c!Cx%-Dzqq=T#2B; zoSk3%R5JGrs4HN)_zgEMC!xJ*r^=EBE>D@h6sN2@-tDB?)pbwt?Ihm5C{05zMZZQP zWD{JcTwY1yr2E2yq2@clwCen%6L&_)P@{hhdWmH5I=b2j81R7?Q47RVcZ4?m$=f`NluQA86Mku zBPNDkqVad$yL8N2n5~(8zhxwts`&KjQ)k&;i`zYOFE0Cf@d~uQpH+Nz-ST0H!L!gs zqt=6y4KPe(eIEhvGG>k)%+v}1IhjWJL{y2djwF7tK<_DieU*U~VNJ{s{F| zF~!rD4>a6eZuR1Y|D;nNatrvzj#ALaR++7n1?T0x)s>A7bP!SX@bKS$vM^p)Q190o z-vG6nZTDL}=@}9V`$*9j8O-&G15hhQXY`R{mVshY^4iDu2el_g6@ol8Tji1YKyNH%6mNT(VwFh(Y!*_GPr~2$Sccx2K|6p*b7FfCt9tCZE;oVd_ zMTqFYuTo!sWAKoz{M}A3_H{=p#_i?ggef+W?)wlyc>3h96L3f0zQx$QV#DdlrAW=; zi)IdQv`UW|Zubkn@SbFOxHcd)j_O6!z0|=Thj-)TC)D6JMVCmtu~Q;9DjDKsezm~? z7W_l{oQfEoi=1lKWIjV26g!a7@!g*ei<>yTgK1B_XFIO8k-^Hv71t+mD&@VMi0%Xk z?oZuxLa%OE$`U9kM-FaAMMVunOs%RGtWVW;Vd1DazBZt*cTWPp*(28lQvJD-&#eIC zO4iR0XnrGfxYSr=M$AOf*Va=z=NU(AqNkXqtbBw^{!}n=jWk*rf&rRVRj~n?DHG11qOQ(d>$VXGOu7SeEefV1 zMN=+e9>ug})Q*S!@97)8le%xn?c$o)FP37L3hNgDMM}jk;o3qHeIF+z(7MPRxty0p|0 z+T}!den^~$-<7~3RqVBoN42(2ndR%XS7fB5-*0%PzD#_A9ET{D^IW@hYi1N56~<2q zE7Gs+JXlNx%{_3N+O4#14x@E59@qk?J{C>{(aoDT38LAqW(6?Wf35;<=-dfpK-;hY zTCXixfPA5%WAt9)a(X!(#SEm2Kw95%+1&=h-H5AZ)hP*gP!SCb1QFlN_C+1NEy6?W zZbxY_gl7;o&%TpVBFp#uHtBJHRXtY!l8#V%;e>_vhxhL-BbH}EM8jDMq(tGA>i(vx zuO&5L`(~=unyzXeDAf+t3#jARLS!;Myob=40E!qpY-x5DAQXn%XD(W5uOA7N~Hp&40#?a@aeAn8Ihjt8!zjfg` zB;x+PnFN&ri&s_NXFzp=#tz0q*238ZDmawqp>ix;LDq>xaGEUy_NW`yx z_h2!zM(Aoru>}W62*NQ~p^dfUNQ;S41R`a7TzkFFb=bi`SB`EgX*YSK_wcJ5=EDo?7-kSP zBYJImOxYGbb?DTE*nG9{#Jf^-;=x#TjdxV}8}VNn<{Hvu?j)#zfh79aMB3ZAX;Vdv zk}k*?IbnCCjm(6+)`DyzH@uYbo8iQBZM0xVbH*DZw&P{jQ4$)gLqM{4W^9-A{DdSU zTgKF8^SWn!7V~iPKD=sn3lhBB7S6~R{<$BGxlKgCcJ-Uut5=_mkyjUl$9VbukMEV7 zlHRyP5+RvPa+!wjmG|ipy1L?MGaRfoGwtp%7wOZvI)?rV+~q4nHCxHCk!Uf&@Vknt zs{RDgyQc}lyB;Ht&7*z~_YL@auaedJSbGtV#YC<`HwsL;+#mQp^F4RpHn--%H{LF$ z=$eZe3evJFA_dr*KqJPZQh1w)~sSi_ZqUy&%H(CfIvUt~Y+}7~$?I z`y3s#`%T%S*!%LeuFj6qQbeZiNKsUB@=Ye4;BdM?DQYr56%`d@Z$>l{TB)Y4o`8E& zL=T@B8}8`oi3Q+GK2m}+%hti+BZooVbH7H(?)XV#p>0Per;PkwW_EUkc50sB7$B_2 z0e6JJPMq(2IrNDT6ais$c+O36;Yw#0yXo3^xp_**xUslkok3~>8I>$B?vnZFaZe%% zu-Y$g&-yptP1bzH#-5+?<%<*s#@epJ%ElHoRqH1A=1t^#sYw4@-`y0JvH|e^R6@|g z+?*7DwTbrb9lJ8mM)DJ*^$+2wgZEo2#MRuDtE!@n##fbwzn5p z$F?OCl8JA*td73E&Cfge`iav5Oz=_UFGT=!=7f_Okb{GR6^;ZwCX(+W-&K^9!X}*u zLyHER80vxB_jDW|klmN?$)cpDUdDGZ&1FQlb^M%Z?h&uw4>(KL0CU5jjfA*(Uf+=W z5yA8$rg#il8-E{n^rZYd!a~`q|4X&}f-}O4egKeBnBY`L(&W-}f-K%6mo_^NUShi3 zxhb*y{^X4@ta}~6+)4rZ8)qIpS4dP&m$MOx=fS+@0;A6HJ8ay~;9;@7b&22 zLFn;&$QxgSF2QZJYZt2%(ZX#ZfcAa%3RovwiNrz8QZqBTfJ-@Y!`0txK?ClIBfKZ z)_(W*A8ya^fQ#jN<}=3_cMU3s>;_JI;`=O1vgzP~$u6NEnb)5*^C}xvyXdzWaIPJy zdRL}A@kbXZdur8Yb?wVGa#WLq6gStA1z zlWL-FCUmZ5VDP;02&a!W-M!?pG24KLPxs8bE^)h3F3d0^5a}RT5L4*Vd_p&n5tCk>dw-7CE00tMuq@MEGVU5|qCF=dDdmqYOu7Wl=J*PPs+prP*lR`JzI^ zX<^hK@|N4Sh(uulqYnS*}q{3LJpwXg~ghM=HdHaLBxQO(@ssDs~_PbEpL z=K$%O&--?2brMbZHm(?|LF}|C>|VV2d(JoFV`0vYVMn6KcJ^cbm6rt89~_w z#BA>)pvArPMGSZgEa9AL7e=YJu#l1SQ|u~9@)O`yOv$Ni(mij4D7Ay*TY2}p^u*e@ zK2N;j1y6BE>uI?So6U;wV*vqqkOcKaTk4B5WbI-h*M41Az$k6|8-h4YRS9jkTA(#7T@=YwnOX5oaK0f`E5kFI{4-M)u2{SjphcY#eetTS` zxWHm1yf&}ByP0lPC0{zCe(iXK9^K#sQ@E69DnH>>F0(%ub1wbQLX)8jN7hj#%5VCl z_qgcA#%$$PEhsj8h9^mINdzz~Z$G}-8BP>T9Qj3ipyWfZfBH^J+)n?!?}DeSzG21- zI#t7k5}%hYU&J-yUaCtUF@~R6AI2}e$qReP;Joyw5)jLgl~f@>D^M&;gchCk^=Ex$ zoKdA42!89N@=e8zh;na?*PrZuj>9SCoGZ!wgDyVGz#y^6b!jhURh`>r(V;GWLbhFH zjEoMkH!Gv+&DKqhHQHK%I17;qj0P2RkcfSt5NAzMT!6~Mc68hg!->rJyBrS5_|X<~ zd(7w0hWJ@=gBHp$R^AtCx$`qjRZ(zgk)AZ@HoNvss{c_;;l@sy*K#Tgru*|(!?#8i$05UfN7_}2_dP;OA?CXAlXj={Y}(HX!ncI>ZdNq4k+#+I1Mq>>RR##npzk;OxSdFn!h%|K2E~k z9pS=F8rJ~qC_2Pwo-czf}Bo~l1oAY26n1rfAqUzDsG4@|iR zQmQH|2R(%wg^mHr_whpf4FibB;=Eo9W=YYU)HOukkCeRlR_JSb2^3A;8@$$_W!@;M zqUrTRGL-===@5wq)Lgs5pnfowPvPYB6y7SisHoXZCiP&{X)s}3ZmOaO%^4?ge_=rz zAi}L(8$u6P(UqS@vl5!F2w8j5CcyP1b8>Q$BObg}>A0_Ueb^|zM{)H*@D|E3+vM`j zon!iTG+S~2{4%jJm*d_kyW53DG&i^_K>pO}=8R!@qNu<6pt5mXWWKc#oRYirC zeR_B8_DAIF+16?xX`xz*JznN)eqqb?me$F`Eh%0-NlBg>+WX{;2v+`EsQt~m-j~x} zou6O$I{veNl*%ZD+hdrly4Uz;#apmm`1!s|klh&&=m1Ela!cEY3k8*0^zhruA}k8YGi8bG|LFW9y0M z`q3BXC>d+3($65f-bY2J(!}OsOVq02V9aV9##=uZI5`Z+aIY6AFjQwqkViWe`yTHH ze`!=etMGlY`|@Hd8&I5RNh-j^6D`frj;J%9FRDAHt&z&)j z$Weu~s^GgI^vVJs2cZs(Ou>GQAv=V@vJs8?+J%L5{jAFMn|lTprK^E1-L!mxEgrW; ztam6K#D+bm?eA4oa*%V9<%BdWiY6c|-QH|pISib4Mt&haV=@dO46X+NcavsYiM(GB z4<0PqSse=!8>3d|$-e2&hJ;sD9(?KBpujk0UJ|*0L~3Ku4CRH*w_|sIhm?o-1L!nWA^nGc{llmmPkLni8* zy{R9?A%xuWWmatKP5Y&-{UFRShBW|i>uS$X@FF6P1{3&QDo@ow@N$w$$uuy8)SnKw z?&vOHn&{Mp?578SEsepe1KzjjkdtpGXaR-LZS3&)c6C;bd5 z;$Uc}2D9`F#A{%WfNVy+V-6K$K>P!GQS4n{HIXG;$S5&|q}ffXs?*QAZ5(;E3S|zj z#;x8h{W4vmfd*SXN4m8G0n{aK5%WDLmjQ&O%E#-k*k5MnRh5!jhOQ{P zq)JD85|?bbq))0r$Boz{_ZJ{P5Ta`4=or&(9J&ZpDZq`g(bVX2q<{(9bEh{PkIeDo zUqeU8tu(3=4nyeCu2Ly;cvl$ZG{nzdS>M}EEa;*yrm=O1CM~UaJECvcY#2^Dd}h|_ zr)bg7Us=gR^+#hh8ddejW|S56nCNY12%C)5lSo#RYBuRIU%V%9-bwi+qSD_~=9M!a zXbHPzR?9zLfb!V;LP3xkf7k5IGY33;L>xpi3118}WNLt3CO!Y%l5hRIj~%wHeen@W z-Hg}!p%xGy8JTHaj8}||f^YI3OOyw3hfH99rXpJtV{l-fN|IDyWCIrm2VYZL$J7j$ z69X4H6m+K1ApD;YpST~IvQL0}K8k~|c5&$O797;ICU7W{>q=G*$QqrncjjfDN(k;i z(eDjK@a*c(&QJip!!{-$r4m{43eB=SXuif={UASF-%#8Z2s-kb07rS_6oI`J`U>N4 z)^_$P!42#P*aT27BF?8qrvrmMVRi)kkDd=G-eAbmbUMC9SYHxk;G+rgIN6XkSpqJ< z_o0yS+Ny0|HiQf5zsl0t{6_2yKK~rGN8A)iGLu$ZRD?yP1Zb?NKvK^fHCQ@E#u$du zpY&!r(AYabvnC4U4$BC*o<*dj5Q*F-VQtvVsN<&}HeVhcYevP#(}Ith320Zw%t0nt z+sELGeofO>z5pTfK4vAIE-A z()UR%mt7z>$^UJW#Ls-M1+jws=5{mODgN}OD>jNB%DHO-Drm0md1%#cv%29MSIuJ| zyhsm{2;=@(q4v8a`&2f)-7iE1(8PLHaN;{E7RFctFCA&cG`)k^e&M*3baiT%T|Ahm zw9AkI6yYX<0a|iK(NEeeZ@)%niWhPJo)*sN?}f%OYZ~B)t$RT(3RYMseBY@To-676 z9E{5p3rrH1U^G}mC5`Ajn5pPsOyM!M!=uN+FV|rIJRwCHBDRz#m%ITOjd5-rqX9s3 znQqu#>5w{_K+=97XN%LY2;$7C#ano!03g#C=Q?huN!Rlld%8jucR(}1U#QdXAAzmx z*4yPS$=udl)-=~34@kABZUFH}5qFcvqSCNK;N;jD6(^}2G1O>&g+QB(9Yj0%_em}R zyn6%a7}VHwTL9okIY2cZ7#i-zT2@e?_>5^2LFfwj6t4j^I&M12Pr!kddF)wZ-)>q7 z0PF@u0TCfS!p-8c7ON)Tt=@liR{w_R{*V7eqlba2hA7lv?hmE#a^%hSMt-w3py&LR z%%oL|ho5S{W7v~M24t_H{3pHH!%$Z}-}7&@VWDQ>0%1aTtLPKE_SUj3^Fu%o8Wn*` zz8r$jVQ|91&b~)AY0q^CLM~;~1?9qoJVQ7dMM}$5*j9+0?<$5X$|2w${bR5o1tuTi zAM@!zZ84TDdHG>d=%~qlbNP>_1c@6o{k6<_3JgmlR0*^_bsGSwvN0i5o1Ve7h*s_o zXl|DyUv=6T+w#kud3sxJz(Ru>)E|ge3`$)$~jM@i{1CF$GTsPenzZ0q869f zEuf`lwHL=Tab}S=o;Z=7axO=z0e$TCi+;zp4@PhvFap-}$OC8R`Ys-ZNhM5^PM?R7 z16iL6Jds1!iD!++>VDGv#-uE!c&1Et(}0HjBP?xx8wwW3HYUomkenX{1yWlOJ+fe2 zmdLCu14>h0Z_+F-#087?_UBOoViMDJ)_RmHVk9>oTHO6H_dQOBxCx4TxnhC-g&>m% zM<1Gy$vL9r#5-)WD zBpX!6KWOAoA=LT|S_Pr9>1dho@$vcWA=rAmXuU2*tadq52aSW0=+;$s#{>%0W0(W? zzJR_4u8xDgsIGhW)$#gzRmdky(cZkMD1l-lNNwSuxmVbWTG+gfkhZTdzHpDp3yLJ3 zSCI*`=!9I1TWQ??`L+X@VGw_lxb9${_VAQmz7{E+jyS$>PJ}f90)>>Ye zkC35{70s0^&D7S`)*%H0HVs%%>=ta7$F~zLPY7>`(B8a7`%4%9KkEh>$5Tql?(gS& z?Duzf8ud%yl2we~3T-*Gth?7PcZM*Dj9m25k`AQsF8As<-wW+7x29{=eAsM08yi46 zf8)4E1sGlFUS|_+uY1Sg`JI|%BHMO9q)|IJ@8(#L1QGp+E`srgjC=9SkoTaP!{}^h zU3>d}x^>Aoxu3=BngOV!M7Dlz#%X0=Ul?2-E{@u1S=lMF4I==W;PjsYQ~IP19Wmn%uOV*0^3}-lW&!ULQil`@!{sU-ahUpv&r|rn$o*H7Z1V;4D-GI19TE26W#5I=wh4U@ za^c8eG=&IuGWaOk9O zco7T4GQr#$xfCrCobh(}jN2ok&u56SMx7-p!+*T~z?qnvQqSc)W$Q4fX`F9pThCcRl zirD!0cf$Cye&T);DwqDOhzoBVK9vPqN47>P;u^F7H5$S0JZP*o=dHK#`Up2{BaTo> z_+K?#8Q_{(=uM_#HfDT`Z{aoa{uWxxLw3P;I>=#k^&4~4c8a>R$|{-bhhqr-`&Au4 z(Yo* zL_4Y17FqD2(5FPdUA~t89$;yG*^6hnH=bYDf8M?O^x*3&!Wd1bS`x^AZn3}f!;_~G zNt0ZQZq`}$Te`ZP(Xz0+KR&K^*)>s`Ju6G+(pH8kS;` ztFY+&7*z-(IExPBs25}B?f^KU+9=bgXonIy;#|46>3$T#cnjbKEwXsj5G=@Qja;G(cy$rXb7kT zF%jvEhCnXJZne7E5XYmm<=Ijm)`1JI-N)FW;2D5O|I z>3~yB-t^4VS+1x|t|WcM66dd^UFXw!3<`qRKcBzYdK;b;z-l??!257j(QxglSc9;a z!TjQXi&BK|5oe6ODJz@C7zQYLJ+VXmo7W~O8C?sW$W7Y1`G`%$K@0T$Sp67DR%krl zkHmVOT;&}8hj9Z{+CQv>N`)Ld?d$VqnXV({+0@VHPcu2`P;+E#M_9U6Up5Dv4d)-I zGODZ5&t_ubFXqWIA7Vva;5*4%QO+diFPd9ZEJM+H=aV~5bTH3clJY6oRPPGOOO$e5 zu=i$^z0)OM`;nKujQ2N+Z+X%=G5!I+;VNo#8k5AYRf4?So|$OJ1`CJV(#6TC_OW&> zD~^r_jVa9It>Zjq#xa#LMFSaj7b#W98R~Gvg`z7Vq;@z8I2AtU+i{V zY&uEk)Y%HFBqSx7h$Xtj#KcIk{#5^j$0Td#T`wlJtv&NAS(uFF>{iubw)aJ+E9fq; zntlLd+iR1<3l}te_O~>$Jj#IC#`owBb$>%d^1q+R|4|nq49pgW5-l6s+dUx;8@-Ws z`#+j#~5C@w(iF#ri&R*yUmRO-E!W zOae!a>y?PzAX^8Tur>7G@Y%oN^I^CN7KE;a_p_e6S(UujGi6acZ@(d)i%OuYZx^7B zJz*Dc(?HdI1&xfDrfoT6M9MdkDc3}v)!2wlOm08vmnq|~>106npgsAWRW7@@5|68{ z+PAGGTA4|&)301f&Bvf4;ds$c-As|icjx`dke0BTZo0x3PtL@zxv%xI&F1+ zZW?{D4E0Mi8DVNK!tXvxikYY=lJCEz1Cb@gY+>Y$+Xw3XQjwD%+NGLRCQ(sq;oW}F zA6Z!xuHndy3j|KmABIz}YB&!fiffp<^>^Z-CqUCrtN81yR|>d)S?*#syxwrkEuEH%#Bgk8$QQBR6xHZ z5;DMuy)Q%!!c>FM@I{-~!*0`LQ@+Hxkm%k&7*qT`<>fyVoETpbA&F!I#qSzceEN_k z$)}3Lwb4bJ!OTkjCQr+%o|pXMS8to(Ah}pTl0dqXo`KwYnPq zBVHr-*pmC5a9PeF!ns=Q(h6PMiaM#P#`6EUJ4L#lu@4dmI^NyQPsf46%f+RAS(A3T z+4brJ%&jv&Hxz&B#2JI*ZA&ND0|`~t$20i=!&5=-b}r~8NqTGgAGJJ1seE3AOVkz1)5c7nK({C|I=1qj{|4XtA;dyamtqjN?(p&ynF zx~#8WJP%e4gD(zpDI;l~T!8b?O4M~fD3>{3p+EhiltYz5ZEgLThTDtIPTy0*Dup<% zu?4x;kiq9dpo#qU2U4E>D#-bg7dWD3Q_Vbg|pb z=BMZ<_Ve~#e~eRDV4CYi=^(ac<;{EBNo_=s4RmB>S^D}{`1t7Lp#~M4#s+KYS=UnMLNqKx}A%hx6Fl*pSlIO#|Se_#5X#B6~7Y zmq#sAHK#{VQi|bmp)8v&4g!}|aMNTcu|3K&*irf&SoahUab&_-_-+zu5}l9f^m?Ax zxd4Nbl$>pLbFSaXLO!pu%Ml!ixL)A$cM+#;L;kz0t;D;JV^q%dOW>k6r=B5v{W&MY zs%eAe;o;-cnHuvt5L3fzcQ)#~0aR@9seH~;t~`d_L}f}XWjQ*HPSW#0@?PxI9C^Ik zBhtyF4Rj)AW6iNv>j!|RVbow%0O#EnpYH;$>XMaw$Fo;TS{f6o6RKd{ ze6Hpmw|`%vS%q~%PF^Ah&az|8q|;Ft6vj#IIowmAA+*CM-HVHf;Yt2|gF*4T%=hEkAb?B3HP(z@-?1<&ZF5lZ2Iz|IbbF=??CMy*Vm> zUudXFmrK&5$gY zE4}a&yGS3INO6CC7w2HfXSFBqE*HMKtLGTMIY`2S^OG`{5j#2Tjz}31o##fDlA_kv zkImFH;;TvT@{erDGiTeRP@M3+fUT z_|Lo^_s1l4E?)gri4sf16WXt@21{A2bF&`V;f0xBS`Uk{rB& zQ~ovmX|edsCu}}J1{*Q2h<$RALzB~rE0CRR+6%Z58hjuhsT0%W3^{p18xF!3wI8ts zu;9n~B50LjOq#X2f&xeq_AcEIs>F#pL&BS#RYFgnum311iSfGM$KRc)h;D%~El-4% zc%(V%x01{^rduCEnMdNLcB{sCOb6coU0Ds3!Tav+4lk3K%9+DtW15a}PXVavi{Bmr zh@S0whZZoB-}vmeWa~HMl7}1}Px!0NEDAF+gaIrczSTQ05FO0ipx7NQBp$}IhIoAK zE*+Q*wC_N97Y0O2O7!&f+WWu>(nAwhWpj6R?0U;#8izvsMy0Z<%HYK2w61kAI>MCW zw>xmT3(e2(;79R=kRn`o8<0Xle9R`GC?mGhy?&`);96=!kfGlk-;sLVMQS;Trr9eL zGIgd+%~5gN>dGCo`4{RVe$AafHBZ>NrG0*JU;uG$8ZdAB`Vf_r^!egE%M?0rIF@VQ zPL?O{!AxF8XY|`%?=oMd(aV32B%X-~4#bLm=t=GEKo>HAgX6M)xZ{1CVgOZf9v_vQ z3xL(qO|BP0(0ti?1uz&|RehoPe+mGl_n{_kIo0C?85Jy?KO0@31f`K$?24@39zPo6{l-C62n+tA)Dp0I~Iv#)iu(;N`BW7 z6`Q5hB3z9tiG2C4vrI*Q?t4^5Q~f0E^d*Wks|tm8d5bsYhI)Ov9#`BKm6AGBZMSv@ zsY{t{lrlz^DHQAm@eS8QkBOM%)YKo9P5LLm>Mzyh)Pe^hbxkzB3=9s&a9MtMWPu!E za)L3F^^c!epK8=v)MG+3OYKEqg1<_Vxa54)pXgsS8B8F*N*+k;pH%z_FhR{qqr#~p z!<&8J*Qd_&)B*8SC=Zty%OTAm#_6VFWt zr&y7@rDgtSxnf8c1tWo2C9WRAWst8wZMnEzKkfTxX~Qo`J2c~<1Vn4|^+V*Ex7`ue zJwnch+8}nv`Oy*y$m4i?f*Fq^w`}9J&Z>>`>1Eca?rv6-FzgW18DK|$Ww@rLJt>J=Ag+( z1!LgT-0XZ|8xs4dn((>*4zSN7p!?j@5$BSy90r`A&5wYG{p7XF#3^pH`PV2gP-Q1K z8YhTN$C=$q7XR5u$0K{!=@4`cCUah3$BgtkWp2G2OR!sj`-e&3+V3teLjRJnCw%hI zHypCvECsc4#+qe;TSJZ4^AaeQzn=j5)2|pung9O*7Rfn^Q6|?-mvmCi?Hdyfx1jg^BB$~b_uGOX zCF21He-tLIUa@6sfhoLsL^LWeNR9Nk{cnn@0jZ~XcW?Nf|E?8L1Y)T zfWV@IuRnUw?r$z^?Rh_Oc*c}7=&aby*{)$_WS#K<&ZGV;x4e9$cL}-%i$mxHouLDa z&9|6%^#u0b9kR~-$zoH76fRFW)6Oo_qU!1i#?LJmbLJ9HKH-uAcdkkaw|tn;!16E5ez*+cy+E);6i<>)Z1hTfc1ou4|7|;3>G&-|6b&dK(?t$dNcfbNOzo?J=w|r z!|A5{;<*lcISb~x$9m}Q3CK+Rl`C;yIah0`+#2w@y4~|rUbhI@%elrQZm@*s&8tRq zuB6eo%z$gMym0S9zl2s@%CPr@3sJXdm_QyRo_Y(5dMfwY2r_JQI0(+?v4+F)N_;;@ zqdE}qm{cus#t7(T{+FEcD;yf^)6_SPF~Bt(1x%`HYvOI^i7gx?rHN7*g;+aTV|B8v z$_3kk(dAI=%KGU~E7~QR!fW{_HT8VrOY<+;l?3+NIl3Ho#-{4tk!!rDn65$fy@{Q( z(R?o@I0KD7vElGAm(06T9y2yH{ysR*q(q{kNgPlr=~N{7#^_6~%V)*A7DS;``R3^5 zqxeVJJJ<@MZ}de#HE0?*7wi{7r?ER%Q(SGmtP3hzR#ffDiJb>!55Eg2ghs!7u4zbv zks^{-L%v|FJ07N(9##lf8ucm7ws>M+{r8C4!b@he5P=TS$(r?pNmqb-m44I`&%LQri}?aPfr z?@^u=tNoZVz0Q38Vq0SS>$ONxV0sr=`T7YuzH;?IP2wofNS3U*Q)IGHAiZl+*U(*xgw2h!YdF}+q9nm49xt~?nZ)t?vRm;X;WBf zlDIwZzEnXtlQMB<5U$%`|JayNH@B>Z3H3#gcRaS<&aqeZuRGJaz=AdztES^;b!%_7 z0kq#&6S~OqA)Vu*`psohgHzietOVIhyX6~)}_e( z2~%cc#r2Z?u;kaJtc=J`^WNV28V#>cWg5@QbFMFgpq$)spl0__2m{+bK-}=z(zMJO zg`fF~C|h41iUM;^P2`>j2nz6VqnhyEKneZ^Oh_?;9sxZ(zxnzTh zn|r!t{ECU2hGq-e>@+Kpq8u`nT6W z@6HR>=ne5d^`)8916{5`-8 zwqI|4cIvQKxE}fw(pdc}YX*7XSGK_UvEr}a6 z%*yDAz_lDY)dAn1WOp;5cNhaYWmf&?GpF&40(ZYD?Z)M}yP=U5QzeOK`_l@Kp!J1L zcb!i8M{j_4cAC;QFV|WoFL>UP4n=|{?pCsAK$mkT7>R%*v)G$3D>Iw_e!NFN9UQ-> zA2R$CmDi-3!uwt>qkfsPo{n5v_5G5r#|MkDh!GKm+R_OIcvX_!7?K!y{D>+MP8==g zKf+`nsn#~~H?!V* z2y@fQ8wQ4P#G5ew%5Y8LT4QE8ohpkaaF=r|nWm@GgZ(L#X5)FG_=bSR7)oGWnxiRy z{*2OIf{+nS|Cmcq9|pdJ4DPMZ0@_K7=RFtw(aF^w(&fqr)tWj|m9}K!J$AKfk^6~> zm)Zois;a64b@U>0ru3XAEML+RAmGSuRzV(U0b;-vym@7jS>m`qbyJ(n0UvA^LCgMk zr#_-III`9O2qYYHFO=XlJAI=$B7MaEWK7D5fEKPHpN83RiuIr_zv-V9hhOl~sX$nc z`|{Y2`=h2`EkcNA<(CtQ;N@h$?qczzbMk7bf&v+}&C=8^!Tlqp zx+N?Ig#d*fX+PMXQJjr6P06I3Hn&|^8}t@(8K^Ou;UZi=TTCt#bwl2ecU z3!0CYDm@D1i6u-ex`s_GuV$zpwc?avJQOBhw$t3gKs*FJ4LUcFY08W0D))m90;*8^ zFP&MUL379TuKnSEj&9&&nM=fA`xwsHxsAoz>P+T+Y_IWR^9SWkXZqf;_L*n5cKP=~DxU|x;s;8O zsb+1*-dXBv>V0RIt3a!lS`xYXZst2=+W0ms^5u0yFN-~LF~$0l^47SF*oS~z)uQK@ z{i=v{=!V=Sj%ga5?qI0dNOQ}>Bge;qx6ouqiCCEJV5V3hnFgc7Sl!Y4v5Ixw-GWe4 zNZ;C<0n9S7z%X`;8CIRP(q%#oi>9$LrPJ;RAQ9_Fq78{09F*no16R8=VD1NB-xSlW zhEm4H-nh&~1LrE3U$?fHQART<$w}VYkf4W2iEIeE2ys2zaE^_|9{m&q@2zL)XFKd7 zykm;%6cO&9`u+R!SlI5c*K_YFTfdfLJdTEmO+X{hZnH9aGZl;{HV>8FZ^Y}UI#RXU!evGUk|S%^^v-U_y%Ky*^8PWu@*jpT_Y zmr^5R@rzGy_F42=+Fg=u?!&$KUxo9Z*vLKrVOOl@{Y~P1^srB5CHvy#O({q5oH?|a z2)GOe(*)+B_Mv4V^_gD1M*ybzb!D)a&*Prn&-IJUr z{lv}7vVBR%T|Tn>vW6}nl*11oZ~(%l{Pp(fZPNOBaYHsdSdX>wC(`fVJx{}ulqy|=c5&+RzA(~ycMFqoOfr~7e5==3UKu(qQXgDD zADB?3JGp5nf2rz9rA+NU68icl3PXt<$H6!(jEArOqUB6HVGF*S z;`&=3&O=_}#=jM6#UNhOT&pLWygVI?skedt=RN-`KTv>d6FroGNJ>eWrXA)yQP}05 z=Z@uFu3(kBOak?V=91Gq1nVT)nE!esy439wY$Hu5`PSzJXt}Ig4$Cey;y1m3hfbQk9~FIP?qXHhlh_i(2Uw+ zhTEtCXHpz-5J$Z(I*DG>3}0K)(`a(1s)omDExanS*BaYY6{ zH@pN5kFl-q@i?}=h=gnnB`4RVI2_EWK111I(Q{|(aIBc*eO6~40%It72Mo$cID+JQ z`?FQ~g}Q{-NvR;uKRGmExb`t10F;k*Lt*w2+ z>|QEVPRq&5Gb6>UC%LhI_ev6<${uJ&Lo|81=2^`NWN>4fw9@*S00r*HFzIOK2o8ws#*1+nYcxD>qm$RrAC`N& z>)}F?$Lk7(P6QDCQ`wqLxlGo7HmL0>7ngX^$uJkrkPtodf9C(p*7HixuT0^Y4ALnd za;zcL*=_w#pY)Xwh5-U%FtmD>=Iu;dn5tZOvUS~cOnJ+sGw3j+l#k*isa=YoV}Hm7 zkqKRhbF}rt6$F>|qNk?rE{BBzueGCW`etz{ta2 zuU|#VG{zxxqy%@Q0=qyPLVs!#P*84MBq?u28+CyEDz7|7?OP07OxZ9))^ZgSL6nX~ z$rt?;CjUVc<1e>eE5Cem<&vlJ3UYELdZB3^PDPkw*Y5OhWZ7k7R8`?~fVg$8&f2=u zRfF{{V-u2z9!?P(7ZDH$od94S*~kN+HtZfBGo0?61dmPmj=(|f&yxcucd0reG0`l? z>v2?bzgi8%LRqs<;Sotz)jHOemi`7^YUZPd>%0mRbp0CE7!017c>ln_5XR!|cg8kH zkdpNbmEaSc8(utQI~t7thz6A8CUSkn*E@2Tv{WlYRVZ-*m*hy`u&vVhxJ037)T zfE~U#i8uyuOs^Qa03+~ZRLm;e0_}ZrbMh-Kpfv`z;{?}?MWniSB%l6)m+fT}dFFyZ3~y6i!a|Zf7)-c5c@TevH27VN>fhYN zCt0`>3>Mu4)1%Z)E(otDke_pYS&Ts{AeH-bwafvFczVWOQhP5v!%{rpegggcNY&9H z2T+4XL-)u2c}ARNb-pERDh7U01-+hPCvMyi@-mf#nO9~heXQe|niPpQ>f0+s;Y6|6 zQ7?@?`%~x`G8RrCt8m?+4QrQ=7~;C!TnNbEsx(RiU20@G=pf|4twjlzk+E4HOVPvy zcm5{OB)}n5;I}P#6c~}o4D|Iy8iw&ofY26|26gT11txs>vrus@#sbgZzYu)tvP1Cg zoABN441%;!s{LcEfE<$Ds278>-nXO_q*XjBj4*^p4`c7e(XyUA-+@Z(X|5T{{eyJW$g|Tf(QB~rXUN_m zI5o$mxvJtzlR?+>#5ayb!`CJrd8yg<#m`2i2aXUT|3;Uc94u2NE#KjKtZl zF(yQSt~z!&2IM}53*baf1Nqke($q^}{M>q@SDnmjpI6+Ae%ekV&uW_oQi%G~9~>k( z_rahS@mMiNZ-IwN=5o@L5;S_F{Muy0Kn9EaI1pM<`OQ>4U)8IGV_N}B3!|_({*YlH zKJztUVS4*b>Pt5eX>1YP>L@EK4>>B|`FN~=2gBu-yVxxR>fCHGRBcM-q+|qZ-O71DDVh)F`}smWYdjnZ%$+cpK;lbu8b5#wOnUPP#@E=NZkM_@u*KQ>x*8gzauvs&E?}#6H0O`&r6#En2Q?92_L@ zsrT0p(00XHm#5v=TjyWSp+M!N?_%7neo}{!Ly<$ln#zb~JwvH`&q5UNU=>a~to?d0 zKElbTR|NY3-UG0D@d-D>1deul!(=2D+2(ZlwdYc$dg7LNP3oKGs=BkpL3f#lYm&v| zcLbt7Tjw`tLzI*`z!_)ajmZX5rpdrDF1BTie4xZ?2qok$%CIWL?9lhdM3x5Gg%Lny z@fZd5cDeI?I$Jhs81TQTdFeg$_MW?*?Htl4*rO3xmSh})D~;ViAn1&hi!lw*unUYE z%v!YzLFY2>-VL?qVehYA;&<*$m!$)d|CpZyKh?&((d{pTeXwREwDWPm%0t7E?g`}^ zMZD(%mVC()bu&NbNGDxNmTH4$fKy24%co{p9@lBSb+4P;n0>GWPLoseR8j%gYS1-| zGZJN^Z);e3q_6=PoZZ6>!t7DiFRvp!c61UW;tP4 z7~WeXq~ZDhT^g?tt6ZrOWY$o>@dqt^KM-sfgK)2>`YK{M@3STPgIOBhokQ^mveG?5 z*?>*Gey@nMAE@b8XAm@63ucgA#-#HLP7R!Yz&_$^y+A29SR;7xOz^lfy43hMap(4C z-&*z!y3~HTLS+NENSLoj!%O8pz>hT<8Pel-#<;N%C;E*{DWn|=4)u`aNb>|1M4) z7{-3{-HAOt`>bahLW@wV^Zto-uXh5^gVeXWx9jn=ci!D^pUOY2iQMm+uCq+JZldwd zlgR*@QvKLn7qSUoMg>S?F@IER2W?qtsMPtz@Q~q#TQ^f)8rwvm6-p6X_42e)tg$}o zW@JXrUhAycoVROR(%bf{s(TXNH`BB|b*iOBh;Z>mHo{ISMPLgPda*}BD0a+&7~<)z zr;}40=Kkh}QL%3zlT$e6)lzLN*-!H=vRG!qRVos0)!{a!GM z;bQOCht}m?y$Xc0+8$0l0h%&tAUXotj;<|B${=+ex0qFD@9R_CULdPy{`g9dTeNZF?iC9{p=XTG!Mmjj@3*)XY;cH4YWrIam63hkrCX(_ zCzROBQO=T>9|C5@E`A8`auCjv_b2>i%)0IS!CLNnjMdD+xas(pYu!B(B>_P?%WSIC zhd}uda|&q{29i8-GeAZ=sz%2#X_PCLHl4`KR-4(6y|ID^pi05rS$E0o{CoXnEo2eZjF~)FN0Ft~ShL=+nj#!+3uWIw0^}GXt%woSL}nPIPM(Ae>zxYcRC~_ zeYMm{q6L<5ef`mZs18 z!a~z(zikDwke9>z7?_!(yzUHTWObE)dP`Aoa43gc07R2(3}rAE_!h}suO0YnAT;lys0 zL~hXDghN1D(6BUfzNQK1rh4*JEyfw>V2j{=Tx+drur;Ng$^{7*J{+LuV#B#m2+|cl z?{9jV-c&tG2_GBbBJu>M5LQ)NmGu?&2U?~f(>YE*MTo->y+OQc7CpuAas?&Mve26$ zr6I)gXRwwzNGVEZ@4^{dQ)WjQevB38jNv`?tt=j6&>9eb4jYLy;Ybh>CSr8(vV0N& zc5b~bnGf*aOp+wCJwaO-Uf`R5l&XTAr{>k^NjK%})m_2317o=ZMgV%)awY*v-yY&i z0kBLhEw;Tq>l5AtdSUPA_dO`@3BH}4U!}*Rv}wuXQl~28Tiw7{gqvUZ>5wZwrvwJi zd@lfO${puON9TYmaqH5nHy~Ascl$Mcwuey@xwlby5j|N~SJ#|gTPHhKzrcA!1&F>Q zUUnM;pCys!n6a;~kFA|2WK@uQeB`)m7}azT)>>PHbbs1<1pZJmW_K(nxPSPVoa&~) zQdEcAHY>F(lvuwJm-!^MZ>q;WWWv!aV3?}_c}maYJk})*G@YZ6)ku>&$3$NanzH{; zbARQ{LSuTWmWIpHR;AQ*BlTM%lzU9(r1i_GHxW9=)$ntuQNB?J*CDk?h4VkiL6j8fMrzdP z9wE}r$k9^57(FJ8_}~1_|D1E3$KUT0E`2bsUGn+d_xt_IyPz|rn4H$l)YSIU3_-iJ zz$ezTX7e;U-*DP+T93W++d+d`US1V=wF*_W-DCGekISY!R$`YxQDyyck(u#qCwlW3 z-ZTn=|Cxg~buYVw9HQC@vwpLSKiK6b@m{m^@7e$=>Seyv^>s1zWR%Jd;G^(BGv5m1omc2OLqM607*A*8xIa>mk_Lm!UU7)%_=AcVwqX&AF zGaFTaK$Q4B#&g^^#{(jbcZwu4^eJ zy@G$B?~9r!TS>^A3zmNkHEO|bY{UR@dt6X!VW}6PFQoaV5z!*AZo5sj^XI3pPwiBO z9VYjU-o$?@d7MT_pvcR-2^phbeVT-v_OA~L8TRlxFP0U!95Vb$uy6dzThiU9pRiZ+ z1o(^Y|6r(=v{5yvy-%{;uKd}Eoh@imYUhZm(H4Qd+1R=EC4rrTwN%lxY;Ti$+9I|3 zfao90$>aY@4@;MtKiwqj=t(0Mqe}dGz+!chc11p%R^Py{N)`R^!ZEY`TNqvM1?3)-9 z7xi*|C@xh8dIgCjR2Bzqk-F{;jU~2jA6qT1N z<>kTT?d%H0!uAn<<3b)gnaO)J!mKL87~$iE!2KU~8ecV$I6O@?VcNY>DOq@=vbVRl z;@Io>sw~lQf5cQA2$lG6;n(uV#w9#$nr47^Q@J>eVjZ7SRu37{B}PS?DMroq;3|Sd< z9t@cxmF;lybp=JBag6`MAber($L{j71Nuu~=8u5s-4#ZT+*vUrgo=(Q>k%BNek!9pksFxv03v$D4S*6@6(lyS@N zr2mvfcxiEQd^5X9uc9k(;>OLJm~AY94^&I#P~d&^+O3ZMUPBWO&bU*e;UF31_`UaMOFG@v{oqBk(SR_X}c1 zH@W|T`sJl}sm?w@VPPu7X>C?ZX=B#IX+4fZF~ehftkpx$MlRh_+a{@+g)kAy`hI-} zyIaF06y9k(7*$ zs2~}i^MHYGv0uP!6Wtwa{4ig~SZI!h&nGU4$1){(FUfs<90tT9<>eI>kS~%_tcSFD zW22+iEu0jtSKOf5r13`j(C1E^(Ml^G{IgQLpC49Oy@H+hw!4aSMR>?mYMob0^($@kjgc#yw9+@(yCPqu>A%_j{P)Nr zp9;0xt|XXB6{Z;e0*fpbuHi07_vP2qC*^?(c6^nV=tGmm%PN{aJO zaDj@CCl)8~Z_?3Tw-BD1<U!a(I)~d*#1TYcp&g?|?b3H^_{9%UUX>RK!xgl~g@X+e)XHI8&8%Q-Z1zDxa zsd?Dp;bDl6AaSj+zSxVvG*RV{dIXxTKtT4j_$TQ~U%s{{Uv%rP2pZvD<@p%cg^<_O zEIV$=7njPd+GU>)nYf+r%y1ll0VP(Yz%h>9H|81iJOBFVZ}A^y=iS}i-p%_pInUSc z?T6cYGKd9=)2|&MV#7vC-Y$DG7`lz}Ep8^x9>pB|aD1Y^5|Sn1jE+90Q%{oMgf~*s zFn#m;8+3Z#(WhM5$H(xuJM+qTU(M+}P57ilfr#m!_4U%m7D3$8P$|L~7U4H_+^Ooz zb{70YMWnv8Ci;{yz?1xnb3)U7mY*Erq4=Jw4SH?opH&v^Y{ zdBtV-mU-(UieF`L(?UcB$-+{1uGw?KC(tZEu)mrN-f)6P#`|sxW9L1Evu8?@#Fbek zS6q52o#6{@0_Lq>zS{l`xS!_0i)^Uv(`AfuRyH#%TduuJe4<}GCmJu|mtIfYu<+QQ zkbsej9)9I<-yrSJ2LG24mMI=nftlZN?mE<~o0a0%;RGsQ~ zqAHIy^)csd2oh`-u-8Wl6TmX2MzS&?nM!|lR{$4YxwFd^L7nr^-pv^0Y2Q`;N1jMN z^2GyMM|kMxzsg(MN>LRCEN@=c-Q!;6zU%!g)mSMhVl8 z#VEsGal|Sw*^_p~+oNg>_5(g~>k=X<=H?_dZh6MbVP7ZCNu~ymI9u&kk}pcjBC}F- zjGIk2nyt3tDTd>xZ3mshTRo)+Q#guJhR_#Exwj zmE@Fs=LV>-`_Vhsj8JDKORq{(5j$ZKkzTKzL22~KJ3(TezNr0%@vc``SXO1_OHvZr z3-IUXlKt$SPg-wHuF8+8dWrb3P|WGQtz7lMW{wqQWyxG-7XKy~X5`0#dC8hn$fP=! zOl+ChSQCeA;T;q56=RpsUmc&Yo4Z`BMk+tNu5jtw=6%+OPdTp?#70{D;kP;$ zD)LG-R;Q?*b%6v>bxDqsYPKDtr$FT~rpEB5hmf95Bk{NSlohx;BXrA_6CwgzK)~Ln z#U=GyIMxFH>!9F})qMV^%rP{t0rBD<>e)TOx2Mp!smNjoLs=``A-BsG0piZ2c12py zV9h0p_jG!b={oBccCizaX;%>9<4?(4uLJxAz!Gl`Gs!}KbU{6WUUcS+9{kIcVX6S8 z%~e-~-78ti^SlQARO3?Q{?3MXtbbw?lyYbGUpCe|X_(1=rDEneT|M2%a5PEyH1e7$ zURcERo8`}rjBU~2xIk#p3Xi|Jcq-N0)7`s|vQ@>5n&@Jq&F?vkQ7RRu2)*m74qSW{ zu>Ol`B%f`o8}sOyuF&8mu3J3)(c-j1f1=*6R;BaY@k*3gt1GbHl!wf{gG$~E-n%t9 zBUwqZo=}3=U%ipB@-f+bio2TvDXvMxswT1r6*oKAPJ7t9W3rjr5$^rT{2MhCZCU$E z>kH-1qsboGhf0$bekivMKgMP_wrAQ$xVvu(9wj`6Ga7qRVOWVDHhqVW$FxnS>Ua_M z8)97jSeuHGmA10~=%fRu*X8k=oOg# zK57LPOATY=)R(H~Nq?xPp->#$1!@nCd2kDMO=G52_ z!Zd|lve>A!y}00bkrnmY)%f&qEHLXdeeL@|l1nGp%skWfEjDJ57Kz3CsSqV;MxZVIZmU`iZp%xu9Ozu$&2SP|r<+^3jeuHN^3xcOH4L|-a67O55`e!m~9@>w2k-$VZC zpy#hQ%tg&kx>8`JBi${Mlh)+Vt;-e#6Qq4@8h)0ZOqQj7YYotMv3e`!6RG?g$5Xf< z>@81Gg5y-XMAVZ1o=`+(d>ij|AG5W@e}2C?t2R-M*PZDRM)I_swp;VBv3hK`(oLGP zN~`Md%BfPn_Kdl^5DxmLz8#?@ju#LEqN!S1N=i2Qvs6cI0u9msc?z`eTnkq4@(Q|s zeQ){L3KmIQkaKXK92;8nc%|?y5CJNeFX^UA zO$>q~C03B+z0?GkPqL4{Qo85i`%2SxevkQ2mYIb(mkitNt2#Q&w8&H;VYKMb&cB-liiYnxNj3a zPKY3hH~D$O^@w(2njxZU?Z-8=bY0mi7X#rX3U4QEk1zw{+p+OAj-9K)@rOqA(VycY ze&Qj%2;3J!ZOT*8uTm=moc@s)TNt5t$!{=qEr|K}L-E2PlxvaeqR8}7l*O@UcRPLeChil-pi zBMvdff}F94p(-$X_|QXizk<5iZvI!BSmRSnF4g!XkT2OzRc{vrt}U$uEoOY>ly?#b zzGJ{GqepLCzupDLp2$_SrJT8Wvx$jjRWd9&=Ws;woavP&smzW0Ct zBDTWDK@QVOHAd_|JyO>|6@j#-=L!l6*YF_GUYT8lnwpMNp-$X$dVhUliFZ4RGT@nR z{kwRdhmasefDVp-40Kg6HT@wEa^(Q11nu|i_aSP=1Ii41F6K6mMSR282iMsm`ubE5 z2q8|-#=K4wBC|lzuMi)^ZLchx2p89^(P=`$nx+r)s?Oin*}J#8h}~HHT7$SX63GZL z)M7nO^F2K-1gJb0OJJ2rv&XUlE6b?se6l+~##tqA@6}*XDMB-+`&V$ZhLQMSy^#Wr zdylUWU1T`f%f%EVw$E^o$KykD*7pT+%Q0hHf45&d_kZf~8L*zETU%4<04W;lV&k(s z0P2vpSyN$EnT*p&r)dOXG%+5#H!))+4FXtvVWHUFL-8ym38ZaU_##+vpNyV&<4g7A z>i(v)Vm85-ST&YVG{X}{{0)1-$(fKtM-$hnWx4vMNl6^t_{*oVf44<_V(ezbeMVoQ zDW-~MHz|*TlgoX9Yw^r?8&x^k2;DfePidMU>~63^)5lAPy?*LE#h(x86_l$~`4iep z4(-Ll(<@dt-@*U!di`Ikxg@_oNS-pAWCxv=1NeM) z8U`PNGYA&Z08axJPnp4Gw zAv-&JX|s8EEb=>$1?YfKR~lWZ9U!31D;Ed2o$GD6E82RLk8XfRGD?xl(C&F&TaN8j zdg!RWM>-XfSWPvEVdp~aeW3a(5_9KVMj!vjOgrdh_hWo&vHu%+dX++@_@~+cTzg)Z&8$Ep;oYdE z!@O&q@KQ&cPuISB-h%#eY^{30DscTo<&KIodn^hJ&CI0aVr^avZg3&Tu-gl$v6VJ@ z3G<(nbXgF^fUPNW00#~A>9)||nfkT%8V0cigz}mD2ymqf6FjgTr@ zp0T%LsZ=rOrF2ec5#86;EMD2go#1<{B4j&tKe*xCrngp$g^%S%{hZStwzDcKknR|- zw42$hOFQ*UfR{s~pDwyO@KOT*;44Xf-o>~lO}Q@CLrmxY$;SD=pY>OV6+0~{P*L#6 zJ{8*^XI`9~JxNsOw+;-DJSFF)%S0eL%^0J{8F|ZlsT}FQuxFfvet79aWmbFB6SoJ| zIK0_$#5qG~D3>%DC+F>ekK`#T#i2)Z!_)6-Lf7^IV61f!I^V&b<~F28`S@m z$~KG#>Gy=a2{%EgmEZ^%_+Vh(!s-wXn_N#09xvAK#&nf~N<6 ziY=dO9d_&U^f-_P-s8z7pzZkvoO5l6KEYIO)5l$omp*U>A=kcvcZ(`;a;^s#jMb9GjyUz=?AP?Oh0jqC;A`)v?85zQ!4X+GWi z_$Q>0k;)Q0Y1Q9e9`AUE9o2gwY~YbG;5n%eNsdBPYcewXsBjeA*6rQBqS7%J68u@BXz3Y)R?`a1^AFM7o z!Z*ZQpI!@KSnn)h{)ZUle;uMtlo}@eDPlW05@L@*y6%l$lff(bAlYyNKAUwCQw6xU8 z=ZspfYK(I55#SxL|x;V8Cny;`%P?M^-vG!}{%Z+@B>v=2dx&BeW z@tc3NrsJ;Yis#M|hKpY#=nRqcD(LFgEG{o+zohB(^dsfxVYF%s(RFHp2y{oOo``Ek zscZX9y9#swtqi3o3^Gpq#cChviZzM=!%=s&pL>qsxy?Q}xG6V2+>| z*Tb+*9m_)&ftbgH#J6J3X4{GVfpNiOJmEG{M&%A-ZapqWS9dz~Xx9lfHPcTYalrlo_kwvm|=GFtGq1l9R~sFrO?{k^2Dy!w?-pUSsCyB6F~fbKI^?j4uwLM zMt>$V*VC?qNIW5BWK8Cl>!%t3;6$(qYGcFx1HNx3Ic==zk*8f!hQF65?%^@*z|{GR zq(4+7$#!_zyB-Z%X#rTp?h8_LCB@inVhL0c7`R76BG5il4maf?Jzpr&LR~<_0+uIm z4ITkxNI#N9brT(@ph<4s9I00!s4n10`Mp-I46R*?7Ou7Et=IvgrV)zQHN6#NVxwTk z014(}9U!*`UT2{3bSASeEOvXLMgFxlSN)a}2CrMoEA(J}yyX7!QNlG%%pFzj>d8Ml zpdH~`!cBn1HGx_49b2L9+HZ6>N9-nN&U$FH0T6Q!kTbz{8=t~`_ZBur zGM6H&8^2w)dU<$p(lY6)>0#(K>)i97o-RFZ@nC4~v{!oN{>SpFDofEDC?rg!pr;xI&b(L1{Kvaw=&V>HPEZDxa=dEew9rUV0?KNcSts}lco#MzJSs^mF;XBo-VmkZ0XiVt8!eWjQb3e0LI-Xefv60-07 zBr&p|PM{x-B60T(?%F&0?Cn$A;cmIq@o`FWvuJtzusa1CDXbr>Tea$u&@v$@c6{k_ z+>*9A$w8lYqxb8VT3yaZ%R&Po?F{VJANDdDa)kg8-}}I#rupNln46Xq-bE61Y$kSx z9(5Qt`RzFTP8%4@V`w}N9m*$#%g88X$Cb2RT$Ccr) zU2126lwoNgJs`NUrAAGgkHz%e=pi224QS+t(0hNbL#XTL0~66d3qb?N;vrVzZn(rr zE}EB{i;b-`-97kXSsDnhN6i?T$2!!mz65yhYdw@s>r~AyDv#DxOiTNBZWvNg!JiB!5{uo=MC?1^vRK26b6xEK# zSyzC>Pmlotw{`|f_k6%l*zy1AN2x;|vkj4T?TLaDc`RdPjT7t?k-(rBQl|j)bOlDJ z7rbu=3~zE7Sya_vU38JBwXXd+FB7?q65SeAlU}|4aK(~kdZBg!T+VPZC4?H0Fgt7g zlhPd%(E*}hGrfefJVr;r{D619W9v3ujDoVI71u7HV1(e%+U8}VbhCZde!SI#q-*Q5GXypXn20~ z##kv@uI0dY`)l2Lh3lG&k%0lb`^-UMd4vok7hvYhb%~`R0ESJ{CxtywQ8aZosH|u+ zcg^Z2A2?7RPqBZ}>Bj#?RsWLe;CnGKjUow7w3PZmzPxz6(e>}``9F5teo&S3EDXJs zu=^o3baj_F1!&R20E$%h0o0+KJ7 zS)Suvq)T2Y8F_E(($4LNt(%(!LYelX85A9QHL@wBYj zv$Tiv&a*y^a);-f+@>1+!fnSR7!1Y%MMw&XBKup88asB|F)OspO{p9s8dizOv=0ub zaUtN1wLT9vxGWircEMRZPSloSNKEjI3g)BIK{lIw@lC6f*s2HzA%`7EUwmo`^FC0r zmXmx!w6k#`NrNMtgw+_QqcDYv9}gZ%02vH(iLl%(HL<&8yMKp6yOL zOG@Q)Mv`n&(0$8559}9-K;_6$;Jfz(1@X> zi^^v`sWv9Hpp4pdx3>SeuVnZD`hA+i*JH*mVyvK?doqkKZzL`e7{WCxU$hQb!E@_1S+5h%!(Ul-BRa4NctF0Y{uC)ckIdB0? zlzZl6G&HDyJR-WKoo+PQ9H6DDW?T|52T4M^QKPQFjHWE_+H9f*=KQ+|6&>DUT)bt< z_m&_UOd1k!;a@56Kwd3cSg0cdz#HGHu^;(O`laH%0L+aeH8v1vyEI>EVn7E?b+?x7WY2z7rffA z?qGa&3>tNe^A$oqe0UNU*s;12PS|aVNX`c9%Qb;uH(0w$&uf+k>bmO7vGFVtbEb=h<^gXSpaVa-Ksfgjj|2zKzce3 zJ!{ezL-%EX8nZ#%3&eiv*hQpKgw%8giI((e1XYI^^+d&Tj&RDQc!u%SOuH`a_|>dS3*)iLrYtpEFF`N}Umc2;gL68;Pc zW{S@Fpf%8BIs_}G>2xif(q}{G(H3nT=2&o`cI+%Yj>4=SuM>#0$feBCV}sT8^>U((#0H2- zsOmf>oZd5iyI5(rS(8|Hb`5)*kY~WsHq0yyW~{e5r`|L!QYe`iidz3(4y^jM0NWe; zh?P;kW#n*#d@&WDCRWDJeLdpK&uW7!Vcpv?)$7=f=xK;LV)Z6s^Gp1brZ|@ufFl%5 zJyg1q(n-=I(8w6pAFNo@DOdEw?=(*L!BbS4ENodi>xr?{-fxT4xW70**sFf=$pjx$ z-?AyMqQIYFb7rarM%>|PT%*#N)8q&69iz?48Mhc3* zpEo~^lNMt&y_8c#IUc>*{1v=sB4+0~|0!QO;1~o4KiF(MEwY-Ml>vRzjf0;gJgdf{ri6cNQADre}pE%=BF83CGx&x94*q842&1Y2i* zw*0*8cT8@?{lXMHB6_mQL6LeCP1KhX_~e)5EwhU2>-CR{>)BM%umtb{&W2G z;1BS;^25%%cr8F%*Ao z^3%5@AMh0RZA|y?q&0g6JmRLk_Eb+1#t{C$j z4&)piW{5o|5+=^^9H(`^tUsh*BR)oN5j7jSH!Ne{sN%ZPHf3UWCgWLzR>?PZ5L6 zH)jk1VHFlak_=~5_Xod-r2C}%v;#+fKDR9;(~9lvr*qc0Xvpn2^Tye~OI2Qg@p9p5 zUrFK1|Mv2;+H!fW(ZL(3x_9HRpfb`_6+ZY<#XS-88D;X;{++9*?)e{-}l1x z8(Eatk5iCVL^L@~iYc zd2OlN)iKcbD-3^r1zTH|^m_oUmR@m+&ckV*e$l&NOYBQXpua$F+msks5756zpDW{) zI58k-6k1(d>k^Csehf+R(*uz*is3(Gt-}a3ZZ9(2;I6W=G6*oG&}}^7>-UxYeX=9E zbwR5yu}YG&;jczKFMQ_$gPj?Ty2eoA_`0~YAAkawS4iYrHl|q6Hm%dy$R&W{PTc7@ z13GN;o~6vcMI-~$ptTepSo>^@$oeM-IzvQCNzTUWc5)^1WUB8x^Dd5!^#(vq9d&eV z$a%P2Xj)LI)$*{ao&T7KH{mXGW7AcoQw~WHa}qWAxnq0IHT;(n)L6O)>EB>L6?aAS z_|rh(?|2-y@vrq6I}v<5lh5+GN=j!V3{3qfhm5R3JbO}ku6Q={0QV$3#T^(Y0)-(r z*BOn68Y*L$|C!A6{|r8s`e`|=_bMtXK(dm3kcJ*K1~8Uq1Q<3s*^nFyLCa|9=UC;Y zV8HMaY((ERM}8DA8Hxg^Vj5{pjR(Armya)d#5}KKnEyJP+`7iAIHnn(uuK^*qCS6q zb>0hbx$@Qv6+;sf#Mdhoy@s(+Of0l~#a?7!>B9%~%Gx?T&)p~Lw2MQtKCYaD&~^#1nxa97XAQQ9S;26+GsI3q00bm; z+|VhA1iRMc?;8pH09;**d-3KtFTW@ngm~eSE{$k5sy#f$kI&4|f1fa(Eh_3O&rVl6 z6iXh>Wxf$EewbFjH?%u6`(6nc9m*{Gqk)E@mP)F=fLS(;3S0_r?Jw*Fb_ehMTG+AN z-9E8*jdgK(Vf)Zl*TsLXthLhZTJ`!+N_|8V$ zPUj?EeKiEX5np@yzAw1#U;L%FunmllKg8j3c)kDuH%k~@c>Ax%NY=skpPo_WA~3?O zU}YYAj-)c*0zht2 zhLej+Y_ES}Hs0$~jnL$jGbGkIRxYz0<@ut!5M0~upo`I-J+_pCE~CTW9(5?S;Qzz< zO!S{f&G>pr-IEt^Jsrk_s=Kq>pM`-_dHVY+2YdT(b(<$8AV$Ea6sSB_9nPii9~|`0 zKJuK|czTTxOMG{~r2Y(ps&Udz4O&}Ud)nE~YK9%<*!RQ>kQeob$)-KipIjY7I)j3x zHleS_33V-e$&B@fu9Xm%ljTHYH;wNW5@xd5KQy2=i=4)ztnh1(%~yw(j;&SigQIrN z;OfA7EiLT&$x>jN7Gd#o{}EHZs~+#B3Z1J{OvTKLvG^CA>~&Hvwg`G34j11C1z z7Nk!F<6p7E&Ngb-n|(@>93#Vz5FT=fv7hkv`cu;86M-xiaPI}b5BwP&%Nn$hRb+|v z8_Gm8^KZCqNLK9c??n`S`0&Qv8O-TQdSlTba!bhNkBJ_t?)l_i&UHH0pbzjr6Kc`f zu+0Y}U0rNECuGOMN`eM4qeY;mxvtOnRfC;YHH9DQDc#CKZ;c~TIsG8lzksa zb@f1j2Q3)fu%A+Icsxc;UjQ9T~D&K)kGb zKDZVc7It~CfVOMy{ID8FazdR$YN})rqQcYWCRQ37qI~ z4IOt47fkUyWKx)cGddq>WJA`Y;hrkuZlqB>bH?wQ-s*FOaO_>QK|g5*b|{{ObUes! zVvu9a^#8QlPpF)g%4fthZ!Av@-s+hHEdetrmN`jjyr7s&MLL&br-U0l0tb}p;-bQ0W%`8NtZ8*%MqRM}3u5#|u|rQv zpb|H7>2_sVmZ>}DW0*X$#9@BIH=_h>l%LEYEK`(B|?zMpY1jMJE}LXI~> zVlLc?&~1ABN`G63tlQ`8?6!h*&)OD1f}r>5dvAa}c!y!;6P?kzZmM3*o7PVVZT{%$l9JQc zk#NRLtv^`5-@m%PW6=2k%{g0CLFCB&oX3WW03|fEVLxLxR~p`XOqMSx(+U!-eI%{x z$Y6UT(!H%puTtVyGt)gSl%13&6D~K3I`YCAXIOVIoeT(moELAJ$|UBkn4JV~s|#Y< zfY_0s<7IvDzlstnCB*CiCTl8V6+ESpmG}mfYO44aYu+ zTtUX~S@OjKvq$hV5eO@$noj(1ke*h)bmQ<0MgV9IOCC%)fxX#eXR-_Y4OU6h`qOLE zE)wK9vm^4~R%-zr(nX+Fa+Sw#+<@FND6=T6>*B1cs_F!iLV0|w!OqoqfK_n|A2%0` z`V-AL*hqv1jDo3h=89)5|M6f46fa{w6OBkEXo6$<_QCc`t z$bMU2t2g%~tbZleaasNDn>^#(u&&V;sZ&qy%W@{(iq@@hyluI^op`109XqEZtrgvc z#W(^isxqgwfJS@H$RVgt)md#-EReDA;A(iHE6-?3oH4Z5WEOs@!!#(M^u$a_&$CC6 z*IkuHW5HuoIPbEe4bxU!Q=kYlGwM-_ivT^j+F!PiUVz5OJ`CrBf$-!we5Mo-4>?EGw|Z z?7albF8^3D3O6~cNZsjNTZ^mg&;B&H$`9dE>xByt`brr0REQ`bNz4S-T$*mrA#i zZa8ZSDo&_&nMznH9$~?1BbiFdZ_r#W8Gt?rwCz#>9pnERL@F9&|`ID)sRByNTH?m(8%wZ?_H&VQj^} z9>KKw9h}#_VI~d_zlt-rEu74xiK0tx7gCLMN7@@p?w7YMHu#9^>d?p57Ue>Q(Jm77 zc>>=9(zyQ3bN1ccq>E} ziQ7LtKeTH;MJyJ5LUP)afQFKg_eo1iVR;K4RrJJhD+2t3E72qmEuV34a2GtfdVrd5 zRIsxjGxk_w>2CmhLe!}5V8)_J1DNeWR)dtD2xO2r*?26mw0U~MywrGHb*d;%s1Y$c z*olVYk}fh5jE_fFl*Y&LJG~AkI-nldnSbISjB&NuPaZ;10uk`ZGpUU{ zzV=M^dHu+B$IK2xnOs?SxQ1N>`?<20+QY|*cT$hnW0iico7u%^0lU=q@}kH09sRNx zUEG2a7(??auoaAq#xf|a_brAi#76oJ@^qR$i! zaC>n^@72AW6=JBv5#5>U;ofx(GUiwg{kz6Q%&gp%B8j%kjcz(u=6) z`10vebGnWU8O5i#d#NXTmb9CU7`c8d$buv8xvURa;^VgDlJL%9>2Cnl5HP?b) zD1C;9QPok)X%U6^;D3xn?LQC=G$jIKtTOzHKgU0^J{h2n0)8$#s#alGbN_&w5-=JE+t+99APb|l}S?Nk9X9$ z%AUDKrRh-9KR9<-MKjMtyw6oh6BAMn4vw9l)cqZNV+N^}3ul@>YU95OK$Ie5I4$q7 z5UNwp-wEc6#UVuSE%Y+F$u6jRk^1YmHCLIIx_SjEDIdM!sl8Pm z<$=+j@@35agk`EiKJ%9^z`FPx#EP*(MVC3Dyp^8#Xg8-ZOFiH9lG%jv(UkJuGrcrU z!nFl_)>h8g;hJp_)yr;G`T#FxJ{1n==iFzW2#|Q74NF?TM|_rJ3IwI{ca0G^<9G9_ z2yK8l=wO}&A>N#+7Y4&;;@r5b(=f9~y|el`xm0u)KV1|hTMqPm1!9{B>l#Q<)Ll|R zupQ{{3Sw?hZ8%zTcyOMuS_HlK4)9p}`LR~KYyf>SX~gW0SOL(&>0n7GXL?pfrWIzg zQ?~E=gT}nsq^X>W<-@54ak|F2&g#~3{P$1PbRHW;%_;F+fJPP-;4r9uHRI=JgQ@)X zZ5zIl7s{LDyua>I>ap8a?(-it^Wn9DdLc+R_Vcf$!nU}hKXNJF?&?Yx$zb0(nWC$? z?v%Xm_nx85sjjF7@RW7AoJ1l*^#(%>|w#*y9x!qi>izZu39qkECW<#O}QZHUTim zehGXDsRWw0PC&9JIudAE^JFC6PRWq{0p_ybMWqh)rw6GL-?Fo_GY^#>gRL+UfK`rq zvqm_+TN@2T-`4>~^_8jcWQxyXTTMtYsqMqbDvGJI5wGk3%&a>*-B{5oxH-rkGQ0TO z$qj?@%Bkr~1VV))aKU%aw@}hzH_k)0*&aT8;uC8I8S&bm$We~aFY_Avwexn?IG7Bw z`$7B({DOIQ1`RcIC;Ro6jSNB{G5seBrxbGxGkd7HO^j-fKp0kfLb|;VS6L~J6V#Ej zC;QEJ74N)kpFQ4~4_N>KE0F*jo0w}<;)m}2-9v|4ir{?hb`R=tc>Fhn872lHjux^y zov1Vy7RQ6D`u+X1yDqT%s?b`~(hX@X-%{2)BZF}+i6-^A@o$zJKP1I{U&1%!z>ktQ ze#pd%WH<`V+>TOqy?TI4|9m7d`DUkI-)AS$$9F=DKH@Np0nH}+VY%#~$%n%aCuzsF zdx`zBjpV(<#MFjZ;iy6ZtZ!=Y=x!pp7;V9rskrQ#u*^)+Zg&7B=}u$i!IJSzcsG(D zyEKCN%wQWXpAS?8&Udv`k(d7^Vf`88PdE=`qaX?vwkn;U2aA7St(KuuX2fgxap-Z{ z&5a}aiZwnF0GMW5E8b=z*(^_(7rKeM_rB?oe@@C_02Rc`t%<2UoH-g?4wOE=5e3Gl zo_e!mMnrD<3oA1NBO@#l#0eVn>Dm?PSk#xmz2hY=t}YO((w5y~O$5Az2VaFN^orZ* zapM)pIflLrk`LB{!^47UEx(kZJ*MGe_mHUl*a9Nzj1Hk%_7 zu4i)}jHEYG0#3SGYZ4DC3kG~J=ytvn476R)vxkYo~L_^xA3T3Rv4MZ_Fypcx~wopg@$fYDd@A` z;TTNgby@1{Od*|^g?{hFlX#T0afLJVMW$|aM*2<83phs-FH0|lFWm*b2oQ z>GyLM1{{S)<$b%8txB$vvhosve%x$7-h@g}^C)tmPvbF6HAGeK}>^$;e$ z8v$E{n4-___QmJ)>wg98y)}Vc_-?GBTNb-PwcOE3k5DXB19)q=KqI?I@@vavr15D2 zC~-Ewb|J1jMw3NAKnJwAQSWpcpY$L~om~wYPaq;UZrqU9osgyqYFE_PPaGZ_3#M4A z`8o=M6&fq<`b0-Zf#NMEaDqey1`0=U>e~?F#hA`k zI%DfL!-Vo_RK}PGP))(qHkW*ZPJr%2)%S0UUo;kZ`mraTr$5OutgbuL+*Q>3Z-gje zN)v7&4^b`5t)aL+=+-mA3I_YX#jAY0j?QxfT4mulO6 zc*U(>Od|3t=V7srYG-$M_vlpM7I=gGHV9tYqkSrNQvjBX7xM}OgZtw_gQ$4WD@6## z4}St>(^?IGTagN{U#q`~qS&*Wspl?9soer!q7w+rQuZ1U=|4h4AqZvNGp{zqgS2NZ z;=A{)eRITK|J-Jp+~jGzu+jxVdq2%-Vr}(J)mkP#Xtx!(?FMJ5$YX)V#*F5!+ux{D zEtx2pBHxWptok#=(0F}0u~U@vCdJXUr;Tz%rPHfC;qhU$_Z?UF+TJiF*RpkI<)r)Zwuv%T=`6{{);Gc(#?TO*~`l?`dh#z_Q(;WB%qo-fxvWv zVf&quu&}UnnK|$qUBiiApvK{F-x3ltn*+ikP2YmOA8uzS-(BHU$-@jKNu_FomI+Zo z^+0fC>BnFGWR%ys+3!4wA^*^vru9))! zJ8rOM59P!YXC;!p+a_Qv3W{RChX~wty|GMY{=q6D&G(^=;2gN5VSAg^5Jk}_XSDcZ zwmh?;Ooh&VuHxgWa^4AS=3Q?~4e(8s8!-ek`qG?dZvj-`v_5_n0nQJYVfWi9V@uw& zXB(oRoQVFdpuNGSR5Zn7CJEmjCD|A3g|AvzySw==3|fA;PIH;)_?V5Y_t?NDMj(-&{HK$;U1 zx-kySN)P&$#!F1k)RZrqyuITHT#-*{GppP*Bu8KVGM}kVtDpRKe|CEKuB)Lsw{j`P z#H!owO-o{@pl6vO?Qp>Id*8_)RJ}Z?7s|yx(v)-R<)cW(L^sT@y6E;Wt-Jq+Z~jLt zX3{Qc0wK%aBO&VgC5me+`o^<&RH{=nS9cFsu6M-(>M&<5Daq!hlB{gbL0H4V)5d%) zZS9F&_q=3$TiYXo0iq}%0#YI(ARr*pVIU}70@AtZ?nVTq z1q7r)>F(Zi*Ou;XHta3k@U1;_X2!X`an3m-=imI8YhKy)zH2?tv!1+f^&ECBG_ewu zyOY6vbB{``bR^czU#~MFty>-Zc{+(4Epc&?2R@5t3G3=Fg>l&))Bd@DS+*j4wbCHXA|;V*4_oTL5)fhAChdIJxX6V4q@nqm*uvW#Vl>gGP66?`_bn`=F_r zhKM#fF+aa2HP22B6gI45K|A)-BY72F6O%B1fB%Ave9-icOC3rb9l;5p&)cJ197P~6 zZ%6mukYAI1DMqSmT$jQ@kKF}8N1xw%umaGB-7zl^vr^adss=7mc)mmhl+q;;Ui z;e42~GFC2VjT~3+7ER|7j3?7#(P<9?-6n1A;rSwiUu+NNkB^WiRd=upM=Z!tgEGL@ z-be@i6{UADDq1hA;?@E#WzHm*=U|_NlrWDHeNHiGLW%dKm;4)5VE8@Z)3jxbTaTQR zlRE$dU{Cid)!|@2fEj(6uva<_fcc$yL-b6DP{ECfECWSl z2~NO#eWDBfU1pq_=2|oyL};Jo_$M6sHo_SJ1Vf8gQuwo*UQeGU0}R`)E0oxC8wW=* z9kC7w8jz;?yzub%C*L1hI$Td$S^({P)bb`7Dk6=3r>8gIfuEpMC*nj_MTG$a1LOG- z1i-F6t5N%MZbiHG!Hea^ds+1wOu>5n>iHj~-UiZ0WJ96K`UVC9`Lq}Mgk_1txA-Ny zN=|s0-x9@q*40P^p~=wDQurb}w_uVSdZWLq=PclstEqVTm|0IsHrAwM-|aIQ@BVPN zT@jn^2I;LxwkjU$`!{HQk?AmyU+2Td_S@;a!- zqf;vI{w!I(uJiYGizF>9@^vpLtE;PjBF2uPqsJbx>NsaXU^Fr|Mh_~tMXy*ujk`;N zyCdRDsXuGsn>zJy_FN@%^Pr|oH+yQasQ0=LIFndtrC>H0nbfKwxex7GRGex6@%Bg{ zDl1>ZqSk!DH>x`JlGcQTqk{GeAE$kvu4R?hvUpPA~ zztG@Z_!w7q6Ns?|8)2?Cc2`dvA9lkAEfHRdn|-{5^RP~bT3UKKi@F;R`f}ouucJqH zp1HZ>>=iBl$YFv~>uTtQnXa0L{R01l$90;IAGbd#LuImo2K z#VXi@vIYFf_-GGykbz*jDMHApqu>fEx(4gvE8qqyV#BIsmMZ{^>qBGXx%}RPwo!TR z*w$9>`kVj~uF%sL3d}Pd)ZKt8M)&M?#pA^XYT`cU*0gDPV<)tDca6Tpc&=`R_ z71`nx!|sA(cl$i&CT;8OMPJgs+zVe^EO4_2EuGdU@uZN(N4XT~{PzJdQ%)|Z!ZEd~ z-PcvUV4p9A!%trBnpB7wDIO6M6F%Yxa804LwYOOCBiN3O%Tp5*8xm@Ygn(G?;oPWG zi0brW{^e95_u)4-76Vz{$kJH0{FTN#rzsnt#pf*DBzl|PmnboSLwoIV*b8T8mD+@Y z2Zmu*SriT`XB>zu3A`5ZPz?|x1rN+?9a|jIv1}bk$y1!8`B}5vc+sQcIIv@SQd5M^ zZa0p^aqeUhWhF}k&k6erd}SrNe1yGCj6CMtEVf|ReIEKL(?MUBi47d0^?@&6?q+79 zFWaH{1+_AfW+Y#vHp5LA_;8^g_^-_Hj?Ztx)PM0$eimicGfpv<-n@|Q>p@#Lap!-? z{rmlE|8>Q$iY8VabFOPiMgk{jdfH4%N-C%z{oGJ#-O4hYcxBu0k;8M6OB#uMkL<;Y zBY3*HyYH>8k`%RaFhaOCx~T3qx^LMt!Qt@4w6xZ&+1c6Q_t2uEqAscq-QSJRGpH*7 zwwav;2yw9RQ{RS~i|mgqiA0j6L2!9-kgiDj(W6JNk`oiB63PH@X8Cwm7qMZon}e9y za+DPWfxf^2-`gV^C&)`j;P62lmMfspu{TSFgEZHDhB`X!5{k5)EHC=*sqw^$-@fK0 zq^ukbtewJ`DZ8Nx_v*EPCc&_WpHZdaUmov9A=*Bc2s<|~6R%Tc?}CWac*6f%;vYPA zFR4^tOaf>RAbZAz;r<9Xrv<^DD|<)B1!vhG*>-Yg*5Jr2etb}z0dztvf^7;9GTOV(y*DP^u&aO z`icwY9oWlZfF4lVrhR-;bKd*D#Ba9Q?JE8k)u7E%$yl;N@KqxVt>cg0XAHor#eaLt zuY&kPC%xJ(x|I9s16}d6UvC9&t8?fsuX)aqTXIgLwJ`ZmI`77F#lf^bZ2H!@V}|#Dd5Zqynv`G2cAK0R7iu8Tlx~`7becrIdK}iZ))NS)mXXxX(QV zq+GZ<=bJbD{?@;L<%{Mf^2jcHS+M3kVeJLXs3$e{cU~c7w!O~5`vwN6Z#4PQ1$yC9 z56`wdrNa94&VE88lRtB$o$^WJlP@tFgL)h+K#V_sLn(Z)`L7$(s!w2@(Sj|q(L1%y z4xzn7uW( zO7#5pP3(K<-4pIJjeb5L359RWdo=d(*x3=##UNYd3|{>gzxi)&P$s?l;`NL$pZ;_^ zR`fa0we~JkvH1E5F%gmG;jUR%H}gG~to!`#zdqjN8+;)b>Y{>z*%MMjUERB*kbMWH zqp?9Jyc3=wco5YEna7C0|Dr)XfA93=Aq&rKKaW zWC%&0cwX{b9Vu?gQZA=0f2Z))UhDd$9g zzqKO|PdU}E!m=nEmzqj*?()r#SbYWn2-&l}1h1k3utI>unP7a(v9slWELi_`K}{Vo zqjGBOOLd`2B`R_hN{k*!E5n6cjs8Y{z=#pVyu?%h*hwue0Gd_<76S!+7jEpfU)7F# zy1K3|&HT1dDPnGTAES7;wzl@fH8r1HB6@IF-vHifYzrWJ0Lwy>kjsG;S@xUd=l$^Q zucsyqleW0*Zth#%pM|FE1F;6+t$bm4F?pzk%F`C+RWg}v4h&xisg?7*L>QF1^xL9E z-9TG1sm4nyb~!n2$L^~LN(=ku)!*LscP~sGFGfw)*k^P5;)QmTWQEbvh-d?fNw5r! zH<&b@ULt;Y4^;UAvZ*1(zX_%jCTQ5Bwg&lJz(VNAU3DV>qfBIDKlt2@|^>OmqMLC(&y#fvFg(4Zi7-1FrN4){fXl)Z61bM_N}8CizIKWAkj`Y!%% zP-JPobae$@=`=7gfxW$p94lu7StgS6mv7!JpHM=WBbrZ=SL_7-8>9Evvgyz07JNq@ z8PX&bj5R2nX;`h2mhdG6;2+NMr6PY@1@<*`^yO$#!gQ)U8|pylgnq%QdAMu24O>J z2vbf?l>cy)$dXGaVmRbr{JKr2wPwG3k3=pQp7&l7x&6Pmc{hC=oD4Z^@fy z$BWZAQ)7?c6E5_J_4>`?{NP0&YIliZUi182EBTiz%HM$YdW$xRCGc1G;#8j@?GXU{ zW#z_j_(4nY=O1_T#z2S5ia>7t7kl-eKc0*`kVt)7%qkGHr@x@a+F)TkipN(%{6s_`gu6 zI3jc)k#*8J=l?g`Di74D!Sc?vKi7vJTQ7dr3qT@0lhv;LZ?^Rx1OFXE@{fW4o~`)D zz<p*we@~tM@!cesD|x}f0@URK!l z@_+K_|MorAYqSzB6~-0AJ3L0io9)*L7@gS>6&wD8`4I7>V|yFW6{A`6npgwCEqVwi zLm8B8ZQ`>Zx&Gu9gNBWbjcPrL(RMoJ&F7Z|^(C$sfcVkMP-jjb%-j&asBzX~Yyg;o zI}t;>Ov}DRtelPhBm{MD1AGB<`ZGmEMZ<|oo}D2g7+)3bWzbFLYdxRWy_Qz ze7*yp8?5@4FzJ2j)aud&6&x$8A@Xu#@4b!eMdN+M+v;F(271E2p&>#rV#|<9_m?v9 z@6F)<`?!B1=r_3)v2$!cKC)YsZTLn!nW+|g71j>dwMpiz_0KY5AW6Roi6 z>oE0JBJy806O4LN0}4nku@^q@tb@9s1C>&9fy1#0r!vD76`~4@g>6S$K()D(8B_|$ zSImI?f9S;*BXz@z7$Er+hA7L-qzA`p(3y`c3*92B$tGY5x46L@UmU9s9@%=~bhlvg z#>HN;&+wSdFy)HfDWTZlJ@%tb7UtqA!1TJiELRnjy47!YxF$&1!Fc((u$w;a9T8tZ zx|vn1w@h799mTQ1Y*V7qus&Lq|8}|-3xc=&Supk*J$)UeM+3)SF5BPHW3fx1QH8qE zf|~)U@pZB$+$s5|f;tXFm5cfvdBzSfqN`Npz7-J>0Zyu+u3^rH&-{o;00~O2(MZ31 zv9S>%pR>4gqpQEDN>!0_wV-EaB_BrT>$E+DpR3=Ozvql;UVgZquF?LnUub8vuMfX1 zl-`dEd1%+$-{06Lry6;Jh&gO$5nsrHrj?ImBik6tna^Pp$=oQnUR}0bPSy5sE^Yie zMXAx~>qEH;np`EjKnEvi<<+15MA2+og@~DW1$+Ii9?tIb5(*TAdxyzKeI+re9%U)__I^ z!FN0pmTNjS7H<8}pYvBN0H!%k06eUxWZBi=A*~lppkm8Az7ccfDP}0#P9)0qRiz9d zoJTnj?Yw{pxpudffOo{=MfMS%ug#d1NoSOJjUE&OE*fR4k2szP!cyeoVWGB?YF0CU z4hV`5rX3~@bSQ4ptFFxP4X8LMUn1_8VlM~0Qu3wdc8EL{&*dan*aC~${iB}7WGyL1WUt4QaJkCtvsi<*=%5a6)o^g-uqfUZShtg2uHVtNR2&#DmS%p#hOw0&h5-#!=3|9lkqvTgVmFp2Rl{Q z(1&^-kdL1nUkPz)1g-lm7!v*gY!y?>yRefA7C=|1N~SN|wK0_B!ZP=I%O2rW|1NOP zh8kmo$_Fn^-Z8-ih2Y)d!O+?1aTVd4?X*gltJl*wO)-4h-iI?*@3upN+gqwHEaU)i znD`SUZcLrt_RYCuo&+c!8PCouM}%(C$jAtDTddVfy`PkI_`}794?MBqn7|9X{DE*w zUvISJ;@Vok1QCG>`{&yUD}9pL1yWxpUSkY2QS+|J1=cQJUJ#nnblFcPqa#j}tLSt) zy9%sE>$DVbveFE1DCr(>?icZ9G*PQh z$o7M8aNC-~dfu*F0S)KJhcG@f`5m)nj03Yg_QCtu;_CJ^N{l1`x>(}4{D5z1ycGk> zIu^NFo|N=(e6Mq7?)CKeutAE-&M4k(n>Ko~)eVwGQdI=k9Pha8%*afpiPHha!~n|Y zIvC%HKfJc2eAHHTnC?6_!8&lSc|y3;@@c>CzbuCFJ5@a+v>Zee4rB0Io1w;=2i)j%-N{4&1p}I9hT|0+nwHC{$xSE^ z8~`hu1hiV;5s$e>wp)GT(CnILPC&|ODUZ^D`moAP58Jf{(K*i#y(p^*{P-8kbC^4$ z8zUc?we{zFE9~Uzt4RB24i=lJa-STgO-ofeZS@T_5>MC~J%?u3COn7C zK8EpL2V?0IPgQF?#tfA0=7bIC7tb zicbeIYPZ%a-8MZ0k=t|-b2*m;F+bkx*=KpccgI7r@?Z=Z0CV2X);u{rI*Ngi|9~Iz zX9p_zMO3VTtf}>|X#zZ=EH!3=OH$c-LtF3xfnj(qdyM1y+O=4CmV*Vu&6VlhMmFOB z(8*7lYXpYA79N-LzQ6cV*vH1wvflj)FAj`*Lk7iN>v@IjDuL2{o+R5UbpQ0XTGIsMFVaHKLY?=F2?{FYFul<0K-PW<23r<>CufCv7gJG#ledJ4Qo! ziMi%;J*9DVo}(t+9!!wVibE#?@rwBf3_;NCpQvp+b*+WZgC|QqmwShy0#CC^?A=iQ z!n3uH4@%yzcFNKWGYa6*v2Sv54t*qA> zo$nGfTH8&@SZqvwysxgokYQvL|1yioUM>jSmm8>-uheg@VhbPa#RZqf1*e90z zU=4Lw_};4?kRWYsTB2S6^I~BGSi7t4iijfh%C-Sw=uA@NxI)T6Z!g|(08bIS^H+Bh zg8kIM?anf1M_4yO~A33Xc&h&V9{mDuURHI z*l$Em1YNmsFRGc9p~BQt4XS}-bh^G$oGM!35s|ip02&xx@&df(E=|!k$G6C?4Rm!$ zc5w=tOASB4%n){X;UMh59on>7JaHX>P24N@0Csw|wtf6Mz$=_+0I^n>+0mAX7nqX@ zBXLO4kd~GPSY|9Nw=uSy_S#Mc4c^OR)*fsZpRfX_CaY{&l&WwX6Zpif=XbX7)57K% zm3GU6wC6kMusi5TKfIpm!HexXcH~{hG^;- zTW*5O#VI8pOjK>guu)$~v%4C5vL{S+#s=z_UEmDZKm?qe9#UF%eL4^hbvRsW2>+?# z!6ZN!p(B*bGF@xP7tRWNj9aypnH`cb!~=K)nx?@PJhCaCMmG46b-r1~XZ-M(S}xPR z2>eJge`8F%{g^u#^a{kvIw(dMPnAQewWsP0bXSG|!tXIJnDK@x$;m-R&6=u04$ooV zWWVouxuY_B4AA-fndSWf)wRcMPLkYu_~MB5;ysXRV_;uJ3=}kaaoT~z$yzDw$f{z2 zhs?J}j0-w2A`-8F5k~4M#Xd@vXOv+bd_oEI_hfn<5>kU+4 z?KJJ;6i#}KibWMlDO>%!OX4m!Xyh~angGcXrN>xdkw5(1?-%(L|+_*@%&F=yU@5&6;`&F3xcc(kR!Ut-^A&&OQ2BgV~o?$V7L0Q!Wkx0RKlY;ihh zU9QSrF}uch%$>|mOH#>hu8&Ehz8TT2?!x%W5=pU;uw%JCOB2pSV~Uh$TAyn(Po4-R zWOm$rcgXdTrn0dUP(QUPrHscs$ue&u;q%{tBAXtN{|6xdaRlYB! z>Cg0?kyq>w03PB%c6HgAv*+qF6!K?qV|UYS;ffQaqM~Onmqz+9R^GPY^_Vsq%;A-W zXXcwuDN`jgl&IN1&s3TMe6b92h(c>56pLj6%=n=K)0SRut}qpQ1v54&)6tm#zKGPm z-rmL!G!PwqK=CaP&PHwhIZhf|WX*Z9<|ut#UEi+H;w`v0A>;KZ32WG8oZPDl^|Qo1TPv33ViRT()>wc z-;BCQrmDs>1@97$_O zO-<=2`(?dw3lQzohXb^wYcw~qcI8X+PTX7!`airvX@yFb;Q{d9LNm#hra^k?7W8~W z)7dMdilZF`(&Q?z>MCJ|@Lp(yn8)`5uuBla?UMG z)fwQB%^>IaKzat`0>aH|FbEm}Csvzrc4Z~+@vQi9l@j^H0>HHGX?{1erS^>iwq!2CS$A`vZuX7{E|ql1o-25nr-+!Ri)e8MY@KDv^M*1GD%?ZuGA|}%rs9mHlIWXvtKrN zWQccHDQD&*Cx~a7#M!;&I4TmQzse7b?%59d3|Gj?BMt6G8Ghn3ZWEQKR z>mIrLY0r3NOU7-pcCsDep!Ho(8?ZoF5vGeu1`2?m2(0IbebNlW_5RpG9MYS~|}=0;@gha^e*J%7%JO6ZX0L01>kT z+?_3@^^cp7&M2$;tdYS%Jn7^ZWosz#H$!>_{fLyMxMb8prt~f6>djLPC4e!iHo!}9 z@!JqZ3jC}YcuI1sg2S4_a1d+C9lR9YF4pN-malSFZnPWB32iR{vL;kx0i@nz-=^xI zL%wV?_i@!Q(au=${qfyK1D27p*`U%jU^(unMlw+nlkNgDE~q$i+`fzG1SO2JNDm~; z3E?6D>dx^l+z;=Fe7w=oA^0%E`1p{m9#DrW*8(1bqM+e=ujGa{Mo@AIqf3y04!ZR2@La2c-gxTS+Cpt=^t=PI;4)W2apEEiAKP zy<`G}Hptqp*VsRKTU7rg{t4DruYAeZERm{`e2~X4A2lJ&lk^R!n6-9HNi znV)AzK>9u3ob}CeB6gx$RYBOa8Z^eC!|?E~70^g-TpXK8eg}aX`_F;_Eh{-nrc+6x z#O4%M!I(237J7C#O~6O9nVuW?`Z55h=VLH50y%kLsl0&~l^`MP2V}{1e`zlKl^Fya zR(o+JcsB-|+GBW-C71g_73k;M*Mar=1bAMb5#xhok<4r{OcJG>$^F_KP#%avM#&c} zjz6YnmC8{8^3)5m$jd-+f(>?%B%B~cjG@}+$&p;C<hb*xtLp9Ob;90E&w;I)gxvJ2#~lP%d8Yxhtef*V;n~C3*=# zso*f+WUXbl`aJJVKvwGa$UVZRlN36?J|`}KNqmntNj&x{4PMT!?Pga)!&u&Ga?GpH z)L56}0;Lpn;iP^=2=JuWyu=T!P&MI}Nc{7gTMrj>2Vfivql={hRKok#i>29bNz1Ar zG=MEhP71!f>?@o8QfGMyTE3D;$5Ln>T>vY!SP0`veD(v8&Yvza@TfuW!y^&lE!D{u z>U?z*y?IeKD2vp4MUY*q-Kn|aoS?PXohaPeOX>rPlOjg}$BSd&82BQRsk8uMb9|J0 z)A}KGEws3To_DVWRu78Ha>k2SGZXI@gMvp}hFuF)7^+&{(tDkuf~$vdK%ro0WsDi#*Rd<5cTkZ1g$bPVe3s#5Uu9Dr4V zsx9fruhZ|SaIZJJhnuD5tJQ3ksx@^{ZB5sXj9Xhgzo52ecgn#%XuqJOG+ornq_n_J z|8Ny$Yewziko8AK!0TXOnXYG`S2>hG0o+&wqu^h1Dr_n@oVo@FKX43;p_~&MJY+P| z(F6#;RoKP^&0V9GpoZ{Q%P6;Q%;tnsT6|z1mHh#xl};LoNPs89qnx%&#}W^1hBv(N z+gJ)e_mwWhlrswlknvIUOjPV84i*_1B)!bqINV5YJ=g4nN(6yip``H(kRoS3-W2D% z4$9P!&SVEZ(>NY!2Och(UX$(w7UrvI+4}zYM)5TfObRth%yuLG< zi&+!p>7z2|QGF>QJXSzc){)|vw@(pm=U-m;O((bg&n_3`?o#LcTvtDQp*sYs>Nr>U z4%JH4sSPs$@aOUBg!B6=&2YQmg;+lNZU}OmCl{1z00fW&@1jv}N>^!hUSmuh))Cq9 zS1u20Sfh#aMmox)^}WHAXG-eROSt3+ zn>m;`(Xq6)-o8f`avVy}xPUmB%d0V3dc8AIl`}DLgi6v@?fQrd7_Fu&L;zvmn0g)g z(8w1Os~m1I9(rY%n9JG`WkQ5%%o+sCkl;Sb8xjYgJO=$#R0sB(U4pdZO+i!vjecz7 zAIzS|huMtpZL~)$IUV&ES6(OEYj%P4zP&_vjqGSqwb25W=?%*8bK5V8Q?1AC2tJ_m z>D*a9?O^Z1O-Z-z*&NEUiiQiD3^|5FGiyGohYzxRU1Y?aB?)^ z5_+YHE^Ev11k^Pw4vSB=7nn>ZtJ_oY-aK^J9tB1KGS`X^lE6J61TK7q33J$pG`Xk1 z=P^nmc4G!G3vJYxBAs{0!q9s_Xy>=N1Q$}bpjr7UPiisW&RBZ*NuY``b*mT!s)L2^ zcn4G(%I_zZ+L?-cyw3z;ImML3#^FMPX+*gTiJbCQ5|GDEc1`nRY4clhgQXUNfJNGe zNxQYzJh|^rt=r#<*49r5dLHO*oRo2EZy5t@PKqWTyfhxJF=RflsV)bs%5 zoZc7dax!9uI*`u+0N1q+6K7TgbSH*)!DOU}_4pXchYRFu#lmpSb#rDDa6@oc?)PQm zg{g*FW5R?%H(&@8#m)@tPP^>1Qba1M*~lz^0MJ=CEX?)Vu*NZD)@0L~{rtZ(Koi zdY-GGSX@>X1u#maxYT04&x6H4OJl#To}L%TYs}Sd5q$z@09l63Y?dw+NX0%qwxK$z zOqdAYbO?5~=|;j5o+mH31au>%_MOac+PUphRwdvcQ0CaK)dlkUzoQbq-UNyRO@P^o z091%2FOhH-h==0IZx3qv%w&}xQxde=#KG3a&JGW6H-T!_m7fD}Sve>T$WW~E%C3)r zZXtt#EH5CQa3{}V5^mf3EGMShAHoMe2lxM+rq0OkY>E2W>K+|iqcY!zz#7p4kLuPu ztcp7#^85}bs|N{#^1kiiEH&REOMNz^Syenhh0**5btlhGMNn4&cV0?@b&1DpB%&}r zKKH&A@B~m+3Zyd#V0LTIHg$qlMUFKRL)5H_IVM?4UHHXQjw+0qhj~18u zM@ps(rHG8E1R)SXgiD5%M=DKM(P-BMM6qSOJbPd$96P|!Bzq;MY~a-J-(Jf5=%0P9?&K92j7jLeiSyxb5*BY2g~F6`)4!%`L?S)d z>4{B@X>dBue$6LjIUG|g!Ts6wbs4;xS;|BuzxZf7?P5^i zWZ)es^u)VT30OkG*Ez3VyFmYSb!=xu+XiCI64_|H3)@&JX8~oGg-#QjnKo`1PcU8Y zVb%`c$DO6N~%U& zP0b^7z_=!znfJyrN_L)Xm~BIK8d_T0lPo?Iy_=dGbG_-cwe>|p%eeWtd5v<8&b}f) zr*H5_e+L`>;VW(havQ|xwX1;>St&8JDFnn0t()HXvV*NsqpiW&?xhs2{PP477~7Xg zIPVcKHV!Fg&|;rJ24Myu2iPPv*!;(?Zp?)*cZ_h+uNqz7)WamF&Ho%8_^a;)%j}ofJg_ zxcxyq4mnn>Cv<592DD-!x_-It;5AzxenZ0yrHUJn=&b#Nq~p%qQtC;9n>U$zp$uBY z_!1{>V+BiBO6@k1v;Yg!>({UA2X@B$nMGc_2$D|L(5~|=WOg|=JQjEDx)RL&>$X?> zV7zumj$iT)2-umXQ(yia1oj87T!j#$rBq;NUt-GoE`v~@U(*_;1SWW>Or_nho15GG zj;rfWYin!qFFz8KC5hYG&XTaLKNt9Riy3h*T&YrYQS9%R5kYP{uXCc7eovGWkLQv6z})GAckUc zW`=TaeXdaK4$~Tuz*Yv)3b`x4&eeB*e)wBE9eHzYVS>FAd_}VucQe8&t`h#>zI^Wq zOan01XIm(bkB|EmQl_O1!O!sP;Jx$l$yW)ja=9+)axxf15SOE}{!Ht8kMe_eR?UOg z3=U${VZiC`Lx8*<4fu#q`@-zSuc7g&zA+|G#c%&0`S@~P>Gimr7z46bzYwaNrcwA= z_$EoQ-gtTrcaSsq*VszPIE6>k-*cwiAP&I?>kDt4MdH6Ic2_>-=1ejp8WRh zLF02p0HKx$9FJfd!cp6B`;JP!O32K_6N9r{I%hE9YXYaf{6Fu(PiF$~FI=uvlt)fC zum?m_O!&XeXO4PXEGFHuF{p4r-wI8xT?A^19Q z1@{lO>|Z9gS;+0{*ZT@NljmvVbK=JI>S}ABLi;lm=)ovfaE<%h;X;ca5}ltHfnVqP zg-aERGK?&$)B`AHDt25U5s?q|^#&Sy4k_a^GbWtERoOFm{pHzw&J3jAu12?F^}v9f zH$L4RNlD4|FHaH^bh|!DrAR!wh>aZrA24Z76h3KjIZ+PUSb((!QVPyCkrA|lBz?ET zE8l>h&^Xb$y1Jw)9Sfd5d-lQ&Eij19gtvz-0398@d9H13eqsp_pxl1=@TFK3I|Yb} zSdj2bA)mf{62PLmb*olSm5hvRX|y!|CIF4DJho5j;U@ZF&k3hl1nmm9X>rbYgO6GG zQg_L9uoL70Xv;_qM@L8ReVuJF-l?fT8|DK6bEj`?*eDEbYD&GoO|Btsuv-;q!_#w@ zYz1N*5FC;R2xB(m(f4(4ue6Et(FenL50rYDh|w-2KwW7ahf2&SK|!%lCQE5Zi61tW zpYrKrx?FZB09tPYHQ}*U;|`a-x#RWa^lbS6<<(J8S@g!Ex%2$_^Q>;&A3x>Dr7xhC z9x%hV4}8LeH#A5pF-kk;D4_$cGb)@LH|}1&y4T^9r2?e|K9*(r$x)DqI`m*Jc%Jij zYl=_=nyo!5sQURCHXv^vNO0U+pPrcszC-=eBOk~rWt}G!LR(~WTeMLN2OVMK78ggp zx7j0}paLzMURVgzxf#Z&8ah?S_a5+#mh*rFHlMIeFQw-}q2bUgFukY79{coH59D9k z{x|+vAv;-f9!nV9PkT>*9}kt6m)E#GO*=7=W}#eHBXuY!nY4C&K1s68XdmrjV^O{N zvnu>%;x1^tsqPVH3j}4g)(Sg|gvTD3dM{ zE8BF}s;byxv1mIKN9oe7>Is2`jN{HoUDT2IjZz4Ssm(TD?JioyYDr9delQa-z(jx! zA1RK#r?_nq;oCwULl@^wTco>IvAcgq758Mi!N-w0Xzwl-0mD6@!oi1o8`Qz!`}5%M zZJ>2p3*^|>5#@E4us?pZmCb`(dH5kc$at)5j=30QQ-Y|)jl($7);dX;O54N04Ah-S z;lCyY_|+!=<+JZRu5M~-vLCLme+uX20&7=&bX)CU2eyrzKGIT~eMOT2dFplZ+o$HQ zenjrDy^^O^vjc3@6^?=gq`I0~oJb7!bDhp8sFlqb=S%$yf#KgO+ z#lGV#?ECKB`w+S?pZz1P-X!B^ApDo@?I9hvg9zm%k5!$JwE)r0vkQF#$hZ}(ttOI1 z!f!t_d8b_I_&oHULK@fQM}N4DKkmhUcoZTEUAwl-ckE-L$iP-M-#v58z!|n}HU1Rq zk4Kqn4F6D`Hp-hPRFQ#MGXPlgkN{pHO=1o3IZO1~+FGrS2vz2Sl$g~AoL0-XkM_3; zv6m3y(VVhuSp>d5KEa?3ev$R+j~kU=AM)L*W1I#?o9(d6}7ZPr2+V2s@;@ zc|;EYaiuPO*$d4n2oW zg6Tx{x@2yhq_q1G&~83E6VOx^)#HG~4x^Dy5&}*|A_%k1XBw@%d=A8c?Ijluy=OHP z_UsS8^XvZp*`58nzfC#=Z+!gdaLHozTdSugAE#ViB$fG!wQkSe3*;^W>EyCLVogSK zTD{8C#`^H}tEnVL_2H59F^r|prZZ}&JFX_!KAFn1+KJ}AM*aC|K;N`oNKHl60;Z2< zL6tMG>Uda(R(GfTCa0wkseQ_arLFfL7*$mw*i3Zxk8~^?R!Dius1@bKvD1!u9rxzY zH`-Q%znr2#iDO8qluq$t%;f!kQUa2(W88PZq)gRK2(Nii-@e@phOV>^cg3ILuXc~f zm_e^nj)#GXHLrkx02S{xd2kF$m2YdVkC+%J&v(76J|f4#!6C;c=AGM4%u*_S0VabP zfd%T{94oa5OBpDh=nQi^I}ya7%-Ke4Qh|8s#v|*St=V*$*=he$$L^_ZA`k#6>dDA5 z#OAX<$O3a!watVR9mwbzt1kKxvuRbk4$Q{CB@GPVBZULQL&VO&AZEY0NY&MaueG(z zY8)$Ug&Mc^-tW5T)_zAK{;}QKmK8GeE%1v{r6FUV?Cp7_lbxxomV1FSnGI*<^6Se| z9?>Jl{#JH=&;kBe!t2%_z9w8X?q%jH;K))GGd`f8c(gna5D3ZzC4D=!9$4L#PUn|~ z3)4Yze=xH$QCRS~tt}wfaB9qSM%O9>gW> zFyb3GbZPkksr7nuom7RbnKZ={)t-{%x!IOrbAV_7T%drI#~wTSbdsOmEICL>+`4t^ zHpq?vwWL~r#fE|YjqvOPP-)!J*C(_eN5jAr0@SKY`Lx>B5*QSknwlN4J$xrO?;|0L zZ=#~^adHkn_i?rbs?My_{&wGw;nVVPtX)#-;bxCioyQ??+?O@#+ec=Xs@B@+U?HcJ zrZPRbAR&)D-peSJ`c~$I+^Q#QkR@Yqkl>LjHg=K}Xp$-u4QCeczD}<}n>WyzNiptx zV6@b;KqVSG-x1j|m`i3bZSS_XvCsy_$#skXr(W=Ys*7lu6`WQfU#GCq$Oh$_QVH{F z5u2CBa@iQ$!86(B!0_aU$w@V73Ld_&J(Mj0?GX`}yGHMUbqwr?WGinMH_`-2ltkI| zP$}TFT0G)WRh`g!3us)*l*%kyWYE8wgx^>HWH^{ZF~l4ChL9zx1$5sUb3CXb=14Yr ztJ!p1$Wt)lGULal-5FJC%|v+~sHFBjL&YuN2ZXx1x@wi*Ju8cDHk20&T6YM8K7RaY z7`rJX(Qq<4#Jj8ZhHJ^XG%aoxOkyVjH`3Y+avt1GkCA@=iUJ{gq@SIT&zGIONDe2#XhJ2BljGCeN&q*1ve`qZ+sU&Vk! zZ?~|}nDMRYB0r0cdHvqqD}06(@=+0hV^1p0XIX(^HM96!xOZR3`!w0~SC3mN<+4>o z*{EHP4>bxT6m4yt;Wq;KR0NYm!VObWA_{|jqK6B~g4reXUiw#H&m?=+(v2k;cGL0>nfgUXFYFD{L?Y8UlpWce$S`mG4qrIQ3vTSiY z^%jHK_A3rBumde(RTAKA93?v3nK&_}n_yB8Qjt{$fSI?b0 z=e>U!6ph5rVcRRt!%i5i&g$?ZQOC)93iqB_mK~sgVDh_D>B3sDIBy8(iMV?#OfpQ6F-M?#*JSHJ^yfa z{5!|t|G$~}G04nDKG5ra`Z7z2hJZn-{hhS=W%OW^21`;r`(MJT0@qxV{+uYLafxdUT+)0~@PdoChy8}4E?7bsfPCE9Q4uTQ#r+-7E$Iy}m6PLD_r)_r!#19t4&ZJ_TR~=0IarL`k4)Y;5eCH*W?L8=IQi0KeFZ#xglOyL_Hj zi-uqN&5+0#MU;1vrNlualM?sl?E+io43q+72|j2x`L_%g!UZy2Y#;~A=`^4E2h&;M zwumhCgKiUuC*s~IgDTOR9Zf10lhPHgsl2nW%!xWclBdXG7hp#Es$6zJdOcU*IUdRC&@Xei=Ack)93Af%gut}jH#tOz4E=bJM6QX^Yd;tN$i3X{l?%P>|F= zO(iEI9?iqfE)?UK=Vmy(`L<%Kzq%myi_`s2w3p&jCGP)<1+ZWU_9;96PS_e4^U)uU z&J>V^%aX9EP828>r*(4awBJ=IM#!atk-I#BtzIQCsYI<@ZXF2z6AHfLN0JP&8U5Vk zW8D<$4*a@T)^>u`bm)grjZl$me^B{mHMbWbv}IO}An8;df)ravWm2!xzbfsak}cJf zlwmX(uUJ1msFP+5_+S~sY2_`Gts`zlc7)FZvoygNdv?I<+au~*EBgl*`Y&FXv_m6vystD|#D@ z5x~b_NynE@4U6RyKRjZo3@ztec#SbZ-Nt3N{uB%q2a%BDUtHG10pJH>4Hxu!3PF6< zoiUWJ$MP}qb4p||n4`AI4_n&=e1Srs*f3+&Pxa()|l|%FE&cP^s8sNW)d zro|7W?u5)Fc}C#&00>6}?h`renQ=ho^Z*>1rTRQCxqvP|$n+uAC&<4!+Y#AR5u=oe zEUEzIJx#rN5;uoC@7H86BZd;qHNJJ_`KwF#18)iVQb#faOEvS-Sw{>3G-7E9tzoRP z9t0^Z$f^^DgPjvfkg1+$B6TY8ekv&F1H#&=wOf>w9RedDyh3_SihjKMX z2Rm&=Mk881Nga6x1I9E8c?m$AMSE|KK~Fpb#h$op$oz;s|%s5zx%G){t~9nx=LR#Gpavur+S8vkx+j&E?t; zd*{QNwFTY%@^zdj$I7f&KW2(bW8k!f&_SG?z}N-oq`cV;T?wNPT*0mMWJWW0#pW{%SZ$G!_+F)14eU$k>RyKEb_k;llfr zloTxv`>kd5S0nqvd3G_Oas6wdbaF3kUg<;O{h2N;AnefIn5X~Lj}t~K`=Zw-Stzi! z%n3BaG4LIJ{hUM(Vsuhx_7~tp)MI#DVz;5wV?V2B4$xdg8P1?{D**2*=5Xmg+qdFS z0zq4D4CxXbGX;gC2N8%uyJb!=opn1mmwFCJKj=_+S9(JUoJO-Ce4d9(u_>xJZQ&PZ ztxeXrcb8faaDWj`<0??;3g@;9Qf&A-?sCGDEHDC)brxU7^KK1oFZKK%ZEqb`^_sm8 z9|KhEK%@->0VSkSLZ!Pqq(oX;S`3u#?rt{Sq0-&Wrn_s?@veQ|@66G;X0Dmv@to_L zKlXTF^NHtK&sz6=uY1V`P^%g;aY!o}j(z_$-M4_KAhp{s*X&)M=R`)iIy-w~Q_2K& zqVv|SMhnU6Z2;|FK~bn$Zp$6Gl<$6z*M3yyPAOoAjnIdrHD1LZvxQoD3Dh$k z)qbM(gwK6J?lOV`$gS~?BEYyx(DFhpZFd&aK@DnJ_`**C{ZHg@zd3H+yv1%Cw6nLT zE8^?*hI=5_>YLPo{%7UE`EETSJti{245jDh~PREnrLiBQTR=gvIn^HLJtFj}A z+4P2B$B@C2Eeq8gNEM5Izq7w@qa0mmIYOvwNf>Y{j|ci1BYmNNP5$}xcBH)mDI{>d z*;qNU;FP<>MZac!>>Y-E{{%Kuv;$fj< z_v-85vZM&>;&&7eWpiH}OVSo%c4TR2&$Y(}Cclb%?)cJJ=GUP7|Ve0Tc(M|cJXHj~BktEue@Rrt0{ z2NqxLFSp}mu~?K7_`ES|KfH>+{hE{X^PhPcKfX;b9SoD{rsSf0m^>^9M>*;8EwKgp zioJPCT$)kol7!LG+v3&TkPaE(SXzix*t6-h-R2>(U43TyEPt?IrEaY9vu3SF`1(v_ zsOCfs$3@S0%S(BfC3gE33F?m6Tk)n)lcZyDL!Zf?VfLTcp8L=OQw1lNK-K(Z9_a~U$+R^Mbc?km+ zloD~7OVQ>ItD^t9b@4(gdF3IsE)po)Tdn<=>m?fr5dYXmGN zbr2J2?QnEKs%1q23=O@^`&}DA;#Al7S1Ld{u}@H9yjXqmM$g9hWzS?Z4f&5}%ei+h z315h(;P|LSlfFB39UK4@M-()3o}mX3HU2ricF*;>`6s*jgev zo-;)Ze}e-Qm;F=mvtodgoHnG#(cC*QTzt;g?q5LZ0n`@EVj2)V0hBsJ=)l@*nIbV0Vw9sYnW`Br-?Pks4WWP}8}vhl}&eG5v(>N!|36iF}JCg<7x9 z2`Gw#dJ6|glVWUnT;@@8or)^9S*f$w+muQ>&!CFPuw&yPMdt8jj)yc)k>asDg3wL7xNf;LU|^}w@}^00O+2;+ zBpiVx0IVrRwfLlN6XD{LKT^!kWJDGkS8A!TNuOO`DmcU69>bkx_wb2s8m!uo8T$np zAKRl{ob`5IV#N?&J8H40cS2!1pZv&83)&(L$WY-1LxtWfaV}fta~;h}nyrkV?N)Bk zsE~hug7B38ap?e;O?8EsIC6QWZuWZ8xM_0;+f0v+&F1VK0B)T27Dp;Zlx&;DvW20u zxfaqUgS#!3-R>Ob8jZ6F8S>aZ_#8*q=em+}=B9_=#44v-@fZpz_~d9czUpso+lCAW zmwg0!5-!XPkV2nr%U0WzJ>bF0`H9>Uu(E}i${Om|rzktr3pH!SDn5vWvo?TDMm!V% z_0u+j?+cD=%Bq8{er68-vFQI;{{QvU+r)PYsq=->2o)sl7ex9MV> zOI*7AhN~M9o5aDv0YPZzW}$peLdaT|wOZaIl~S&P2WkkF0d?DuXHQ8ojYim!!En-6 zynj>de(BqY!*S*EllXFtASb-jJ*cM5K~Q-vj+7I(B0wKzZSy%aldq^qBpyf=(QU+ zG?{x9uLV9*B<)40TIv;xviE;|a|8sE5pyrCF|rutaVN1B;Cj=6fS!vVFw5?P)>Vg1 zKg0tLF8O+hZqc;eoy;)lTH`@4tvZyj$y5yLyAF{gQ*4RZoUZjX9z~#G z_%_y1m{Qe*GtHqI_9tCcN(!o%w?_&K>{Ob5c{>A?1Fo^LENbDbdGR*eh9PeiPIra0 zLmhpKis+S1%lcI8RKZBk7m5edx~?wPT=s`3oO(b^Q|X06p&|l;TVlF3GF3+~^&Q1% zAd`_w^BdEd7P?v=A0MDHFTEZJWpa?YzR~sd=;PrX~h=&^%ubqGttuSsqI30xj zA)&KjacVy=mhl&IN2#*RLk9uar56K4vHbaxywmZT$0;g2%cZ(()14RpLo`1(? zF{hC6@i7$S;**=-vho&_}*}COAU!4OJ+81aLlqJ`O!{MkDjxZUbx1%ROpZ6~5 zxr2vdynz3tJClkpgidD0_`O1-kwAKlp<;g$0Ohi4Z~#!jykuKxoo0bn(B2pD^E!1V zmwS8h8r$S39MU1J@^+-~_5+}tX=tRbpn#%pj$P6G5-NCqZ!fsjpHenynT1-#EvKg2 zvdvhsdLiO%Ou0s%tt}L2;O+4d@{4LEdhwP0rG*7bK$~gPH>iwMS{Iqyc!}NHAEj9C zZy7-L^!Wfz?dg>?1!9%Vm(OaKr$^?$T#Y3Gs^VB-gAGlY@XbGUv$-5oF76yvVm zj1Y@ratCU&EK{~t!sOlq$U2-5R(qQ|PNtH+K~NLlu#~Od(Cy85B%LA^z)R%p17)3f zZ<67B{Nynn{pynVdPu%Hpl8Gf5Tx1pChSKFTp$j+ z4?Kd`RHJNNQ}9R~G|5R^kj{B^5jn1zLL*;cPaWFxg(?gG3F-8?V4AV>Yug3XEZErC z_oY+WDWF2v2}E3iI{FpW^O?RVm()DH-gd(y-LmOM>TRZQMa9Jon{6Dep+ZqJ*C-Z` zr50l$AvaPx==8VHlhJP8`X)?RFGlrZ98zkYK@40!hkAT9!__uCiDl~ zTYS1Hm@H8=vZq*2dord}kaRby>Y&Qzc=6uF-v;ks%lfgtXTxvzf z-PvX1!sUV~P$>eH%j2gZ){iSG5v30S#R&irTph5xla-figIqH5ygK4zo0yIO^zTSt z4HFgYD!>a>PlJvz-e}~Aidq)?t{%uVA1dZ^ zT_W7$1#e~&XzlBLR5PO+1#Ts>ooPMXkk`sfN{QYFSHBLO=u7~`Md<=4{1T_<3YE*O zyQQAe)Id8$Y`czWpKQ?$~GIaFO2HT3%3q>Qm_#>U0vXZ;zB{^`s%LrY3{nG)c;k_Rl<)R($qJgfqBjg(Smw}bk45b`t`J1u3!b0i0pb(`M9+EtDxL<+Jr-Zv0NDGqRfAD0J5d^GC zmui^Vd|ngM0$vm3M*hKo7{!FzG7l@A>Ne#~>F_c3_lu4j4a(H;y+^cgj$YOn_ z)yU@ca0Lv$ND9nJcQ}^S{Qi-Ddc+`E!jo^VV~Wepv%ggK>k%S&TjdPh&y;J2)aYcr zT;)VE#gT9*y9P4{9cjP=@u7Rvln?m!|_A{ zFXzabtd7;Lfqd02(vW+mJ7GnW|0dl>MM2RZrDT+x%skY44G(X=D<0$mF+EI!hM+=V zz){I@pIf?&x9LHe)}ov!Vo>t7)?;bOqx&0JhiL*C$zWXj^)s>k6gR?KK{VY3&u}nb z8uPOK6Jd^1mA*U2Tqwde#f5_g%2Pgsx~Tc?7_3DWLnvGHa0Y;(KxVOuVS?{kch#d4 z(lqNIF7tfZLz0q`Dts@s$$}n@(w$0;pW3Rt>`&Hu5?ku6-h32c2{grhfZLJxsO!ff zqRc(!6B=vW9r)bw20~x;#0eE%zv9(>57E%tI&yDjia8k)j=G(-NIpPm;`x2G%_4)w z`)b$Zux;EtJS;BQ9Ap(7*02%zo%{8dqw5IpVLgyZ+6t0#;vn{*fUZK^@?kWM6v}vb z2Q6<|k^~MsWCs>FJuN8T?*;&t*(n7@M2Q?!kLcHergfd?FnSOpQRh;hzx#BaBgr|D zq%BGOg=rRjZ8`Mjn_md_oERUUTvbaKg}bV1Z51u>OvD7x^&ZfXfz~MX$;8NjxtrIz zLQ6moZMHPPZNIDaNyXHuipVA{VfrZ=a05XWT2%x~MejQ#Yq_pq*IK>YXVR7?FWFyY z8k+oW_>JU=M&5^N!*t2-EYp-)<93v8{+MmN&G-s7a>x*+Pgq+_u0!)-LMCvY&N=mK zHv8TSGY3tA4;m+H3F*9Vzd74(hRalj3AX83A3x2F2niuft-lu<8z1v)YQ~WXRWHnB z8VoWfOE1t`Z6l+Bd)F?=NK`Jt5fatvUzUlq312j*ShHEG-u;m!{~<5?e+ZFcCsUFJ zGu0}a5op~Q5Nh`!k%2Ck!X$O=mi%|`ev>ahAd|eBhZi!g1G~T5%+-go%S>#Deo_)o2sF`*9^U71-JC4}W4O%Z2 z(pfGmfh5b(LTzdUnEGIb1^kjiCISLDkw6Bh6`{Mk-rfQF&SZ#<;x*Qhh^Y{CF9~?g zd08y6%00*3QUM8Gb5Ss$v8?BApNX|7BioxufxoHYoIFrbs&*--z z(&0*NK{rxIGcdC`*NLklw^HZr;4VV_VgqXOSe6kGx->C;qQ6LffrOMa#ArNSKBs2$ z%I{m#kt}(}*@Ft9s7Vb9 zIKXI3r@&z{kC4Y?rbP=4?nsL@`%Ek5$ZJ6@>Lca={rsFQ_x(V$ekOR?S59pC|yWVVnl%0sRidq?w zt#RM4vIsI8kzFuG<#*X80+*10o2^)|obcW%^ggqkB0+~wnhQk=s(ijXcaCm)+`r;z zFBAZd&}sFcfTzP{l8}E4?-tSO{dmapX`hgGw+F8$G+|h&jR!(G;0HV3l($zg8Ytik zGt3cLl^fHfA*X47J( zp%c2;pTm2!w?N%rxF%YXXbTz4o%=7ez;hXk>EdX!jwmWsnponMn zQ}7H8QP=KqB(RWbFX%D^UC(uCE>R;%jE*6sK)^$_EkGVD3sQNf$w)~XKA!V!LL?>e zHjPl$#yIPaL$GRD{cg=-IxS>MC;htJSP~QJ(Et!a@^`0rvNA3ZrLH)DZbhPCc_Ja^ z10u*Fu-N%@*>leQ^i>xfI{qKu8|Upq3{nv(ri z>NQ;4V5Jb{ec)^tJ?MbV(>x0Vfmtz}UVQp#Yj=&DFd4k!3!=9kPP*ROSleRvzQ1Nv_2pg1S2G$c-4$=N$vVC#Nv zlj z=}i|uWVzj7$i#9Bm}R9aqd^@2z(U5YDH2r3kyI+BiUc(A8o7Gg&jm{6wc) zO&mM8-29Er=7i+7^jnRYM^Tm~k(>C}x+mXvb zy2AR<7{P^&12tqpSF&VnE+$K;VTJ(>sQA}`k2h(>doTha-U=3K~JIt4idWQSn< zd87AK!V5jHPaVQT4H{MW%c|hMEEMH@x3=Ok_N9lKsS#gI93vzDpylUWTi2D-2(f$7b?Rgy@Q}@va$>igqrji zYu(ZJ80YbbRFP8kvj(-7CYUIty}_@(QFHT#q+K~waJWRV(0JzqV(H4=mTRC{L{g+# z9_$!vzpyeJ!ndCwx>z^)XG*P~Qj*8%U%{|(5+(&$ARv<{G%o|f!NRpiwy>z7mD2AFPG9>CvYRc>Ct> zizKh~!69v`r*i)0K~g9&9$pH*C}OldmY3lLFIOMVmoAbxHFR|&>HV!fVcg#!Ua1I6 zBKo-&)Xx~xEAA6IQdikII5=u)YE|xXs({TFyOx_T57npZbR$$nnT}T~wt@JiEPU0B z2#E&fg%l9Xj;hYPASzhQ9-RaMjd0{XWww5QYjGl|6G{!kqGrx(4mDV`7QA%&F*dz> z$MX{WeGIYh=3Iz!sW@D##YAUa0bbFTD6S7i<-zDaKAi_6j5;$d;n4KNJt*e1oEnM= zDL;*w2#Wp-i|H%;26LehmJL0ignVt+>)%4UUxKDKmFnK?Z6dg^NggV*He|V?`ocp! zK^M?t&tm~wl5)QO^0w~zbLVKy=65$L==>6W)YT(skZvjZ%p*QYE_3ccw5UL<8c43& zHtF5&fs~dCIGZfDTWgL_56!OAvZ^))@r*#3qCwvsCYvn5y>|ab+!_n0C$?N0)o)-M{l>YcNPQ3Gr$kay?(*OjY!YtL@5kk{AU3f~h z&Bn^(O~E?iWai z6|Y-fK#Q_~EW7J)T&4)}z+tJ1_t6a?f|4UMV7ylc)rinYg)-y?cgcZkRQ8zo z252|BT12@h&68f+WJY&14Do*d_~Wkl+IdNMW2lPM2lOF?;quaG0sPd4K<}1U( z0AJq+>z3jr3OOj_`b({14IQ84F>XN*PtHQBx<~bv)bptZe}Jv17flE+Cy0dWQ}HD9 z%mjee0hplMXf{i7MflE=%SUuSddeBrpj40kX9Dp)TQ% z^5WuV590$j&+iFGvR5vxG3xIqck(vFL*Qjtvmunr)6HAH0V(tYaP}-V484Er`o_my z8-Hl=5Uks?2Mn+0&~I6(#6q|;@7bwd46KU%d6>I_sxq%#Ci_WYSOvEW4z-~Q zf*5#kG;(&7vAvA!WNgm$*v06?+j?*gtKpTqXxQu?Q+xD_Cwdu6Eg-q;C(2&oMk^y? zF1sfGh_-w!yUP4_)eDGP(rU8SP$mSrrA+F?apoLpH`VS^0Rwbr=!-KwJlfN9WhpnE zu>c4hvsl!d#$Jn4%lXmq>IZiI{s6|H2Dp|-b~uo?99%0;9f zG#i5`L9*6Mu~zp{+(ZJ_1t<2CnRnSF1IUTH{Ie6X z4oGy7BxsT{$-Eu7-@r?R1C7w-a2LEH{KzFqSsuwS>G!>94qC?CET@CM94|MJc>@z1 ze4ec*S#r>@4^o<|Wek}Rp%YLg70!D{1BMt_H@q;;mxGVUNdCppZG=)0MWpRInB;+o z$)a{X3M>HEH(EJ@dpg)PdjlXen;MsIE#-YeUAvaSXKP!k%zkG0-sp8AqU6JcS+))B zgdYzgFE`G&JIK%n&}vk#*|{h%IujYlKi46iA+gM_XlwgkM@5T-oZm*W>TxtEbwVRp zSDmKXrb?`>xw6#nD@_;b4i%f{bcR~C?A=ErElTc$Pei1~Xd4r-^4PZI9?e0*k#y2x zSsy~IQn5uIwFf$9PQZ8cyhX%=Y||OolrMU_7GoF*?Gbfw(2&h16D%9Tya8Xbh&P8_ zpMb??EmMoPWH&$c2F96OgZinT^6}&En_Qo6cV53G&;SK=T$% zf@7W|hSV$t)2t#zIGLKcx8eLCpHI*sa7PvDu}ZSuQ?psGu&20`aOTi) zAW6aXY;L$L5u7!@vt|seO^y^IxmbRTwSOvD*WEa&Tb8W#1d>Xv-icvKnY7=-Ec7XL zY8s}zk?T(Bp6a-NXdVRF)E!;Bm>l8sC(;Ygh=JlxTp;P*>lE-O@&_x3g-fwmK5Wp$ zT5Ld(R3oba#uv=ZESAe*U>8@dV`FkLg%7q5hi(U>;en(=?(2AG{Bs9~+lHY2%NCSY z0Wd#X(Kpqlhe5ZijcNt-T>^~(=}YSKqkXgn#@~~YvXiOWwmJmuCSe?McNlfNBb?2R zP-mwODzD%*_&N6+UP`&^eYjUd#go)iMIkwu4*c2lh_gYHg{oa-m$fA-+ytd)Jr{2e zN}0QZ8Po6Wtw*p0eH1$FQS;L0E?l5TB<58Sj(om+%n8N%;;pSO6YAA23NtXv`ULn& zSYjNkENB0Vrf^gs3UKE2UR6aTh1s-jY3^%DCQMed+0pDI6@{?caM}om@=rxc!KwJz z9uvu-mmeuSHL_1WsXAZdYyFs8*CjZajE33p^JQX_)JzpXy@euoZ$g*A7j)O0*#yNi z7@J8tkC|rum=~yMLQ(I8+Ib!|fQiRw{pF$AlVNurvoq4c5M%_86!fzV?|6t>Ws)-Y zlS`-g&DCF=Xr>mt!waPiS%3X!CWC>nX=px?N9(X*kSBl6^PuEiq5+DeR!IcNMMV^r zQty6QzHw5zR}R{cHySN2%_lQ?d_q0lWiotXx%KO4Gk6!JD<1n~D69H`NF`C%JuM`M z;^EEf8*zru=o%T^Z_x@g1U$M23n263;&6AdB+4YuZf|Zz#C1N|-e92gHl-|8AZ)hz zOTJ*MiY&aJ)bkut=s}a97)xn65u;FcJ13PsF?}Fe);Bwa7ft-7LGPe>bg;5GzP&fv zDazpslrdkT2%!X5&)9!S@x$F_p7<&|7oi?v&cIu&|Yp@n@-v-UNzIKAkre75r?Aehf} z8vx@ByZ&F{hQ$azI!fHQU~(6xN~R6p&Sj%tNez`=8noowdgY&>frqh&f*!&hHN1<|^Uk=U9EU<7 z$RWX{Qc{sHP3!gQ?_HNP3XfyBT{|ZSh(S<{G_{^LQnJiG{TJ*)PDiwy8BLt_Wsa?{ zRPbI*pOV6;gjDuEv@H20M(93F6bWa1Izg+!?t^B~AlVJY@-Lza2?z>$02s>ytp=_} zpjt*iIVa%vfSm@Jp2e(lPYC>;=j zYI&lx04Jtf^GYSd|3WH*SKiDvT1>D!!B6_k>a4`#FR zK>NhXhbSLF$1d9WA|A94pnavRznR@xf+_oHr>n0!wbu_GZeMusRunWFaWQX>)V3v&qdNzbsrmDkX^JbjWK){Q@m3d4-A)!-Xo@Bf{)Gq;U{+b&~_rut1 zWI*o|7ur!`NxflN2}+OxHn#T=^n7Ji?H;i?^|>->xNWB)M7DJ zNOJ^;N4Iu%Sw(2{deS!@%$rA9}1p$jcw;dHA;sL^Vk6ajb`X3!Rc03!J7`9tP7IU@0}F$^%-#VgpPv`Rxap1LQn{S z9>wY$7S>~jl`hMc*WPvTcR)N5-#juH74@=nn?n5Pz|?ow2Ia7bJZF0Yb$GmX`Ockl zUS7YA@fd!$8@ZkIPL>Ueg6JUqtyH>!L290~UUyGK{(x?Jw}MeR)1j4A^(hSQt3}V2 z6~-Opl?Q__#rA7$|59SUBt)t=tBYssQ>-B-D&m)7Xz?R{r2d;;PZ zpNvfYY;Q_8e`^_w>9C$yZJG*ini}W_dLAI`Po7@bRiknFBXECRd%&5gqQ5=QalD%Z zgBs+skY7dyK+S!BCi2*zzr-?9Rc9#{bu}$9z2h=x#M^Pz8pJK3lPqB5Xsz=7eKj^OlYcSi7H@Y;`C{^i*rW z72t={%_vXw^6qsPAHKwx6D<<8k9}lfxd14-l zC*Gqx29*VCfBcr)DkovuZyKO}qA;RZPitwwTpXF^FX0ZC~Lpl_$0P?`EADH zT5Y5kT??}yAS>6pU*^EIH@M*j)_uZhxsr#a4HH(0osYU1%ofYGhXcX0vH?hv%6?lp z^O>gLd%&6nKnCQL7v?Zk?<=|yY37b|^JYUmnW*0x;)BrHx4D=XKiR_3-ek&kYI$C- zZDJxo(f-wG8V~Py!F!fz>4&r+sp9aY<`eP_4X}lxqIzI5p~y#>mkYJsrs^ z!oiMneSQ78a+i##GN@7?;3(5qo}~^YiL~1aHn3;Do}+zSi^FO$+ZO%ira$Q98Wz#s4Zm+yVK1_L#PwXav>xPBi6REaDh>n_s&_gKgix@y*~i5AXq7j z0|)@JL|z@}`;1FWZ2b1&lZ2Sq?cLp7o-6%SR)?rwz?0M0bd*l&$3srb)7Q(_84t2a z@O*j#KArAT($dZY*lO4uum9l%fP*8bHuj9=&FDK@RJZK}`dlgftm1 z6ep3EBMf^*Okv%{^P~eT%euEQ{&)?4^3yr$sFC(OC#b~aVoT9LDOnh&ClS)lZn)4m z7G9?YoOy&fFMnvNb)1kuZ$y)V4)Py2;xFuTk+TpDMZO?~$gXnUJ`JCBc?D9+uo!-f zjei0d|F3JGPYM3kHOrB<$A8g{{D%v6ymI<%&-oM16o2v^{ja~~ObN-z_%gl%+EMtQ z`}42=bmjeT->mQ47RUInPxu!W1$Y1(W1Q^~9I|`S_#d9@U-jpoU%4$ueVQcYZ+v8E z0DvR|9-DKC(QDkl=k1W?ataGKpF=vZq8+W6F$$?zxjlrhr&%_=r~R82IN$9P$G;_S zZf>5|#T7>PJdcx&Ivj3PP}LwXE@}v#USM!Lqd|h6|$`CY|qi1q4j%o$ci&{-pQuB^%DUUysKB zey@6+JvlWsRsKp-TYJ9-7yX!li9B8ychcwh5wRTl>NMOS^Hq!kge#dk%p-;Yo-bLO zes)XxmrMWi|JTv_dQwV?7c|ZE3~u$)z+w^`IoaReUrsuU5<|FN7=|O!szmIEGVm`A zx94t)DJd=LeRBBfhw!=zOM8_0=Ij1-xy*=T)GG6`NtNAVBm(};aSosqLWu2LRTf7ze>`3i1NpM5&j|A#?250(q;1(+`3PQX!mfooFJ8jIeR7cI%+J61m*oi8IHNLGqY&6X zFFzuTusbnFz27FXD%xkSf3t2E(+2>gZ!_Bpj(~T(o-xz;61IQ` zuOlS2cF2x}NR>0V@6TUJ!x{Qq^fz6D*Ka3xcQGX7<>&PHEw-}S$W`zB|8L?pOvF8- zN=-pY$%SyZkOx;GTXOa9O4gzxFm!cwNvNq?dtEj+>DMktt~a9}#g*4zPl67umr1X# zagf^jP$Nkh4LP{~E8OtQui_tH0NYYR;_jJC1gm*mm5KBpUC_?O%tWU*t$VVkvh+e! zRyK=kuY_=#yzWl=^p^&NAKq_Q1*g4zISCn=;Hy^&{kJGTretPj9^vzzNAJHJ z8}Fv>MQ(2HnBEd-nwRG;?YZkE)oA|M6j>D5Ii(e>4Da>GWsE zBWNEfzQXV9HyP!OzH#&BUc>Ka`896NQz-h=T^wSfgBHMq*0;8jNl||%SCv=^@NARp z5xR?>OY$pLd#AasSHvZV(bK6L9A_@y3^@_q-3_y^S&YAjk;+jE(WLxMi=I>c-0Q*! zCyA-4rN9@TUEFS`KCExjAJdI+Tqdy@m47MPoxd)@IJ``ve( z@6Qv!;C2^R*XG~aQc?tR@_OWGteY3Wvi+c7>r4rb2eAJ9hvx)yjJo>8A zqSeSOyM39~mt}jit_~$(6EKpT9M&M{!1nKK_ZD3WXFuFD3cll_vH{ZeiR|r^8P$N$ zLDgc*l`&P#eBYOB_~)+w+RFdO5%c4>ym^04?v6B`f;mKl4QiGmXL^GW-RVu}bEBxQ zC$CY}XfKvIyzb__3=hlgG#rs!$50KqRbY`*Q(wQ>MfvCvT|%Rs;?%%I?3aPF->k)B zFO5g-e1G{goXVT4R^WwqOD~DH%B@4 z7frQh+pfxpe=jA40R{1a_GD@U*FBxg=DXxGisuJ1nHUU*s-hYvCv&~s+?t}ygMQgy z^WVM0E9LK|cdlq+m*c}3!)b<5c$2%gQ_rAY<&z(`=*#IQ%6M+qw0D$gX=#1{GV+Uv z1VEbuhV4e#Y>eR4=(khZ&}aN^!KCE@HMK8PBdo5cL{^5&C`U^<>7bX7+-`5vAI76# zqA3))ttkiy63WU;dfL|3lKg^#8^TX`i_PXpHEM*sps&-sWj)NW>j6J-9-}O+6>k>% ze5cB`j}}y`nE#GynbYs|*e(Jy%U01##?$kgirD7e99eu*W78NX}8m88_ z28{|E4$n6j$@3OmcILMzV;*UF~JQGlU|g}-Rf8<$kKlYhf$^Ut#IEEV9RZz8|Ucn~gJ z`kD&cu2;o|JkA^j_W}tmsALWovP9u(`Ak^Y9jqw(^ZHk8XDDR**Tgcda!L>b2yjsC z9w>7>_4$j_!tQ0fp1{ZoRXA3cRP{Xov#*loIq`SwrGEs*(>Q#W*h7oF&%X9j=*>VX zxq^R$Ttj1{(v&0Cu&rr6%v71l?+0^~{JFiL*TA+kMI8DZY$g^AGDiCQKk_9N4zSu_ z&-G{8bdHPTiBL{TUZdJZJbl%~e9Ui(HnW*t=!jQs@FUmmn@&tf5GXKY(_D~Qq2W-} zBK@0c{oh~B*BgA_@9don4t~T{ITKbHsA@m<5Q|k=Murr;Lvs$7Amq(HUJJ2WeHjgB zdq-Xoq%4AuA3s)}x>yvY-8vl6O#Ps5McxoQ0m48a)$+S)m>(4^4fz)z%ovwOZnN4S zaE&mdi`RcV%D?=RSP7>IaNSokI4vv$d+!1dovl%8A#3&UJTQ}zFlzd02PyRMQUL8t z7FVo5&c>#Ev~sNCe{^_e;Q47^A0N%>Ci(TcdzYO`GsGxrvZ=r2kCa+Dg;@?`L`Z`Z z&jj3FN}24}7>Ci@YLPFlaOKf*LF`ThG zzX7zk4ew5T&_c~)=dTwFRb^ARSlov)7Ie>XrZZGAj`qSKh1-Hq+!C-WO)7OUvRQ93 z59W&8xG^aRNi@QCu7f+{Wf>$ep^l$YWw={g3!b5Yss921y?8m>=3O&Fqcg-T&uFMb z4Jz7;b0g8;{w#6`oCjcE-y(F{V?ODnYiUiP9|rN!YNAhY@SN(6HwU{jksi9QmA_uZ z2#y{zWwqTIBfzD56-I9`&?IA1<0hzexW^zNe)XwXTfP{Z@WH%nMSphY2tk6kwdb8*t%rpVF_dtW#e~v*M;a=O>REMDi>JD|qL23F^akA&SYhzenLMQ^ij~tl|_pP5%YuC%MQ`9ECsM799)T8p;qu zuK6xy|1{+1zwUw`&Q$eBa0FiXc>er(B|U?VIOo)dJs8mA>EF@evwO#75Z}(N0#fnGu*c9=B*E*pF=;_1JFw_kin-1vBY74!o%mQ$UG}f{)<^tv?yD zFFr@-n~MoR%xC050l?40lYkB@A&D4cr(30^Ki!nruEEdI0uz#mL05}0S88@L%b_(r zouR@kgYH0Oi%+1ZB6d5H9&D%#|DvsWGH)sJ*p@HfFrDok4IQ1JLV@9uf-nz{)4@(H zhpE5bmxx{(>&>_CQKc^*{1912PhTmVPg%hoo3hhqD_bca5l~TyNOyCty1s)#96v}- z)+u+AhQz3~v0x_wpdiQVg6|e~o%1TLM;AcKXEJDDIT!*pz$>ds?=uEkLg;5$Tk_lX zRP8=df`d6W^P4D6NCT^OSNs(6tx@amQfG#+_$n{_@Vftdg#70ZJD$D@EGXua@04<) zOmzBve8EgBFIpcRt$A)2HZa63Gga*RrYcp;dcCfM#^2xl_MkHC3kmS;p)11%gwEl zndbObG==!~Cu<+hyI8AB%eNN&v$G$QQ&9LcH30gwT7$&H#*9JE91ROmYNYvm;h`tHwJKz9ws0mzQd%NWPmG<2g@R3-9?H>- z-26VHSZAcUvwGED(j1?V?$vwS)o&%{isuCXfV8-zMD=3NZM^VrcS={{*IHtS z+aSR7IdKZp)m|k}qm~hxIHm0voelo@qW``(fBbeaZO1rPgd_G_tcS{b@u{WKsXdQv zclczjqD~%O`(O&p+2i*}im>W)bcc&MqEMN;r?cVF%w8DGk><;EMoaymU0W$#7xr41 zc~4P>$?^N1bW=CZ>YGR0=6Jm{JeYqh$*QYuHp*pWh{nhbdlqABUcrC2o<&GbT6P4-6mAiSll}UUbw7GilJ2#YZ0{U_9anO4q{a zT^zStv^;>TPpE2oAe8t0Qy+R`VPUOLp^H4w!{sqhvJ|Ni>H=2hD=8X&7x=S$dpBG< zk?9sYQ5VJO&6zZNVEEOJA$S8N}RAT${YuFD^8;j;w_6{;frX?Y*|l zjuyN&6-o-$2Otdh9U5ZKmw}FLIs2W;&?&Hy058VCzG?aE6E(tKrmf+I!UHNC2X8zK zSg(>zH|-*zjFt#t(2Mxed_Gwi^3V0@&|`00I;xy*BPcn9BH3R=SWO!%7BSFjetANG zh>MdWvYLFBD)6eei#i?;+T$%Y$(ZqO;MOj38jlPJ zAa%zl!(U-pWARYTeXSOjI0wX+PQ()}t+5dfEf9wFmffpirHIMNd7sA3!PK)o33Nw% zF>C%x{j-p(9cf$@q&j3Fj0UfUjjA@-*jQMq`wWY%O6O)8v+!VUTNCj|aw;nR9S!b_ z<5tUx+gH~L3(S{Q*&I;pkA3vqO_igC7Er1)usR}cEXw0Z^AGna`dpp?^1*Ou-pu`IZXS=bZewj*6ZzcXYi+F;&$ zNHcEEjFaYB4#tjhEzA@8I_-BGd&0oRM=+Gp;6AlcWO}J&V#_oRp24S@Di`d=aPEjs zRfn?51N9JlohFA{k2U4$zFC8txgWnT={_~l8>NbuIWNDJ27T5(t^XU{A2;?M>owo^ zzO3t-o3qB#Y{~4hvw^GTZDJofIwXK&2}H-=o(yF|Gi7HQx`9J}VPW4;!{Y9plU6=9MotCFQ|C3M(uy7n-je4alho`=GLC5t1vNs= zuKA)|hk?$O&R$icz-m_R7-C&vAAmY0(qD9oK82sWH8Z&+3KG{?q^GM#OE2E)ZYr@%Xx=DEi_Q9@iKEqoix zbXNQ`ww|@*869zP@5R9aQLrgc*Eh8v`f$4_;ta3^0-d|vIBVPHXS8yKE+%|E4tSqZ19pWy#HyWvjDz4!q02@nG_G0$<^QE7!>Y@Y%dO=6b{>RT9;*2l*uCjJKQlkN76 zd&I-Sa2HR=(uVr)nySTfd|KaXY*umWJL z7_KvP9H~S**A6Sgv|HNRBquoL+i5?1(CaU2_2=iP44P}(xBF~`BBu#ZQG?Dp%!wQS z7+nAT3Dm9O7%$C$b__=u^rKl=UzkJ#kdY&=$Z zjMO1tW0tFyZy@JEr^tStQnF}U*pXILJFFn3vod7AXM2PRxt7OM{us*%2NE#NP6Yb! zKv~QL7y)?F?|zKJr#L^jLz}U)GWrqrO-fBo1Q;s|szt;ct$D!S(t99~-it@W=>&m! z)V!HGEv=JU&x{Z1t>JMxCuSru5F;m7Xx^-sZ{XZ+rNmAI=7uJ??W~mns0l5fj@cX* z_-w5W1RamNFbf_Xg2S|W6vIJ_;Fn&X;6Lim&Jzc~a)p`dnxAz+So-D#yW3fYW5cad zeQGMumfwyu#`>Ll^n(ZJgfRu&QJR7t$dkWXW{*9sdpiNIp(Zx#&(HI$0EsVI=O{Fs z>hC$w3RYz*lX4lb?pIgogu#-GQ|C6tCHp9#4K0v9aHXq4Gc?$xZjDRwq(t2Sa3&lv z>QLD`B=pI(0Pm%Z%fX`{-Jc=j#yLBdL(ogt6?QRcm<1H`k$XTSRc6y^gx#|HA*#=23MHFpqSI`)rZ(@YB{hEyPhE7MlXgI1 z@DA0Jwu$W@&P$5y_oiG*<1a7h>LqE{-(xoNXPuY>WhHC5= zyTF89ZlTBPucQ?+4aZb!q5(L`ylD9WmGVWh=u`0F#D1QO=X=713OL)K6GNBKK?`&{ z7njsmGX9-NsvdoZ{l?z<`X(qqbyi1uU7*MgXpLUZM>DF1Kf0@60fO8{_{A<%r13-j zJFQZ%Agv4uh8hJ6eP>$>T-AI#c6;g)OgZ_6weAnh(oGi%6eNJH_v!6P-Tj6=cA(rj zGvOG!uo9twd}w@R$-R(TypyxH2_>R>=T@pLWkX6;3T@lR%Q9epelB4~Ybo`bP!A8F zAC8QUTeCPQx>WLwBmsP%WcN1YHYhmDw~p%B;f=HinsKV!Yg)n9AIaF?HC|JDI)-B7 zhOMnJ)gAh<&R*(6`sl^Mw0d6X%f-Vd!zZgUZ+&i`BAykM*) z_@7tHkG0EbmTr4%v2eSfgTp%^0aum!tlqL+uYPvDX5oWQUUQ+A7){UI-1&%~Gn8W6 z5@(IPWgk2|KU?m_mDIbFwKE((IvRwO7>8VK2br!fP0PpU?QLx@G!KZ|RjXf(*2yp~ zLrNY}z4BUj%rFN=JF#AtO26fhizq6ccoXz=Z@`o!)A)4vU50X=;QguzM!ty}CHcaD zRkG#oH14KrYQ@-&XCJ;395`hMtI&QeSigIkTm+^D$(g+t7* zjbWu0(u4CO6PT8xi#07GtlRpHwiqf}fa!QY+2nn=6Xe(JAfGvH6F>m*lFx z*Q)~Ip+tMJ5WenCuRpwqq{3s7J#yUkoRmZEsAq5CgIb;lU8OuPFmw>M-3Wy~Uj^gS zhaK#tk5I!e1UbF78HNvD;XR6e$f)OVIdLuzUxEDo;72^a#QWpXJpG@iyo6H&HCmcg z!PYiX1S_ zmyoKA3ieQz+QwlY(ztOB{EWAY-Utw!soV;A(aA=zxKB$${pYZsr6l!2j56r~SXQAl7_%=)en$F^W?ZVVY5?gSWoF|H{g`y4=Yc6g0eIIvC zhBLxyYKp^?lV#?EjzR=8JTe|U@@SWy;JEfjTa6-hTk9}yBj3h3&`y1sx^9rOv!+M| zh5?SRA2ZCP+@wCJc4h!<;tYFj}s))#IRZ|T2y);hvhVZ>wDQ7?M3C8%Ti z^JC%5(lJ}c?f`e%aVD9Oyhza#?XI?ls+`?JcYPG%1%?Y7}HV7%lW z-=AeQP(T8nXJda^gpKFFJ`=*f7T#b~teooC=x{~ieMx+;Cy zO;}kKyni|n^W8CTP1TlG!Uv%Ig_3zQVyHM^5cE=^;aU4F59Qrg=>tBaC8!_HZWjzO`+`c*ck6-GDR9_7g;1 zPq82KI02OFmHpk@7i0>&49Lk^+S=53$bm_)Qv_Qw@o$~pVA#8r>I^o^Ft37BFqafL zGOOQey^865L=lfv&|EyupLuj)vpfa#^dG-{3;ouqYhJqW)~$3l*72q+}Kyjp1GcxugmVANo*9rPI(0#YmUUdItNB;uf#cX&kGHn=I@+ zFONXPK7gE*BhJx5b{@aZ+XoDEL!ZUAgK=5Yc<7Yl(5;92aK7_MO(SYU5lgJOFt@+L zGc(K#GwW>p7`aJNq$DY?cdAGCy-iytzrc5_l=_jc;Ke33?sJ>Z4_OwbIrn$I^5WZ>5dk5Mvg5+FZI6V#+?}et}7i_ig?rrQ?7=V<}O0Pa!M z?r^>bkw@S$$}CJZ6MYP)2~7JSX(XB~qkZdE>7N62%CHR<$mre)N!wQA(jdD0%;*Rg zSC}$nn*$J1ZVr^0yo=QQLj}&j+P8|_8D0fzY!Y?%07sA4;9M0npk~jo(8P|nENot> zV!W9^X~>WD=liTcRU-2@ybQ$=_K~U1Ll$JufPHr#kokLlA~ulVe^9kZg7tx-q`%D)mV&jFI=!DsuYpw zrESPK1=21Gm-o$NelIy!big~DT#$>)j}TyJcF8o&zyO)`{)2PYa8m{Ub1HB2N8*x3 zWUb;49u9BGN$p^}ZAlWWL!=XShF;>KY7mxYB?SB*W(@uJg7_1I@K zW`2Kd&VjXH%h2Nyka#Z<$+&OhOKuv;=T>Y|4sewaPAP8b2pCX^`yll zTKISD9x5*r259!&Cq1o?z1n*TqUx%l=#93~?QL30WRtDD1zpa6Be%Ob&~a?XDEEuE zTML*a)HTvN_Jf(a#Dvl=4IOXnDn4BVpoY4TOCWEYsIN3zDsCzh$uJHLFHyjr++)y4 zEl6{PLXlJGm+CVBLU|~pj?aZ`1Mh(5qaTx&L~u9K%gd#Nl3UPG`hLHn+MI%~8=#nz z6)AlxSzu2lvX0K1(>F9Hu?loc48sYg_%;AwOy*yReh=0i?u8EyPXd~n4{{SooSTkb z+v+<`Jg*#>=`6=C4YGTpXXoa=%xNYBS|_PE_BhVFzc{-@Ml>gFwtHbBkNe&WHj44UwZlU^KUkWl)P1F5g4;gL2soldPxc>t z@Ok28k$$-OFN&hmEwTxJA;GV1w~>?uJI3CkK>h<=4%W@vuX6qG*4yAvxJ0M~XMpodtu1&OSjn`7&?~ z&||DdSfW}hfOlE)E0xxC6%AmRx#yjNuSu?9%nGacFcmo7C}dtX#+{{GbMB?dz+yd^ z3645eS4sEZ20hVD1aEks7b$-(7}*OT;O`v?(2g%xKr{YMj<}b4?2OiX*>T@??A6&d zKy~_!-J_R_=BlfeZqU0#CtYS+N-F7dqeiL9uq+=}pEqUW+I2fik)^&Rbc|XeE+G5& z#~dD&1!w})>t;#}6{P}L2{_7Kh1~i#zF3%g+e5heVmOC4VamOuJn46tENRya)8lCv${=HPfd#U4O?iu||E*8q4dk8k$) z>x2D$_TYZJEPc5F@&-q1HMA_eRn)|2&g5ANC}w^h!0r!oWByLV^)fvs3Nl_B=VltSMRb9L|3G>$%@^GvET9JS6 z1%I6Gk_fW&ow_`bNz!lR0U5a3h;)CGM~7d6-QvV?#Z~bQ>?!k{aJjzblO%>i+FK}K zz89CZ$c_OT**;NTc18M@@9K@B=VeZ-lT%1PQ27osAFCF@*#s-QGPCyg+Bv?$0kCj! zs9~z{pTy4IUdu~9>6b{1rcdWH=civoF3oZ{+_R9h<1+~7UQ>*t$p#KCY3t96XS zjWlNEEe@V@9$+@*7*sCISCs}LBu3Q*(2+c5pQK6l1@b147jY39M(tm_u6g_Z$SWUoqm* z$82@L=zxra(AZgk{ZN_gg&R0lf3nc5Yw*o}QhRmzisS9Cj76Gev8uB~wN-e2tE{Rq)h~R> z5xDrWl3}W95-FkK_bCL~E@LMx>O%L(*}81WK712*D!VU&AZ^qM6}{7Gf~v&A;Us5c zufJeVW+5N?b2e92ru0mL_V*){BGT${m5PJ_zGfHe@< z3bJnpOuvP<3=|UG)RhcwNsi%QkTbnGwW(|yi2LxZCedfwiM{wk>?MIK6$`tok^Kq7 z7BhZCmKyCI@+=r#N$1^iR&cNOlP5LyV<=O~*>@gKo)xjrpS^iX?3s2xa4OdDTS%uV zCUBkyh_Ah$b6D_Qil-cV00soADUyycA3wTlmf805K(U2hawB-xKH29Y^tBH&5P|Eb zAU)JPLeI&zJ8FutU+y@+(f0%UsHn+@G;+8L1T?twl16FND@uqB-)mP}e5Bh&Tl)2{ zX)wK47F|-t6%XH0s~b1$bEmra9Hn=q6Y)Ozg#c8mc%Wn{{j(A*{1D{wF32|MvX~15 zen$Zh(HgFRsW5x9bbm%X7_YC7r+z#_D%z8OF3rDSf>2N8`^ z4ycQl#l^?;`3WJu)Minud)Qs#*^}uo0mVUvtp^yxtrYjtfkPnUW96D^X!u~Z*K?o& zLzdnX?Rv${F42RtYOM1U&~SGz$$!VM9UOk_%oUW~qBmo+ie_egr{f*Z5%SgyN9|ol z&pqI_*I=wPy$CjVwFydrTg9I~RnwL%pN>$A;PkQMpG_-XhMf=b#F95#o2xE() zHcR~D(@p-2?VOY*;B-QGMVdplJ_u%B5(iusNJ9Q&XLN%B#h>JLLcuUCJ&|X2p0^G; zV`AU^jcL8jlJV!bQZLz*q_pqA`5`vE)}M(97)bv@ZRb7~UYGv8H0cTt$T`K>5th6J z!hwXcbHY0uSFN2J?Nd>)?*T!hzw$E#xJ8cqDVD(bF4?XrQ_&p~XqIjp!A~%ifK5$=b;tW7iJ-}& zG96zpO9S?oE9c{gUJ@_F&n)OS7D=~UA55d#?rp~^7~ND-S|wYh!EyzodH(2+6ob~? zxb(&Q{NXg!aqFPqN^TOB%`i0MSsb8=2dzaWMgORO2uz*&=b>@Rkh+ZzG>dlBBiOtV z@U1U1DlH=fso+h%KU6hOJsTR<*+hl`g4$)|IEAFrqHlNhcBsDeXxFyW88IC+NKqZg z3oMG{La8ajB!$kc`Ny(euG0<;kQOr!t)Bo~@LdMgr%i>ihC6CWq0gd0$u8#`KGp!(fu3!;cS_>qD=biRMKdVxQ@fD8R`$40cX8rPk)z+SRC86liGa ziNm+1Sj=cmd8EMpi`e^-qazz8MbIIg93Zxv&KoW;mK5r{)uc}p8?16I+MVLSe!wFF z8jh>3nhOa)@Vz;`KqbFJmQ?lzz;nUC?^_@VHl0fK&8DUh53Vy#tyTUS>HQeFHrw)x!VRQnEm+ z6ppO(>A9isIOF{$V067l9#CY@0vk?C4!?MwJDIrQ-Cf0P@TSj6z_&9--J8V`!7nUC z`>9nrY821yn>JUf4Kk>@rgx8CFXIYak*1=8z?51rgfvvDlHOQOk02(FxX}IqBOv92 zS?h)YMSBY-*X93GRC@#R0Zx;4S_Ou_pK3`MeHSeK%FN&pNkw6@Iy_|&9kVxi)@?;) z0%F#9R_(mhC;h5L-ns^Ic}L58VzIsw1~AhIX7_(Mdbw}jw3?Iu^M;BdopnK5)eC>4 z{*`{h0$<2a-BIRSO2g%u*LsINGe4Z4q6Xwg_D{PU(TI*D?qLSbO2+=`XXGe>|6W@J z`vqc65X51YMW8ODOpOPq^rUfX1Aw1X?vgTNqCDOlm4DFvY8TXXtVSBFeqz7ivO&w3 zF_7k-Z+tsGD7sN^=mG;gs&6T#vrM^3h2qmaF9WdXj%x&vg zH#B>B2Bvv|P1>B;yKPU{hW(03zzu}A$Li!M1WXAy{8g^AUl@4HtOrCUX}EktiM_v| zb%1g6VCyygrit1VAb8B?B{?vG(dv}PM{kmMMA(ZL)oS&gVPFpXxUu0mQX_rOj%4BU zCaUm*4e-YrZ7vEwdk;wE%UCWg_)8z1`U=4a15elP;m1D-k1jO>W3j6RL4Q&dn)NLY zo0XQ9n$Nw(2$-?UuqxA*&lF9+vIX6>)ZL&_)ff=s2Njom{#xOVW7E622Rbjq@?DBU z0B5Ymj=I=8q0i-V5Jz@v`euq%-W6J`2NB2Sk-(qs**}CT^{hnf9(6rOg>EqJhmS6v zPy?KhQ%?OzKVZ0C67P7j2OtAg@%=LC2U|K0q^UmV@!Wrz%BKDP+#b=h?42?rf$Xe>m)SUXQXXemNR5i9KMSFW2AfN=Cx^n~nYO4w#3vX;|PE^q&DjVrHu?&TVrQq zBptd=nkuE7yY-WAfZA`EZ$>#?auHZ&&)WHgy}BekqQ+7X?-w?4|9L4;1sXcMfm#}m zM9u1}iNAX{dhiWTf-lY-`*DB#1*qTK7yVC-uRP_|)YQzZ-f}a7^&E)&aN6fhWTO2y z5=&7G2qDB&`uCG10EIksFH>$jPv6wg7<6jpwg7zhi0?Nj2E=>A_&b8~$ae=>s}U@( z-s-u-wjcJOfwrrb%M{fEdt4)Ozhv@9aM#34ofDZ%jSN={lU$(u5$!7Sf>2TX9sU(a zX1c?V9g z7E|%T1+1)hvE%zpc*#rrgN;4qC6%m07$C-V z`|?W~2%G^s&S6ghhjR>|`W3>b_^6_#tB9TN##QGiYnalP{j7-@h6@<-kVWhsuq^fq zC*tQfy$Z`Lu?N9w;1H`h8_U(f5}PE5R&RFuELg{W04Y+BV)@Z#Wb^Pb@k#MP5yUS%@>GDA;RpUM6HJtkLMU%&r>ZxXCKLELnRE$VwH3tRMo za8^S-|1%+v|1+((=biaB=a;94O`a>R`Yp zUcj9qw2^oA4YSucRu;xa`2OH>VrguYNN$PpLdmDXAk$XO#l+Zn!KE@6 zjR>n#%Kx^yJG*9JkB))dW-xZ zG1k*f?qEDV<>iX+;Crz8k)GUrQK(4pJvFop?XT!CXjR<^HjVrKkCjbziYDc5ELY9F z`YF~dftN4y)ovPJ=wB_aId0ZT_-078CA6u0NB~ki6c@-4MdynpFcBy7ewem(cv~iU zcnr6s_%LKv?;f1rpYNrGg&NK0^ER-D(APZ)1A1EW-^)&A;_gd%<{6h||3aJ5ce%9w zvix}HyvdwDM>lX^ZY<6BT=M(?M4C@;NlISgqBcy8=OiXZ1X<1 zumS9I<7UebQtX5kk-b4iF;Wt&Qf}Q9)vloQ69%jFSCg)aDoo4j(;U3K;-6kyhlh(w zaF9?pk^_S9%6<4206fZ8__RK4B$x~q7>8#hynzOo2#%Aukq?^E@1)xA6Td7nq#Tf- zeEq7xphQ=dPCPkQ{njle$qjK9-BD;XLAY*QstyPWF9;CQIPujmFqa%z;^gFfgD5gs z!0ZLArKze#>vY%zXYGtn*BSP9zJ2blh~1udnt?{8BL!Y`k@ZKi;5E*4MYTq>G%s|d zve3@biSO~NxA*+!pB!NQ`md++U+=)bH@*Mmb0=AXTd>_{B7T+pt5L$m_eZ2grw2^o zrz@`bF^L1Z>eX))$cWUDR+ZvASf`Zap&77iTLB-|upyFW%G{2IGU356bAAlH!u%hC^sN+7x79Jj@ z?qesEKDSk*@0|tW>my&!>dN8Bai5S zRANC)XC!5g=fr}*Y$lmv_HI_0xH{E>5KeYxmEt2oRYcqP9t434`%XKX2_h9cA+3^3 z#ukW`1{}scP!lUg+`n7E?;%|T%VmqOIpt&nw(w=`o5L30u$F`JC+A-yIzdFhrxF|C zVZ_ZwvnOVG4?UufRaoy|kO5RJ^7-*S=zBmxPippl^jo%5-d_<+;o}4B?3ul)N>WZ{ zY9|ZRA9B#}$6>VL!%Y?A;7_AEx&ES^VumPK6!EOnhanOm@g~u)U8ZdVt)|k}rNVxK zer47*G?1~aXbc#^_eeqqWepVGf>{>w@GAAWh~@M-mzcbv1n|I1Guv9S45MG9m=QoS%9n>7U%%vi@Edvc0GO=xFu$xJWneY&(F%wk7{N1mS7|_9v$1oNCOQoF!P=G4Lq8! znB^k;uK;8Kh3)N4Y6WWflx?8P{Qq6@2`V94K<#8_RLO_u^M)_AGOYDYFQU zhXW6bPEG-f5uLB@X8mi!5#7sal9M<{z*|PpsqYW*9pX$j{eB<*!1g$ zmLyT0*%e;q!@FpBhvlIs8PN$@zGi?d5MUhB@ z`VW^aTN*j``nh*3NBk*DH)X40|9tgI8TG@vX6fbF2nJV(UufF~kNZNKa;eL|l)wK; z(E6Vr4*q#6ccjYcOpZYLz8ls*5oZTCU>0~5DI+W_>mDCwk~Zbuk^b%5A7jq4#hvBO zJbh7fYsZ~1Kghy3IuVpbhGo!1m22v=XP->_+i?tfEE9o3f-gsI8Dup@j#&o{)Sa2D zsHw@T_wt%*U|Oe5Ok4))mc*W(E;VC$?`1JS%Mx82t_bL(C0~vC{{7l1O5vk3RImI> zotk^29334BYSzi*!%qVIJ|)%`H36%e0EU|qN4d|8o<%BSYNIPZ<lGdvEn-Igdpi8d92(fDbKX%Ay93`$5|O{~;gm@iMy z4PjvUqtH&ieci1_P*6|{1YikYc2^@*;sG~Pde-*2{!P$J+4QRnME)BM)Za=}oYA3l zc&$*$@Ds@2P6Dt5W0ue{GMZf4XPTSYrgLRx*EALauWH_u);@-P1kt*UrQu`yoUfFJyit6M6t|N}oUyG#oQqc;*Rrz@& zCI%LI<*xcs)Fr`VHW!Z^e{($K)=^gd@81TtAEo3COf8Zfogt=$13SDHe0k!|{R7)_ zeI>Wkbnaccb2RwIi;J&M-iq_Xpiqq?gh`Yfo(RpkG4i-+#Rp80Dm&d&*3_BURDL$DJL5!IG3n{|ZI-=}a^9SgjAfRkzrNwf1U?3z{-NSW`i@KA$y`&_NpdIAOWCgP0%d z3^=_sK?z-)NPI6Xy(0R0*g&7}cyB(Z*ifPjt(KS|zKu8V9|wR%^-L!55bT2UW9dd;GH7~>lj#os5hNOWlO7R9mADP zKzi~lK(jq34oj=pw)XkXT$uR429+SH(7n~MANgUP`rei%Np$Zqqw0yo@LCX)7T>fa zG#yZk5Cw)UZNwbsp_1EM6A21yKhG#U#&;-X*eJIH9(Wg zHzUk$`f{DcCZiN5yJA$8H zDh9SXqYi+*J7{L?%K9sYk2|GN*2Khw^&lU5h@swhetAvI*hAa6*n+1Q$b8Q1(I>F) zfHDQ`^yb>VBC;n59oZT}0o`gGQ&m(XXZe8Kt_Tx`@3&P&2kiXyHozb1^rF0fXz+^^ zo^uPm$N_a|Zm+>vh}} zHwR}!D43rSo=LqMnwVvyqnh+*vzOoS&$e~@Bj4|2zk_tS2eX< z9HZ+Xb2RF;ANuPY_FHisN#G!ev;SFY8=UX#jCj5>_}&#O;d}yDlM-v~Px>M$ETHI{ z`3vU<|30QBhmCy(kMUG!nyl#Y)_b)Sp|YEZX6?U_8vt|M+X)D|kt#|Z{kT^Z3<9s4 ze+#F6V7pUC!URA$!8+5&cxY?w%wJ3eok@vsKx-u`v@V_a)c`#9o=-K5%#c&}JOg)n z1tJ0O4PWEFT%rfH>C|6p4oP26suGCEb^JGPlA|Zj-8~dS3Gb@!I{UY8eUNy^)D-fJ z)z@!cGPU3S4Y?C;=aK{x?Pgnd%B+f;KZd*ku~5b`Kfg$7zX9^f#Q3bREX~B()~`v_ zW-xWMwE~vRr+4)xk=zsd2Cn7TK{lbH?1p16kInL+J8FH($Ze0VIW4TRt%@Wx^GeDY zdf#SJ`@L3B#QN~F(5I6@%IB6?sB(i0mVh3zSr!fFho`L6JPJT9mx|8R5G+m! zr+9i05j{`|e@mgT;+0WUhEr%>-cl}SrM|)9N$whdi`{8%l@+f@;p8}Y>>}kCEcf;& z(xWD8Ug)2jO+zsx+cy4p8rGlq&T7~#EiJLut6#pa_R^cO^bkr1^0gd%YmKOSa1Z@_ zjKL`Njs;EBaDGCTu(ZTRjeHLGC#Qs57iF4PUj5NC?xZ}uq`0omsG3gSJ+UJG=MF*= zz0&)>Ko(%jX3(nfoqPvJxj50HXF$sZ6*GGV!grY3m+)dO^cQG4L7+Vz!##Eh}V!EOTX5(Gg5zU$4aVh7f zO^=_OR^9Ggk@zw`g%s#ol!V=51VFtY5D3&ZLhr^W-qgKa2u%Sl<3*_^o-4T-8M=FJXb+GpzyP7 z(zIBAcYAwQFQaCsWfz)C^YdAXs6xt8$@QD0m7}g$dV*R1ObkRUITCf&oHNrNqIzyonr*hLHvpS37E%OzREJj*c*6nTni;Bn%0PeXVSseXXKNFR zG0OhBSxbj?Wj=v&*YaxR^}k>4^waRz+zWlgA-TU7$On}_8p5jPn2q%H`HF%l1dq9R z)|U`M>5Wp^Sp#WVQY@f$%(c>L!KDYKj;i*BV^O|h@L-(W{cvsQb9 zN6huY)0&B!$`{j}8kNP$D=TMTYJc^7jC8un`HVH#57h4{IjGi>7Zr(RM89XWfWWb` zY5gL9^T1i5)Hj48xL#2e>HBnq^2S=h7-0sCUZTtPzoJ^LKgAC}QngLV@q~Fvd!5kG z#6el_FF5ju#9SL(>CsH>)$?H^6xA#(nN{C2amSf&6K=$F%(|=76i(~0R%qb0T(dnp zQoROxJ@f^Fsy!C;z|AgZiBU9EF+YrE=e(fcZ6;{sus(auow3c`lr*usxmAm$JyWC& zMF@0E2O$)sBA&VB{@=rG1z2rw!8+O!>0jfrM7Xg3zh$xhA@QN(pjC})$5&|u6O;AM z28|JF#d3_oI>}=HZfBzsVAU3^ae$onAlY~N_gVwD1vh++8xGRKCLco0A6a8kayT!2 zMvft}U#vI7cjuKsoK1Q8{8z*c>p)}yv|a}*oW*bf%2{YtSzM-`hiyEo?oseosbG8Z z1oeP}T&cRXR!WW`X5DMZPX~v(T@|>|{jfRSP+7uoT!85?Y-Pf|ndH&-wR zV8_~|*-7jH1}?Rl+->s;EJE2g2pzrO?#IKao=BgoZ6v?W)aIn|je+W|X?yOwqP?_6 z+eGvJ{Oq292U*2CfIC@gI6{54s8dw9U*dDtjJ5ymySmZxPVxAvO8A4nO&C9JZ~=m} zJy`$08$Aj*+T0QWL!usYSxncSk@!fy+Rs?cYUdJ?H1baj?pnnPGu`98-DM^-K0G{J zItP~9WlkthYx<6t?MNasos%%;WvD!uQB72bxq^ld*SEX9{R3&1rFvCe@MV0+{P=o; z&kI#Qd!LaEP&2DHhZBFgH%rei0gOVy&^wnYJ|ud4HN46${q31r=UYsonAyukfBN_H zNRb6b#Wu|y(@xD)Fk1HCoaq0fAE}*tLb({vr%!q!5U8&o3qyNsR@PJ4MfOw+1oD0{DTflTlRcUg-O~uWFKX zt$u-LP-*67!`d`d?x^OIwD~fH=2!IDzrgeV9({MK%V%9`7Jq%n%CQ6E_eqjJj^=;- za6mnq1+R9%FbcH-CnuSfTA>f4)`gxH!)TRafm_{XdcYRYHj}X-1w!*e?zTL^`=?B( z^z3A3!;Fjd0`Pf5LCE&_c&<$R4EXzV-jB1;4zW`e_H_2UR}l zFkV;omr_w}l9v49>{hP|J=OTtOcw*I)`J56qH}_sj%JHn=ovmz`xr^HIT?xa!O{+o z4O}aPUz%rGAGR!Ch%q~A#?$D9L)T3!WqJl)3zQj)72(^v;JW+NvHz(ooZOCWjRtJ$ z^J|q==-OttKG3escohZMxX?B(c=cxQR(usXF)R0R(jb)AV@Kxv3200qU1hYG3)|+U)nXDe1 zF!n^7uF$>Ls{g3-^Tr9!OW7KDnj5V>;1X}S>c4%;)eO_@8eYGJOM2Gk*#B*);YHqI zHNL6^+;BuXc8IDMnJ#3hm=F~~0$Ha#H{a%ZD980^dnLlUx}Zo_@5Z9=Pq6*uy>=0# zd$se`i?OrYlD603OmxxxtnG!}tdQ6TK!lTTh-#_O|4cuhQef&4H{H}RHg=y{ zZ!3D&G37ZXcYMS59T+q_ze)?UWy&L~jW$#6VuN;P_QXU9bvNug9+@+jXRg3EGDtq- zvu`8>y!u|>CjTjG8&+a$Ee?6;dtY}FITHE@0edc}XbbFfZ7Dncb*(ZTT;Tbb-o|RQ z^(uoJJkawkX1lVo(x{5Kb{n5;@A)a~3#Z2Ch7VeDbLHUu4j3Sb^AQMy3)AJj9W5a( z<6jDkc#p5f7wtm1(n_&5NsV8=7Zt?<(;w4;d*stw z9eZOWqWnfG#f^)5vt!6}An3TGf!p#Fd@DjiJeizw!KiMFxHU#{A()MpBs=v2&-7zZ z`PQDt{>5fzbPg5oroC9A}R<}wB`#FTLZUu79R1M?TyEHwtsCdrP1Y3la=l>zvzsbmz~7R zgwg|FbBKP|RxgJYWlmND=tQY1X>+r3s|rrbaezSD3-dimOGLgaxE~}oet!o?K;X4S z`4kP6;eYz!&2^3rjTKwNnky{K&Cf{M{fXLJQyDiJMCz^*LCb?4EEe2zQtzy{iTPqS z5Wf-Q1Hue{w#K)8BSUvLdhxb2KQ(X5&*qg+78`*0YZ{0o#KlFD;9x?F50mTn`IN;# zcnySr0^Mu_^ny2STW3E@L%gSg2A*C^I=>L0yNC&p#6obJ4d{|`7k{|c%oD-z#i3+G zPSdq9iK6Ohzc897{!Zrelnpw;a_^f{?R1SsXE<<>dO^B}y=JhurhrcDNC|jgjOLtu zcJ0PBeG^Qe@g~2w<0j)N|M8Sx>);t$_{wVFjop)Nenq{_NA83!C;P#shMrbtd9#pC(wB(+MS7jhuJES_4JqvQ+Kg7OWhK3+ zU-?)XFjgi+Ck9Txt*}+i*+&^V;S2#TGljhekE1gK^!)d}OR?`?W^izs#qW&k8P{+r z?2W4{hG@a|IW*e{_@=3}uAr=~LUp*ok*Q<3wDC`G8q| zar-NRvgl)(wFnsJZ#Vcy`#%wr7BQxairOOuCKaX6&%HEUp;QC{PfL`&g+C%SfGAn& zgUn#X>&riUr{{0@2tPu>?L88Vt1zZ{$@JSS|Zk`gh zp2IkaMW4(|$ls!cJQEJ!Mxz2F0B^YAmARrEz|_~)=SzT;5Q1c4g)0+tj)D}M60!+BmFRk*xPM#o7yQo_2GOAN=!?viONw5olh1!VDsG3T`xvi}LZE#}tP*wQ4 zk|T%$HufDpa}%}`RqCFJ?`5;}HJ|#3u+<*R$T-PrVBmgEEE76qI81Uw zz+p01{a!}J!?`mr<{vu~(`p`@GNN$04ZvY4plviNokiSrgW@qc7h8SmX3$~N(`zIm z`f^woW0GZJW%N(3nO5^Ej6|~{20o&qfn>IH^%0fi>5^SaG^2v}=3V5<2@e3EHu_1B zT#m;N(C1}ko548Eg3=*!YJCo3%epp}YGOK4inn@FrTRI3SfIl;blVI_0a!{e){sTk z#f?jIpZhsl@5FLE+lfwE+IMv=UpkelEm(8ycoEsP&68c3{3Vf7c~L0~?Dzu4r9ElL z55!2Ya(Q2i=j*7D9>n^^ZUy&T{QK+i|9GMP`A5ee1uqE>iKhJZw^#1R)idhWV%OBO zYp>A{dihv`Faz!C+e44=X@$gJ(R`3M$YOC=q5^tXP=GL(quD#(Ni}{$o>N)wr2E89{8mc6$!ETHH&-n>l9up6g9z z7y-jARC%?N@))gGZg@=cVi*ZV8?lV7fCxy8Y`Srec5-O1x{>hz*eC(-7jfmiZEdfB z4qV>`Z@~^gWR!??P%A{mVh|vy!}CY1voDq*?oz-{xwd?s+-Y73WCO8HU>5g5DUWIQ z1nF);vLJy|4HI4{XG2k42P@W*#s9JKvqTms#uk z)|x+DizN_#zjOB9=h@HRXFpc4(xUVWCuYb%1%&L=xD$Q9oaer*@w9i0BFG?RkXBt` z34sCl#a(Q8PT;%b3ZkxVdkTBvvORsZ-gaQs4hhi`V&3SdPe{{K59Q;G=pOF&H>=C0 z%LcI6ek1Wzi$QQx+})Y(J)@8|ORffIUmb)tMi>4W;~XIUda`8%WPH*gZL?Zy!?-G1 zL|eUi^E6EY5O%Lp+y#~LxLEW{zUrgu|)og^zCHe21^C)&~j&kkZYZ=~N?n z#T7?NEtQ5vqGPEPbsV_qOi|uAFfdqgYi72JHVfhXGQ3fXD%rCnO&Z}lI&kz4l!bmV z&rjbD9eOV<9};GK zn9nT~GV9CiP8%b$|D-KAeBS>afVB?wE|k=7fP1?M3OF-%aq2rb!IRsiH0)X&0Xjsdn?U03H|uDt&sl}PZuDEFL=PfHF^xrdWBx(O@iUk?kJ ztY_XB`EgJUHqnw@>i&TjLg~|J5D0yr)r-t$VT>Z9e`BL(>Yh>uF}i%l-lWL~P~LTF z(u2KGY7fctgZ`9-FpX8kN-!4z)wjO#MX!9Brbx`yyF4hQxcH{(6?+YqKa8?IlFc_y z_583&k)2_mS@WT_6D-J$yx@%wg|Ds@_*|YxQ`!{mJ!H7kI?6@87sLnmAe?)=-3e<$ zWSYsbck7LOBp*R}x5l^mwU$Ce0R=XY08SP@{!()*w?f#)+WJ+27qMCYhPDB61!T}B zj#N$b*>uf(@KOBk`$;qMA3(Pg=guqxgNlRWvz4u;A_SKKAB;45AwrP}nhx(}cPR7r zQv4edg1Ph>=UpzMb+W77d$mjXgqFMI&8nDAkId<0CE4e|*7-x&WnIr{yQ_PB72pqI zFUH4N{cqrG)w?yDrrF|Dr7>w`lEEPq$(c_^+lu374q{>EJvk8^bg$D2sW@Ba-*lf`%WRh0-_3d?S;+FrNSrUZ|Lx#+Om?j)0#A- zU!q~&*)3u2cQJ3iDWaNk%N1GwP+j73^(`s6HR9q$*|n}b?aWfVF>kDnYI*Ac>Bq~fV@M}oSSFj>W0~psOJd1q0dtE z#caOEwW!G&Q0Xf=lLk zpfmO?V{4%5_ImwZ`F#0crG`*f89iN;3TsL7ak1D~Ab?6<1rk$U z&jK=}maChzOF+PdZM0Lh;036tjpl@q*k9=x8Fh_EGdGJdT}yx3Zj)ao1;j!+v+{@= zNg<#-&QD)4p&thw8naxw_7;0)WR^2T>t&e_e)WrdMXm?9!%|;wvfQ<=*|=xiIlBMm zDTQh8__j&qGTk&NdZWiD7|_29fKP>hX_YNtzU_IJ!cjO&^V*kCG&dO!gV(PluxiVw zOlHfpwT&l44Ytb#E_<(Qk|xtVxGvB;6_+g(2kD9%U#ebZDiHCm^RR-KKu0HkptX~F z(!U<>G9b+1XD@3XKLby6_c#b2$}g>SU&&d^t#UUpboz3-Pl0k--<0^JUWcQqYvDFV zz~5u#bi7bc)l!>(AL=WIm{q43$AHMO40vRL=lFBbv8m1Dv$_1x5d(+8hEmMNNtS%x zYt?HV0kj`!Q=!ITgBlY$l}Wb~WD!diyv@5DHD-GC`7O21;XuIQ^e3mn+Ad3T8{p{F zWT#5tsFrrG~q12Jwaj-uw?o>u@_Q_jhS2|JJ8z!T1|kUseip)d>;99A4f z)1@jp2~}&HKoQp2cblzhW%k z!@?cCGI?g6f?S^^DtBA7$)_CpDB(O)e4)e2@R-&;PH-ur?b$u4x_*RB(Yji#wUPi- ze%H&S5HA+|dDWfRy`a z`uZrV?@!>S$*W*)={mr9h4xY{lS7pIJ{@#C#oO$*)D{Go0s#<%IiH=Awlmb-J2b1R zr(y4s^vrdlB}RL1yUc2@RUbl|)2ui1Q}Sb8an%r13b zP10@{Z%Y^`(#)6izxbv0z%#XKch+O_C)yOl4>;>5tLl=dZ}V?!5<7u(4)($(IkAT1cZKxmCi5PU__t%&O(XLMod&Vp z-IgRLojy|fS%E>bPB~SRs~1(Di{)5$p&kNdk(lY?8r1m*-QC?5*{V zZrEo_`@_sL@t5)B#i5Y1J*rpwLCsj(HG@&4?IS&%sIf;%+VC~EHLI9`z8xnwuk6_g?r^BtkLzpwLO`UFLSdgz)ZC3aBK?tVaS0`TJ!nz-)8}&qW>_+ z`@d)K#q!-bDmaJW$p8C|KYDKe`qW#$xE>4Ijo!HY6ddqpe0=I{P@Om@H~d`n4^zJX zJ|y|RIdf9aK8^Rz*r{zUx z7plFPoKxs{o#HU_0lj4_I;4FY8mxG^!GNQDv!VTe{58I3P+ND^_sx%*3R-&}^86Vq zck-ev6WExxF}vi_R}!&Ge$hoH|*`xpKb2lA<=L4kN8%u zr}dXktVKr4rJSB|e{o5^<5;0B9EvYROWEo5bdG0<#A_Y3homcrMB{l_kyy;6?!9_m zgZrU+R1xlv&;I*k?Vp`V`S$-DbcbfUUQD;WckEe+f%QM6)#dM6Ea#r5Y0rQi}jywTJbD|o;cCKr2qY@ZvM3P5jAbVJ=J-xCCv(I(@_FIAoF(alw9%gHNi3uDxQml(Bs3`Ui}Mp|Zi8eQxNrfu>!nSVpv^<$#nj!z0 z)Xg1gOATq;-_f${*yA`_niDORaXtg9Qf+D$$-DMw)$Osa&75KfvTIcVW;51$R!T*! zN4xqtL?3sER8fWKnE&BGqut*h+waUT6arxun>V|?`{I;@meRU@dGFY{13ju0gmQYe z5^~5X9X8koUC9U@(X+gD?A+S(qq(E&!NOu*bJeERx6I1m9$uc7P-jm#RJC~Jbs>E5 z=UCU-n`-8*m8KgsS65v0+N937@6YBD7q-pIzN4{=7XXq!5LhemQBL28!;w1I?@E|% zy`$Yz@k0$$Sgcuf+UK21)?+?{x<|>jHpC;-r^ST|WGAEfj;x=z&-mjP2mZbX{~VqE z_kVm(F_Nwqysy7t6E0|r(iY-lOP}2DI(5KnqBL@C)n9m_#G|23RJ!D@t=S-Y=GAy0 zG95LU*)EdxQZ+=_em0bp6MR~({2-|r`R-4EdcM9#vf^c=G(C_>cSOG}6lrG-(P~}R zYRc3Wf*K=WKhl?8M(R}{JqK5J^(^#AM))mS1ltFv&d7SruvG+}_`dM}q4WQ9_)1RN z-PF~v0i>8tYu+4we^YW{^mv5wN{N&%Mgxbd?@Z7s^wjm}esrLP&xAuXe&|?~8Z^J# z(9_mi)zHnxyC*SnwRE#eKqR*F5T|^y;mNo79)_8LPCE6-ZbrHB&IF_wqKpr z+9yhMcv?iIrRqFLHi0PNJoDM8N4~C*`<#w7r5kJW*M!B&(4LgOF@w<@E3?rkZiA*0 zA(2fxRU7cnu~B;4gVTpz1cCSot#El@z_>wQ}r zDp{)~V6Ve$tkXTq*Lw4jLIqYYf6wvq$9{&9D9SMs#ah*5$J^t#G4_z53P;<=)`9$a z1)))Gc$1Rq&6iN~=6ZjKY>L#GZuY1j?|K`;wi)<&)^dat4a<#?xI(--= zO%8cJ^oW;2>j^wmhSmAxspdIBS|R0U+8`O{)wu|KMVM>F*E}u|bU4_ES+4@%NKBJa zo_=GB+L(3js6OT%#!a8nb)w(wma>7ZP5#ROmuvFH;$Hm^y(S)QEoA?(m;9|Ayx7Tf z@Qi=(@|%O-)($>$vv5A$=NQJFV>U}0@{dn1PuI52t(dM66co#!e2sj_?UiSOpTFVV z&J~y5rxQJo@2@pgEm`lJd7;*7cI(!UtU0QIZh@g~?E&LnaH!E7)GGAmO3y;I_~NW8 zH~R4{n4!eDX(M)G=7L_qrVOtkw`1!9Vj(lLxBT z%HxjlXdfk%4=Z)w)lozzAQLXeja;JyVCt$A+`oCw8Ma^gt*!iz1D)^4g%0P3 z0}gyWho&gOv(0`h`EiAi{5Z$QysFS^;Q{YBb}foTS3+=8le&@2OX)0Lc}X_QdpQ{{ zf?b_4RKi;x<9VSg{63I9RvMoX8$>nWyoY&qQ_X9BL)CIV6n3_!0a2CriVBUWT~SZ$ zKmxd{zS%de_608`h2H4(?R@yh>lXj^ZLj~VwDN+h{t!>yf!zBKr`u}Vg>OUCN@O+u zHy6N{$sDuG3zaMRsyw}MAA)m$u;Z%)NaES~!eGs*3-evpX12F-xSwWcBNXNdcR1PR z--~*d_nSLUphKR~9jU)A6*`fNpx$MuTe;%J2IV_~ALQ&YvUKDvB!5 ze}lMQ|N3limrHA&&cYz#z`{#&v(X|U?onhMx0a*bhDjzd^!biUtwh5e+rP2i>{;>O zdP3!R)YPhM9GyKU;(VrRa;pzJeITC$FZ)7%9onAq2~8r?p~}i zyw3qCOIyU+%asYzzNXErwNCV}eL33WI6G0&>zE8b7-2A1?xdmWVF>rQPcY6}_6xKb zYf;C{g_7)E3`jXc<;YpFt~S`owyykLk_#Cg)@EO@#l-3*aBd!0AWb6b?l_M_jXgGL zYgb)(`1_2E70b}FB8o0PlM`bTYAXvN^~Ay|L?x~3taKex~C>#hNXAU_NWb{LAALfGTIB? zzXA@=n%fE2IOPUh-YQ9@+_oKbc!fsZ`GR=i1bIc1$bO&ZcO@6@lCqUP zbp~s_CV-(i1Nr?%+-eaTnVo8_+fN;Fx$KMxLp>k7_}nGHUa#kf^!r<0bF6Sxq+hw2 zstvv{z1O1M%E~K`Kx_*gZt`ifb>ZPU>I1WYrJY30XD}ec%GnH!ItC1Dm0VfS$h~i7 zud1k*U*Qt63mf1~BIh3mPFx+&r*v7t0)G?D{@?BVXZZFT|MNUp zY30Loc1Vbxuf4+15#6Et+;F?R*%hv{J&1Y(4ZBwZqF|fAxzGBJyK?&DSPm@Z>FjDx zU8}|_&qH!g&${f2B+;>oqTe9_X>W9~?MVVBE_WwOKBrSn=_c6pQdY&>m)Y(7~9n5 zvzzOKgD4c7sxbl&B{t#|h*^tSpL8k=mgE|54ap$|y%*o-tntIF%{FABVAuZUzwHYy zV0(Am(<&>$XCcG^0pzkF^ZqH7hClpuD7 zMoWnlnO(-cYIyG1jN_|A? zFMGSRc*%AJf&K=$qu5sH!l#h@)+Yx9w?8qscpH=gR=RvE9B!#qQo}DC5ROx<`gnf6 zx3gcvl>6*Fp4VN((g~K9V$nklrKRF)6ASVe(Ki6 zJv!yFvheme(Xp?47l-od(8Wx_d4l2@?{aTbOpi>)6IY}3PnAOF(_!IM0? z+(j6;0(t=fbzCT<6lv6Xs0a2IS4q(b{rziEI(hn2L)w#O_LOA4|JX@>E1LR_{Mezq zf572*L&vNoOHYOA6WECM{$9CGRJ>%qENyA@1ziCtIH56j`K~At!bD0hw~8xQTd`n~mZ_RQ=1N!{p=<>y7>VoCSRj`5K{&nF&OGT^)4xItb2P+sMo zdpLQ@ zZublB*jalI6o*dom$PT-%A&@?seKRIN8E8dCVZ8v)Uzi>$C~>=UQ^OJ@ni|4IAc^; z?r8aOD~N_#b{_XVj;IZK1-ktFyoa4lS~9Y88cGg&X<~PQUw3+=Z3zw)CZJ2b@joQ> za0`9qPIPn9DU_qqP8CXcDSs8M(9^a_H1v?wg+_7@zt|&C_ z85txl*)W6j*$p%FWmRXJyw`Is)Of5SasK_y2n~WWr3r(}yv~-g_zt=r3<4|9J8Y1-zbLsbat)(0v&h?gYa)n5!{?N~`4e_gSuc6kDgP9HdZYs(hm6GJ zps3+Z5A2hSzMKd+lCO)K{>+Gg>It(hcDYC*k2)&ArDsA4;25a#prL#>XYxv6m zoaswCcK+=7&FDP6`&n%1dgqJuc7;P#=;F&~aB$guvXV49Ups|;Ro`gcaIU!Q+Mi&> z*OMua@*ju?rQp7R_a{$3YiwO;)3zC{5nS&mRz83eBGi7nztQ--Qu#!+Xwu*jT3R`!>gcnek@FKY+pqKLC3IcP`#Qp%K22MS10yuJ5Rcw)3>S7pf;VXT$%*8wF+j$CV2eEs?@0TC0>7CapqlJvadeI z6t}iG9#}x1&P%Va^`>!$A{yxO>9P&Dl8E5+j2vM_?|a&nGe4J?nrk~>7|`L!C6{29 z#SUAlzkju^g0%E?WL9eim-ImRh211X@ek?qa;gau=4TpqEu1~ugK3v4zNY4^BXJjr zQI=y{rG_=%AM?lPs?7LIhldcvRt_xKhn8UaQOvjm`4j+7-mmIi6of?DLlnV zK<}Q@N1|wx$Mwr{Mpmx%i%qb!X^D89S|M8xbu3V%&FUd zi0QH3m6U3G{jn!B;9Ei_Hr#)fcP3vQRVcs9v0ie#+9m-5Z)L}#vg6wzYGY{rUM zW8Jk8y3W5a5)M9YYle=sZDVTV8WeLtN!*W2aPo#&nrC3iiqn!RQ3bj9QcwXYM#!T0#dC`CbFl zZGP%!Ga>G@;31dx=(X{NMc7$f^v?frCeylozm&YXw!h>x-e@XdepmT14sjU4$2?tF^DN_>HQ)3DWtynFwBDf-yF9H5OLg06sk@|s zP}UyR$TQm=Eqvdc)lA$kwb&s2x9j0GE5;s{%BM{2N3a`;{f5e!FOH=w+kcCf*=8F1>VSXWd`PlqkeLN+v2H%XKY@5+0m z>_E;T>>?x8 zO?E>GvsMwSk1RL?oH44exS=5<(M#)wF#sU?FhQk)-06`7sN)QH$0-PpjLT8>7Fk2k18w04MkEWlnojM$oQFD)jo9(k- zk=uBWipGB737aXmt0+U9_g;VG{3n`50a?(*k`bI8aulOm-y56L`=ygl2$0hu6Nwbf1gPiC&#}>B zCFd z+v|;PsvZ9Yc5`{{3=Zy+-Gj0lEDv!L-?rTH`YRSPE-!x=Szb#A3v0hN|dF@vf9pGo)YfSa8}Li#%ji{KB{&`+UN6}li{M?9&zH1 z?fmmEwLvw- zopj%j*JiaO*yYyP-|yN4J^rP6am)Z|XN0LdzHRXxl*e4s_CJyc5nvictsxKFD_Y%V zbRo1PbbvzspeoPjOUseO{9tYzuHitg*2yGI)O`JW(7e3ek=Qir7a;MNe6H?I7&=hW`kr*>ZoXi?Tl&lxH@Xmr*R zmwije|5jFa8O}Lj_WjBn5Sp4DI_uB_*?J89#uj`(1%16iPj>;K@)q;<12?6oN^UHB zu|n-48w0|?Iqjrxn8B=tX~mHw|~|89f-fMxz#_J3H8?||el zYyXX4_E(VkZY2LuzWpn<|5gt4SCIKD$o!UV{A*|W|96m4a(3ez$lh9y`e4a){`~oO z85w8j+4=b)IXTPOK}}6fH*gZak?3s!@V{|#Z(TT3(vindXmDgCC@88Y5y23E)yKBB zEk2!+&~^X`2a1LguYcbFrQ`eV>Ku4cUfvIc(@hmM3xY!Cv$li&OeU}b;l7`AbaZG( z#ZJP8*gqh_WKy6ca*DGY7hY!Z!2{enAoA(vZn%1luTPv;JAdEf8=B{0WwKcBqJp8cOQ zJ|h!=Ov~w{GXyZb4~*kFomAq6-ny56Y-_$R`wzZoVKDIXI1vICNX%jQ6Bw}4Vv8DVdUvKDM%Yxoky{vcq!;2ApJ?L$LL!t{fJ)UYC5u?_urp15ft$ zkD;0hO;Ni0rd+oC(Ix}a&#zCtQ6w5DD=UNXUzbmC`%fc~VrTy2RofCesrt!aCL4cj z)YVmMYwL$eUaK$r`(ta~fO+j^%Tr(8p?Gaa&l_KkoNW=K%26m1bV;p#g^)LRx;pipSg2}xOOzENC~vJH;uJe+zD zzQrk(k~eo-+b~biPVz?V>lr9_HUNS)_p^-GsXXz~zat*~>t)*VWXm^92TF7=v6R>i z-Y+cxgNBmKUtc;BZHE$+9~y8fWYDQPgB;O1UBzNdb~U2yEAIqzeIqbITAqD5QY@tm^nNNpE?yv}+U za^mWccE1M<20MOBW_xY{bPVhitThEL^XAe4E!E@9g0o7qF@P0Fbc@+S3V>zU4}1*F zGGxsh`tU$mLQ;~WL3WF6{d<4?%^&vF6#|~j&Mj?s;X>HQgIW{5ST8W0U=VpJ?7P+b zUOLKk(Nt+7v;~Mg*MZ@G&9|!^w=B{Yv-!7v@Q=^xt8nV|lLIBTeQ#`DKU>jS^~EYM z{yOYZ;MTv+&L!*gc%(ZxIJodZZO9{X4byg6fapG3Fi`jecN|MDhb2GzD_LFu9%f%( zd$Z-wKjF;E%?$)I-Q|^mJA$5w=7hTSZF>8YAAr{B4SnY9^f|w9-(+WDz?Inuh;K1! zV1U(r%$({dAX^2FD8V4-E#Lgl7k<=4w;-6nqkHw;7AI0F zW8KfA$GHoD1o5=pac?PsBdhIT@J8&XZzBQ^HH#HBlYx)a@5bAk%aoI|=O+N*YK{YCEyJnV@8A1xc4hZ! zxKfjRR<6hCU8l@XrQQB{Vj@FfWeqid88DIGgyN)#jCs}S^D2fBedEz$W&&PdGMMm0 z8%pZfg;EG?@cZih;A_M%Tw#2rmj}!i%z(Uz-6jThPS7{p?e#~toLrN}A5~-a#!2nN z&bCy2EMlE0$WvnJiBq5uPp7!oSKRXTuu_lBJ^Xz^I^+QMMZfJ%yl3;c7b_Qd-~YR# z{Wr(|2iBeSea!VSdn-QNt*W~A!I+hqG-9zQ#l5^(IR4G`66 zW+JtU7;3<}6r>5BW+@q4?#wH-Grdw?0fKa?K;LpQu+(pRR;WXDryzwf9P+%7(2`Jw z?a$AjKR3RQ@)2HorAe3VGWLmW49k4f_WJ6|%o4$pX*|B0becpS6|$CqvZI(Sh=>u+v$?Z_So0zJ>Sujs8QRWQ7iHlHiVuEn+LP= z<)54*JmOGxc$Q;mu0uelacZvrK=Z3>1(VpHcGZ8&jj;h6Cv5&2-gFvLh)cA+i zZ?2QUd^}M&#rx>@fbDcz(+D-Dk(QA`G*W{nY|rw37+})cbJb{2C{(cRdM}Y}sG0AB zfaF8bfl}f;b*BO~K>yC2!;+GS_4c6Snb$Wi=r3N~oKm54fGK`Mlq>PSy6vzeXI4)C z!dWd<)n*$sKlgXn`EI|z{_yYrg5B~YyQRSEMwYu40oT2*n6Av|#6ZE6NMUhxzg5I4 zIUL`i!Fu#8-=QeO#rkN8>11#BtC(MJyY`0d)X|Zn{dAs|`b1;Cy6D&4|L?x2-&ucr zZ++k1df2jnOWO60De;{^`?Y1x9BeKa!QGOTm)Gi}1?hPO1PC1Y zGA(lesZh0%TNQG}Z*|%!g!MbZDHqVxF9Z8K3OQc^E4cjq8~@GI`VOAbjQ7=y5B?yR zh>$MOM@ieGtL7D$>Jj#WHwwI>jR)ev{MD?2B%Bo9ri%N-2{6S}blQpDIQ~MwnA6_1 z_PFD)Z`h@!P6QcEE*SmTjE>0W{(fXky;Qn(?b-wP1^x*CciWT*nX<9|&$iEvK$q7s zI;-ovk$rmz%NekT4MEx-PBUe&f?$9uR;LnCj*DPv#}+X3aJF`jVc(6n0%;#mr<9*Z zc5{4RwYgVH;Q1<^RC#>=zwfW`A6P2t)X7~b9QD?-8XV@tI{FC%*vE1o-dcT=>fLd##Dxqv-D(4NgR_bYfl`6p4bay zQ*S5ApS~V^B7smp)06w~%RB!&CJ+b!z!hM`%wtSE=OQ_2`-oG8~ptPS?_5wim z0w`n&BI<(vk>KD1at80ZYyjwbaa29}m>EX>#Tx;Y2^^u)4fbBYNcLX7;bAt#H6<`F zy{rq&76)=ob-nggV*ZP%p^7}sk*K>|a4dsz6K`{c-Mxo?+aA+-n^Zc6z2O^5902-2 z99D$v^jRz8*ra&{pwBk?LLlSoQ1#~)yF@9K!=MydCdqI!_jpt)gY9#XX$vjCw-)=I=URX33bN z9z$JzbkPp~vkYy`Y8?@9kTgViCdDZT%X{kd{U=ij{(FM&X$>*oh@t&@c#pUZ_9+S5V=!rij+!E zz5A5QAQHZ2ot3+6qCWBjLY)p>@^vOoI!mdK1OP=N4*{l3;PsUv{?!PCfjt!pw7*IH z&yBoEMeV~fq)KFiBZk*xZ;=pMkclb7WxkBFPFq9axb)!itRBMJd?EZGrSW0!hY^1p z4i1h%7OW~c-fbd|m7LzTi)~X8%rs8QPOpw5c&cZB#~du{DBm@zKw4K4aVR(g6Fy*V zeaj|0@!6VIG@&IXvmTHf+Jar3vDpc*w)J&W6k&7Xx$DOCS#g+)6a#i7Ouxr(WCCUP zF?huMO%iF?k4+Fy`z*j#55zRysqA=NC$w~DpZ(e_czX$mRD4EZ zt`RejZx7u6b!T?(bvg<5W>@%-$N|7lWoZ1Og!_`cGP3{gE@ouJD{c{gfARCEChBeA z;Dx!lvXzx3Gms_^8fKH!J=Vvg7y_C82e3Uo92>mOLkl6~Iv_7coYJ}}%#`4@(G~U6 z$MS^+6BSie)yDYInnDa8KgktiaxBWFA2RzMHuhN{G(;$W%^3KQTPCdQIDMl4qJLx+ z`$bKVi}XU^3}z(2N5p$EjK2Y(2xkeRWS&~g6DLE@1v&TP004v*7DDMpio^MG(r1d; zyuYP761h<4R=ZJ^x=iz?&dxIC=aLo^14Y~ofWF(Z z$YlDy=_*$KwNENfuK2Hr!RHZ1wAFG%*3B(TwH?mj>kWLtUb+fz)ukQ+@Gyg{p1295 zXM&ffvsSKW8SAzuTwW^nG{rq*GGcz_T#P|$abJ3L!$Jt;+cAy{!)E-HpLkq{uhgfD zPz2NF!?i6MK0K%$0~RvnM5|`z?@ZN1mH3~z-3u9_)7UUTGKC+S{+8r-P*z59bEN8J zaa3Zl1Ra>LDNO-~qodCv=U2;svK`EQIp~Vto_b5gCI6}OGKHzvG%lN8Poor+P2_}# zOxpM{vxR7Q&AjC+NZR=gn5f6yd-ociF_E3iY5JB41fnKt^qRV?l{@fYhRRdq=tsr> zCWZJ{_)19*un|NhcUW`{(W2ekBQ$a@58TsFjC)4wpP0)VaR-R5uwBtl94+|s`&5^i zY)coe93)WMi-ypLfR1&#r_6npa#dIW8~+=93lLAA?C=mDMN=j$XP|zUVMBdbVNalV zehSEsBNx7ggXh65p+b19et{PeSnzgtB!Z>9R2+2Y^jrk{*U|arA zaG;{QbdL?PX=*W8Qe83Bv#`-fu4d-^8l*c}vp%!fAa0p>Vj8K7w`fPp9251HstO%- zpUKp$>e7G|d0p-t@*!6c8dyc;`9a<#=DzG*Mreo=ARFwar8p4sHL@)!x1DY9$!D-@kf9H+UPF+wHuq1D!NSyR#z52=&XW&(i|)|*d~U# z-OAL@d;ij80Hjhr(cSt^Mq&ee$ju-gK4bvf;gM;PpWs7#KXp!z1oXjz8Qv%^jT!^m z+p~oaudR}oTf}|Zs%qOkCzei=HfvZ#Lz+eDE*1$AG9y2SsXjX_$I@}Ty?i1zcQif9 zxP?d;_IK9WYq3Eca;V)tF8X@{qjWF%lAOehuM35^-EyJ(xWli*8Nwv8QOod##q8uC`d37&JPPqw6{5jHAk9 z-|HJ0zS^E;?$)f$}VY~p~OI2tM9B{*L?24B}=aZnv&=J!l?y@fW> z*5=0W!aZ+Nf$Z`f;AaDAAW>eUk*f?A=f0$p19!2-cT44IcoLkt@FL19o!8qH$j{zV zGst+wy9H1!8yi);Q&#~<^!aRs#;cgw_;^(K+?+BZ_wZ6fyq8ny=lAv4REVL9nnfrs z64KJhh(&^6yeN}Fi9HY>Y7g&}>(_re0URQR4W}v%DtbW0ck?bSOuz2?T5V6ps&rC7 zGvWC0<=9VO8?`Ulq@P4>Y`FQ~H}GMk*8NtQ3CE|q;_~F$)jUuDH+d`-RzUNp)si|0IyE_d{<>+%=v zF%a}PHG=#5%NgmrYkylm$(uX?z7rsOz+ROMLf*^Ms+$X;tfSMJNf)v?Ie|lRS8enl z9KT$%7ZRD=$!^&&THkJIUC?t9mCJ6|tD}0wnOHm1xnAz>V>Jj;nP%prK;v)1Z-&of z?h6Bciih$@+3M}*mXg=5n9krXmjK+k(dO5)x^+xD6_qnH3_8O`{(tF=JQ=-$M^{DJ%a`!09z=i4 zeCH7a0LXBJTtk+2K&A-{CW^q%<;_XqIN|iEjjw8{=!QQ zPuUQK)wQ<-?Z!vjQ`6pJyuKn#ITi5_YDD&ds^)oyIA$q)rrQc6vjrE`6YdTS{^I9@ z1_MBq9tgUiIaQ<3-6Myev+>{2qStWJs@~qW^!MGx9BFt$-qk_mDby<^v1W*&3?xHc z7H36t_gN-Y17&3URv#&7KYJi2gi}MY?A$StP3<%Ut}?vwA`W03WE5z{5))lKYN?YQY(E>3ZG7bwUwPz zmxHQ&G8hndS;b!qOzcg!L}8_cP0$z6D|z-`pEcf>9c%(vS~VZRrYscGaqYq9*D2s* zC8$^fpQ8ahPacEZS}6dYc@ZrTDlbcqQJ{?Kl|8v8|4qpY4=14BJX`Naf^_80ojY#? ztJWT}G|hS&d`xrlW(hGUeCS5zbPKjTctYY_k>Ah|MUgTWrVlw_+)6V0^mNDR+4LHq z2z)qc^Q+~%{QUf{?(XfBdAUpU%L{eWWdxXwJQ-gkWqiu0?@tYGxdI})wcCG7let9&WXgx8Y+4zf&Kzy-r|h3KI{E^ z{PZG)D1Anx)byU>?geJZn%&J_BNdAG`naT=Q4zIX(&ipgbiDGG-`87bR#L74m}(&n zZdWx2nGlny8wD zy+D#V0LHQ1oW^eB!{^i<2y_YU6ueRo zb;?&R2H(+f2(UrjBSCi|3w2?mpLU()$j|)YBdciqQ3j{Mf>=#Zi@T*vb~#puqtRB! zu-MN`>(Iw0B0(f@Dn?6_@?~bS%*;Sd%<W{VmQ)}!=Hap0E><#SulF>aF(pq#pU z(z%%QB^A>UrXgZo^;6~;yL>Mi+FxAgm8}s9cu-($yd&-;V=d(}nA_;)F zR{+U>tu4~pYiKRF*X}!YO388gqMtRyD9r#^4^;FShvw z*LILITM3JgppWY#Uxj)2vn4z9dc$TWlD`8i6nM20$Uzqv&2hSqnogb3t!iOrx_9?3 zdx#ULC_L;;^BY~COcLtum-V47g+T{5;pL2sFED`L`=T~M+mAiX1)Q{#{BV%UTJp&` zj_v?VLm&$RBv)d9F?e0$3UbZUBOd;NL|G1w2*0!(z)ajng)*3YZOyPZN+lFj7}q1g0`0r{UBRP zDV_UhZ$9BHAw$NqJ{hsCy%g0MBWK;{#GpD=!RG`5Y7vND<@w*IsDs1ucDziXR~Zh& zdaN7cHifKRvlY+*~5W(s?&Ga8*GVe!BL98HVuZ zG+7hhi3j?4GoxCWR5q`vu{*lDoUELRkrXd^F0evvEo$n5rJ_{DgO|U4z~g-v#zjr~ z&6S40f%;}2RyFV-kIY5RHRS0c^tO*z`Xsb7;^apDr(&zK7(foL%Mgpj&03-h-&`&4 zJiDTuhrhbgKhzy8J*0W$HUpW1+HW>g`w{_=QoTuh+*|qA#xw z!XL#yX=+*P#n7Y_snb56Z>v3k1KHoRV?p9WToe+7k*PE?Rih-uGgGVIsPO4%86&LS zGFE%dLc`;iz{xqjdPzXMfO?XNiW)hPi4?^E^lG4`>JNac#mw|=PNU`3+j*|9z5RSB z$fTwuL@8QsLl9r!b>o4W8nhCSYXj3`=g({H9WgPVNOPzMd6T6zL%=OS^cZI-#QQ#v zW8K$LtpIA6dTb(Vvz$ajXwo5j_pUxbl1+{Qa;B{%0Tg9j2^2*hARKlpjnJh?+26)w zj#gwm@nIF77(rx72}{qP7M8p$!mq9{C{V>41r>4S)K!DAk^#H<`DK&~qxxS8u%qg# z&xk+lN2VNvJ#uh$0My}I!cFKKG3&z!_D<{_xy^5l3(`JI*?4!3m}a1@sA7Td>^u^x zxZ#lD()&PVPNEc4snlN-waG$Y8Z7Dt}NEs3374}U$VS6Y#_K<6;Sgb0a{urz0! zk@iP#cSz$!{~t>10lWM%)bs0@7zl_lszUcJgfgOicjxfNtdFsl2b}_W%ceRvMGilc z;pk`L+`N`a5>2oKK%%4ER8LR*Vg#{ zAD_1!>dEDUy&u^2G6I=JYiw6)0#MV`(EoV`k%IT8v;z1Hj0OU z%13YHcxoCBP^T%*1#*`}P|M8=E#exOx2HuJ4SZ%*)P}FM)3P8@D6(*7p10zQ(vGOMs&jW;_!-XV)BIX(Xa%t=C z5X-d7P(=pQf;=v6al4^{DqCT*IU1-sN~4eh!!#66FTDUoOtZA7b?hfft$Uilp&slw z)_^$`z;o}&i)g!eIdXXm73v3eE)-z6P<9J_yp{t2)Hr#8)@0_56wmB*LOno|N0guM z7fg&LWh!J4ZctVS2sC&l5lT8AJ}_hwO93zSl`sY>X-hVlggeg8(>{?tOL5#R>{iic!o5iIp^w3?4^~niLUa1{Rv?t;NmOnPh6%_0wy6bti(Ned3g&! zmAceuC1L~soF_Z1*f3%ko~W|Knojl0<`x;)FQ$N;aI8ImgF6YDPyn~d%}4`(WMV#s z^dj>fpDrrG0?&kOj*ORmLp@JW3*@J-Ev|KEiU{sY%YFa8<>w6!(I=A$NEH_3z)>Qo zdj+zekYV@{CjBC6HRXBCKDu}*kP)qewJUUeN%w?;Y-Oq1g^1HQ1s~Lh_+J`w9V?JE zg!rFH^q4oeRkNn0_Yl6>X%8Q%!N?jKY-zsS7XMKi=J36B$VclYl>;-8ppZcaji!4%@Kl85z+YyCJh zJA)aShB7b=L)=xt*aOH1F93b#0d+qTgR?ZD&OlUR2f`w2hGuo-DV1;j$K7wcw>tVqU5&LeoTAX7NcYdiunH4UBE?z%~ndb0Jm;gqPz!EDN! zuW0FTP1bw-8#mWhN!{x#wDWchCag=tM?2*%01a^bLPd?M{S;8zybIKc^FQ=7G(0bz zOq63C%a_Y51ha-@Hm1zPwK3pKgAer;)`NzKhte^JP5yTW@gqXFtnUeB#xlW$MFNu*V0`su2=f4kWn*Rq^MHn z-lv~LF9-3{zAd@}@=!MJo|Z}R)Pn0w_E|5x(f*m0-l`;TkMjAy9z9h%&>*5^-r$6oV)k#w!^Ej)U^BGIBDk$o-7XZ=2CxaZ(= zn@*4V30!A+5HBmpHQ%XPrInRFobR)VX+PE=Ys8xNt>)!Xw$A~@!6y(V{||fL9oBTZ zgu9|xK+shY6$Kj>N)QxjQWOyp>Aj1HNbdv^s*0>4AR_7L}fA(1fLh}9Qn|bG*cV>uBp0(#&i-V%gS)@J1<+VPZo%k9U zsl(90z_d(qyMrjR)F!&94!>W_9eVUbB+5h|p`5ntffQ2h`3!(u8P>_3nCr4ML&TVi ziL{%;ee!=uQgrM}Hm^QIUF&mHfUVSl=9?DqUU}Dk(3{A@q1~4DtUTVee`fpn2Nw=w zwF|Bw*9B+}ZElX_6nE>*9GeBk0-b{PmDZ1l|xX#K(k?KNBQ4eZaA&bB_&DwHGy zi-DAZLwCh_tvO2w7ZH99uehMOH13;gFd^wsHNAMDcs6vbwlw*G>;lxf21RjOqoVY+ zRu&uNhDD2uU1`jnrz%(%W-kVQEvk zp?=0FifO=x6~ZGduEf>#Q<&2~OxFSPaJJKHG)Kqmp9G@0c;C-{>puzN{}5cxv3t~H z3Qp+Sw1a@IvbzB9fX@4w%6QXIpqK!SGG-uZ{>eoybt^a5(5(A)PoZ8xpV!^p9k%C- zX=vBi(|^Gj)NMOwZJ}7@vOpbQRzxY0|68g9Y1If42V2b5vmfY#mHJUMgkSf!ANe27 z^H=F*hf+x5dn{LyB3}H978z0D9K65DM*I((m{szqaYZ5iBYXYTH}xMp_q#bD4<1T) z#Tl+n?oFqK;oUUqQAVKS`3Ty7iLvhoJ20Gnd+fWGpv`;Mt18g<<>r!AFR^Ji=08{b z?_>WpBmVo?f5n8){cY{P>_q;*b21*Trzzd(zzvK_p0znZwQcU82lSUh(^QvMu4&{i zpTaN61pni2zPG6w)i;G^a>OqiUZ-({x?Xg>XrT$S#tI?;W{?19K!4Vi)!F8$s68&H zgE%yrM&>Oa;m%xun$p6gm*@e=^shZXoTW$M%u5@W$OMC-8kMPjZ?4K7WZ!-$4ZuRo zLVG-OKY~hUr}NqjhN5qYxR#)+q@)D&&@s>!tms_2bji*-uXe+G`TZZ|KLKyt*yCA- z!P#u$s2A${eHLihJLB!#o?e_fh1rex^9+YXU7e%yofn^7(~CEtoGSl#y0}48j1=%~ zYoIDzmNYapMb~XWhs{Rf)eS3HdZ{m zIFH|9ynW&89=E*_Vzm|jo&_MuED)>Z<+wPMW8H0Cg)~i*+J-u5RmUsp4dneRdP|KQ z6P4Q_cA=CIi_-qrVZe8gJ3sn;)66L(oWH*@_Is#pQ=IJBAu?IQzrHeKqmSAj4T>G< z5C(SD51e`3M=*M8tBzki84JTA&$P6)RkC7M#N%y~lau?aL`zQAUzw>3uRrfa3qVU# z+qz&OG1ZD)(~3cM_2fEE^%G@z{lxO9>jepQ;ZMe5 zC2sgJAJbduU$1vr>$AWbpZwkw|MUDdzUklm8Jr$$b0G4~ZTlW6J9wLv=0~s+|SR0s&`aI!DPi`TVXc`G`l~ z=K9>$MdY~c$E>G(ES*!euKHAX6%f*J-d;=FP!h+fVVyveTlD`vCS)lHpkoPHWcfdZ<&WMN24{(JLcZURo^vH!q~gM0}Djt`bCN>(e2TOtF%JabK?NEj}e%>^)agn z(4>}@qpYoGhB+(BudSQvE$8J=zSr=ymJA0e$r)g<+ds4B2y;yOB8!B#(;aCUh`)UK zawQ0o@B_=;jiuD6fxdMEKjDK|x7G7Po~X6O3ZY`+|87)h-8VK3qD|km$6X*M*beycIVk&rBcUf$RE(Jj%v3OA4cDVt zRzD(ybrX6K8RX?q%6s;6b5_aD&K_?W!}S%L#p89po2>BX0Op+ricDZ;IO2Qf;UU6h zHC18TZ*GZm%p=W+vn(aQ7O=hH)!@|C)q9vCaG30bgFX_uIzA#;6qk?OHD0>@7{S-w z(sH15WhiHgjCDH&j9`-E%2d^Wk?67pWk^+r z`MB2BNTN(of>ytD`EtcG2KIj7+#5jdDN1fLNcofO$(Qv^B+C~C6(^Re_0bcL#jfqU zCguKEKK9JXy4Yv#&yLF+*h@S2LFt+4Rzx%R6PKgx?8zlqVkZgOPr@hH!O zR3|3FZF>%n$l?MnoY=q6I}#j@UK?=(5%0x|9r$^t6;7(1$K8MU=YNV zJyzih3zeEyy)Zan9Mupmbe5}lHd813eZ`5r%*+T85fKE-@JIhskH-oQ+|7KuZH^>* ze2?&@lD9!dI@|V&{jg;d{xg~W!#fo7c0+*;uk|L07UjPG{%flz*$Hrp2IiT)pV($n)ezwUF@GHe&$`rU#3 z=ji_A|7{~o9sAj5Zrs(9swKzga0%!J|85jv!Z*$?XMMRe@AS!&+7R?&le_5m?b~N2 zt%!4Y{P?kQUUDd{r0-Gxi$?V~<>g;omy`^xja!ybuMZEu^q^7fnz*=q^Dx;?f^n;x zo11Z4N^rJW$F+U?_p_df^Bo)-l5%kH9q+-Z9YkoKiZyC+!f-@O8ytmZz5D)Fj|kqS5y z*TAM}V{6OG$*JQ&>^5FP5F6Kg`HM5Wcd4NfY-}xSmpgRR)_ikJ@v_SzNqsjI6f$Ds z<3nBXxa*#povsaLSfl3~F4h0NbAQxu-1&AbeE879MUJD(VEo>`CsW+*ty)2}dIh&2 zk*isZa-*&p8a!I`F`|C8s`}&2{cdg}9*QQhOqNAbs%a~AsS++OE;3OHIPJ8=YdHv9 zN~%S153X6}ooY#82>H(H5?$Qh^b^w^MoKY84a{vyLxOraCONxVT%*6{@b&UvV|M%^ z;-zny%a|;mqvsmTMY-k&sU8Tql?;Sh6e{SVCsZ)Cx5Jlwu0YdeVMMGnW9a+lBV#6Q zkGM)#Zbdi^YeGqx!>9T*$p&Q5;uGbC47$w4L|6- zgv`3Kwh)adKj{7J*}bWLRvy=tXq)~IySxbbY)SH!jC#&j)AHX&*Dk-t%g=-CG!}Z5 zXc6K}?EUk783RK+E=zgCsr=4vt7N_*=xado8)@y{z55l8Sf~V|v}kI@&iXFj*1mG+ zl#%U45zO<%=UR}?o!MA(Oy+ZyJG#!!`)k!bkCd#hxy86FI|PMHJf#Uyb{o-iGJFV$ zPn|;u_ojHDGU|iJMc*IlcDm**Oatf<;2anA+Fdkgc@!wiZOI zUA^kzWL%5$^Ya_({w#Ipj=SpRQlYW)(wyhceKcH#k9;aIQ7GFgzr9@@Q#@S#@#D>c z#o^G~QOa6_t!jGQ81_}+<7ItA%qy$wVRAQbzMx}js{tG~aA9{n${&hePU9JphOJ2q z`;Hwm7mf|zu>&`kgDZQpckkrL2q}T{eBz@NtvpTFHK!muLR;$vWx3R-5=*vw;{e{CpTx3J%0jJr@Ok@?^=)o5#Sywk0D-5*Qc)V91F4rN*`zA#@rQ(tOW8c(#k5m_Ml#0=~_g|%CvM`vuU}@)~>wj zI{ax-irIP66+^iAbhF&Y&b=ukbdgl(jbW$g`kVZG^;^=?bV%EBx<_>A6eg(3o%A`v z%J0I;YM*T}pJdB`AcHp;OpK4%i!9HE9=X0gIofuu66dE~@9yTBYJbe2;Z=$<%`$2@ zz(B7a6fGMrm}xV_qY&jBXq_OI$>RE&c%i$YXEotV;nV%=>|7-aML10UI2z=7GWvEp z+H#$(RU*RbTbOTES9wouL5=ZE_+LW2s_sV=Kz4C2w5fPjD;cX5UfBZ&iW zNBv7&u+uFz47swQms1VNV|_8ux5`}LMT64LJ~vdfKCEk7_rqb)wJ00XXdxkuynrm| z4*h!V`)IV$y8aNZJG%4Ldf#qj`XSbhFX)lPm5!dbDEHdAbLR^%il7FO(389-Ef>bI zNpyP7Q^74*y}sx!tgi6&`wbDJpLvCg)f*y&SubCnD+)?giuWyA=${$MxuJmo-@1IS z%ze$U;6rLJh;pk#ElY^1*yy;&j~)G}SA+4S)@01W@^Yw`A&TYFH&nsuT-Rxl66@f! zEOS*454ZK@i@Ap8DZ_AKFZzk*(aeIR=IPsO%SGgci^?`hwTiq+F_PgpOwyZfwBK2x|{e0pK_rvyAq1 z6q1n?s{+C5en5Q#b2+`ej?FTsSkEVldzxh_L_e7xOU5dH?2J&qbSb;=Y>@wtr=Fni z9gCJwzS#{4@!b|x;v&S~n;3*njY~0~PQv@q2)8vB=8h&ZUT?%Ie2<8u-nDDjj@E}; ze#Ya~)@CB}8j!&>xU~SeGf(4PMRP-y^`G@Q&*YeQOk|v;no>?kqPai#KiJ3j##F{c zy;5wgG`?%&b$v6vt=D;mQz6Rc>eZ_jmM1S?RwWkCGfxCYMsf)`jK6|0SJe>6S*v`H z*`mXzFRe|M`|aDi_d!9nK~*j1NWCmfEo1{UOo%h84>LTBPdj!3K+8+R@v(c&admIg zda{iC0BB1`iWJAHVI$sBm1!S?A&)OWW2{jhCNPjxmpuIJ*|UnizJ>|mM5`Rx@U#~o z_zr!~=oSE@8pqP;XlVnW_h{6_cY7{AF#^zTX141pS?x*h@bK0hnSe88o_Tx6Le>85 zHToU_zGfQ7L|K zZJFhjRDcKvK1lhsrWgH04jxREZF!!Ae>ieRW=Y+bxsDSbl7?6!;zr-<4jc4;Sg zvRWtZMdItZ)M@x7vNKO1A43y!gy-Jt6ur``NIz_81e?FVf82!vhJA+?)V@TfRbP_- zYRFYISwumwxk|dc^&daJk`oE$fLtVK|5@3abs@Y%pq>rNFtD^{e=bc9|mf@b?d^x<2RD_I&dt+l-S;is>f=`liILuwiX)k#Dg=~B@=^lWF7 z9xhn~?_qEdKoYMkE)2-sCfQzh!U=AtE7YaMB>&V`n!H>Xf}XBEt1Y87e2_!^9L!&N zf#_~-XlOW)z4&nMSk@&$0iZCgM;KD#OZdiSBDf9W=5&6%zrPyZ-KMCj z|B9_lA+_A&dx!PsogF3fK{elRr`-sD-H|&J8nFVl!>D@~+4#qM(IkJ^QdRqqy7Z>D zc9>*a>PLy^4;NdCS=?5naPq=45z1EWuetM{(Qw+@?>^Mn&}tXkFwvf&gd&fff+!Mu zFe(0W%zHBUIEjL_rFTyn;+G5zm=f}6gj$fb-_EhIy)?xZ_ac<#bn=Xw?~it5`($h+4<%G%Ec4I9Pv}s|&%V#@ET)a56U*DxsMr#03te^kH{*flBUWnB8 z@Y|;-l*tyLXWWyuCUcYB@BPyo@6+CcWS#7__BC-ri!)QVq<~ zb6gXQp zzPam$M_AUM-gw-9`dP|u+u3GIC4P8=Q^;?jhOSE8#mRCh3s2Jm)7BIXC1{+?IDd0o z0+R81x6{yDTkzP+3+EgIpvRw75=zW88mb9=azXdk1Lq3wSvc9tA*;%{b3tv?Z3)s9mc=Gj&MrF-hGjkeSocP*u-=4wGk}MdQ(yhUzk1TOsw84d# zN9h)$a$|2D>$CNx9ROr2@7QPK^Bd>$Bm(IeNMy;|@7e(}n&l5IYV9?rMr}XnlLF?TY=v!otV) z38 zeb$CLSx(yUgGT6JlQcBhq+?Z1a(9dE4G%r_v!GQhW@3^AjV&6$GiZPYloKKc1H%P} z63JA}oO{EcSWXKp(v<&@H&d*pkp?;O1v65cjHhOxaC^Hl9yFcD9dBB2oe671u93BjW#b%0|bzQ9yh?1XLuaO z&4H_$&vaXNRrso4C|rnK4>k7THY`qgzoeqx>UqVaEyezX>Le?-i4$h9@QC1ihGDpssR}@In!?R?jjlQ zISq|qQh=9P5eVX2npP$K=o?$2$4K`ze8s)!nR3sbIdf!AoiCp$1vxjaL8#@I{BKnF z+nDi}zx$?U=Ym>rc&5V7kSTV*{1!d$gR4o!EyGDF$!AVU_MU?#0sn)Xnm=K&XeZ)8 zl_*D~>r#Q*6}_7`KT`Kds;m3ZqDs9-?}OI&iC>oWz>RWd+j3~j{}eCVXWGi9wfC+H z%{$wr#-Y~_T9aa(fz_ZS>_^qqQlorutZON8QvgTMeQ=CV1M|*f`T=nZCI%(jM-r zqJWE_o&!miQLis)s&t1n5Z?+7{R0C7vjyev--p!;gd_ly5}la_nG2%l^_ER?TbM$q z*kP9V+($Ov`?a(3ii&p+xguLtTxyP{#0Tl+nicFmVpl9pfO;fmhS6mD+vjKsuQBUT zP*5;Uazi838%BLzUpUZ?+bWv0GqyyHbV9&G2$swt|F+Q$S{qB3foBB{YbMBiU7`_u*FWPf7Z!>%AA) ztWRC!PGaTyVPlkYcR%yyAzArLVDhOGC*B!;3(GQ%j*bqO(HQI9r+z=%4?>;vy?Zf+ zePQ6#({ymVEp>zL6vKNwoQCoDH*U90ybMH`-pZ=Zx+VX3pPSgrmk106H(yf5Lflb7 zsFMb(1D>!f=iuot0EUAclh=9e;X|stwzof{QU0vadq_)x6h(Tpd06Ae4R>R!2OMDj z_~g`-e}m|H%Y`eos2>?BDbIuOvV2B#ZJ}Jh_~f&a5)oNUxX3Cx-gfvYOp|JNHd%0m zZj~BnuVODokzc-fbG+R3NH^naA!I~?*v)@t&L%B&X`0yugM;^;`uOmUFHhHEccT%l zPdptxw5U%z-Me`yti?2+(x_ptcx2?0xDP!_4}5{OuNw! zHoWaW>$~=feNo(hT%Dx2{J}|g!;6%80wN6Y?huU+;j=u$#FrL8>7|;3dXT!5R4^CY zi-vFQMT^MjgMM{;4qYf4)uiw^wj=cd;cEL~f_6YcnOJnRGzKvZJ&v_dP(VPadKwc) zd~r-Dw+6aIDSS*TRUZ_8eS-9RpNhf2lu=xMb@jO3klV@tY2V?)i)!zNZ&NeNhFtm_ zXCm5N>Q)M5PrID_=WQV4+Rd74#!cTiPN{R)*T=tWC6yKtN|uS}Cm2c%Mb~+X8sn1J z&2uB<5;y(1F#aiV4B^5iRVd10&w&mrb|G=*(*{)TzTX3{=T=_*yhJgB7Js}zDa<4tM z@~g?&cPna2x6{`v%YO+I$jULYzmOUT_liBznWx%9@bu~HwDm{$Cj}w9GsKv->)d`P zd#5SJZ^9(k)1)=Yc#GdKDUs}KXP3>PKIz?(rqfk8KDh!Mvb}ozLcADMqfbDWkwMrT z#i_3>&RlmnGbDUvYMHB{xHXIAieuwsla^(%#M;`t(b2i{p+FkG`x<6H^(pvbrsLE; z!oJN)@{ZrxHz~PgL%t1WomDnBA#`t~UZ)9iZQJTm91Vs5&v_y?1gbw0tu?mJ)7691 z+QX9}z!27gcRgAk>?PjqC zZmYBJ8E8donvzAlnS~2YuLf{)a|fZEWdCv0F0H(j?6hd|z3mfBpFN%*()7n5z`R`_ z&fccRHXA z&Uf|UP)dq+K}{+8EY; z`6cqGD}9T54%jS&YpssWC}K020R}w|6A9OAt3@QPQP@ei^9MD*jlHuhvVIJm)VFD` zD+3`HlUd{@YDOA(+E+ReLiANB8-@%x2FU3rm;|u~ptdU08*;xwN)N83p)=_4&k~8B z)ro)qm+n$!jMN)^AVilGYSmOtPGIJq+9zIXP`MLKGceua9}sYgEd`q*IWt^mhq*G> zzTakHQeUSo;1Mw6hVLJ%2^S2q;@Uu8GzjB#($YutGVXew&nH#UXszGXbX;4Zwh;Ek zVzDjYsh}`%1qeNh@x;DTtvz4gjK+oDzz|4&k7CDffqa1H?gtqMdzuY?=4a9Pk9;{9 z4=BcY|Ie`e_%>bCs9`X~GhAUjEhw*?J+}oFPgRB*_L@NBn;jm~_K$#7hq?=F3k%O~ zXIlX7jp<6p0n-(^FQf762(3H|a=sUh36s#AgC7>1fmmp8E8$@Kf#~cvv#V?N132ep zQRv(QU9rpCHCM-J`8bHK4?%!}w$W(YEW>^al}ysxC4Q$v8=hjBEtTJu>DSInqa)0_ zsxx~6Y3fj4Ju%s2^N}mu5&To9q@<sU(|RoB!swKf>N2u0s6 zM3Pw9(tXOas8*Nt*p=d42QnmJFgP0=O(38Wzf`9Tu57pUEg%axTTkEyz19h>+!X~P z?-lYg7is%&gWhp9omRQ&>FFBWW1=7fQNU)fj$v+I5qWX@COueXeaJzQCcUcKHozH= zX9r>K;)u+8K?LGy zw3BSfV^HZg!oZ^r*qxR!?q-#5_`SXo7l-+%FNZxS^DdZO9ao$@zb1aEf{>?l!>>dF zsx4QtGNc~_0+LIkHaf__fLTm*TQ(0I)*YrbM@+Vm`tEDwdBF+|2!m5aFxm9pJ(I7# z>}qSnbH&D+m%dQY%<7<%#YP*DfrR5Ig)O(KW7G%RQKCVgn3TIqx%X9WR@3k#LfY4?x13eI={+#@o9Fp_GI`x5m(Hp`}k7&L%~9 zRn`K#75H?&=t~%DAuy2@{;^hwvvh?=kG7+5B3Eb-?o2M{5HpLY>-))0NbWkxVZ!LP zwEH?2GV_R_NJ(ez3}-wj=%$P0kPXl5EA5dnqY+)1j6QwlGDeccMO*noFpfeX7fsh} zo9LYHMfauFUNJTJ@1LRd9+e$KNd3Lm!o@9!MXdv}D_kSc0AoWiKtePoUsRn-BNZc1`tR;0YadSq2k&hxptE1Q&ML>!oW`ZSTW)c1C7 zut%Ntdpv;17rTA?Sgr7$qx^RSMn34i0fsv0u5A6)T7k23R8dh;P4RM;#*J@0TA-Zu z`Sa&}hYp>CoBWmvtGv+bv9;r6U?3|P@at=t_3d0X9_)a^nu?q*8h7RTTrzFbrlMM5 z<(q$fK6@-ZMSUt1%9BCHlDl^8ip$ZIc6NRUQa$-=;>psWS{z-R$vIvM%*e-2!CBX- z_uD9^i9wQcevnfmS1z9Fpk}akjr04di(YESXWn z>gr5QO?`G{7eW$W!C=Meu~yS=8b2YHV{+?jwKz;n41HXwXdP4%u0Qqm-p^ohXz$+R z=y_smi5JcxwkCwvR7U@?#85Fc{%2Lk-yh~SgbVE$szJ#^Zt2?yhnYTqR|OLbJots> zdH4DPR7Coo$!@qye>Ug(_hZesqWn#*O?9J&jXKrb08zgGwMO?pr{Z^{x*M1Tyej+A4U0ybf|3pE7 z)g6gcq*q;=^F06S1palbfn3niIpnrI=on~gZ*}ICYHQ}0aDvo1 zsBl6`Ow9fIjTnvd-#Qf6)E1MJovbG4a<-iA=$8PfHm-4NXVZBM`bWPbm5J(5nsA+fqD z+K+vJ>crMqDy*!fSw44?u;76k!>E& z_D#;r1T-}%oDsSX!#d zx1JwG@$fXUUc9J-nkSkjCVwe@^=k2DP_EL;03j*GrlBAK`?n95LCuHw@kf6i%U-#{ zf*R%oquo1q9$=_Exc3WJMFp#(y81UOEoy3`V{PYAUSf`pk9RXU1b~B9r)}*ja*Dnk zDN=VJQ?e`q>3nURYO`(Q->;XSPrb7ZR~AVs^AL}LXz752l+l|*n_texCNoDsG71%N zrWjkNv4arI*jX&3)MC0gT>&9V)VMV%$LSVY?W(JX$5kHFw)sMoAw9Gkvch0aTQsew z=g1&r*Ax|RM~G}W#uFMmJc<(35;nhln>NLX z%73PEg;^C`%Cj=+>vA5ht7(BSF{aBJx+ipo>%%!IiVkfEj^~e(OmzBYN0o+vO3>uI zcv0r%OF_+Hl~T~%p8v=pqct$!$5#znm>3D~pde=ZeN0Sew`|!0&s|y#n{st|P6{IC z#N33+9W8nJ^cKkVTP`N2mpy(Q_c9cH-Iry(xpJc7!E6HT0pv67yGoESZAmz9iciZ# zSo{9lt)1R`7$yfiT*Z1ch>*U<|U;rheDvTDyEOC1epOA?xcd55UXDSFPGi z!>>3gimXhEf+X}7A#;}4Bga?&@g|?=aIBWe*cDd862lZ(F!*GqWZu@!G3GWenrJ0- z!6ABvGccZ|2zJ!0zP&~(z$W*lG3t>6pPaOGPO`%9cUS*5$>04OZ%%@~A$g}tC@-Pq zssGhSPezm2CM{}S?J=Au-qsNo5xLq@yL3}3*hsjgo)M9aC67k$8B{V&Mz=p9Bo-$K zI}IpkYjfmc!Kaj`CY6=pNUri!R8(|mgga%h;+yg1j;s1M@SLeYm6zL2&QR{$3unX zFdtEOk>u8w8yYR2K{YyRJl$<8Ck4}UDdBu>qBg0WDN}HBt!+bTUX`jubtFvHT@2?S z)s$^)+fxIB*)To0i}t*{Kl#Zu>bC7ae|{##tI)PU=|p-o|Vuluk=+tN%+LJ-%ZskqJzpJH{f$dfU7v zdQ(PP-R{G5R^4YdeykT{61fLjds~=c-MmSnN^HQ(m-~VR z$+nP8_@9vp(aa?h2<)rNdnn52^p;YfV?OO5yIO!0ER;!{mU~AYtINc zUZ@H;%#Hy4gVfA$D#t4106`O7>vm91$;~#!a7<0@QjC{k;X+1%3YmFg(4^-59C_+S@d)I)45urcW^iiP$qy|>YX*AYUulqWts z9f%vL53CEt19yt+(M-PKb78b;=$15Tv^m}o!dFlRSqiJ`!g~C8nWAR;owQM>TiF>l zrTxzkA<__rp+~KDYM?6HCBf<=upzbfh5`x=?NQ}JaD`a)_4PYr1q1|M2Ih2S&oNh5 z3*6}t*Jz7n{KMYs_u}_5A&QqPYlw1LuC-6b>Xo(~_!5|!tg%PAQBz|NLl7Q^)T=d2 zYm=W>Mc=%&WU6Q4r^2h=u+j*;&WVOAGY=OQ7lWlW@4PYm(tn-0nmq0l2u&P14<9|6 z5Hv6t$PVFA{fdM-N7MW9@gwFm$AlcXsS8-OlGuKbqb9JPMZTn@+Z138n1*Ty61EdM zxHTD(#lfut=(&{3EC&v7fYK}eygb(ba_*WRw0u2?a)cZ^XmMtw23v|qk8nVxMHEP5 zO8=3416pu!;pVo_(F8txXm<1pXwRNGj6i1lxkm{X)Cr*jP~((-?}CUiabAskRLhKOcp!M9OSY4b~8~|xFt=^ zb0WtwGNu*Ui3Yv7&eW#q2#qhD`_l+x>+@@_|DFZ#{{$qCrS8~y%M26Zh2zKNX}4ze zt`^!S|HGS!6+M4$r@)1z?B=gTu{KI6VV`O0(eqZJ4&3EoVXerhE~ znXt8xU@|2Ve!;~@kkpk|y89^qhg>s0)ic0>KGU|X6Z48f_;q1{TV;X(eJ%5B=I~gL*vdF$;v>>x&D9D;#oNUH5JwK19+70qC1e@cFt$&%V zzcJbM;<(DyNHtJaBg7^qzlvv~k#WtqimJ1M;TJ_O2 zdBRj>;Z9!(K7U+orn;Kwq{Y<&qbf!_X4p2dhO{AE{v$n65i2XD8PB+7!Hr1Eu;_zk zFMETos{@t03KehFTIcxoo;w%XXl|HEn;J;af$x@`%lK(Gh|vyZryqoqhIdWyfkt8^5y#Ox5e|L zwmG1tQ1v}l+uGWI+5Xg?FSCLP7p}`;U)pJi@MVU>`W{WgoP>L z$&J@}Ezt=L4(}coWFkox6M|$W`4cFpp5b#qmm&$#j$@>r;oI2m|0&r2W^67}gY=eW z$;?c=XO7sTbQQS|nm+@3iz4?s2X1a&gAoCTZ>9g{-JQFma+E53BFr4Hj+Ks_%ycwC~+&O z&9r%Ns0(5J-#EQ9igsYp%{Rz2erLb>6J1^~xCH&GcN zwJZ?EB(}yh^n7n&Nb-cD@dF^9edF%Qi%yFi>_V~RBJL>Ynz+ujHak}=rW@Mox*l6{qPmMYw4_*Z3sDWt1 zIGBcxE+-5(^Uyvpqdqv%|C^x9!-WwI?<||0cBa!w8>4nIxZ*bBkJ-(>38pLX@$;ZZ;O=ek*)LF)+^Yz5Eic!x@fK{nvhzdJSy6ae1`KCJX60Yg? zo>wr{Vu8TcCXSn#oxRkNX_%$cqY#yyt*k~*)8y4QdZt$3V~x$kUERw&YpOlsF>yQDHS`>_{7FNen2=_bjM}pHo;Ns;!R@3nDf)-L#jlAcQzuLN0sl;Gny}5B`%@k-32<(on~MB7e=w9AhFh)uF0Bl zofdv9q6lcr3JNcssb_*o6y}G!BA|03@B49;Uao_4{^NH(pk!C!c3WE;^&f)Q~vgObmbV zA_2Doc}$Nw9o5#Y_Bqp!X(C`uPu`6jlcjW#o)|_t$V@-N-WhgaR_8=*tm$#Bt^M3xk#i!@6 zG8F#s4p3L_X=mC2O(PgsZh4!EYWCg3HgsKsD5roxhvuQ4l||9o4^K%o4WbR%7Kw@@ zaD8~}$3~|6y&GOf7z6?Qlm`Wrj)?d`<<#`I=!T!LTy95nu5oXYuI;~_mt(MdDQ05i zZAX1?ad4rL)NQjkCbUf>4k_AWlY7FYP^!7ifeQlN1eRt1p_7)~HEdbRnU_2?6y8KV zDIw9CL9kZYNtde6Sm>~_z^#UHtkA~ls!?XG^ymU+=3=^>67cEMrSk|xZm4DB@%l8? zRvM#*h(JJArd$lK8JW6nQUVz&=f&&Sg${nvR7aNQSsu^~EPuA}{R@p42~|V2tC7;s z67wo3=o#?Y4qlKi7`G&3jQ6JQ>9%!PuJqX-CUdy$B9CJDT!L^y@#{S~k~#P!=awV} z1SR30-wA!W{=mJBnwUUGjFisn5E=#c+8>!rSuP>R+dpS=D4Z|$IZ{C&qKVob&XezO z;5SlXaE?jK&MZ!qQER{j;~fD}#jp(R>@FG_3axMgY6Z>0YF_kG+X$oA5B+6E-^=-h z(9@M%h-2rtau%dLpM}M2Y|i$yqtdOuULiz%sKPO(#4nkl0lwLrYV0wae>0arNy@b> z3d;B0dEn~HsdYJ2&YqN*h_f?baDEM(l$tH?gXXy69=rQ-wwAczTj#b>Q+u1ce+l7D zrh{1$s#@6(RCWoKSmkk?JNJTuv8i?Mf3rBUPf^F&WpO4!T>rn5yv>PKI~_BAs8(QD z_-fXjubPK~V${Ch6N9qZV!xohlAwh3Lv#ckaB<>B)TokgYR^@P?g5#Q7!&f9!ZInLzDTYawlH zECeb|YM6BN^x3mqPBgi_p+OFe`~(#G0zmI^Bf@2lHIHiAVWQJwUi;m2`tE(^MlFUMm#dbK8GCNkKVfprAJpy8I8 zSy<0p>Dtmo3a6!`!%!a~d%r1X#(AQFo0#P2+qx>mUCe68M`1wIIfIkrf93UyOCM(w8{~WJ*bWz{B8;Jcc}-^OqF2rjLqQ)DIti`C zl8erYn2EDxn2x*F6mr=d0eR6`3S&fx`3FPp;~Jn4tCMSqJa%wlb-vk*tGSKXHGgD^ zoU<;~lJMgh*cn}#@Pi296yS0YR<;xl297}Y7AOH^^YYl!zMbUM(v3?F-T}q3=|*us z>D#w;Y!hpW;^X5f)ik^1;SyB5%` z7KrzCpqth0%#&++*!9Ve&v8;-!0w!u1F8NJCVL*}Itc1Zv!iEe8SAr>ldq9_SMBWW zi=%mg0_S{1t{14%%Z zMUqiNZ&R!^Uq^;PC}j+owY5KmxDL4_bwComFrMWnBV19)TV$W^x+*x@GKv+GWH`r% znl-1;8XZ|id0_x6PM$Q8hG5x=iyk4j8D;h0;kFtsOonn8k~zjS{FsGLmadm*C_m5z z9C7d{tcgTV&F8IOgwdWHwdB7p4cG~^r_0+{^Q3~B33*RD)-#uzJ+pj{I(gp?o{ob4 z07ArBC?B4`fW^kf)gPlK0HOC2N`vM6`ME95Kn6?n)GnRl}F3YMNxf6S$FAx89`ir8QWq9v7 zo6idm1bz=JtE+A)B6% zm`F@w0ko6}vID09AGMkTN%0Z5n3(I(=bR^lPvzYIh-PZJ-@6+6hu-q&sCCpWF2)bR zbP#{YBP=Xg*-f#Z!iBmfTrEwUXXU>z3g@6PZaKH2qQYkQ)8Xn`As8ewR8#3g81xg(y=iRxw9Ay= zWQB-J%ygJwD}Y%Hw@-LY`D$i|6qeFVDZTTGmkqb;G>VXqa%=MvYS2_3Eb$_Dva(k6 zkBk_d2L`y_#=^x0fD0_+Sr5`Lzi|uaaO^`>RTZk!CM|+o#Zrm^mP-nj(s0^C8D!V7 zW4UN#+sL=h_t%O8qnTBpZLd*=fl;VbRydjFqbZca4)ffjj0(i-mhpe@e*`PfJN*gtU?WqG0Jq&Yk?f7(~09YUPptawOL~6jAH* z=B6-=vhFK84NM=BpZl=IL>pAe@;qp~0K!Y_{59yv9)v-UAVwLn>ec>K)5#7Pi&E`J zjP}Atmm#oS7=WWX`aJ=TIJRZ&-N)62kUPTjsoyq9s{Buj^q@T}=K44zr_`GE7{iG- z4~am+b8g+f`xS`sx_aJg$VZq*gI-Dp=kO8wfCj-icGVu*td58OPWUJ}1)~q7ynzb} zNoBb6N+K^ECSDHKu%mB64O}=gbnALUZ@9a$M%(h%^}4bPX7r)QY2Kdv>Df;oPd=o* zZxRw0_Y#fJFtKmCT|1`i(77Hyb}xL)j_qPrctZwj6{vQT)l7uHb*-2Z*-zcS|k?_>Wp zTmIYHf5o}}?PPwzH~#Hpe#KfSVCios^S6`vl{@omK;myF^D77TH z^IV55=QC^@p1fG{wzPubtk1>hdDS}ZO=3vXc`3xOjE?E|dH-awuJy5z(K{o|;>pj`>-ZN^viE-W^W62iudBRw zI2iSlpTyFkLOfsb6lQR#8}-FJS&vl{REtG=tdP2o`@8Qi2;-$pD4;2+Y(4u9D{>$; zxb58h$Nb6w<%XvqBW0#4KY4up=3jTC-~6MaJcl(i<2f?x*D8_Ts{LW=&HEkJHAgw> zP6g48W)#m)5l-gqUl^q?$f*TwP(I?WK>~*!gcsyDq=y_|z(rG&`=0 zI=$5AqS=%pBqTIPoXo6#dO#5HE``^1b#-lfK*kf-REDC)A}hTgZoyr@rdN3XUK*%e z#N5Eh9kB&&~8Ro<;U*iigoRFcr?p@rm37e(}u z9Vb$f?vs>uRQhpemi!1T>8fe+zTd-ry)1#TfETC_!s`T0^Lalf$hY_W$gw&rJ3%)s zY`Cw4JYRdK`jA6itG24#fX!$$O0S8_0YeGyFv~*k@zi2I+ooYE^=*esWCz6>@(`OuVTJ|tg{!}dQsUS(Y!`K;TasNp4- zDg#Th8JO=%5P8m3(EUC}aEtpC)vQcns*8PHTQEkQE>cWmq>At6+n+K@m&8H~VW9Cb z=_>R)A%klV>HS|l4T~}aqfi&+SVWBqHh3`M^a1_D{Q#kTMqJ{R@L~+4td=H_*bBj zzzfH{HTn%@-En99LG8vWrzRgypvMeQgTK6KH}sJ*d11IOFeN{SA2#jTp=a+WD+au( zL`O?R-0-jUt0Nuy)E!ExruI)@B80yM15!Z>=_wU}AHfPnub4N@Fg**VTk<}H0}*MT zK$~0;9F`J9f-ZWf)=Ag?jh%KX4+gd#kI=MrMb7Es&ZQW4^miIXt4n=Q{tgEG@MlYi zL*6&J1*2$S`&IvHGIPj$CV=neBGfOxPw^f_r5 z4l@}OdU1N;DTta2AoygkJUd|B=QLWSC_?#BNp!duVX^|VBFUXA+&9ubF7j#eOR3iK zozi^6U)DL~)Ft1Zp({wKG#7k0!2m$M+LxeT8vfmGeN1zLEk|nIi|sf^M_ob$SH@p? zWaKg6CrM1+51bUbW8JO!t^?QOc08s9Q}T5gm|DJrxJOZ<=S^SD%~;VL5iFmn?=Uf$H%uOe*h^ZNlBmEHf=h$~tZ<_X>%iPAf=JWTu5G zKryYX<2px@msI0BusGeF&*h!3rabWTj&<+nZ!Y2IDB8hGO0vjYckmeKz|EXj(=d9! zAW0tBDMOg)og}7e+kRo%3`FfHUkE94JLht9bF=Obr-lek;^toK_p-O^ks=MN5f_-m zdw%5tsEu40A|(v`I|Q_9V4;T)?7I}S7Y50bj;KFu<$*h5~yf) z4SmX-M{a>u0A49*N5Ae0fBSw-+~*UE7uOpW_n@t=U~TVbKZmXuh`TK2Aw zoz`Dw-5&hfk2>sWiDz+RRpdHfQ@rOap=Tj3FE6h@s`k^T!TyKUEUjUtPY;QmYq7(X z5~_3^C`VKq`68?;=2q&bCrT0%kAb38RN*LO8)sEj|L&Tt&pX2av(=vC%f9Y)7<-lj z^VuLx?A-7&L%Uf`6L2%vy#d)wL(>&cIJ$7i)!a;q#i%XOs}Y5xf{o&wm;ELARS`M` zBVmn|Q=KUP1A>WF;OALJBW&!MY|O=#!@tW}4};iF#U*y>;+n^BN4+XflEmY(AnvR$ zdI;0*h9jkvX<0*4yeH60RrNYh1&Zvawe-7qQEr4{Ol^+?!?u#)pzu3mpI?Qdi4|{d zyHwI*a;}0m%F&VnCd~tLm3*tRKOE*RHfV(j5Y; z%YK(@QRE*sa4AI4zrWD!CC+_4C%fr&ayV-cbR1lnbY{^U`>4W&8+3!C_lp z)+%&0FtF%Y-3Ed=A&4tftVSWqoqM9J!^}Zl4$N|+5Kr*&`Gc0Chro(&@eJ`Ih zj@lQQEx`;`%|kdOZYAsXd#~91$ff8DOJR&(v>^)u=fW&A%DuK+wr-*R!u|jI2xpdW zmnQJw>mcz-TFBuRWhp_omD+GEaRd+zTUQ-0%5@~?iO&u^;&}3YM>vzuJ|0uN1w=i% z*5w=GI19zr220^+66K?5*eg~7-r6%q6 zA+eBt(xU6*55L=%?%W5M{ki11t!-w7fzSW&CjZ`LrMtI&^zX>ATSy6vq|67QIcRICAFlJJ>A?`H-yM60O4<2Q!vE8!hUZb& zPhVYytj7@)WJA3Xsu$lJP%bm=F_7Gx z`nm;PiZ$ky#O}VOCAkeZD*ZV9#gDly#^G2dO|PeeGQeDhL*yP9 zyYRK`TOMmoIn5Fl=#lNUlVdkHOIuzYoIi?;RMXH9VMo_2{k-*&OqVi<777});9c+& zk)&;h&YjvJVXGoeC1=yJVHK9<+%tlbWuFUeMxkbSWF?{gobq|gdiu!(k{I@>jX}Ha z7G_;3dUArYy1M!{wmfCtkXdN6fOt&Ebz4{LoiLZdCsapvUy_R0fuqHXR|r<*x#R8h z!4x5t@;eN@-OaMvWgIS3Sw_92<(V-IYBW}R90o;nKk5a`z4IbX=c9N_rlHh$2%UcD2qGh=rVOdWx z7e{LrcSPBDnHWI{+Yzi z^l=iZP8vFPU&^Wrtg+f9m!aK!@czevxz0wnlo_X zNmfP5u7jA#ie*1bQ@QXjgf25&!Tcv>p#!NJQuOsrzfhP5qyi+wODbBFBTho%!#GosJ8-MIak_WQ~$zwOj%M; zNs1C7hZ`AT9~TSi%U!Ys%~b)~>4NI@=$)iUV!rX@xQlC_6E2exlWxUE(EqnXchPNCs_BnAQUAXp7({oT%xt`xBP`|x975Q-U z^bM91_SfTGIwP><8>>Hv^;x?HsDkdn!C+ncdulgs2#Y2b`T^_Phoiw{ZJUc)U)qCk zvPD_YA(MidVq|(zHTfMVZ=^01r&exwzG5@ksCrhP!OsjK+n&)o(HH68TIv!R-s|iv zl36s-Vz=RE7ZI_Hl!nD#(YX(**r9;qB0`rU*M&R(`40SSNXva% z`gV49kY=6%ZJ`5DIrB{t$x#-Yek!-YAzk!Fn&$4>U_P@sBN+3N362(DNjr8C-z)?Y zJ)Vw(PeKKZ8eS{T47_>o_jsn);Y86YEbIlyOM3()9_Gwo{TmoE^kEjueEaFJeY(pMIMHHD*U?x5)w4Yut5&kSPhY!9GiZrTBpYzj$0YEVk~!0D zMnXrcz?MHG-+#XXKHp%r|H$@fasZR~5($H0=PM%<$oJz#s}BWl50fV;xj%>|^?aen zhMT#9WU)8Xp5+_R3*LVaTxQ74A3cNNu&+8mrj!(u2}dJ-S9#TK>+x00>XO3;&`?+5 zM}ub(u%9|lpW7<;&a7+|pFY=Nu#zGHp{FCrz%466%WRL zh}hr|rMbAI64D3dHD1Gp2tA{@#+W<_!ofY&9H{$?xH22Vz71OrYKpj-g2%B5MF%le z`5od=O%&e+k%w{3tYI~I%1FvGk9v`VXuNGd|C?KNoc;<=FqD~g`rLXG@`y-&B{VY` z6B7xBNs;z`27aQvUfa8qV)%rXy391=VHmy0JY;07$-v;_v(nQxDn~pe6LE7>otbAA zlgxY%2=az8JdF@vsVjQ+k%iN9R`fqVXzRTImBGD2Ef-aJC@0R$k6j}1ur!~Agr{cd zD$(qK=N$I9p=l+<#w{~pTV3U`Dv!JI?bH))b3T)d7w{?=pimxc5JRzHma8;qh>{dF zt0{043jKPl&nj}2&W*qH$in+>;V9ulFGM2l!k@+_0dFvJ6Fh*7n|E2uCs6EvbrscMR;X^#M7JDYu{ZDHJCG^ zp4@#Xs)Ti;1gatJOR+<=Lb{M=o~u+dGGSL4)7g$?nBdeHe63G$qV&I&0Y0}5a_}a zZp-g+hFpqvHx_c>`tY(X5oDqXxkM~SIb63Y(`;7y0+E6&q+Elh(TFgpwze&y7O@DBkg@X97CkgCq=9sc9FunS6|!Je2JgRuX!gf_ZiORF>~#>Xl;O zyzdLTng5cZY^6S3Cch;U(-7)Rv}7T%H%5p`tS(n$jH*Uigv~XhN$ii>4Ve_`%&My8_6l%3I7MT*_nt>+9DJ~(DWVO*8TMns-AD*L~kK9}#o+3)P zWs!j7N=>5-gF~Iv4$+}EArd6qO2V;5)z4S}c3k_6suQTLTpaheI4z!atJ%I)4z~zz zDK0fNwLilJf0C@1)Ub8$4xar1tm7_Z2&*GfSh(ZODD%NmJ_`-S$uVLQ*%Sf?GxQ>P zlFk0+I{#?~(RCq)zciI6qeCeZO!&Ld$V}~g-ac2G>!)-IVvJ+DKRkJKZ)AvNsmDgn zb}FR)atUchYG`No&^+GKYjZ)&xLuk&grO)3wX7{m^YByg`(T`{gR%lDoNmgkVDkAlb>6cHj0}owrr3h8k)A$2|?6sauBM$KdLRxlTxcoJdzVg}YRfgO3)u(RZDVWr$@m8!fn5J?QME5y^!I5Yug%@ME*uX3)V5E< z;!*p4v89;041I`cyt<$?x(kNxjg6B6uE$*lcuSAowOYg?PU>)3s90u73Ky$F(18#Q z$ED6BPGp!Egx{^6n0pV4p=jCFlcRtEfZG88ap6OqwfC_;+T5n^;xDneI!TJM5^{Rj z-Epyr%kI@9M4LnI#HcrOZCp{&xxLOE(0?eHdi(nRJCB_bi}|#zn68zd`>=bSB1dS0 z%&(3ovHwFGJ9J@vkxK{k_<88%>_O{N*s@3S8edy-+SDGdQ}^eG1R0B<3u-kZwzSxy zysuUM6~OOyi%q?`Xvpou!h(LUi1O!XsOwc5021ID3TvQLh67G=Me)0I2iD|J?!tSa zDYm(l%PLJd`jDVTn5d2OMT@GZDWSJYp-x>{?p|C4us+tR;b3%Sc2Xb13Q>e}qKM~Szk{MD30DSOY(`4LimPdb z3BY6uVlh`~k&SIMltNDDlb|?YXc~SJVi!S~M~hRPuX(4et~a5{cR-c^9O2GNh=|xs zlvbZtETLyT8$W0^@`t(qA8GXaBAs=nUXH3l-kzfhpHI z{bm2}CFcL!4ugFt-v@Y({K_lYjD8#_Igpkc2WJ=k3IPB|g?KFny;`YbO5);{MdMy% zmG@5A&u?0@z*l*#@;EgYI|yrL78OmuuUYCau=2^rcbR1}Z*P-l{Hf*qL&-ys{3~Vz zdu)HSljAul!oKT(-4VxZET|fr+^;8l(rPSAokp100VE!x9Q`h3V#z`z?vrPg1aa*B zT>nFY<#VeK5MG?*7BlMW&1r;cRU0C|Qc879Hw$+GBpkGu(%Q4IQgo}d;0XIdUQ)%X zS1Ix&Ems1^jM2P?>0`ZjZ@39m6FNX=WAeh`fVoCEIU881eJ4QhZ#K7s6|$>5FVi@oo#IyJaaTW>W%4|Qf`f2t%L?q?36Hm%g<6|yW(P>j zISXvP#kgmfx=3);Csn)mc&4UCh2Cq+)Q?WF;PZrlVY#b)l@r3d8~~^E97BlFv+rQd zafz^Lpa<@Zl7hLaXv@<>(^YJlJ`Z=CJKKlPPz7wGYe4&0i&6F2r4B3>aBj(rtHlDe z&7|01Vkr$iO~S2mC_{82C~SU$?6(BsCbxZw0d|uN)vfI!c$-S^VVOrD zDJaGXl);*!qn$dcG%xv$%wb*;zw&l8b1$RErxHOAfUbMLlrXf5(4Db;VD zgy1j7kx;DsnvqO2;@1olzg=;Aj=a!#uMHRkVXUN-v?H`D=mh9=l-__cZr+FHbS(p@ zguR_RgseIo2dHA^(0pP!i9A&{mveb=#Qz7tB7J&>o!JR~q| zMi}{m5=o`9+q{$vA@^umwb<0N?b{SF^+9e@`GPm{<=1$f@37M5SlW@F-*~S7!A2jw zfk7WBogBSW#ukug#zM9n8j}W{?0an>x}!|nh?N)WRhB_muGip8YM}Pu9v&@hIEJhR zpsoxV18uS7yu3u-^4ZRw^mVVH&zW`3Z&Qy*nweCJRn>+JE*@M+mt8R&zDHj+d z;-Zw{u=M<4((@_s`61n^tBQDtNI(EB zK)-8fMM-R0&9-i^GJPjlZwd13OSuif6e4p*xCbK#a`9CiA$6=WKVVRw>g+%sS9TC~ z%J*R@3muooU}t)Z+vyMI&A606#Z=HNUAOqy_d>?}zT0y=Asb6iE}6`D2*rM0napda zlGDe^i|#O>uWmrLBud=ikJpsDQKT0wDOMGZ;61s&TPF@^=YeXd(c=i$VYAM+sLcc+ zW>foqcLSJhSk>asFTBhU&~06froX6ixI0z`!PJ`PN$U?_-)+IwBbRy|%FaS98`!og zG8LSw!d>E#K!ds1lZ3#ySpyK$DC#1_vk)1ngB(%Gmtd1x0%vaz2;|(~V6h@{&a`zb z8!Di2DMtQ?>k=t~z{PZiNT^!XO09 z<^}2JAKLqX)iN<|kB)y(HR5+vK8R_WT`1KKgU$K)csD1kvR3ZN-&VORTAGL$S#){2 zhe`0d_KM9c+clx@R02MU&ud5T>zGMj5j}r| zE0%kEE~wpC{wpDR6{G}>qGa`V&RY(h5nwS4DwAVSB()}GJniZVBhTLuRldy*5iXae z7)7QoLEdMJ-lVwFx+-WT4v-G6#H`w*Xf=2G7U0xUWg!#f&Rb}ki_exLfljN{L%Vpfxi;4N4c4-F zdUx@3o=aU6%%5v0VN)k5unw6G=l`y8n zA2ZwrwRqhJ+M^zQkcfYPO~_!HB5=Fn2#uu+AbYQ3V^y~uIDMuC(sSjzrY%WQK`Hp@ zZa#1NSNArr>L2OV#u`9!Zm}mdI3t{HQzm#!k4AM3WRc7O2WX<3W3?M|Ndz3`8Xq^e ze~up342Cjhy#y2^fhqPhA(K~R2E=tD*@CrNEhhTcE$xEI49xIqg~e(KaGJ>tICo>MyDiF2Id>;TIU6=PBdxn~%;gNs z%Bpcrjh*;fW^x4NOdffg|9KRy5$WKBc%zY|Hc!$_5aXMSw6s$c#qJ}2ep1SBFw3Dv zUaroyE*f1MZ;Wk@zVhw$Kxz3+=ko486G&$P{Fr8MS$sH!5eX-5ZYaQCq_{uIWrr`6 z1L{JovBy482pH9CsO5pO%9`UWn}b2%hER%oI0sN238=~F^GlXJztB%}qjFd_4u8q8 z?Wg5m-GnY^r=u~HyT=6(eG!^DW4;RdZUbX+{yvgO`#QjVCn+~>M&8?O@v5T2lkqfn z0)@l&^M|JvSa)beSn7PrW#Q9nz6NtoHJ(_Z9ZaH&pE(Bs{BF5lV=7)FvrlH@YS1aC z?2g%eU%KWgAz}_n060AfNWL3Z2>1YRqbR47QBXlSUutato}4y6@wq^UrAU(vZ1Rhg z{Jd*Wm>20=ZgHfNq%`?+4XURXg5S04Y47KnvhH|;WLU}u*IflREu3t34C(KGc5s^B zMg^*Wqm9vQh>|(yM7}b9H}cO#{0*h^@`Vc`7#$}0;MIlVX9r^bRd0IvQkqzL2>{Mv z+ZOczpalfY!VouW5IT23K_@QJ(BR5}j%{Cg!Pq(972n%)oVP_UFBQx@YRR@yg-CLKNcwP6~bPojln?ct4o$ zt9bC1%+_V#|IQlfQ6s_kN4XX)R^}7v@pm>nG+BjXrOMA+c3u68Aa6ncAf$LJ9`v33 zBRaFUux#Sv@v4(_g4sbPJ&-QncX#z2jmOR13)cNIL^zA* zK#^;#2cIMfM}?VzEkO9RG5>Qq#=Uv(7z|PN;y5=OLK*v6A8d%-(8IW@dkaS{q8hXe z7EzZp)mhT=^^*0*OE=qJ`qNm>v6gO}!|*C9=;f*c7o}5$D44itq&VIf(Ht!?%mEGJ zkCX%I#O#w_^O);*knz+i0buY|gJtwNXZ-kStbFB@I<(;;);5#)hDx0#68u#=4dybJA9R-7opO9RP4QDG^FIs+^LfKa(rLlfAi49NMp2?74U(jYf~78zpzVQX2!wxqxQHD` zDh5B`CK=^8m{l<7&5ez)xf-3xX6a}XPYRCmmvFH+^1xKxjT*fIQ-#5@1VmVa?kyV| zoA}v+cc%b9OE5&`HA`eJzF6gf8r`C}zPc^f-s5eRY?uP*a5@(xOK7ZAiOl#ZBPRr( zyIp3KpBX({m=yi6s;X+L@jOu!Jr*nPOcqtT?KzI#5g#Azc_rW&Ve;9?NR`4rMpY>j zulN3QEAi*hwInLmlcVpLHeJ!u_P@KDX`O7|?{K@iE)&JDe!KlvQ=om}ULrjbXL|Ig z=X642TD%5Pp$R5-PviDxQ<_JShK*5?l;#eY`wTkx`rF6W)ZE^-{!sFWMW0N3yFsl{ zvYUD?eNS32FWwj7s!E=HgyAll05;*fbUALU@XX^wx1o}WfgZAQXT z`GgK3`cle!DOVwwt)Ob=DeLMY0Wh0;k6?#TxUFN-w~BEK|uC?tyY zM%uFVv5vIYNxc+Pj)qZA#j%;zEv?v$DRzkLAhlVIRjl_w)06K^wn2V-t;Lf?31r zt4j%9MB*y-V18a+l}Opj&U@A4>DGs(%uLW8c;}WJ|6k&{ZT^7Q7ZfZzer8BH=t2Yp zJi%L^S~lbl3#&YSd*M&*5^ze2xZjt*Ixcvz@P%aX3%%{z@z2pO^Pr|%%#GZwMm*RY zCE;SDTe@~){wtpbdm~Mn`O!NTXsC$<9a@BZ;zYMzhBb_sKleCU6kO?(Innnr9piv; zz=G7*sp8BsUw?_blQ2m z!Jv`P>3WIUejGS&yGgxM<9Zqz95y2n*PEkQgZNN~(Znx&h8HsYf_gEk2Jp{yfDyG9 zC;{?aCRCbNo8>3px@&nz8MHy4v<>W znZlH1Ch9v;3{up>}1JFqReSqs))C@m)_;hP&go)LpIZ2cry*2eWo%K z293_pI-8v0>f1#{MQb#Aw_xa!S8Z%dfH-cEKaJH9R5~PkeUL_0Xgi^ zEw=hmuJc)PuYMjsFpc29U1&C8B01cpYTOUZ8fuoo!n6j(Sdui7Vs`%ZxC3i~k-L|d z7r9}?aKl@0c)nKx^hk$}Q=|;2tCX8@b(yRZt9{R8bG~wLrTc%Pcia7j;By`tFfVlD z!uW4r$a|G%uan5$)YWDG!pQpU`eVAzU9SDnW%L8`V>GTQMAW9?T%Uu8#7XtTo~DY? zlAO>r4BhG%{%m^zD6VP8e@4IK<%&N=?^7Qk$~`g3_V&C!h|1LbOg^-KN_BgUBLs8) zP74hUn;*ra#KBz0rKd}jYSYsV5ZUdE^kFCY3?#G z20#^}E87ODXr-cg_I%O5RH zfAwhp{)t|4(r%Y9Z#?is;pX2HCNLVy{@1C9=v$@wnhBq$0E~56QBg7P2xWIOH1ytf zU%(To;^XUQn|}XLs08va(-m5k!bIUE;@f1kW|j!c?mP)Fx~$~Atl!#J;Jie;H<8#> z9Ix{_yHjqwCq&r7R8lQ7J6jM$T*FIUUpdE(b6KUYyN9(12lwY(&$P3_d6@8U2QGSE zH}REUJN){!BAR;>FkK*QF(?h?HNM>aM|T*_2@!X?kG6o5(J3YOiQ=x}_UNnYo+NiT zT{q!cX--few}~%zx*gY_-tgLEKwD2|n2Gf5bHROD%SCYQ$7}mj+q;~9f{CIF$$DD@ zHvf6I(Ovb_v$i+QS~s*>J_T0fX6S@F{P{1hzxsX&D3f1qEVWNqd%I)mF>sPtSy|_i zI}V+T*!rbb!(!cQ`op5`zfK2>pKdaIRcrF9ncg>h@ux}vn2uXO7n`oV-7ANgij;N?e9%x^HrD@9*f?G1FCHxH*riWN#rnP^dmLskH#f&O3H8GJoW+vdY z_Gjxq%)ROOKQAgo{7FaPe|eF={^{k+aA51-%zX!J@ z8vo~azsGmfa^SQ=Q{dQIcl;l(#&2)W124YuxBq<4FRnF#7d=T_3Kjo;H@oKkfD~}s z_k4lBy($O>VTX@(8_ln|+V{KCVa-Ot|8DTL2JpWdeC=xdw$uK*!GBwde|_;^3;vst zTKmO+E%+Y{^?xn+AM&w(uFro%l(naZwkH1#QT}bX{Qqi*BE8+?IgizFphk6tXYhxf z!i77{@im<_!ouu+0Kcs)vg7+O@kQBpijiOJ-+J6X`kOzPl|SyDKSpuevLH}DvRSfe zKsBaMQKXkuHBo`*z>m2J?Z6EjG@b3bvXO4->dQ0#;bs2apYv-0o1AaC7-cEHOfaL^ z@=BRu5Zw~MtO=Djjp}`Xlc<|=?(*^fi>C%6VJMb$^d6K;)*EQGIqw?Cl%b)n&TLTK zHo_N|oy~df+_`zYyCn?p%PQ7)kZ&Is({nrg)f&#f-IRY^?fs8J<{-bLHne}WGV*WD?*F!Jb{)2IW`Nqr zc>+E$+>$4(-hCqps2XR0nJkYbH_6#K{pNys36gn&qFE& zdK0Re&HGJGdH(MY`MHS+LEzHFaf-S69Ml?iZ->LRXUvWmT(VEaXV!jF66mCs*bQO^2D`8TE9=P@5 zL(XRLzQ8U`cN=u))o0mFju=~7vUkMLmo`c`xWVAR49r@lK|@5#*4DNPjFhkfeM5Xd)NZeXIcnFj(FGdr%1|2xf9M{JO-*_8xejE; zrKDt43pAd^ros5}L|u=eVWxy#Pp+B9Qc=G76&n{JF*pB>9baqy{rb3nZGZPOL6JeM zQsl4$5nK~9{iLpaCo^S7Tk+IenZny|aVDn{P;|5|9sqbFdT0Z~YVVSB>z>WBzN zD+ge?(U(~#A99fKFp+K1gjP#Q=dqBVh7-nwb8aWaW@JdJ`&?z{*3KFGWUdVjf7Q@TZI#u~pIxFLFI ze;$Y?wkFkjO$>`Mo1fBgw04~ji1rg~oFbv)-_I0aAI|j=++u(o{@t6-dZxRCC(5p; z`+y7Jvig^Dw^MxRW&GU0PHOerSI)hS0k5eOndsv)B?}_74{i6crK4F%V5u0YsG@$Sx_a+5;fW zEb;-6z}g)zdzA>d=dx}=h5ll(si`N~!a|5jp{H|`aiG;4wzb2>Kzyl#Q)XI1-PBZ% zB%sv(#%A<2@H5t0FB)sNwk!JqE{^<)CcFVtmq+v)EzG;~gxttjlEGwKz4cT_7WCq8 z2w%!{IotpCp2$64KX!}8Llgf8yMv3xk>~m3OXbQ)fvHnhnr(bU^#L_~(W{STTv8I96D#8>j>m>Z5DxtB({ zj?;cSqzLnn{&A(HJeVNiV~SyW^81KEv3Y7M!KjraAY!cc>4E{D7uy?MfR2jAhecmE z2bb5~M?-;V+S=JM=Mru>Ee|l$WItl^d98;7+dqT|7YP8v35GA+Jx=iQmM1jIULwv}-9m}4+_jd|vm6B=-Hkmu`KDi#g{AKO4VnIam7f`pumD-sEfVb)!hxh%pgYN^{DZhOvnQU z;3|lPULu*7vcC6N=3(i6HOAJ6iLGZ*DbfrdyR!_mdu&_Mfp)aDc?UfYfU)W}$EE90 z)Xu-I@7rW*=5rBfH<aEk3H#FJ!FHDEZa@IVe=hF3s-dAl z?!{2-$TPUr%;b!W1_vZ%lI7loeH=CIE?s9`m#@XoqE}zeVXIl}Ca0!Oqz1oso%2EM z1$61X42pDNZ`U{5x^I5l5%(cxPa^Mo87y z@B!@F$0aT)kG7~y0J7P`RhI#09W%VtjbY_0nRU&{%^mJ8LQHk%XS%3fr_>3KUMBPx zJ>t;QYfVbJs;X)L%)g=|jZ%D=dwnJC!}%`Vj^hdV(rMnVd@u*rO)|kl-72^GUK~YC z2!-%@?pR_L58?Rywa)8bi70n{et&}X&%J*G zE%_@~w2N;31&b!E{octa^__|Pz^EzZ7awXg&XNKs)g)N>&uiDC# zj4O(~l+du4E(npLlBXuyv@v^lct&TdfP8fc2(XWVCP5Supl`XMF{Rk&X#n3oyElh$;R=&yQ9wx(;!2_y=rfICZdF z_}48`{&COP#Kb4%^8#%r zUJWeI*}59+bWzSIjEm!(DJ7WAMdHY+K!BHPjsMdAp)NH0NBVKRS_5P&u7i8aSWwH4 zqWxwF8A%2?zqOv#{G^SHjD}V_l7YDrNS3rj14LB+ygcK6o$py&!TqD@$Ztnb5jW|P ze(D@6UfOM4$#n@=#fFd=;4iK4S(Z7A;k&S+B8|DYQ(_mFIU+s?W`CI#c|09k+x%)b zIp(nB67o-*G!MmQ0NzFh-*=LR$y~gefJRG#D%T6mg4tNjH~kefj7rTboMUzIpeIY) zC2egpH+=)_0NK9F*xbC%>oc>E-#a0&0!dE z+8TqTYQ0t7`0JjLzQ-6pJFL@T=gg9((Mf2TS_}VLZ=&K959hZ9W{CZ@HQ6*7S>fUa z!x}KOW6A#F0QtweID=5D(k%wCSGg~*#GfZ}3 zj)m6RksoD! zGWw{}WDccNRHhswfYvsGV6j8(Oy!58#=7V;2_>~zDbnyvCxXFtz_akY!b%Ugfn-0W; zM|;_kw)d`Rn}$dtopo%RCb1QaEI{#+=@U)9>jbl+vE~>ZER-VRz#`D{jOQlC#vi8} z(74WQF&IyXL$Bse7DAGa1+A0K3VGM>Vmv7w(6Z=PjuPbT)0uX;v0 z?4o_A3JyaYbcSY;6hinVC8;aQvKksV8<+8fTl=Yy7#?kVgHzf|BX0F0B?}Gym}Ou8 zpvB&|_f*da2?gaOd5Pi3^^UdLee5&=l=ue)_i8Oad3n8@CL?@dnu3eri+sHcVTMa| z2)KQ?Ov3>IUxH7kW+bQU+yh2W>-XCcekLu6)pqSXPvC@MK{J5te_vO*U>ZnB>h)Y0 zjwp=EyL*9BikD<{@oa^>H}Rm9n@+Oc^T)p~VE^JSx%17_)6*+HDX(AGBD(*$z1BJ~ z{ulHN?Rm{%8d@ZkwclTFqt>6lTZmu;pQPuW1 z276#u@%m-zrwub+xy;^TXeTXKql)iF=unwb30eM>b{!!q8gky1>7J_jVM2A5fvnA! zDH2=Xo1b7#lDaE57wg?+6UfM`8FGN?aJpUeSo=$)KJdL=r`+Xc6E1nNmCgJl>jjIh-Xa^5kRXZ@*uH)HH-R+=!rJAcvJ2OW zpM1@TmG?8YZd-kJ`QT$|1}FLRjt_NJuIW27dyPW~aO>Je@@9hukah9_afsUGY0N6e zbB`Vdd4@(({}!o(kQO!d^t{~OFF#<5$8Q&~)LD5}WJ}IR@xh2XbFdRf=Rh$}Qf0qBYZL09WG8VAB_dQAr) z$0$se3<(6Xs>6HJ2wCK3y^WC=Yi|)K*RtqSCRnh*{>Yj7`n9}aK-V$ls29k7)UF_kwM7_)tjWS$PC%c-`?~|A3Xywo1+#O1I*nWQ9mM+>%ZWnD>orsGEK;gv~ z8TFHHH%up&G`gMp)$jbEmMG1TYiVlwiHbgZ@6+9P&Vf$c^WjsEo=e$!3OVX#iQ z895{0JOfld#+1w&8H}9Ba9$+45n{x6no)89qS3&oA9=#I;=K*8RxY;}^#Ml0gMh`uT?5zz}kwNfvs z)TnXBaVkr8a6E~_A0W7TBzsJuWpCGV�Ret&ZDib3+{;AsFgGg0a6Rj{WW&izGJR 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 n0jkqykIp#v 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ã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ß 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 n7- z=NHxfW2zaiKe|TSwJIkfODCSqsRB(7JX&v9yMR_WLrF)~Xs4DX<`O1YgC5cG%=p^Z z7jtxfdF^rl{ zerd9nLeB3hC-e71a2M;M346ms7OZ9A^=fO04p^~SfvMzX7RAo6^}b<_bAP4C6*9gi z3GQACmb;2}=Wl~L=Qaq$!+FKrjKyiVve}lUk`u_IMH?`mQ?6C;cDD}1pmcfL6iWR| z^SZdSHB&wXhFym+*uOT8Oj~Y`NukY1N^8bRgu@+AxvVv{wZmZv0(^YQcb9oh-SKF9 z+qi^fHQZrGiNELUFj5nzHrqDh%Ss&f)Qpr>;umn;Yh7}QCh&ot%7gg%5hwB zb1l@h_+GBAuCBw}l+OR43N#Sw(g9f-`ubLD`-xP-5tZ_sDh-twRPUvx;ys&tR&1;2b{ zeZ6GqX!@6QL(kSai-6$({5frCO-3AGd^L!+`vY{PG1#oV zTkm}~Y6^-(ED{GRzJH$}U=VglbJ?%S&Hd9=Ck5t(4V_WdF$+D&w)2(kugNIZCxRwJ zsV$QR_a=SdwSV#BXAN5vr-5qZ5KReU?Znex4@A=`pMGQTQIRLlTe7EH%kn{qVvhl6 z{e$HEv;!CqQ09oPiU3Sw;iBs9Y2i}ef} z<&cj(D>%j&8=`7-&16H5`#L1Em9Xg1PCB+M*v(Yv+)ZRj z0GweT+BqOI7h7x7U+9P@?-;GnCO(o@c4ArT);FQ^=>p!>D6s15jgF1oc$t|+mK?HL zQB^fk5-zn7qGF~%KVhdREr-gD*%U-C`hFz1$4pMtnM2=`7zk~O@oSRIH!`-hr`p1O zwn)csy}|eEEsFuNJEW<>wU1SmX03w3gR&6uC#>U^-OWV8$G0C^$}{yaMqA7Iv3xg> z-a5NShO!EpQ~%og*6hx{)o=1RBQh_3K8dFmEWf$xy3blCMxO5{ zDp3+6vYb@v9L6T&K_YxW)c82HKH}0g^dja>Ky=n0n?%1SddPQnluU< zYx~BF*4EZ?BBA}-mkaL!KGOaU@5Vg1>2pDTY-f(Vg}NqW#;ruZa^gEmev1L3sRF*b z`s-XqSlSm2>Ar+kD3n3^`7+nQ#o3ZJ=rWipxl9SWV82Pmn(*<0M?gRT<44ynPV<($ zw8^did|7;dQY})o!L2yr{oc3JUJENj=?l;n<&z z_Pt|J$RjbkBs&Iy474?!3Z8mIoRb82jbFT-NS4;tt~w{4D_0aC*+4F71k{|yW}Io# zdQD4_9gtHDxa5r8!2Zkc?={>x<4mNpn3yopFqOh1)hwUQxq&8kKahzwp~YBgpb1h+ z(yIh5?9We|XP%r0#8d9)M$T|5D|a6_(cd8B_5wR;?+uHy+sjisz%QRi{n5zR3_M>J zu5{bC!~|4&o4P$d!4(x2aZ{`$0Z?G{sA^#QktcmO=#b~@KP)bzEk-~;buV;f3E~J_ z*@`DAg4dF{=#8Oy3mr9%|5xvg3M^{1+HXi^2z+;8!{S{Jp9!minT%tru}%x5q($yr zi&S!1L>teK>~GIV?{@JMz(m~d>hU3 zE%Gq_#}Vx;{#3O?!|M2$?kmabX})+3PJ*zrkgJ#u@vp%@Yo7L)H|p~r9_6;>EH_M2 zM3LKm?E@(-snbOtS?p>Q{(kfL@VL+J#Zi!WQ<9)qn4pbIu}8~~{9pQ6a+;sY&Pq#q zSbg>U)cY-1Ob!wu-)Dv=GTXRE0zAaoJ8)em+?u*F?*70D6elZM>RERpl5?=?QjaWZ zntpz04mnc7TU8R!-ydd-)>($vO-LrR%tR6L*_FI=Q<0$2Ub~?`Iy$OEVQA$C7mgt4 zUHKv0R+I&0RejSoCV1*rd063uP}bH?^i~z8bxH~Q(62p_{Th0nvLz&(SX(Phh_6JS zLx|&cQ9rEOljUZpSv&0MUkc z=}$nV2Nz{o``2f62_8rWLooPA6ZJve(w?Wg!yB$&EEr$No^5eWJZn5`2=GLfe*T&C zpr^^yJqW9yps+qgzGjZyvSKsS`04MsySqCZJHHh@cmJGgIm6{N8-ESU#kc*CQgV)X zsDELwXiHwC=U_v>-;pYU$p6bFSQz=J>nIM*te0CzVB43#4HIsTN;_uBnaQueyr{F0 zzTbL+V@Ll7^lTCW>7@KCjX{AywI>gmV&dZ$yv>&G*M0Vu9s%hBF|E9I+XE4bm`-2DZrEV*?$V&PwUer#K61^8n?9lNe=@nuI zBhWzYJpVVwOkB$1CH!@Upr19Icll@ByIC}yOm;n{{+9({m1=Ax##~x77!sL$xgX%! zE6Cm5yb7sOGBmu`{@m1j#yTQINty_=m;93_1C8&TykyE|sWf5y)6YiVkY(3H`X~Nc zayo0boz4N@U#T>;hC;ulZ>bOC24lPTgYH3%S9qg?#R-#KsOoS_n_lK*jTN>M+g>~E zzgDW2j~Q;o9Utp<9zc2h-vX+$iqY+Y2uAtuAU4kM)Gh{5>mir2R) zInL3diyC}=13E{i2)Wmh&&KZktAzwCGvdRzDio6@cn4Q;Ubm0Vw=O@_@4T`<4t_Rz z*lP?Dja@sR2_PV&r55232qb4fMNKNN)JR|`1^8CSgzjS+K$cm-MrcefH@*q)azw=Yn7+FaIrcWy15#V zBHCdk4n@SpEANWlA#%5z>2p>aU**<$k|Vo)%~X0H4p(yA(yZ zS!z1M!onbsG~w`TvW!Xzd@=IwH-So2nh055P7af}kk|(wPPXJ*Nq6!0B!2lM`w*3+ zhpqudy22Zz5#LYv*ZwnvM1x}5wV%BsjJ}Vay>rX*@d>W9!w`G#{ISYuI9JNHul3f_ z&baG;wxWub*BaD3{wwPkBOlvAmSSaL(QbS`NWK7!86&Did~t z=!ltmN0EtJ^qmjt{@c1cf0@V*0_2nbP9_A}+uu}_A=^N`?e$(^6q$}K>L{BJ?a1#! zMJT*+`aRHQuld;g#VrBINp7(SB~;A8>mdSFY>4~y-YP%ksWS~}_`kmOZ~D>WL!LyI z)X#_vf_QNG-aGLi*t0xX96O-l3IdGE$3_CdH`3a{A?(K5!oq^Qnc3HLOD58L{zvDF zPAzO!hChYqP%;XNX#BMmp&WD0>3*jF`>~`FRWE=^keTY+Ar=|n(1pJar1H8TgwpSg zG}aZmH=iBODZef1GMltMQ8zZUutfgXd+AwhGOv|9C};2{BknBFa4)q&a{{PT@r8s{ zZh84X0k>eEDEANg6Hzz30qGVQe|HzyEhcKI$Z7>=d@ixZ5(@d4_y_E7R}_L3p*B8raQCDY)i7} zG2qKiV}YZ8nWzEHlBtt|qJlzhNy*=kP;zSyeN-8t~x-nVP(#on6RPb30 zeG{@=e*prP6N`&E3krnTd>RVdP1-WJvxd9;Ym$9)X+&6AG4RWjl+}JSy3QwO+!HQ$ zmaq$0ANLHp3JfM9l(R4vrq*c(?cO`mVe$|L(L zycWCj3T#{%_C{Q}9&{%uLv3&|k#6$Hue4&aO}6=43@=~41Yydqr<8EPAHNNt-iyN4 zWm~tg*ospBQ+{6}OCNJFu?9BfiIv}MRIyL@7d;QwYf4Riy*(8kI@iXL{`G3{oij91?OZu572jP=SeR#TZTQ6H~?nY^H-S>iTO}J&*(aM!Tv9iwEv-SuVhVnvtRmeE-&|f-37Gi zg!ov=y>~yJWF9N3n3x0cVK)x|70NXRmx6+Veh6-mjHjhRvu_mZYHnsPMa9$vT5=yL zy#npV$*DwzxdbB)qx-p1STSu8n`I2R8dIFTJ`mHC{PF<^c&sXHSA)eG#S~ku;Ibn_ zmL@QTf4?~T2Hlzai{;@#ZDUrzV7OF7JbQTm{^)cmux@k$qy1Gx$p>-iUCySn!no)B zj(*Yvq%!e5lInj-E!gM#6fr4Lg<1LfTYYx}#+;@0#9~a69Wq?<Kj@LF~?%sR2T2?AuRa7=8g11={U^P)go0s3Z**_U3K`LLC^x=LoGtg%{HnAZWENN-zaVgzitC(?xWW(S2A z0j~H8ya%)H=g&U>zB>3~-aH;K$J&)x7C&eCj&jINwBb;3!_$Q%zB4uCj@wHll^EJb zd5tf|;3>PAls{PYe-LGi0s5D)*RKJM@!F+mX%HVij4CX&aUImce1dM&F6CnWfCa`O z-iKPS1YM7UC!U;WY+AxQ#l#HRuwr88O&QA|kt5OA0SQH7l14=sk|_&86^d#uk(hGw zwFlrD{;BhTLULKZNd8OF%9l^=(^WGbZ{d6fXse(FH}C53(6yJ3U$b?S*7%kFEhr8= z+w_vr>!yAs@=Zk|20KOlq-(dmbT;s8qxoYO*B$u;As^!bnbqTF(!nUHeimxNzj>`3 zWCRomoXVsBe7FAny-&~GiVxn)XTMBNZsxVoo(B7!js=LdT6VkL{i`Gil>!i(^3dxa z8<|-SDj&z3&F@+8-`2yjMr|4_*Yrc>9t8%rTlK_T82Vo`>%IRj>y~v?e+pk>5;wx` zgjzv54>GW^Bym|VzqHf|UefDq?5P7*bQ6I5|DaUIbBsl9tyFEuL3*4Ef!o+{v0Fc? zciX4M{o=T2zJ4#^>LQMP{c#B7Zbk8UK%ueYo>S=4J5>FdwS9fAHVzICiA2_r)IzR0 zw7%>2j(@X?$M?7m7T#W{zzmUqc+Y0yu8#ecvaaLHqPXcl^ByQ4?_={C?2yR(MwLLv zZ7$I{O@u$3&#oBctRTdK$Loc`%hnG5y%yeU-!Tq1v$d%Z-~<;(H64YMh!mZR+htA& zG#z{H{w8aR1*X)45g4QxIZp_@7znbUYq3=%7GU$m`~^r8*ctg`G^95`D9$qyF}Eo- z53yB$tPUSHS8O&;FeP^(&S&5{%wHd^_=Bv=P3V6(QCfR8&&PS-KjvY$%OmB=qKS5*J-GeG zmSWwRI%aAq@uU2=RO2VEd*y-USj%=gmHpq@XI=9*crJgT+MI}$Ba5Fb$KLM5-JRI; zvG8aNBmHbCud`(J0^2;=>}O(IjF0y zWY7c1o{*VJGLIH#&3wylD-}{u>+9~fUmC_2y8^j6Ic`5sJ3*hD$kth{==M+KJP3fa zIpw;#4v8Kz*<+|GPPZ;|t@4dtzRV@ut9=8U(eZa5Bm5x-PGgmx=0Ien{BuZviJiSO zg6hjF(7Jt=OoSS(^Q>|x^E*D?@n3Z*HuTkch2ycKf~TVcynmo)iSm^`~33G~6Gb;6DHwu31+?^lIr_?)kV_pu-k*s-8kd`6R1 zG_n;NUm{(m{^kuQh-_*fY$=7y|Fo>70sN{gs5N`&z1u#8u;a;F1@huopvPn(a484J zm+tcDdnxQZywtR1&F1uQKWPAwbH%!7LM^rM#BPuldgdWOF>smk@`4pg&#S zWn`Y7Z>~r-X_%vVU9hr~Y)mS{e0PKIP~$?!D@{3yD*2H$e|o~pm-miW?VHSHOBY~d z#a0I#u)UGH&)eM>JsgI^Bfg(TB>iIF^(#f;pZa^iB9+?1o(oc`U8de)7PnzbG7CX5-}=#P(nW0yJ&WdP?|-n#U+Z^v^dlq> zG(YfjKg;T?=o=igAkx>@7YoL(CK_N0F;p_19!-V zy@FTc(X8SeL&zqP&m;(Yv-Q;S(?t%_h)l);bEI;m(-h0bhQp4-=KDy$d9%&IkcHmr zMp6&!Hz&6T!(TDB8}jI3?0}|418K4G?N@{k4DbXd#gSk6r+e*sKuK&^D0c*w$7wQ1 zTpGKtmtRyA9}y8z{vjI!y1(LWsysar1Z(b|h$hoo5YNaAAYZ7czcPrW>cw|#WWGVN zdFYpJJ0N89hbQeTFnVk2Sui*ek-8v%1=p#5Cn3(c2q-UWW;cPoGvcy1ZN@@jEsW0lSOYY&fXgh?$l0B8i5@x9PogJUg@EKZK{Xb zW7`}iq)8^or}AzCNt)TG4+NcJJHNL`N12i1K5I1m`&>0f!S^q>KgiDi4jaC3tJ5>| z#|i_pm$xevNK5R@(Qq36Wpu-9BKD{1cpdwK0GP*Qx2M(Q((r=u!M7G+AE0Tu_?i^EQ=|OcVww#xL zQE7)Q@k*>iQ)sNmypASTDgl~pCgmc@iQH~~nR`!H?S6Ea6j`}d(4L<-(LOJl#RUC( zJ((H0p64G-_&Z=v^S9^=7C)}arN)B{OFhl22jIWCfp6Xk4z#Sa4*j^eYYhU9qFY;a z2*MUuWxDAKPS>ZpNLo-7j~Q|JJgq2Kgj_zsi{{g4tfe!maO@^ga*t-E>vdI7x^riXzZbv{}aHaCJOb^T;@E~jbaKIjf_ zaU9)GAku<4GFk0azu9)I)o=fg{cp{3^zC6R*_*iKNUbF*g5wyt5X%#;3Wk z-T48#7ZQGek0mFhlT>L7zH!)|ryTa{J-9zvdbpnls*d>@Iw4dBy+c=Rd>ba+>onYG zzkDHzNjoSSlbt(pU7W$zTXeGcHrReNgF-oybz+^d)OYfhZ`7XR8Mg^Kn`E4=0;28M zw8^5=l1eS99=W^wX}<7zMWgK?WjhEKN{)ql5`9%_{850EU7_;p>a_3;AGU<5jH^tI~}_*yEJ4tH9GpV>GGU$^QrG7csxi~b)>-L zh7!V2{>U4dr=~gS@X&@A2m0DLAuNuUgzV-s#xtyf^tK=6yw$REo3x9+-|W<0 zJf6P|4Q9E_2?NfZ7jz{HV1+(@wBu;6Jb@eZ;<)AlC%Xns-&h84;LVn{Q zRMdT=sZ z+bG)0eS{V8z3rtB9_;~?Ij6ExxN*}+&~-iv+~pm=!>lGDZoV!qv$b_-XHGlkH(G-O zaSW-csSBzBKAgFe1=iO2i4vE`%r$4b1J?xkhO2j;AqxEA0#2sQwZ$MKf;o$m;!a1c zy8z3;$|r(KvAwQX*ZpNvs(n6(QKjC@MgT$Om17I7ZEa)Va9Yr>8sP+gZsy_VE%*=; z(p4mSJipZ+8e($_3UM?W&o=_(l2V6!uitz4;K52>NcJy(%JHP)WxkQ2A^YMc;W^L0 zA*=62QvtG&GvMjA@6Wr_BYoHr!`!K4GH(jz&ged4_E&2syW=$l1KS;-d{KB}QEE`) zK!+p$drr7=d5MQk_S;AI&^mIbSFKZ;@DOy4z^nk5d$I* zYR{u(Hxq&Fh+ReN?D%X?du;C>lHzxec0QcAe{?j>qg?vKK_{8&8H(T?XmiX&W6VaS zhOe%o&%8K9pZd98(=3`@O6toHdmJs)H)kF(Qa(mxNK78$wRj}4XsRj>FpVZti#)H3 z7bWa0sCGTWX;%Eq4HUnOi%?I!JTRhVW%hKmN6YSAKc^9P27=JptU3O?NC) z?>7cUxk2Cy)L^=3nX;qx$KE80no5Wt|LFKY&{u^ndnncUBlsl4%ne zT8Wjw9BojKkEMHv{)boQ=SE3={Zuy(k7P-)y&DU8fZIyKs?<>vf5@$>!Yqyq--3P4 z57a9Hc?Sl9FVWF(_KqI>n?qD7bPXR~n_OOq*~s>9^CJbOz%7K>_)4|9rkabtwy+47 zSKKJuyDPw{TRM*aIp@_U(X(y;^N6z{edGwe6cGh9k;LEHLZM`GprC(3c|COzpsvx5{S913mK7yNkF14c&<=2dL!(6*uxhNpfwiHr(O!Qo$R!q;$Ya3RO@D192vy&ApB#Kp z=S|fi*fOClO&!}J?oJ0ZFV-*C^-jhO-Ldi@+LejzUU2iITMWHLQv)&J_6$*X_BADWvdo0BE-w)q-k z--AA9F=)UluapmD_jQ|!M z^yFAdRzanq;$`TV#h#S z_q@Oquo&*w9A31pU!57GapWn%Se+MaG!2suc_kzt}yi z^tw0>lQPIslLL^W5sN z9tTG{S(2RWVwR~X4J5j(ehx8d7#$rj5p(dFd2c5Zd=5N`kGGmGi>;@}Bs&2~AXW#U z8k+2^5Ma@bH>{fspECF2Kgg&4zSe1m8QT9F9c+~PDz`Y_Iw&qt`|njC9YCSHH+fg$ zd@F^h;ezok8%Iz~yPtOeBB zPc>@w8KMc(|9L{i>2Wu*^6L%Aq9arF8|_(>212{Oa7g|RSzdAU12Y&KOry8I-)?vJ zaf})6#^U`GB{`!i14B6DYbePCZJ3;us!nZPFe!1E3@%F)7wcmwXsQwct_ zEjAyGG;v9Jq`V(D#H2ek@}$s<)oF~WDBae`9!1&n9O@b79Tp+{b_afZq_+RU_gGUk z`pJLve1fTU`0n!Z^4)Io-t~viC|8F@Mr;zlE;U-1UxV#Pt$Oaz#{M${Ssf+rX7E25T{NKVrZxt0a^-+h+} zce)>0;e33o3)8>w_I#yej6NawtJ&u9qnCG*~FW*~9Y0&#~9%lfWS z^Kxj@YQWYoJg-)1!>n=j-|b0BA%kl?<>Y+iS~7Wp<@(zu0ki8kqO`7k`$yrlXK!*~ zz`FSSYiYnGEvQk{9t}jrz01F1*-`g!P6@4HZlPayRUDA@{yF-b=`pM|x|B)+rH6U1 z$x;%}2)||d=$%=nl2ww6pT8V+YTor@kwJ1V$IfONG<#YC@V=l4FA&e@7=$@A2{4#(s+1=ZeYZ#&|!7{u6xfAEeJj z6MuDWZSI#3XiVWZK>qmAyQ$Bc2|yO}`lY(hx8~_RvMV>!o)Pi8k&6k$Wq~1IFNlSO zDbJ0_LCJ?PFiI!`NXZp$ z2A_*)#V*v$z0Nl%F^M+t+sWmz=oolCJhr@Zy7Hqmryx8>E=l#ts#4aEp}(Pxc$Js&q>Fg{=3;fZa{Un+pTO2%rYiNPX_Nfk zn1!R*miTg_GM18qBGveXv3@7XfBBj`>lvep0lNlp7guSpJ$n`n7|tuUY|YSc0)OpG zkG#4*!a5&5D)JH?2B+#!yAI)%>L&x26Zd0WaO<G|rB z4GoNqhUB|@8ZCzrbP@?Yt#-LZ><6Yx72Sr3)T4>iHB))SC0?AYvs6n;vK_HNoMvvbgI7z>z-^RzpI8cp@}0~j+|S&k>X z8dIB_#c_Gw-US#pg|By>()#a9c^@y3GxY~5ffPAV%#(P9HWNzMa|Da^;9q^}0{Cxd zTpu^|=AX6u)i>!+JWDrZpi&^`lk!mMEfMjr4tMmda&e;SDdpW>S?Z7WBITdjw!Z^c zp5aww@#3FP z;nvvTVr;VqZA<=~U0BGrbN=${y`7G= zFaZ-&HC)@mN);Edzt{9YUp%S}jP;Q$ne2J?2nRsN3U#&`o6Cb8XHGbaxQUZsUdycQBj?HfnUMx{tjP7cId!>=JXS9i1V zv~71f_^=(o2Tc9fUeN48GfqpFUFtdkWVCtyrFC~u8yO2`m;Jh;%}vKxKLd8qaaOj( z-ha0mc7ygk!N!J_Q4?yDMJZ{T!*YL}7~>}F^<~YTYIzUj#4&)Pw5H_11_>aWkbX6R zZLr=LWe0m>{G$rQJ@DV|Tzu2o!|*%d`+(f%PX-%wXL+a0DpbN3Cswk>(=5JM^}6T1 z{*AxBf-&lzDI=K>jCzZ^2Z5jomXcpPM8H?J1cC|HMaxn6v&k&KtpAGoC>Pes=aZyd z`)Pv2_cJ~1F%Tmffzr8Xa8VE{(5umpc)uiVXHV$H;v7%XHUSZeJQPW5 zv97a$EAj6fDE~YF|NGJUP14ZNuz9?&uyA%QT22P&t>@M_?kGz>8ysM3_m*p4YPMcc_V$HQ>Iii&gG?%LYkVzDW zxEmJa=f^S15+erc*vpk!a`T@&zpo^X4lRNR__7v&mWkwJx(;grW@Zbv4Y0GQuZ};U zWI1TQtvV(P0tZ1%+mz^HJ6Ld-4R59pg!==uJ;rzQILtRcZlUD^$w%>W>z?cgkZDU@ zP?*9}Q&YpXQSlfQBm#sF6QSqg618Gfl&a-qM5gEEH^t#@o=r{`vWA!?ABX>ZC zi}Uu+*Ni?_t?IX+(TF`zx}P~QKylC+s&UWz?>MSnmyW-Ul&}3LxqFQG=YRSrJk1=T z2hb?Xhx}#~eQdS{dU~_pMxl}_ifLv#4U$1W-V^Mmd;*gZr%C3W~suIYm&@L?sEnz12hY}H>>&Mxj)=Qs`pFe$? zSFPR8$x0WCN$d02w34>7E3&$+T;0v2qbhA%-@K})_m*xN9?Yt>x&tQmL2)+?M@P7U zYr93M50;WDXwFgGM!n{HxNWTx0eBDMmdya==dczNqYg@B-1&cU)SR9j-zE*hzM4Bx zfVapM+gWF6>!gMfI*uQ`88uvU-x%a__)u1#RZzfSK_DC;c1TG-Y@Ezvkzz%LbP=N> z&Q_oDgbb+B=|P5_R{9oPv4fcK(9N1~$5eiYJRn5C74bQBTY^FEM~nJnb}6^PjK z?(1e2zkB;XTNSS1nkh)`*+EhfU{(stdFKS~27WbF*1~sAuqIjTYXDA_osPS%qkEz{INi>fSC7k0uj`67HwS?*Z3q};D?p7ADh{}Dfsp8(z%!i|G1x=G1rNP)|RPA<7& ztJ?TI^r2%_z-6PGp}m^U?(-TdPj~l}z`CV{bWi@eqPfmk);4voxd+AX&(3h=i66T; zRQ|FB$>CJ!z>0a;R~P@9CH}rnARd()c?pGTWPlOS6c8h9=dG@PfDJ_y;RymveTP`J zi}l=1UE`IR9c?>AIe07rb8h*ctHKSEHGM7lsEIo(9rWi9n*!#Qa_tHVZ42$byu8wq zj+1jcrB>Ek;4T^2-IOy_{Tb4jl3(+Yu#;Eyq(@Dxj72xkK^b8T7o?3grn~EXu9={j zdeA_rhH!AGhF8+T--ZsDo^ps2oh$k*k8eneq?*~pm(-7uCdfvH&QG3C?7ni)=Fmh# z)|}47JyEaz%lVH*O+&*hXuo#$6j_+^7?j-XxD$=`2a0w4#2--FNXyQnG+4gRr|sLZ zeaqT0B1|=EdYib@`X>GKP2g!!gaj%`?~X43_B)>LeAzcUEPJJcNWgDAuZG2Gs?gX$MxWWRZuB}@E}27ocVC#aLijtPaoGZ<@t2r`)jW+ee6bf~wZ zOTc!AnBb?T+CM1b0HQ~2pIq}H^n0#z$YVz8S{tN4o_c? zq8{1z$k-7T+S}UltaNlg+P{0+sAVA93omM%G@A&HPi!+v^?_l|Xa;8!z z2#vf>HaR&`{%8mxRp?YWu$vyqis4>#qxx&~Ao#H*URhP)M$r!4lI z{Vh*cjj=(@hyrs|FHpOyL?=w02gfs?*bVG#BKFTyYYdxmMd#g7wB3W(>y2Dt@tje!(?Rec4L6PwSxan zX90#JGdr8GZ*+84Guio@r@dP0X*b9>v)S#9oa8`DTxyCws4TQi;V?X5(5>te`L-@i zCoDnx4Kd>f`k0}9bhVjm1>N1r*G-t+*3H1O`i1S6&!|DmfybsF7c&$3(dxmNL@enm z#2BQWqh?vBea3{+@d%*ttO8$`6xE#Vd@_ZdQ?X&Mhc-ZsFE2vsz?bJv&~rcWTR%<8T!{w^n?bPn6vM z4wAp|>qdY>@J=Ytw#b%!g8Q1I(xcfS{jHL$)GK+RJ`DEGzah__`vI^dEog~l)`AiH zFPO;4P7GZB@PYL#;^b=g8W{!-s^-q7>QTbdL}kwrJgl=0I&u$s{3yFkT**E2;X~Tm8IWY$f@7XdaSjrdpO!pH#TUQa5#+cx z%^zoGxl<0s836SfW5(%tq7wIDGE?vPxF|?eTALrzzvQW@F$};CCW^Iu+knVyZCz|$#swUG2#C2nn7ZIPUbotc16ox?IrOR9WWaG^2A`>!z+WJy zt5Vm~TeL4l*Lma;Trxu_ek%aF!-@hP`qOXbwsCwoS0e}Q=UjJ?ITU@he6vCO4eg#_ zijc*s$$vn^llm$MXt9gHLP2VBN{KQ$mi7`9FT>T4>@+kqgujdd(wFPkV^e2WTw??> z@M`0z-h?@*D=Z)X3j+|mcU32Q8$OXy9Jt2w{y z0(QvhRPyOi@nK}F9l)GOK{D9?1KX;CNA*GP3SoZs%qoa0eP`dRY3EB*^!wZ7ZPE;U z+b(}TY3)`Z&nxh8e`s1E8pP=&V49$jWVM)bU>EqGG)`=8&TBXBK08fubsA9X)+!nr zKD_POQ08~EEoJ4Rh6VxHN;e1lr8+uU$DnY>pHxou%nX{UW8ZaL-f`%bau|{y4=e<> znP`HY6_Gj^gD=L9<7_SBqu*hA{@JFCq;N19vxI>D3*du$-pym`i9@(1h@hjaCI6B# zEskLfF8GtW%*F9|@gD!&a<%a7Cc>_MS=nJOr-9IgOMYn0-uI89-j5$Ei?PI?yA3yl z-cjNx&nq0kVU!LzDP(|o< zzwD629;5tK^r&`8&RH8^3#mVGi~+NhNplFYfp7*T&<8lSRY|d zG^*t{9RuRkcCfKWt5w0yZdiD2 z&Yd+y_qxb{v%1{~s9pgsg{4J4Foh=u<~)-p8|Lod`cqd6`?dEODHa3He;~(Sc~c$s0M4wr{DG zl7GdGs8)cJ+vZWqO<8s5&^EU!G50YU?!vGbF& zJWhCOai?%bztHOIrWIPn*1h9q7D?5_?iT#LW2F*nZJl`&Up0QrskyYjrU(D~+(rS8 zjYSDGTXHvqv7YtQ5)%itg%c%n>6R9dhgFTxD(Fpaw!F!EtCT~oc}_tSi@ zNegBl9C#4Ef3b59@)h`(ew#0(wJWOY^W}X`3tW79q@>WilJh=#>>eZIwiNkrsYRK! z^`MEOtZbd=eouo<9cJiFIBdE)oS^5KZfTdH#gy0OS`&<^yStkZyYhyZdYBa?Da^(F zXc)EQ9``>yZzgE)a-g$KC-?|**^pw=J3KV{c$>tu<4YrF0|mmM#0Co=E9YTlmF>Ik zB9wkbtf2PZfT`r{V2o;hxwmD<{V*uhYhh_A^+)*Wok8Et8iaC`et4aopLY%tc@*)= zOUfw;62fEHn|htdyPx}|XRlq0zsAfYf1E`V;Ufj@vy0zCId&NBhENOf^L?^lSa&|g zDd2Rvg!yjK+!pN6dGy#ExU515$?Ug{g{g>qKmk|Vsqp&e%45IDgA*Tl?LG%Z?Tk$d zx3k8|+%btO8+IULCW9LbqbjBEW3UBtNQ{t2tvbv2C~+GNi#}d#I{Wr9ZsGT2KjcE? z)Vg;8<*cdV@zPw;Uk>KW#B_;{_;}Xok#V*dXk0mPJtvE|v%DiF^O)mSQf6bOgtY|K z`Ql!$6Hos+;u zXxY^>lq2?($>|PRUHNgh5MlMcQO>|6vSdZp8aL4!$5H!~axOsYZqG1Qpx=k0}y%xx92LFJIJ;mL>j7>jQN=9LT zwlGq5NGAxH2)N{u!Mi3~Y8{xV2N4h;vKDw9ORzU=7WsD#d0B&o0pZ{$(W7bqN7o5i zNXkL9I!oMo*8J+xi4$y(-L4q=NUnDqLS*c_l&Jh}sAM(o&zzM}PsHL*7Ue;v(4 z;oYc5H(-ti7=WH+1s@`N5l8sfch_2uR`6~V;|9ad_2w9}QeD=QujNG63-Z~kf4vGCF&^R!x@>JPsF2v6|4}-L7&jm zWO3M#T+bCFjT&-RqpX9@YdSSj+u!aO3Jt8+oJ*9AuxwX7v}kYI+D)~JJ|%v?5NSzA zwc6sEFUH}}@Pq4S^l1~O=)gKXm&{&OO zA9tchRm$aT!8Vyx5s}*Ij{QAl^8$28`to0>fW5^k^QlHd*AWZt4q$Toy``FASHPfk zC2qg+`Xzg0puu6}Of+y!#>Zv(zTgG~ObH^JNA+jBi4xGl^)g|{;q5$spj%VW9WiHP zOMU{n)%t)ofiiB1Q}6PF#Mw~jzSbL+`1aUNW_EU2N~$>KkHPImanXX`&&JaTyzu zR@!(?fdirj;yoEaB}qZDr%kiR;V1Z#!&qgKWP>&j@wtfKQQ*~P&LS|r?EN z4x7{chO$3hkND}~R=n}qEN9L60a^~oJ$;ixu25xAP;-fb>mv_wkcZ*#sKXnH zAttT>3Ya?`oP&XP`Tx-N)^Sni-@o{ZVt@z=f(6JLfRqSGhXpDU(m5a@4bm`_fQXVR z0wUc=cMk(9jM5(|`g~J^K#VC}_Aaa@l8d(w#FP$mHOq!`%y$6|Rh89(i z2Utaj^EXT_Z>#~4hPdG-qH|m~l^f>VHRQs3=^e`5 zi@RKPXYWR_<-i#oIfTPkwzrY9P#RWHo@2htVv*q#|9YP+2E4<3k_;BCEg1lkyYMz_lJ&X-?qpIa# zf^@;A!V5EoG1}a--@-)}Z}l40QAUhEJDJ8z6Uq>KsA1agZiu?&<+6JFv2&&I!snaD zXxTFZwQiw(&1CelGWP7inCqWrdAtyY@`?(1`>IQc6)JrWjzH3BzN>Zlf(dQUpxw&v zVFM(o`R(HakAPzM8;J#{a$goY~KOVci+@a=e!nVo%vy0z1{lgx)=yaZV4`vIs zVfi2#OlDfzD^|rz&@PV+g2qkrmXN1ED3ZUA)4j2_pLuuHK+gLcuuMR2wZ4L?s_^T0 z!}HlWOftqVqM2o*jQ1X4zV~cE$s~6eIM*6SdeV}Qo2?l*m+fcTxc6ds=qT0-CSJ;7 z8fIL)pIS{(DBbwL>LN2yB-(pxTpl6z6_MfNL)|#djzOe0H3i!I__qD}bmdSKHtEi2 zLe6|l3_{Rh<`Fu_2++;Qs~wHp4Npfd_&z~4$>@x9q_*(lg752ViKeY0a;)E-MiUow z_{kA>-i&Pc!{G0&O*PplfulMPAJ~yLVtkzm$5?r;A*WOJ8ED^9qP=&pz9LI~0g9vw zSo&gxUb6gevO=c`-Xv6c&YEGjB(6!40)t3{)KFHqH&hafvdBH&mGx< zgOrGNf2Tb3BFWp;WKZX}AvA~g4`cdTTUlgFV-zPB*DpX>BR@YsD&2NLy+Bt;xS|m| z5h*_A7@D4b$z@YknS~~7Y6{x9UEe;xev*EVN5w_1H(yAhjBp?db@uWp634-H`_o>b zl{tWbm*J{h4hG(R`hW;uKt>e)OAV6qFs-jl^`Y(t@-+hsXL-v=`qxpJahuZ>+6xH9 zob|i3c55r){~0+hJ`zc-g%7PL3EvI>7B5cT+VcsMfzGRLNPopMsfl9ra1Vr-8bIv})P zmBiv=PumlLePra!o2%Rc=t9Nx%*+5QGZPbT!DA7U@*gYm9#;#p<=T$B|)aUnfdim{A1y<3urvjf5Rf=uIP zc}|90-65$VnxXOR$1R(puIG=vgbRjkjR}I1vTgE$98eIE4Q<*xJvUeEmY;v`(^o-x zus}%#1w0p~Gn0~TUX(4qKo$GVh#p)Rl~Rq5&yWqv7syIyif|{=yDMK8@9`2h#Dm` z8h|3cbY7&bpZRKguc!4Uery}aI?xv>iZBI~p}&8AfU4)rjClwN!Z0=G&=AzY8M}29 zV2R9d>UFf;{T)pC;io)n$c(pDt*!Hvl%hWKJgPG_Hhv9bT#%?_svnX4MW@mxirx54 zjB4{MhTx}DqodJ>PJX$O{_b7go+qayZwm^Oc&^0V#OUV^4%hl$U}naoo19fM8jmQf zFSzj;arA@>$;KFdQqJSrMVY(zcxCuIU~*<-Vs`fU*5!72F*FwUbrZ;UUvX$&b+Jr5 z_M7r~&R>d)jcyL-ml4O7*)rE4N0tq)SnXWJ1Riq2VGl)j$0oG(+k9?mkvk!-T^e(h zY`^zaT`ujE`|l-;tS=mU{^nkRY-H_gkw807B!FFD;F;elUrR&e_fBNv`@HmIy?)oF zwt?l=m6Ye9vbhN8bTvvCX$i(2`M9#8=fwvQq~2 z_s3m6v8U-lt9fEr7;PI>IZV~BT|OnE3YFS!zSE7`g%)yh!AmPEy{1h9r=)M)nCCUS z9&4ZdIr(?>2+z#?=xi2;u&~H_@?pq28b)m@N9+f>si|VI%+HNX&YTIX(gk{pnR^8V z1(=$Eh+j#Jf8NfNTn5%~J= zT*mq~@9&ZQZjN{A@=q8N@4daJ2LfFS80~y`rRL&Cqxd1@2GFY&S`43V^m^K5lHx4} zLr;g&8(zVbmSf0$%`PfYij59=k(`8Uo~P1aST-_Wo#zd7-^r-ya(NwzE}swd0GCjR(+BS#hEwkjA@_8*5B^?sb{{VDgUfwvW#(Km&~#NXG)v7)w(N3qF(FET9w7 z6WdpJeV=2S;ARMkbRBINnosbYzp~&PPW_7o)JalHWYB-B;%cv1s3`UtG_R$DfpLK6mCw zA5t5aWBi7=w3woEk?g?C)YR2QOR6Tr_Te**9wYf~cBH(l4Rp(aXyA2dGqbWPVbZ-D z78}dl)C7%tbE6*yn~(1q-#e)#$Pl#mciUKV5Ek=bDkj}h2Cd%W?$hj)X8Z>Q_H^GD z6(>j$(;@XBe*cV2;WhiY>{HpP!NhBg>+U@6;!t887A+w{@#*yQga=3sU?*!7u@!ZU zXYvRPlxgphjEiAzRm)g1DU1my(G`^uc>eY*YRoAY@!&zcx>eqR4?j1#?7tMZ8Y0_< zZ&YJaZ{Z&L*Sx%cFY`>uRUhiU$_U8|v%*TI6s%tUIHEfBlL#^&_td-Z!$0_V)G{b#p$60THU=ehvqTJjsB@O651wuzC2X<>mBrECD7Hc zU*8L8k;ZW?iz(vxcm6Z!9(hgjre&9veHDX!6|mQ($M@;X`quVqdVypS*5 z@MhbVgS~yUyWLxPRP&R8((yOBo}t#~zwu1kwauT%G}^mow)Wi+Gq7XOq5!%^q|JT7 zSleBFbLmf~U(G@WVD6nepFgfKELSO@e~I{JvV$o5Z|Pd~!GooHXA;`dnka02`=Lky zaM95wpJ$?8#|}S)IWsD>4x`xO59UVpW6y7&KgJiF3#E=jKFH(}eglS$el}6jffUZD zRw>nf+dE%x*AiNqqoqD8$2bmqq|;esx#{d-s?NNA{n#ri-Mv>gKkC*U2$l($r^P#o zh@HH`!yO~w9TE_o$HN?>BO4V(eTBJrBv1fxEK;EExrO=1i?p6pdPlE6cJOS??ix%l zvwF@s<)AFh5uaQ!ZJVWl!r5Z+gR5KpY!#a=B~oNbJuj%Ko1ESYwzvD|xoF zN^qRqir3YTuo*MIx4fO){eAei{re75ot1d}%N`O@g|l0+NlO*nTkiKTu+H!r2nN@esc*3n_rY=SAe`~_aS<^!PDll$Pt`k^J9_}QnFj4E?x z|2aH(Ib*sLVy;e0I4l~axj`S{F2^8reme94?;q#;4-f5+e?A})R}fd(JT;*EIqcEh zeMfFhFMrcTv1{N0XF_N)OJI-7l@VZ^)`K0U$=^TQ-2d~);w(wq2`5kSJhVH^AW~}n z!d<-h0B;E)n?3f+PMzCXi8!f)GznC-GaZTE%lXErD=X>B8G3-VjBY>PvsZ6(&AJU% z?qr+%d0Jm$B{oEXrgd!s>mlL1IO(Xrv9&ffKZdL4H`Dl+C-u`mxAX9%$)FPzRpavS zVyisq1vCUXAIF*^8&;Z{-1Oc*ndi2fc+p?F@C(I%#OoJN1ltRD<|Fh%g-b5E(2!f% zvgE?OWoa&c$wRKV+jWOD0WP(bXP;lPA#LJ2BlguF8TTHr)DFjU0Jq>JSSw5i18yAJ zN-Vqvo|itr_O_Zl*aY7L?Egc|wqbv$LYx$NQvWE>ActOuCeqWkE?+@3ljQJBN;%r^ z`Tx+DKmImR!+$!MKQH3{^asxv))%#bH@V4B=hV1Fy=dYVB#RNO?1rmz1KbbZKbh!A zm76@2EFXIGoaDzBOy2tA&0V+0;eTohjdT6+K+hPi))Fi11QzWgbT`y5FX7v+{nPjRU%pDBh3@u!Xb|u?JuA#&FodkNDMgUUe9hB03OLPwRWk5Y zr&tJXM11o@{JNN=iE{78`>N zH4;D_+NJda)_Lh~ZBQg*-Dme6@tL~QWw!c5W~aU&E|rX?z=tlOC(>)VJ@NJs@}cIwR@OSI73cK)@N-8=i85hvkC2B*bb;3E|86`yyR2$T?PY+{5QEf}^1-;|ba z7-F{mOI9(5AiN~rwjS&fwEkA@nZ8WkneprW9kW2K1*G}?W!HI^nsrf221k5SXcB+b z$)U+!=rzl^wE^WsOtt4;{p!bi+F-8~QECCeyQQzM-{PLDBKMyIO55vMTwL64RROJy zq1RtK&h{P`cAN_UHizzhH`+_l^vP(`7}fK?dCPyIOaCpaaYk^{hN%WGQ)0?Cv$M-z zkj^CMtv^O7-HB&|<$kPg3fMpOq7}by-_&xIk*U;9Jo&c|zC@}}cblwxdb9>Pt2rm4 zo8$Jx>Q9v&Ja<+;XH`U6m}#dz_mP07o`JfpdLbfu-*l1U!5*{lKb2-8kc4CzIigs^ z{KpIY_gVcv%WyP#l01qgTh$1@?(FOymv=hmT$1xm56e>iI#W^7BR&&FIa#fPf4<4T z7f1=wLk1^pSpAb^y_YY=E=4l2uRjW_=kDFHd;8Nq5xvO3KEL}cP*<`m@lmJz*N681 z`;HT@B;rrh>M`w`w!hPGcE>L0=Vwh=lK8MI&*vZ7Hu{_*M?zLQA zXGpUvXJyCldA&G}Cab%3fcBy2&tLfOuL$S~#ysO}7MDEHn9!qrZ^E>)A_Gvc7Rlh$z?*CcM|Hm`7Lf{xVBL@SRoS+yL0t*1wKPT&4I4v7+KmYdvoxf>;# z;iS9rgkL;4$!PMe!9qPV+#P8Gm7qxvKT?DAJ+rxEA?sg91bQs01S>))-5!PQ&d=8# z^VAi!BH0x^Sds^Okx1pWjGP!LFy9qVcRLTsq}JlUW0v~wN3R&Crr~fu7t!MCs~j}-65RYQQG5_jU|mdQlkbjhP# z@j_{45C+`E(`Bl5=Xf^l$}x?T(MU^k-BfHD@Cx0H2RxS0CZ~ZK0pAxsuU+{9qA&@( z&QLuF>acQDLtuB*0dfXB7w9yuyLxU{blMhlx^M*&pBVhXtf<|{LYFz@8?P__>gTmQ zh3Ct4*$shRa`k)~gC-T;N%#5ZeR?8kSSs^OYLLroOS2KXaYCrukT7r|-xOcpG1vUp zYkF=RV+kt;`i`oY@_}Q!a6)l(hiDQ`5aT_6hId*2FlziC-z%kTVX_yK&8fKq-kYHrP3I{O7bo zo)Qk|qCdov3^B!`yCX$pG-N(3wAVosT#Jiu?#2;qP_fV^zPJEB0b@D)>Ms@fyD{qPvRTM=x&M5EI~9J*Gn4qdj}HWw5OTmWa#xhWjf7P_=L9GNHl*m> zt|-HE32y&RatOE=3N1o*;~r3QXQeyY3@S_~+=L5uQbawRc4& zx)0Hi*Rs$8UXL6IDPr2Ct6(DUWV;EFNwkPn-_Dix{!$bP95o9~f#`8qQd-4qwk!52 zjnNZI4)WrCMT)y|NK_Nbzf~NF4x;l$(aGI-#+OhDCh0D=n~K`AUmxy9q$ff2)93QV zDNx2zyAo(XCVfGkWmY8@p)G0`d10pv-cP?HfjbJJjKZ^&!Ga4rSC;+h0l#>bA7eS= z*JYNLA=AgcgKpt3Pq1{#^F|qx7%iDGybIi=Xvxo~5Sy@@vBo)hmJ}2XXmpH}Df4bP zp)@W}J=%0S$kbJJf(I;jLm{A{;1m)YHuG#Z9MHb0YjHp7E&|T_p`%!8Hw?y-o@WZ8 zvP7}Ch%Kj5C`C4!7J8=q>+0$hi-YV&pp63>_1u8OM1YpPboF(1ZPRX?;Uia4zpr*6 z&5mc3eJL4_mh>;Yd~^B1uyxdOmQ1MERy(qt*=K9OzMEfvaZJX_LP2#ma{V~XgEaZd zGzsyVnaSbo2^Bt5_69OTNRz-LyK?YHJoQXYdo2fbbW|?XXPhJLwqHG$#humpXIsV3 z7Uf?W5ziRTM=UBiCuBt3&J7rD0b_gvhhbX+W*BzH2X%FIX>A!e!eBY<2Rf}^7oa|> znOelD_QvgD8j{8#?<%Zjo2vK`^uvV<7j5W zyA)1lc3Wqa`NSqPe|njy*Izo%ZQk?jgox847)j@c5$LyWS1}D-InVYUI1-f*T4o_f z1+zEL#>T|Tk{LvL9O}J>pq(%A-Mg~N7-&7Jt?@q4ur=3TI_#G*oSrdw68>9o;AtIy zU>Eky)2sC#aQ@sS`B%KLBkD~2ut86nBxUC$iHbQJJ1uEUQB1l$G|64gu9$mT`pwJ# zE)ya;D^ZQTuD8fcug1$|WHL2&%KQzIp1j|6F^k)NsxV4|tN{N(d~-`{*1+DfVwQ&+ zx%6gXmH|1jy*BQ#ooa)wxGEWN;$*iDVQygoI`ilm*Q$L-Jloz7j}Z1p$3bVp*9S5UY{S_uIDEiP*o#Q&6nOHPzLnP`kH`SbKjh;L3QLl5D6O zz$nhtm8Gd^FYCD@m+@Cd_9&fHK}9`}%KE!ffg-9MVM73}oLYKES8g%FI#*q$dV$O5 z>>!KNuwOaPsk>qu%?Y-k@Z2^iww)|HUf^4JPw zp3EM=UF9EK8zjn>DJMIr6O0ZDhH^ElneJ9^d;2n)DC-T&$;vRuKL_E z119&o+ABz(9zJ;tIJYx;4a}yS*EYHdR+*Y5DO3H>kUi3CHjW86Szt4+pw>&lU&-vg z_5t0}X+I?$Cl^~~y)hYL8!7wXkaMe#0b$6E7#x7g*L)u;0m+gd5Q6zHT&$73oIVeZml)-*77Yi6#z z#}*@l@Yq7*)ci&p!fRuxEsy|`>uTDmGnbNTU%RY?RfWn3dRVR zXNcbAL6nRB=U26Yj|FWx8Z*mLct!_kZ5h%pj~&S{gDT0L&qK6Y%if3c;lwUw${%T{}`0+z-h zoWv?t{Z=f)t8z+*(}}Il&NEY;Y$IQd!o%=Ir#?KT2%hXPlGMOL>oFKYL4?a}=fbvX zw(AA37;4k)=^Ag1mL|AIH_io%C>_Zb9*?rshn3?OM%=eHZUKF%39dzC(aw2u-uUpz zE9WaPpZb;LMCOev*M=9`#a`Ltt=C7bf@8OrFtY>t+hT-Ga{c<(ws)USZo90`1pfNJuvGpvDWll2Np0JmHjhF665NK2KCl7R zD?;Yg`wtKUG;}1l7DJR{Lr}Wfu5l^2uuIWeX@7Jw9@kfbOAE`h9xg7>I`8HyM=!vWUsN(Ze-N_eebBruARlKKw|`*Hkv7(k}a*~E_U zuolbSLe?-Y4^G(g-KRIv`d}34qW|&P{n@6G6}RQE^W*B*db_uUR%Qfg_I)j}La+5;#MBp0Ql8>vA&-lq!Z~61 z=B)@0a+@37Xo3D$2_pqEgomc2)Am~UA4BKv;$+Fjq-j}|@)m9rB!MZOja)k_+UKZc zu$AkGmEMP^%b_<4cRIPioP9CsZ|HF#4@m9M*AbSXI7 zX_<|dQGXpQv9hwla#Bqg{ zv9udmG@JY$+Z6L6%}9fWPtd@N+C4 z)k5DXc0~9Aovh0K(@!J2 z;EPyq&lUHH*?x44b92qYy~aCr$l!ukt5&ys-E@Fah6Wg#nWYtz9G5A#zXg{UqRn!m zb$X?=CMC97ycSh_qa$d(djoeb<(zFJK?-HqK@A9MDR5=rfK?gX`GDT(Fv z-(*R{*wxQaU%ba28_TV)k|gIS(yk#_3))#1)n<|!eN_|8+%TF^JrvOOa=d>a-* z+G^W(3RhGTR?G(L9m&E@Uyi%Lf6MUAV22!6&?*YIx6CMZuqc!b{jy^0cC?)9u%h)? zgb}@o+PW)QIR1yPIKyPbnTD6wX*(*ugq|ZMMc8~!PQLs}%x%MA^i}&CSV~-5(83uA zzNTx`to+Jl(GYU3sNT@{WNy}gg&T|;YOa&g9%o!uW+oTx_wO`He2J7yJq=+ng!Edz zq&#@t1+ox*pffJ}R$6j-;82C#Y%kx-F65;kqZsG(`tglvY_yMeQ-GD*v{{~E!`Mi1 zCQSCQ7fz3q=@#)igO3tf`1E1^J$cJ-b1FT#L)LA#I`n!ArET;TB{ayo@xyeuXWj=W z8LYMGZ!81Db(qfpiUx+<0>i?>)KExe=O7y6Ft3jr%hRgaGO_M=!o8L+%EcUW!;jtg z!r-y_azSJ^(0b(Jm&2WA76TEaCkN>=R8VJ#4(@(p-AytL;jN|5v*BS?2PjU_5JUL2 zI{s~|>_PQZ8v?j(gom4crrNyTWWZE-sJ`eiw6n;Zm?&%LVBe_HangUd&n> z7U%HP7cDkdoNc$AtzW!HClf1H@GuR5bRehQ6za-UKMqUMg4+@?A1j?ziL;>6t9NN3 z7iGt;8lPfS%h^&ZTL@JvUwX&>3(n{EgJ9cn1jBfYi#vX@ebr-)l7D=#Z>fqyyZk&D zb1`xu^X6^g$>BFVMhFvZC>?|an z9@*N)md=%*9%dF_f3U8x)0tlN{X@_Sbd&-h3bNUQ-njDVNb3d;#&=}F!tV{4XYI&3 zrOiZ?F%Su6z{fi%J@rj43ZNI}6vKZN{xyrsXOII?$+CjOu7-sTtwrcHe{p{x9ej z|6!0O1^X5$M(sBcH^w6YE#X4xl=++4Z7fZm2A{Z{&cjvt!_{>$(j$_5T(fK;*=Z)v zSK8L&+g`@>@-a2C)d5GVP2hFo(0M!9VTXgb>SGhXN3IqZP5zTF{6WmIS~S2N=Ga$} zj4LdrNpi-|IvQMa2^_TzxfmVh)5|x$&GA~Us~M$bnGlH&+}fiFZ%HEgt^Cj%83b|QtxHXQQ3`P2+Y#A^ z+*wSdUCDgOMag_I^&@6F6+FbLKiflKyBps(4$=WtU2L6^*x~`}4-~lP^CQe(&bXB7 zVXNHqHhgei_mUvt84&0$9&=E=x$S5?j`cn`eGcWd0FK)AZO)P6*! zn~XJO9BIlp^V(|&!tu>|g-jjvRfn0Ln2czk-QqU*)T+fnS^&^siA_;`Geqs7J|8$T z*+YAYTdd&+uamjsr_tM{%GKINBf&-P+v{{U6%`fd7JSGV>z5VB-=)%ylKfDZ&2PxQ zts^A@QIEELFwNVwXq;=JY4ghGFm~rF?n{Zd635_m7eLHx;*p`$$*rG{vmuC2VSSOO z5B@d|CYlXv>j^q9ZM&>FAc~fZbja3|@_knS2 z_lnsL4#EDOcm}b^-#h2`QZ7|!Sb4wQEnTqV1>Xu?Dy|gH)tLhdP_;QK9z^M}Mh)4r zkzF}~W`oaaFf>_?j90n_!ns;eWhR@Vi*Ll-RFv17g$WDKy2bD_?Z7hVV?CK{Ti>1f zqN*@VCKAEbEo27Ev&Em$uy=*(<5#j?zMrcLqE}^bAM#NgVcd@I&ob3=8iI&<`BE?* zhtA2@G}S>)8kY6W4OEOY3!_i5_RKuOh;MaJjx_SLT$(L$>;L}QsF*)^Z7UkLIdBwb z{qauu1KLsKaS2OCvGE3e|UaCgba4DDmK>#-tlzt6^?PSG;!E)D`SFm zj0@#mHmo^ARM&><%Nmrz4Fiq@7O{;sxv{##jAHEV=tBqo0Kax9{`odRN_N!e`gg_h zAa`0-DgjeZ?FxrbuR-@8-Z*>K+-x1RJGWWa%v%5WHp?K85lCUHwvM>8MDTDmMa#uI zfv0Th6q;sN`;n2ZNTxe}H^(5! z4rvuUw8z+F6Q(kzZMMDuFQ-wuX{ZnE;k@~_Vu6?w8?KfX0yePnY%x=7{ch)*_#3{e zoiu-yw{|8e)TU;Ur16I#kf(-Uo>MsuKbIO|(^*&8j3q24J8jNO>BD@rFG_|<+AB)X zR<_?7LkCm;+|fbwe5Ois{gBH=O*3W}z@+dD_SQ;p;_wNchvv6(9C%0@=mj3dt$dbE zhx{0E+yS!LKC_^?j#R5Chu+CDTj_AlcjfNDDEZQB=u+@#Lj}WHiK%i?CqNFDQZv4~ z&)1IfO=Btq%(|l3sd%MHvjiC2*F60YRS_ifLi@M1k&{uIaYs-?AEcB9;A}(bCG7`i zO@GnJItfqG%81IK7kT3$-tl>9kYRFS4Z&!#*%pI^`~@=Wt!Lr0Ukg&FP>|}k9L?d` zVLbb+yyiFgtICSAA?f>MW2&cf&}E4=vzz?| zt|1T1V>)+J)B1~SBG3w1rxIUw!F9~H;;=B!XbO&Q;-I^wV^LdI7j27J1uyKiFkJ__ z%w|r~k!0IYsVs>y?B-Z_=#9Ix-@E76vascRy}d^q*t=)=dB5M7ZinIRr(e!!s`nRV z6y>|T@3kG%3X2pL6eVohmT6#`+mq!muphF16!Pb~wEKzrBX!;NMfH*#ANb7588S;O z2YTx#gVNo;Rc|Mr!bb16!d4|VG?%0eUQJ@bTOme1^Se^z-2R>KboK(qU!U zww|67-P(?BhVRlv0dZEIt!Kl&Bo%Z=r^k@pc&g+}osB@HkM(HOE?HS(t59vJa#)R2 z7mF-rUlQ0ot*5`E=y4pwJ~CDfu6@(=Ek>fQYtKqY!-78oNqO*ip_NHCjYwEmh#2b( zF1w=YBm^=@Y1^1ge-JckN|8r8leSHK-L-t(T9M>U(w-))Pv+(^bYbC2Y&Wx97fzi1 z{NpCQSyv_mBMu)yxav#Z2(RYD$$=n3+`tl?V;=R4syZcQ?j>5#YVdfdCPxW&dnKb` zHv1}+PzO!mZ&KBPQMb3BYA+Ranc`Bzr9D1;aR)1UM3;1i*;64K5l=;dF%j!9AQ|9L z${D$Fhgh)`onPzB+2(`o7#YgakWD|#?&|G*J6+wI?u_TC9uuFeweoNaR% z-*{h{t(3AGfT+qvAC3cV;Z)kuyyN41@R52dbKt6}SV8T2wgK zar-iRu(ADXO;+ye=`yh~l$5Tcq2cTE9%0wCbEK{H>y2#5&> z2Zld$4ib)|#Mu8h2DX2tn?k(Kkb|zuOGjk90QQhm24P+K_s{M0HCuUJ=Z@rVV4%)) zj50`-jSh=6`JZdIF*CX-nlXOUFP|1pK?UtJrTC_98Mdf*D7 zJmvPegE68N`lI!#!%H14EI30*)$i6IAwv&@@GE@!U7l`Dj?Gqma~MY?TSc-1u;_-X zD0R9hF!_A57g5P}6$E+0=JlI+G)Fbqj5iBS&lsDU`avrEeM+;$vT0e7nG`R&{(VGw zS;L37Ysc%`k8EIe|I@Z24HR2TF+udK8 z8>dg!b(+ugo~2Kb7dgMVTDZ>_8P4E}wc*M6j@WI*GA#XR)`=egy38)L6TyDBjio?{ zy*RoR^ueahZ!WeF11oT8p|T{mz7Ee`bAQGHID~7m;9PLnSdqc3RV))w;{=&1_0cEa#}9cwwFGkkowA=w1+% zILDr%wm0gu#O)cJzYl3y0NIFgjd|Igi0H98qtN# zWwu;7_ICq!C@B9kQu?-!>|mF$XK9MN;Nj=r0c)AmPBcTa&#=w|n~w!R=G-NxL;`U-Y!y-$3pbxXPE+;JeNp$1RYOd(xWH0Y0E^f=GYX+PG2W+HbuqpY06 zUWs!nQS$jkC8m3)y$_WDH;J!YuMqcYW`nv>57cE(xECkAi)#v&rp_8jDbM8Z~83x5c`l>t#eAy#J`>0Rf#}Ls(Op zMpiR)gruE3>xiEvoO?=f8ZrIq1h?MJ%{km4!`}Uc-^WuYoNxpl|$$<9|W zLs;e62QnuO2J>TZzm+N4ZCDCtHm0otFbpn9*#dsG-t)nPwJik+1SU|&Y3R%CSnUc8 zSaB)?;dPfnYaevU>^ zvG1vLR$Q9y7Ox9tWK>LvqMvldK=MA+2Qg$#&?t2~ws3OUoRHIf*ixF`bt0Zry9!rQ zwOq8eg(ZA2Hg@6>wuS0b@}nAx(_I*UF3y&ylGk1 zN^@mB1Hvu?GqYz(70}L*?!{S5-_Kt%qwn*;mw3<<*2M`3psEvhyhIw`6eG$H$+LQut2(>p ziffi4b7t84MZoJK)5qkP9Hpr1O7$@-3YYtR#g_V%YwU=Pc1wcoFW-+T^bEZd8EY)7 zoLV8L8`M#rHjM}8Kz`hniCD#0xbPp;Gw)&3lnn=;N)F=q>LA{~bYseKbn2b$ScKx; z*mP?32ly3>d7x>kQ#XoMoGv`I!>GmMYU|@H4-1Yb43##UtmWaB?7vL)t zh8D8!v(jYjE|bY^+&14ol*v~KQgo@(Hojf9hox$vd6Oxkda2P4&leVCLvN68M)6xA zTz}L&DV@&NJbl;-58E%(o45?*Ixlt!+?n3QW3B4I{-{}ef6gqaBHV(!;=F)?VvcyA zMe$d$;sJ*WDAkMz)5{KiOdx;W^z8V#$7P>Gr)R-I>JJj5*f(IdrumH`I$I})?U z&zTKu`hP!CwSE!5sAE4^>1>;rnQ89cJ@d85SM#Bp)#-xOdjFP4RZ$U}m6^H$#ZjdD z4p+w-vL)_pcS$ECDW-CEQU`@;hg=+3hx}RDVmrd<$UBFsG&$Pwts;v)&Z_0CU+2*yl-(A1~8nY1)!v^Q#V#6QgBxTY7N6%e47cJ444V zJ#&(TRfUVM21&4IsfU#~lqH;9Lr7L7uGt+=g^9kuy8W!Y!UDE}W%A2AX~R#0?T>W) zYemgV24wTTJ`_z7V1()$fn~rY1hS zp(YO-HaQM;Y4#4Pul~syncGNyuuF4{anCP5WoG{(l<_o_j5B}e-;WBrIeEnvWBGcg z)1cq-p)gKQKf+*;E-HE2!k&L;-u!1hIY_1Ubl=@yZ3xFROAez(Ekk$XE2KjtZr!rE`@Iy;k~enR+vKP+>Wxd{+j@ z*u6=T8@`EF819C3qEb7x?^3&r(oO&5Aw>V)|B{6MeHulk$DvK`fq7mnZCjab>gLKt zx$W}^*ZEojz((}O8YBGs!e)Jc@suPxQf?09@ae0vs|ewgDO3BX!SD70`b&14U`mMYWm5cy_hIL?8n!vio;N4 z54;m{vF^zs#_uuS^Yb665V<_Zuy<$+LNVgO0Iw>xvk=eb(4dM1rz{YGhW@79}FEj%;2gK<-YOa9^F09=TKHf zB(19b`#UTpNiNexLHNMJF_*9M^Y2x^Vrwm)^^4#~!W-eXo$zO?7pkDIWN9Tx~h9LIJ0K zzq?q?dSAK2tVZkgExeVcJWB8HKmHFO_$y>dS}2z1v?m)v|GS7manN;rG@L?-T|mTT zC5lvdnSF%>8nYc-p<6$YCa5PW3r5i&k91`PwOEFbh%5hyQ*|@)gznWw!bd!?(evf?jgdrIg3H(8u#- z!oIweTnjmQp)9WA1MSq+h6dp}xDoj!9NO((jEHkQqN0q;VI&ak|LRr0_`CYnsx>_g zSSqW-qqJROfT4GM*1$!$HMYUmHSxA=C97nc9!hDAT7+=);RdaY7ys7Hd(MztI9}G< zk7W;k7@P3l91O;{zs379n5G$QuYsxJA@tO|VtNE_fqh9HbvFVEA{hPPz-O?dTiIc~ z>>#OS`D99?DnJLOz--QGi@N^zGx`UjM0S+r^Kn%;@F({;{_f=9)nFN_H5_4Cd_ECU zIO8&7P0_`w=DKe`r5Hz$__m9`-3?-*2-_Km3D&OzzW!1HC%CV`nuNi#wUy3`!_|8! zEpui6eP$;^&0^7OSMXnvisxGr;h9`TSd`AgS1}$N%&?_Ly!6HxQ5W}E?^;b=sK5om zq6C4$g@pxyttBS^4=Q2nqESx6pP}6g?N1YM)}0uymJ5~PBgfZ+eye3q3P8)N12N}m-5CMZrNN(GM6kcpVo(WT+dH6Z+Q})!c z?i(gVQLGDcyAb2C?c)TptLJlE<(bUYuL4(lbiK8H3|qEA7pPaateGnT&x|SRMyUSK zqW0suY|@UI@53TuJ&t?Wv;AxP4L16gW$F2S)15g6|D9o|)saHGq|tqt8-4MDd*+;!7%h5x*-8(J?E%n<#9Q2#O&}>+wkJk!@S_I|0{*on zFuWOe-ZA#V{T>}3u5-MW{|gU@JZo!(Bd-3#J#ocHgI$_dnr3MT3vxic4p>jb`_^hZ z4rup1igqKa94sF0614oMQOZw3(ePB_*7j9R_S5{+oIi_Bt^wIh<>KQWyAGK|v+nFX zSff!}YCSSiHXh?|6uTwmy4YnUj~nm8d#hXv2tA zGt1)BU+%2<2(3=TsMW!S0Yd2s;g!(M7D=wEXUrE%D6aOLz1siiL)1Wd*=n)!y@)Fp zh{5;jhQR9PCJ*#QmOXPU`!)(LJJLlCDTTCBfsXjw4{WVa%PN)I8>h?MX{4X$D<55biTzkvq(!lM0E4KIt=kPBdLg@Kpn3wU zhqGb{?rVSujlizsW)vf19rO*xddQv9_^_66oP~=k7>bT#9**n~`pkoJk7G+;8i~`s2CVSTZo-i)p6q>L|0s1ZEr0CSTvlV-H|LEemmzoj6hCr z8VR}`NN%a|WpsZ{*lK-^6{nc}@FzC#&qPvU2vCrm^Ot~mXvpE=&%Qbi;R(wT;Mf*piHp|=h zJk`geS37!4Qt54(+}OG`BfZ8XgIw85f~EC0*Gi_dvIL#BmeGL&j*LnLE}n}KJm^Lr zv_+wW$6Gu^8!U`zstO7U7Oo`&`^Vm6+~43LFF&|`207t)#g}J!B2PWay6z<8Taf@N za;RDiyk&-plE3)YWJ}rV{M6d!q6wexv?yWL%7flzCQk~*7wVlT8R!SbwS1xQzPRG; z;jc!q$NQ|%ZepeBg@uJR_9=3)FDZM=Hy7B3BaC89a;wV7_8;zH<*ZsuaDA-YWQ3aH zQ+(E0&?0skf^QQ}C2RA}cpsan_eJ@|Q1VT?bItL_)6L6t?rY{<4Y#08;jJBtCc&{; z&}bZOrNE-!)S}fC2vuQzfQ|+wpo0)4R91NtpbwOo zI%r7eyBno^2F0?>TJ@-B6@P|vUoAC;*FmjDk*EVp0YkX9gLATH{lsA}a!xH>u1Vq9wGp&xhH6vu0Y=x$vO<%1zKYW#a_9r?E~PDE zF5~YB$gwK%K3)Ol<4NOOZp~o-BTDgeE^n9C8|<##`j>bG1=%KlMBMpP+h+Lv;R=6u zQOcx3j&o6zSMPetQlNw!W&}J;)z#I-Uf}XDlHWgIr^ru9hk*9bLDM_Fbg^0Z)L}nq zrdwPnULl1Eog48;lUbUe*VktlJY1Ffoknoe6sC8Vl{KM7`>X-6?Fhk#!wDrAh+IPK2HV-Tef6v=@Qeo{aNjsG_v+Hd6g#a;%Uugi{U-@)7#^YlyxCXG_Ru|6!Gg@70)}mEhUDdL z5w^EZR|HBnNe{g|Cn<8QWDqHBH`#vS6tXL%6N(Fw9+XnS?o3@e9$S*yCEOuhFmACw zwl;k_r5ck`NTU?)MPE=X!#}`lHn~~;-Pw+FZ3Z&i22xwG*Di#TKpKWO7rt@2$tAZK zk%>z0c?@lJ*ZuDt((98|lqi&QU8mMaj6# zw|w@|sV~aPHMBX4vO=pOGm2sPP#s%Nz-JH26x<4LYE{^KXj1!8t#zWGe7<_`s+16y zq;&UoXHIqlX>HYUm<($s#F$Jt-^Dhuewp*3+de72{`q8Q@%>M@w(DpqRgHIUhv|{F zoV+Vo7zaf^gKEu1+cZS4!4+B06yGy8k2XiSRxzL_!MB;>|7Dr5I)TnOZ=ysO;E%s- zo|*%xihA;m?J-5Qb_lft?7P&3JrJJ==IAYlb=}xO6uu4u*>o8TFg2WKaCx_xZUtJf z>f(IpVuDdC8xBArkeAoMemTeV7bUXK(5qvR(pr&D4uu23(F1vHlBerH(G~4kJSsn5 zJdOD=^kLzeC;8!r6St>h9S7y~p~B^NE=b@C;6))1R2IXCN%DNE_!c)~l4<~37HUPq z8k!jETyQ8xqgXcwk@=4ywQ9x9e6k|*PoQ&yhsUS1v-ma{kIPb?G3 zMwi@L07haSCz&g5#wCy8@+7S?>pt2=`*W6GJ|aBRx_|FMvwK;qyguG3FIt!A%L&^A zx)5f$?2^H=KgA(G-^u?)luEoniFwjXHqv1?Z$b7_m392*=;eia9Dr2-uG4}}wWrCW z>dCXpr_w>h!fPi}32FIkL`O^6ISqZzn^koTufrV!ppEEeFoUQ*w5bGYKlF5l#aw=c z=$GdhIRun)ru2kymA1r)C~D->`hcj*O27ezQZ9``;|;>{EY_p1bal{059_uXiQY~S z5Lo->Jxqr#%}k4z4_$ppvZ5g04MWtX6s(zPrI=$v`ad*(Rv&;0x$GVJHM?<>}|*1GQCAtRyB zi=SPT_=gvO@OnBa!~udJtp@Wu7cA`sRA6;?(xCL*(eZ=L9O9Z%J1D-q#I+|p4oM_x z9p5KED@l2=h_OR7AI3;bRC`g{+TYsjyZ>%1+zo5%;ksRpTCZ+mlTA;&?kPY>u_d%r zI#-NJGjz7w<&Rt`079Ic~Sh#+vxMuZR#f7jdm$ubmXUNeU;dAAMv zk{dMozF++&7bXN!wP`r4-kSsJIl0~lML4nUFfNJgpmu;mz8-J0&KF^i1(!-E5hIZ$ zQkx4InLRXQDt306P-pfZC%4>+oY?18kkdBK$jq1O7TIJd?g7@{&4aJ#2Qe%gu~2V4 z(6DUy+I0;VyA{mT^@!Q~mZ2^5Y3D{OZ?cIC#y}M!Y?AU* zPWj5NXd%c`;vCvFqdZPP?~stNiyU1y&d4H_6~sJ(maGCT*^Xk7o?9s8UCI@mZl(>q zHf)v}*BWWQ>ry*W5B!+Bu3C<>zWoXp7cHA8)iXb@p)ME5CsLUVz$qn2ovfd#_iEr8 zF}*+Z`Rb3|kD9vEX=$(0uARv&zMiT1&*gyFw`FtEG`DuwvP<}QKc|MA8y*t{ueG6T z2M90DYL;2k8@h&k$|@RWAmrcZVoDA-hC1NGJlvR+;g>#Y#paX{lFX`1=er^k#C=H# zWa#bpmkK(4I0sY`Cmm#>uUpTzTh<&oME2>kbxuG7F&)6?LzWO0)BdpjKw%@d%32h% zoJqmU!FC8RvmMcqLo6ib`7Mnw{t6p}9sxfBsnJk8`qXNv`p~r<;f%29om&A>((6;j znOu`e*KigJ92Sy8iS@J6eUs3g8&QwUp!;|XMlG@hA!Len(1VKMJ!MuZ$KFW*7U>6` z5@f&iz_X~@X_TOG`q4B}cc!^v@w56uU1?OtZ;1pOkj!v^fUKOwLa=MyRT5Cab7OZiqypp=IS4z1P{IUJ7jw&Uh>lZ<9c+)g=K z;98Fh^U^@|VUZ4~ef@O*x$h&)G+vDZajTCOx z5_RVoxuarYqwTaxI%V;QodB%6y<1_}Kq3)u)vzBeZ(}!NS|GDjGEMlPeDPKllt~fG z7-mLB-y=tl^*Jny98+l4uXc684_62t<}w@p0ELB0FoNj^U3$B6h4f9IS3fZyl*0Y? zNQYc=C$VvFq6sXB-0ERHoTN(_VPS41G1;Lct zF-znsOY58gbgdR!HT5F=Auo4{6^5dggYVxnda?rr9{qr(UGy;&sh0=X1eJAdvzk6e45ZAQd@*LMBSzsgO*51uiPyYw@Pc>$e>`PLpR?xhf3 zsL2Y~qvpxkDzQYQ#mb(=SeXs>eff`T(-48MwZm`;106Fh7PURcZLV=Qk}FGoN-jA$ z+45jVknvHQZ;~w*e}O_OWhfhyp^f3C&g~DzhvkPfgixrRg9@brvsHq{aT|dYn>asU zR++-2jvnP(Dao3gyXxu959m^pW>r>N`sbje9pvB5r>)cC;+zI_YNYA&4yX+H8343^qG zE%>RJ)r&rQdYVx}Jt_esr~sK^8N8$9H*_DFFQcG_&-nnSj9eYSgs3NVt9el8kyY42 z_k|zR+x3DtjPvPCbIEK3N*6Rw@>*I{BW6fJ2&hRKCEdIPGC6j)Jg-2E(zKlR=WYT? zNCJq%cMxD!6D;9w;EAobXD1Rx=13H(*E@~^c1Y!Uw*^@R$m0CsxP zXkJc`IXpJG>bkc~0Y!FrP+hK1e~%LeXi*<1?M8##a$rNFF4T3eu>LG%=v|M>#o>C% ztI_Acrsb|?z06`PzmsjpiZVzpMI#FDeV+LoqRzrKX5G7w3cm09`qZ)$06L$5c;yXX zL`i<8q~QIpphT#|SJMOMJ!s7h8aEbtO`?&2;efy;k`^~a-)O<50tA0+oqFkRUuvso zwK?Zpztrx@E4(=%I89JYBzx=q0Ow*vcucCg`FS9E%&=*m! zJFkl0+US~?enlJL_neUTGIdpd*ysDNh5)EK({#bgv;t;oK^|dP z*b;g#p##UOQBQP18!0j@#fV@{s;C_$T57!1`y*PQMO-=-fmDqk)NgsQxx zmUEE-bnv%X3e8Yh`e?|hercQOMt|R#N}#1oZ&z36Wxu!CvRmj$?#R<60KD8Am(>Qq z^oD0g%9&25hmuM?ly9Qk9vgJo=3lE)C6g6ahaEmD%j=zjfpFC5j}eYCn^$83u!!*i z7Ldv56igg3?G+S&?B~IXOl*3L+e!bZu3!0(jry2Mb5te*s_oX}@o?DC(-1 zN49Na#TuQ@ocFtQXqEw?_~@zPTHOJzdjs>`iF&B4V(e^JU&|5Dy8z)om9?>ns{eg5^hDabt^2Jd@83GpsVR-8U*A z^fY24Xbx$5=pq&sfJ#kcWe2U@_obuIwlikvxnwUo?f_G4(ZvYXd=I@S$w~sPDb^hf#fd4!}^!~JX**a81L(aY94EZ zE>cNZQebHT?nb6nMUgvz9>Zn61EF-&O5d>YL%mL?eo6a9)%2_$tZx?z~=S0pN*C+f% zy7OsXOl;X!A=6eM`6d_^G-+)ft4&7txnj6juSu}0hJ@OszvIBY3_YYHBA~yY2L_WG zr^oJXuCTX9L$NMkYSj_NW5fL5$>D7ZvtWmNc=^$gZc=sw1!FGQjauG83=?bYu9Tx2 z>Q4#2Ipra9Bn1jcCDVM#^<%C|BQJi;5Wj|vNlsqjjJ*8Wd+DJahOQbdE9MCL~-; z*CE5-oDI{XVEOpK`CzB81n_pYekIbZd?~NidSk)r_2~M9q|4hm3)kW(t-EM$Sj~RC z%dRjv3+M68doF2tBcrX#BC`=LB^VGewauEaRDAhVf(2;5)CV?u64(Z=j3EQz9{TD9 z^0O$MHpRQ%{|%h;A3_J;6>y|6LXs?stf84#RV=20%Flj#|BT7Lj-kynUE)H<0UsFX zQMW@vWL4YN@ecwCQvB`CI-bhiMH4nnLpX3Z%tuS^BHoFg5{zR0iP=-uWp}}iA(iuM z!GnxXxcCFMd5HnM=|wBNd+?bOc$*fW9CFQB0ag>NUo{;oIZ&kG%E&hVw_bu06dyMp0g&{P-&Sw?8?;bM;60<3*kGLIT zOia(Cd&U8X!^k#Qk>$(%~G?8gL z2MNm1$fGOP&9S5Z=}{{;a&?PJvrNPQFIM^sh>hqpR7z=41M{)mqjF!#I|cRvJ+hHN zQ}Pj{ z{`A2+d=cBVz~HD^F(b{@o%nHB-5j17x-t~AX9h@Aj?E5qiHI#^zXNov{hW#xhgrqr zN@)9mTByr&(Sa~3Wjx#|n@_;k16^x}<9VBJAJTtu)O~}5d>af|zcWL3*T1I&WOXc6 z=;Jn~k;39}woLp}&ldyOa~+OkQJR{Im1Q)1522dX3iEY!nhlv!2c^+fu89h5VXKJ5 z5+IbQ6*eEZA@NUAWP&8o?!syMFbgoC;q>xx6?i(Mhnut0%9umUk$Sq=gETwQ9M9N9%g_sr69>y<&--LPG+6~Hq2&cR6s z4Tk~#t_#1L{CBYNfAR3!S>=Mt#U#Za9ZF+nC*FK#wyG0O1Td6mA@PS$M6wPPav<-} zlyHzYHu!jrsVnRCUJkQ$W|d55#5?}U+$x(0-l73DO?)-o53kPP_A4_3%jIc*?_<7u zN6bBcmQXT(v@u`zJda_Hc$7^G@dCb}1Z z=&-`wM_h0pIs^`5qF5KMWchW{&q>61&~u;CgBHvmG9Yhu#acSHa8BroYkRp84-*|= zyqLM?n~#+-cNO2Xwq6-^upDeWTkX|&3?%~{xa77LV9m+NLx(qX@zzYFu&k0uHkX6Z z>43eJ{b}6`Npfve{ElLH!`KNy#m+1W{HeH`I`~dqYg`-nFAmeUfxxg(h^72usP=0N zt1g8L4bitiILy%8GjU*ccyFM`dF&3g3{#q`JaH$GDdjb6gS6M7{_)GmInZB1Aji8a z_jdDkX4M-ZJDdS;ZEqf{Sq=v`7*QA(f=YIn7t4BEcDCe^6n>`Gi|eyG%JG=&SGaI^ zrsXYudXDNXv*9_;a&ns(5oQ=p?vZnHw@KLoIu-V1o^@ zqIQA(a3QO)E$6N?&_`|<^(5Wy?BoSoxe)Nr6ZD3{nir2iq8(Ore*X*oNp$=O&gRMB z7qH5}+3$O9pSvehE;N3uGmK@U31_k73T#OP=oT^%EKM4L9EU&NdgS=NHi8Gd$g*v# zN}_;gp=&whmoM_x-45bm+o02o#`~FPUTp|hMFj5dkYJ>YWUb=F{*OS1? zxeDUBib30vv_h4 z&}hp>EQ4z+;Qjs7$FY6Qt-wbuS<06Nc|{5j$J$!T_mA=0>h3=YJR$to(~;?Bzu1gje*Z{cdPnyf-xy%1?WObdPc{IBN|x`X_C%q7{7VOJ`* zV?5@S{)QvlWxW;eQv zEhgq+nw}(7p^E@qjGIt!pU)C(=ZH-tQGYf}{O$zz(a8m&nCQ=BDo6SYd=Kg5ru_`! zV(qTvZIJktpsV)qBNA^$)Sd)MD@Yozs(evM_b@aR?NPo?2 zw8T=iDCwn;GiDRn4XNhtS3lt1_)k0$$-Kp=#H9>Q&+^|>pStRR3BE|L|4Q%K0CtKfF;{V zZ{{O6;W$37T6m|VMvtAImR42O5zi}2L~;w)lP64;SV7g@12jQaFil+a(Ra`yv3trSoSKJ|lspM&n&ljj6n zh9NF$zbEqj$xNvue5BS9KVtrOuIavt7d;d8&EWZ~WmX^Ts~pkRbvXVT^7Giy*M%oFhwZV&Oq5_{Egf#b&7%d=#Bdaf zaTJJ8C<-kdQ-FH=cY%neimg0}?%k}adZ_pFEPln|!Hb7 zn{3T@(-r{={n1KcvY$S6|DqKJ%la#|HDUmNWF>6&T4#P29Q@(=DZ)UlN=N;e`-of+ zd}DPbip$1dO2CaZ;z|F5YSSlL`nA}3F_s7OE;ZaO6SI~bn_A_D_0R+EQw9nl3LTv_7&K ze3|Uk?d0EXRv6Z4A9q4iZjV|i`%z&;Dz?Y@epMG@N8bxc z08E8CK-b{m}doA+0_I#Q6JN%m~BoO9yMAdsb7n z%D3@i+j?4CTR(xw#am<|v~Ua9YPmI68vQBA?x);UjjPTMz>f5=w!FwES(xg*vCX_X zJVr$d6KGO^+QqyzWPrvN3DZ~^(DsBI_ig|5!=3kOU(td|=|w7(SHbz?*J1-&o%Aht zUPn71x$@q&PJLDaSi<{@uZXq4@U|UHJtudBZ8^ydfov+^x4O~m)px;oV+V{u_#ll& zO3)-Mu&Zj1KnTTmJtzke$i$oeMyLpsmPb$i*-GU5YDLKEMDPqL^T}Gr_J<}izq{9B z?oKPE#c?DG_I+UXrE|gZ!<0=2Hp9YM$iXUwqB#)+qflxgY*>k0z${s*c00W80}KeC z*`u1$svyboBgH z`)e8V-FgM18Fx&9?+}hmX96BIQn&8K$#p+qy6Tv}`ooT3r?tW&?@dl5uT;qqX2-1Tb_T>e*4=rA(G0UcC>^MlO&b8=r!XD)1iH z)+7;d36>lmlTB zAXaQX;p4DA+s|neK2ObM3fvHbIdRbC;a5#y2Z}Ho;yh%qf9g&Y4n8GQEthnOTl(v_9%r3eS04#G}B+( zv=0<4mH~5oAUChawgl3ig9kQK(YC{u?mCqmF-&FF3krzB@oD1xq87SHCb?cHIKR#b z#%jm8siJPqysihZ=Z+8Q=^+hQdJT)3XGg+AW#j$d3sl0PYQxHNlIDsbFLVQT?)*w` zw&6heD}WqWn=h4lj?M4W+W%fPe*4tExiGkR!80i7gu)t!*55xm&&$`1`=%iTeDSnK z;Igj6xRxGUB;y_r$%}#H$qZ=QLBnD;yyWM=E! zXL3;1^{LWxPFQuL@SIZ>500&>$q=ya)J@#tqp_sz`1>KPyTmW-LAqm7kfevQIAiYtp5zbD2m+qzRC-P?F?|0ZaQSxO7@dfUI%VgBiied6>rp}0%h>SsJQ@r3S6 zeScC&i)w%js|yvFKk->a?l7Ri(=Zd#QVCVp&3-Ggh>cz1WfQ~$i0Oc%SPgXeR?uP< zOnmeJ@(o|~eXs#FNt5JN7s1}A^f%Y$1gkIJH**ok;*ii}X~fOIggXEzC64X~B7E>N zmF9z!%Ye^d=hvO+yXRm(7i~8kVUo=pF%o;|tbJ>D{#8O&s7*W=wSKtAx2zak)0~M^ zyz~9<{C(E^Kc9z62(FaW|H%BA1aViQzxx*0CxLk$FEV5g~E+@pg>MH%n&h^}wer`qF(!=_Hz&6xTWZOkIl5~4#B7RIXT08Qk;%opG*ptMmy{+rvI z5WLbuMKJ<{fJE%_gy^ci4zSt6pH52*@P@3J+r1rDcMd3nsIS08B(J>fLevS~jyFO1 zO6%epS&+O3xY9wpEp>aToym6?&Udf(KRGKQ$J~38r|AC05xvBo?N2l4e_jc?L*);OIi~E& zt+E7-=@&%zK2{^)rMt=xNc$$aV3Q262}eFaoj)*db3bhu<}~Cmk+DcT+67~K^|?)I z*RNB9&g;xz3r&W~G&0nIev6zzm97aCnL(!-M=YC;1O-$>zCK2&pfe-QT1i~K%yo^r zad6Z<2A-RVX_0E6M#;=`f7hzTviGpaq=BXUmyZ)oF#O5LxGVTgF8DqI{zsQh$m(S9 zzTFgQJEF?w+x(H6bn;^q5Bquu3je2F2xn|LZ#_Kmj9?_(p`kTD3?{D46}B#(o-h1J zbYrr4%+$7O5=6Fw23TfXBKgZ#wzFQNT;aAX^xzf)Puq8c0mN7A9bYX0&5ps=`^1I! z@ITg0_!7T#7BpSN3;m!_gs!_@7dX<*)vTVG z@(3<|B6`y$S+`v)SmbiFTcteRWZ)JR)H6v)z(Hc%Tx};@khkVsoUPhv3Sd+m=LD)&|`TLuUt9YOMSH2;U_Vn{GhtPXY>5E8NS5DO^QKt#FR+gIB;dv&CF@8((A0i z!EcdO1>~?a?t_eOJps2LwCmy-N?D(v@oA~Xs_P`Cf^86)Xvqjc3#}~-ofqH`^w_C7 z+=>ESxLdyWqIvaQkEO3{gT6u*Z1xIZBY3K7y5G3`&p zgRK|)l5?vSEV3~wp}$==_k%ZWz33 z=nO7)XKU{5#NVg4X7QBrr{v=TazZs$58`ZYIluPP8i8XHsRH=&rAq4isjgI5*Z{Q5JOT$_r|oBg?m%5Iu5!6J#$y&saZ`a)qL+mj z@PT=56GMjeE0}eEKH3di$<{|*Q)jm#>oyL~z^)88;fKL8rSE4#z>XEDv>Fm4$6#{l zfJOdFCoUMU9W%{Cf96NTN3BG&>*tV3Uw69Cw*4lPt&=`NwW7awRpu z%O?V;K@LXK1MuFP_Ho<})?KhnOp+=U^Ttj$S6AV6?A`NNB>Ay4bArhQhvW*0yn;M~ zip7GH$=I2H4Z-fSXQ14@f8l8}%?-n@xUU1nWp_Y_k3%*Lqz>3AF?9nV6x_x|lmv|n z>`f4JxzgV_+aCF=`etD6#c#LqUw`!f{S}=dqHFK3d28gy=v3;Xv+SDw;AP{H!A6cd z*yz;EVF_}9Y4_s?XGLE|Q9*<^deVUfsFXEr#Gl(dz^4MmW_s$62Az-x?iy)YVn!>1 ze@yZxKWz_}m?G`#VLf=#@Ke$eR<~D|~x#yo}zO>zx z0atGO_ay~K8TUKBviHEg&au}|wSkNX9PUOGR4PBh0%h5G-#wEylw)UdJ2 zorN*yj@M6r5Em;d#RcHPCnMh~nK;1X!Ij%o`8fGUU!2CFLGe^4a#zkBbXJyf^L^pr?Bt)bJD7_)bcl6W zuUNx9^7Cn-pZ@fJCOOV_Y4D$XoBOz3Z8$NtJ3Ei@#KmVn;r##qM0MkULW+6p5afoz z0qh?C__|`U(A~R!un3d#X$KE&GC&6k)vlP=T&cCrkz8gWphQ!IxZ&0YmiVG-F^%8+ z#NU4QpZ=3UiqMBui6A&39Ul`rwP=6)EeCLZMnw;Jg+`11`T*iOPH-6Yh=BZQQ?0dKGocS*v-@iU^<3J&? zY?4eeQkIA95eTOD{9_4Mzy17j@<(8EAVc%ow_p6{NBPqa<+q<=BYyD`cPrii(a9V} z%9PmO{^IZXQ_0EGnR6*31b_O({p%z9H|G{!<>^di140r?@jvzN{`5CLA-bs2DdS20 zKL`H@-ow9p+(MM6ujTDY>KlX5fAGk0|l?Jj6*lIa4y}7drghl*a$=S^ovU1w!lM$CZcYY8?>=65Yc8 zReb%AAFul}oT(#oY(#(Wq4>#Njad$afBlO`#peFzQ?ZZt!qZ#j@J!~M@~iWI_nT6S zOA<@E?59(y=JI;}!ry$0!*Qnci{g&_z5kb=a1inrm&)$}SBT;ip^M0We3JgF6LdmE z=2x579n~{ii(9AZkYD7q+2ciTdc)bA~nvV0LAV=xHQ;lf(^UhlThXCFlI5Rs-zU+bz zHB<3oRyUZ^-UR=EgjK zaq@2qRqpJPHLd+`uLpf$H;T=blHgxv-s1GPA zY#EPd+RS&!1GvjT!EJtGFgt-g&|;SZ_B^!WI@zAA$;*8UO!`A-R6k_{3BVJDK2{{ zEvg1KPtA&)wu^zaefW-&uZVB<)Vb>tw*#yCPT2O=R8p9iJODPr!#jIIL@x*0q(Gjp!(wz#;ig#rg z4-cH7DwhnuIf6Wz)yMS}$XVg2BB`Wgu-r7z z;87Tj+3iH~Ye}i6f@j;+2WmnxY~SMIre;oW2BB_8aG9;BZL=8He1fB}#WFOVp~M_o z>9l=rGhVcl%b57@{2Ui0+~1&wJ&zAXJ=Q<*3zg}yNfJ`hR^X_rH@=x@?`Y#=VN_yb zABGjnEol$z;**lZfc#)=y5%KU(VZ4e=$WP7?$VDj26}FIIkLcjy88(~TDX2UKcBF5 zchjV@ZOcAK%f*iz_iw#bN*C{5X1aUnx!FCwLmcv?fg&@$#M;(((w`xHCa&aM*Kd8K zn*YdM&sJF2U9XIet}c^Ee{II@v-@!>8`CO?2yD6^O4&>Xlmi?!V^6@s0>aSvqz{!V zW7b`9zn~?ZoMDyD*4)}>>6wakmM0$ry}g5MmwB7FmRBCS1~lINd%A%C-!VT66!Lzx zsa+!buI1^8%XDO?pS9z`9M^76JdOe3HEZ?Y$PydnIxfqBpwMRhY`3JOMu zchn2xm8rC1*CBYoc81FUi0#E8N$%FCkA@131P02!mS&|y4?lukeAza#^2=j5q?Jcc za+{CpTu5ZmEc50iB_nfEYPkAsDXW4*t`!~JCv-2mHFR`TV?3OP@h|=8HGx85fE{?z z1wXBS>F+=5>4|&0z5FyaHS3KV5O=Gm?*v>p$siN2H+G&JstcS$wdcu?yui?3gIN|dE)J5qnoFvK)l8GFU78afq5^fUV zwj`-a^I~(cL27-L*?%)ry|_^xYh(&})cd8I{i*Zk>!JC!IMeu# z`p12ku`BToD|j`OU%twn_dIKQnrLae930kKr|MPn-40!cDxFf{F22?*XEQ+u^ySBR zdfjPGlH`VDHnzXTbmN9(1gD7>uOJiCUEux88;#y9Ed+X+9p7mX+olE&oD;5z6+&k7 zC#e@xB^O9%PQ05heH&_5QP_9_Hn;yce&aMxR zwKq8_@y~>hteHOi{LgDCgg6Nzsg^HOwEBa&R+qWB25idJEQazC7+~o|jL|VNO2eWA zv!Oh_NE91!HPI_y-(t~Ja!z9nI`3`1qGJ~vy%rrvVMD#u@)M3uj@T1liD0aoMiM;K zf5WLiT|eIj#T`IS1QUqK9_gIxq{xXQeiwM8fc7D(NA;JbrxP-9VtPGNQc&Lcw^wck z(R%rv@9yrtot2J%RW>HLqGDRujE=ovzm{skxj+)AoEM|{`09@Xzl62Gz>OI+qX?X@ zJ|2r+)wlZ*tOrHt_pItgVsx^uNcM$oc7B)FH_)Klc{=~v!JJ9uI`YIo?_^zJp|xtR zPD~yZ-fxG2ld-GVq73Lwh_j@mR8Q}`dHeQr0G}&Uxvjq15vRj9n7wV!iU9V9?l79u z@;KSw*4~a7&nu9UR8WWr32+LW-?K3_b>XqR)LH)VCcGm#S{!Dz!Y5D{BqStWgIN8&#ZcJ_$3V{oXvaiyV_HQ1Ia5fJckfPQeFx;i;yM?@G2RD2 zsXXJb-d^2OW|P5KQPpb%TjWmm_5AoX~z=ud;SWLjU7FWh`mBd>?!4y-#ZUERfZBE-Z|`L4yQIt$iuL9i;c zl{RpHwEGdT;eq2@ZPzzSmtRnjEcupLZy;aa*Z;38p04Ex0b2Swd0nf6Sw(hk8x_h@ z@Yv<^SfTYkaP;XZxBUzy##mifDLNl5%)ul!6Sx#jKE8E|2K-NqU_IsfJ$-X2<} zBmghub7WxCm#f((TG1%CXG=)V|tx-Lt-`V3~FYl^9fccUDyKAiS65s}`KDPS=2iO+<@UaU`qzVfracl@kR zKmgn0J9m!T#egnw5|Gl z8M{vO7A#GrOTG6wv?G>(&%|M^#h_vP)M6(e8V69OBH9-@)-*Xm2bkW96b3F{!!EgS z0nEBj){Erd?ji%zla?!?xWDv|AQRPBsI$PxuH1MtFYe67c}Zu8n=&{5s{M8 zfkR8q{w`9s4XhjZeWSZ$>FH(sF%ty_#gGn%)5=MJ@S(pjR-VIQGSK6is$Kfj8-SdV zEP76;AmVQSY`Zc_10tBDUoPBKymYB{CA$KamlNw z7RP6?1iPvm?(dq_@7lBtZG8nK4}84ZZ@b z5RS5>hcq@upq>qhx@lQAzXmnaS?XAwK7LO>zlSmMO$Lu=303oSRcol5a3*98C1PK0 z-uSJ@>GON`a%}8L{c<+NM819jwB!W|=$hJJU}t9jNVzAfp{Yq4J&y5EZ9hLm$G7+8 zeCfmz$3N5jU-7Af@5Fu3N;6N6eP;A2LH7 zV)b$T?xRP)ypv`*KNoK83`|C{fQ8|ks|{qaQilf%XUWL4Day$dW1+GE7mUN!7blUt z!+;C5lvonYv~wTMra94p<_>+H8FLFjDWDx~C-)xQCS?kv1($`K8%}^BuXW!!ys`LA zm!7Vr)0ft*l$*b!m4V*PsXmx{&G%$uUVdi`?aB<|om?n%_(G`J9)*#7sQ4g{Z*z%_ zO==Mt_zqUUN=mlaX|IWB-fHrr64gev5&gWWBnDs zm(Gn%O%L`EluH8kD@TkiKZ$AO`o7DE9_Q23O@J7^VO5|(k@+0|0n$O0XuENDbNceF zTOZ4~DRTzqG;&kjBgDkSLQv!9m$*iU9byh0HRsWV9W%mi)T)Y#_G*I98KzY=gRCyo z(@QS)`y$4@@s^z|9b(*fvx7qI5?UuRHtbd%W&6xXh@;Y*%|lB~Wi$`cU4AB!z?cy+~pkaUh2;HGz_5GMs5U_239v-2$U&UcS8YG^gIKHexUo7L~VxLgccf zB*BHTg<(W_QWD3zqsO=S7O}wV;GoJKnX5`!YDRsdcpzRYJe*fPJkjek4~rqYY8|2I z3O+;Iv8gqRE;*L7ri4Yy~ zEMB4CcH88Tv^iTd+*b1_-%1(EHDl}$=O=^qT`8dAJ}8UYmeAi=9Z*NVp_5UNQg&LK zIq5LvIVY7`d1s@d=lUHC%i?)b<_L>uve=Qgu$V0bHmO5j*G{?TxTF%W|A{QniF9@E z{RDEu>D93;!@;qE%Ny|rXTQ!kQI$rEl0V6De>+~kzhkA}=*Lf0xs}q%$DJBc3DYP2inee4eh!J zCy?l@S8F2;2OmNnSsIU~U!UvDb4@+HUrK2h8UN9wFD=g|TK^T*9_%9L?V!*Mq;jeh zfO(D~hKW$W|F$|NJ8Qd?lv!vD{jb$u;By*gBd#!6 z@k$9{VOGr1_S-_9#n?3AoIb>fT0u(!Bwo= zz-v3#c}F*#ceDJ!0og{5e8%N++aZQBX3K527u{MBn*N-8zWl|(!9BO*DAm9iY6l00 zEzDC;DGls(sdc75-vwQ`@8+KRoM6cfvtfgL`_;O*5aexe67$9c2HLZJ39YU$jV&JM zq_pFkeYcajH5P*|9611=-biQ>N%t_q{+&E?&U?=5=TN+GFU>2-s;A0%n+lH!2AsRm zQx&oqp0c-io+B9D6)&1^ho(ZEFZr7 z*oLs{HwBn|9)4*MzgTf_l%Mt%X7!-YZE4Pj(YbSiHFMoA#;%~pa$?R;pj^v-N_DR) z9hvshAL>Wz3w)X?ft4{w-H-7T?q;V{-$x!&zp^VS8PC~pu>zNa1Y~FxyV9ey4y&w7 zm`AGLz&rm%^_52Dew{w=;7+bqvhm#9TpK9DXt+n8WS|^5Ut~e?g>Prg4d5PS5XuOsLwFrv% zm;domU^XXo^u?#?X@5=ELyX&qdvl}TX*^$2=3I}WrV*NZF%29^V$b(M6g5S^gXxQV zf0D>m=eX6LNm4usxi!pI>khhw0>D_SmvCgg*w0S0ez)Se?5%hge+up(_^?fQHPRdA zTD;k{ie+Qa4(8S6vb^D**!MLZou``2+M6QvP%2}~Ia6#)PWPG5P$=F)onYi7or>(9 z%a{$f&r7`>3NT7G#N{U_a!a`veTm)RUUA1;G1}MVHmITjhSBGn3_W*bt2qYS`96%< z#quw2u+!106;6ylhh%@J8DvTjvF71y&4O5j`WT7zoNa)8ogz#KnU%FMqO^ux zy{9Si8c2i8j*?gJ`knZO{~6(ye>ts z0T85#+{hP>p6y<5qMTD-3Fk^#HpzRaU8oPg)Ngx~(eaOTcSe+8<448b?0Jixr1zF9 zM$huAYnOQvC$4}-gAr6lsT0$47A^qZUUEt8el3Wwqu6jw?mUNC=uS+9LBU9wtn2Bu z)tnBib~C{=njdO|g_eo0<&{6UG=(T|vME*u!>eFWVE3;c?~7mYKehqpcGO~msGcve zhx_W#+oKdh{i_yNduxOzgb%M5iFySDHmy!Ggz!7m&?GO?OdLWkSiiHRwp2L+2~Gf{iT0h zGv}By|JGnH&8DoV?@GyZldI^ab8&nx`EX)RJhcJ|l$-aMyys_?Pmy?DOlpp!++u6CIyv(;30pZkVwBl||Fz@VLMQH ziHB_=7D;iF!4^X?0~d?1h#6(dxz++P(W=J4>PB8$D)NH`|E*hfc=-+z)|Byt(~X++Fe}5e$ukC3lFMyTxHcM07y*XhwK}&;6?`R>G!@R8R?CfDTWV0V- z#gZ%9reSbQ{_fqo`RE7ag;u<$0J&4kUe7n^99O!j>nO*;X=%|X)C%Ka+Q2oPA5sd|aNIs`ZL| zhxi1AX30SeJMHvRKB>(|q!4@Y_Ve@XRn~>;cYn=d?(Grp1TU)`1^cA+t1%A-7CU`z zWiaYB0a0oHY324prPg!Zw{P#ajuBLb-0{0v{PFXq1_-{(TQTOD@!jMzo-zdU*acwz&?G5xCn zMrq?YZWw$?D0853s+y<1y}MUm`010bYPD+?$R0#(S3dq?-0AD<>tRfm2JluX;j-_D zoQlf45|=Ry;oku`1I?U?Ud+f=p}Y-RTGD$@z>#-l{}+`@PwC@RUmGqeOpM@OdUR}t(mrh!X@xz3i$Vf)>E#N_{YZYot?`C7_smDKU?*RwI z=@D4VJe}_n&d}b>x|k8tQ|WXn19OPu)6>&R&8D1vPq|LS{D}ANn1txqDQbaBmX?-J zCu;=sq_N$qOO*e4rK$f%+j|Ezoo!v9V*wS!GJ;5#aTMtyP3ejViWH@H5UG*gqy$6+ zR6wvG3ev0e9$JF*PUuLDNUxC&fsnUzzjvp6-`w}^+?hLnF&H2@zjOB4d+oK?`jW>? zM(vp;N^mPDL1XX(Na|zPb-Oyksrf5zNRhl=45eRB-;R-IJUAf^0s?(k`k{OEb*R-v zOiF6>F0R}y#|52Ll#Ltj0(g5~7jbUydQ5#t`R#Z7M)#4}b<&8U?4VuAm}bM($$>aS zi$N@8bqdPL#WR~7&@pHPmdA<^C$VQ9)ZLa|1Fm=r8Z9}6h79LG{WIQ0`3j3Odax33 z>gIHfmMp~2ib6M1-B(Y;Ai}g>mC3D_N(d4}W8Kk5S{GjpH)Saj?OvE=B8?U3rP3tYG&(Ovq}39 zKRx$Mq?C1??HVakgw|5?6N=SL&mPut94BX+Sw|du-@0+YcLVS3gYy;oboL~D(R(+S zVR-x$+O3oZpl-d&7CjEa@e2S>X-}J}an}~VafuNTiJag5RQ0TqM6?TW_oecvTxO-B zQf?Y7%2>3SL*DSQOCmb$1hV~j>Xg|;<7(~Z?wX-d+Bl>RuY&kl=e09|<&B@E5w!@A;~|2Zx@Mwj~$WEoYm{_(dZ?@M&Q4JT828 zUC_Em?lP2)m;&owXZP6N@S;<;L;X$$I8l|D)`F!~ng=cKlK%ZLxW#6(LCmK*Gf;l=;=tD@}&d+S>XET z1#4X@^BfSfx{*4<+>xbfW`q;u*UW0I%uFuCQ5@?5) zrNy7o5SU?Wkz8p+(&?_Vk!Fr!FCxr}9E_l=F!^{SMq*pCGq(9m%AF591hu~JSRag` z=BcS)=Uv{aon>dQ(!O^QhOZiyC7yac_t88ak=PQiym z#Tsi3Zr^FjBgNg`wZ1nAFxckPikSt-Oz6q3v*g@1c>NUZZ!2cV0Cm9_mJ?H_)6Imk z4^Yrtg?h(;`=gc0=TYmlD9ZWmV~p7wV52p(PX)6I-V4&M+HJrRW{T$owbJa?$aM{W z*{@#Mb2RyzG(!L;rqdl%%bVBoOW6A!h#Rc3#q0ogfWH)k`a*J9X{hFa?834#SsrYm zE9*P_BzLW3cbqM!)NqLLg!6a^ipkfzjFqO0fc4p1)IlbD9b@w@hGs;C*OZD*_7qn9SPa-)!jZTu-zSNm|qiKA)e8{`hrd|)3ihWf^tQb=R1}u zU>VtWTF9HxKuVKeEz?kvZ9797 zug}q~$`^UokW2w!j0^y!t@$5?*<5Mb^>NfW&|B&zg|&&3cCvyF*G z?i~Bh+w}VUQVXas+wLaPm*rx#KpIysdvoCX_ru%@i_BL^yFo0(p2;->S!{e}rk|M3 ze4ue`uSU^1Ko5&!2D%q(H7-9q>XqX4a)rB;v?m|j(IQ~VhiccOspefV zi0&z#$ITei(XUC`0TnINekeQ}zc(5cd&wkWS)y+n97V~vT;KH0v7wpp znN7y&n#7ieXrw076#CT#GfeVWh9%j3j}2IWPvPXflN!}!U-|JPvuOtCst8)^es_!2 zD|62C+8B_(nHFPlo_y=s`RpiOb>YIPaRKI(((Rts=zi5cjiw7aM!o`Xa>2sf#3VkC*uuwT zM{)b+ne}`s#`MjNA<`vS!qVN{H!FmBpLdHxZK~QdhZOG!;m$jkt{nAfvl$_T%D1^;|tK8Xm-5EptfumX3ry%WpA!LH(Tw%-TCSh z%>`v#8`IG0KSAuYP>H*y)DRkLEVR93xc&r@79+yP!;>4!z?d*6KI5LTFWlBIMiwKh z+h>sWcm2b^yFdGj=EuF3S<(h9c& zG(8=0nEWTg5H)W*Iys@~iyDX&@6OOqSKv%wDs4`5}L#KLuhCQMhCJ*Gfm$vQIm<@Pth%S_ z#a^MwDVUBnrY2=bjWWE&Qp%?#8;69-%I^+u^pTTQVg*Vyik3J_r|FAS+X zN#ohIzH`ij->#?e=m6e>D6gfQ_kN?&>mIQh5@2+PZO~*hcR` z^V_DCVJB(S0a;?v@uDUC9?E`9VxFx<``*-?(8X0SQV@O8TIb=7 zjS7iG>AmH2<}1blhjv7IRxRs~Zepy%9@wy6ch}Ua^R|owJB0#2-6B>F)LBjB=@}Q* zzBu-D`A~DFw&9rY!HehXDne~=nBMi_O~X$cK=$2~!zI)68yW}RmD>11%w~@%nk8(G z2F@`;2$+_Ot*bg}+wcjDKB@Nag|NhE_lc3O@(po6yYhnexe2}3b5i}m$5ekqUHWH! z^e4(gU$LK003nk_OxKz2w@F#LLL3Z})JGz?wE3ZJI!q9BU#Sd{B5;2c3&%5F?1l=* zC#a+k-oCau@Da4{pGWZzD0NtBpmDka2Bl-`#ma8=r$Eef3BG8aMIHF8IwY?wSKK=3`V za|6Y;03JFP+3Yp5vrFvdRoSTYA%DQM7BDk;G$QIMs6|()j2+nYeoKRg*xut&HiJoJ ze6g{1Qn62vsoE8fVs@uQv5mlzKgYN??@Hc+8?TcGd9z0 zQRg_6C*Yw_pc`i0Q4Zr`;+Hlpq&-zrblBT5vM#X*%#a1+Z#ToA*iZlOkIg;%yy?Tr zW+-2#DEhkwxi8nLXU_%va#vPYGah>SYDyS?Ha2yIkUdc55_I>t`g?(K#dAG8TwJ>M z)P^W@TLpk_Dfe<#=9K5g`)d!594X?^R+0S{DQaiCPz{`HtDgOI;FffeQD3{Cl7`oT zntc_;M%;<2l7&9UX8&+e_Rw&_w4SMN zY6`FCQa#bBC~RvEZ&7TJJO_bdGdM;wmQIp?zSl{bAF(p}K04ZlIT57KWyxKbo{WO8 zr-e%H*R6!%iBJ;?l#O7J^5+V%mTSmsew8rMFlASKSNc&$h3lKwtzV5zt4>hc;wcYM zJ~*gPZeiWPpBwcHpyM;bw3e%jjpmt7cR64iL5XLIfo4vPD0HXIO+k_At6sWrcf3>v zclo%u+tN|1aEs{Px=usCcc3G@m=-P^Z}QxO@6mArW-#eFLv=YqE5%LFv%;*U@3M7| z|4np-|DYo=0!5nv$qEP6iW0ln>1`O$ek*HAXEQ>j3Lc{3sd@z zzSH~xG70NH2tfbbXKB>?BQv$gL$dy+a%{idGjX>m935NjW4E@Ra*d=^hKnNln%@^$ zbyFs4YF;~Fwt>eXgb)My;OL>%*xbA#+LBi8?0iIZWXX&J~hu~C@ss7Lfivhy}InQJRIa%WdlTt9M_=iaSER=+3yyD7ctyN5r}tY;^F0(DZp>h#QrK8Jo=q{`KqHi1(@Zj%-!dv znW=MgRp@4XIw8(ug!zI}pIS@TFu$k;L84hdn@Jm!L+qgLSTt{1+&CwotHxI}5i9XcM zVPmIZ{4y(UX@r?>|(_@$a=-?dKr&#IKjsS*mpc@9xw%>pNjl)K&4 z?$aUfz#UIF;JCCrF!K$D4(es{_WR@#vsztYR_(Bd3$N~b90za^m>qwxy2OfnEeQLy{A&kDRiZBg`ffnv$GyhQ?(TjaA{gAFYq#w9e6;Jxd70XB1h`H{ zv`3deim)a=0(edV8T|ayv}KNoYN+%cwLI_pBdEtwB_&_4CqL2g(I{-f9_MYHD>qKd z_d$PiJ$8)YvOd7;^eeUyDbBRi!gSv$j+I~!cPenFDjs(3j;>F*d$;rQ!!H9H*iUNP zfWnmD@RJsHb|CE`Z+iMrpmv5qmWcYspG2A(`GIsOsRlIz|@uS^`15F z?hGxX9r**Q&|ybNVnv3g2VSxa8Pt5?T7ADWN^%~7UKf@7DG!|FBl}9a8w0I*4*YOjb2FAp=B55>XF@WcPeX6P_baM@L<}+HifpZz=FrMw0nQv6-+;5Ct zTl0NsEN-CSM?oCn7;bL@=uE7bZs94WWd_|O&Z8u|@zc4)X1X5w1y}4-R~n{B-?}nf z`1&0uPvsdx>YZ%`m=Fj2kjA;o*wsV{4mNc^-0xJ{Tdoe zD!KD7LpRy>(=LeZFY1mfZ)PSJW-B-nhThr!gRL~L&0`SXR>_Jzv_F8mbYz+<1Ap@5 zZaOz@OC&~=Pp?=3{OoYIy!V>o%CfF`MvJ?>y7k8P4M)sYG7LD0rA(&x`6lT$Sb*(EoXdz4%FE!@^!u9FU)MJx)RB~4@*Elk>#`2$90NHm}X&Hqs zAy-x$B@1NtoT-zK(l(!7p=|G@o774f`!(C2xb^8bj$y z^Yb5BS;xvQ_E&NTAvza#YV%B|i0v+8CxV1svi-j(MgEF={=(|}ZO!`s)1#NMIdPc# zBLzKBuH4ohBw@cKoiYs&==*6<$=1iHwVlHXv;ho5OD|+l@YSpgz2cl7=a? zcTh*%9xS%O57sV9O%I0M52x-4@H91_as?OF*ruLOYCm&xbI&0Aei#NhT^T@*7}hSE z2|Ih<3<%UC3EjFH2nXxTkBAJ(pjqJxlN!oI*_uG{Q2&6#7dSYW76BZv>5-s7 znSR}n8n-g)OVxWeIBS2jc@Uo-W2CO`gs1Y@v)Y=6S>lVpKYpzm!^!x=PUAV1+rWqQ zYg`;2Cy2gZc%t{!(z(#R(#c4y&{`=55x@Sn?@ui79{_Et-TO^6(_+FiIVKe?(q=~s zkiS0*uPFex))YG0?5Uu_#slne=+1anC`M!hXjq%K3(Ug@oe2~#2baeiTpnWWtyW9SiW_Z{SS;eMgg#oLnEs-r2#2<_%P_Kfw(h_Utf;UF_AX zSB?NCH>s&eT0dpAQi#PPZ9&1_am)UDy!GD3`j&&>jcy~oxu1$AN7LAq$TTJ&sOPd) zd6dY?4`5vK>iv6rZs0Fw@28RBx}_;J({y+IP9 z->@sbMhE(lraKaAs3*0xKW|qZw+*Y@oeX_>L7#N&<>OPfIF4`QZFrV_T0c&-4%%l^ z3}{6DMIsCh_1mYjIMIMpnOZdszHPrf&@#Ly;qYV!v-yN1iUJ^XUZfbaMa}3W#Ao^q z2GMe#NWEss0u&VVG8`RW-Uji7m#&{aEy~r%UT1-^1XG^Z(MXSjgfrrrH>-HlF0hWme(@5L# z`l1BZqrKd!LrWoLn;za|5ffr!H+c{W?Ww~3(KU>&Fe3fDX~|Mq)C8)Mn0%LC}x z#08Rr0zg~=a-xaGR~@nB;S$CEaRyGTheS(X3KmNEZ%nU0`9?yq)I=pV{J>4a?+P+d zryynL9doyBm0wd+`zA-j{(TqLSiqGzMF|8f6#Yp1d91Niw5)T*4DYm^QSh?k~SK)7foFf9IO4tXE)7VCdGn_Ghy&3c#@QsR89Q zoqbbM^;!hD7!`gEd;Oze3IF+Iow&9uQ!rurj8a@<+WuSZk%lSfN}!M7(*#aNKGu8u zVMv&9P#00WzDL|KBdmQ|*0b2yy5!s-SV=i+&b!lc6QS5#Ow&#SX$bUd14SOQ(O3(gZQO58bYTTgD$|x>(U#On`j9N+)iwEqE-%uJ%>w5$`A^Z zkjddEoPxlRaK+5vI)vipko%EX)F zEtxt-<+drFZmYX#&*v+1JG@lxC@9!37E~tam1I>Ghu@WUtlgE0_npuX=$UfL;@XIC z`RRW>j6e6kG86|fB(aSx$Yg zW$pecxQvA6KpjWK+GeQu4NS@=vZi%ZxKlq52@#HbI9$@67JbD3_3Iy@_ZN|uL2oeO z{V+HHM-Rh*KRPx>>)C5S8b`FLPIH_6QFkjg?};OAu`RJ)o9mqE`@4xJDn5(i9*Qs` zX3XK5OEjdXCf|J^*x51T0Y@%)Fo4E9%`#Ss80<=$ZWwm~A2K;m4%lE55b?xK@6z-_ zS5RPXlC#7h!^-Nwb;I7cYqB9`FIien(nN?G1b{dPWBIounM#UGmaQ;+_2KR+FD*U& zbG|avCyV~2-Dl?uA9;Z1A zE~rBf8pFo2uO$r*lsRT=Q1NhI`wLiy%n!a)R8ODNQJy_GuMzgD?zhkI>)Oe!H8nxn z+nY;=q)V=Wow`Og3wrBYOOn&HZGHX_%C2DlEyv(8N}Sc>r<-xt&ch_xHv=vwuidST z5D^&GeMK%k2_Noh7h1;TWhg}^DO7q}-5kk^W9NWY{E`T_@nYji!OT>()Ft52#<*_` zBvx=_n0bv>4Ai^A7|%HnD}m!p7PxsAyF0;N3a#n{cE?^}%SKHbCgm6jcA&3{luhzK z>bBfM#sf`vWhPOj$)$gUT&YrDb?(M_NUp;#(wSf62ASVzG_Z2rKMQ8Gs-SW^07o}1 z1&wb7XaXl@`>KzW`JcX@Zenps=MAtmckguKe?RuM$}fA&8Hx_T;95n1Y#}rVb1Vf|0n>ok>kl5h4Q93) zE!WDtD6ZX(QiLfdF- zAvaHqRpL4MV@x*dAE`Dj)TMUO`E;l4>z;KvVCxFK8rW7F;)Jw zB8a~0Jt<;=&_Js%${Au4ZQtEHnPx=Rn<7fyilrcz*X|2>77L~e<#+xbZ1#oBb8Vm6 zJGq7iSM}F^Cw-T0couZ9cy#hRzJyWAT9v4$#jAi0#?NpA2=%4+|KFMZi6~BCsA$*S@&pD9zDYY()1A^l~3I#xyg*0a%~fBRl!=(Jfb$g$m2{I zGk1A;*`bO@cYdg+7QKwwVGY-_EtLf}q-~(BwXtq4dxFP8VnPBcLyfUg7N7bH5+IRn5}8ybi8WR3-a?PzK_Y?)I(J#$T@}N z8|IwiFtqC#p<;aa2>AUB1#8}grVS#A*%YV~`ZUemZcpr7!lOR;6=y}_b+<3p2Hxr5`Oq^?}>s3?$FX~a(Ew`3RkeSx9Bf&*Wk zpaWA=iUs>VMB4;#_Vuj$03o`wa(O(5Yn34xFD^~!MAzr{-i0*MH;;iPlPvQA1G+*N zAANp&?WGRE`{UaO0S7gKC_8iFFG@M7HXN*8*bC^-Gwe3_eMNJdVs8hx`7^Ly^Jr+a zO7{qQ6EKP-Tz%h*X>(y<=oksOnABbt1Kr)JKIGx}7MGaQ(xhEA(->P4kh3EuCLo>1 zU*B9pPk>LvSA+Zp;XCG?KMDR&WBG`Yo{EZ!XGleV6LJ}*3Gx^kvmT9|7`~!&<%_Ax zfQflFb;MnLlx+wi4hJO%<G(NNEb1qT|XwsxueJuQ0gpE%_iyVW3Fbe)(G>^|xb z@YpRFuZ6MRM=++#UC|~H8XVw~nQPs9nUl+rQpMUh4S&gQ^e7p81>V9y**cS{H>i+I zz#StpH|mdXf3;J~YwR-BIyM7;2@Z}a?nPujT=lda;UefBHj@BFM&PwSY z2GlcTgz@T%1cTs|W8#uthpH(}{~8PM@wVSRfQ+-g{B6M8i0hDK0=7ZM&oGo=yCl8< zo|dQwD*d(Vl>mn)@-trXn9p+Cq4}tE`*!~IAU3|$=vHlq^K=l|EuUVRPj3h*Z(e7e zLF=HUz>ekGe3>JwI649>dZtH}7RfB!;1IR{4A1^&lf+l-!ifv7TrwM+>3;{1r`_8} zrBz?1eAOj$Yw_aM8tJBYb_(-q%ds43W!mySVp z-#GB?9nS|lf6T|%@N{(g6^k{*XDqcwPB9vjIc_ZgoR57ejG+dH);AAv7!AxGfqJ0A zU2S$3Fl+IL3&55?NweX|gxT#nI_`|1zhl$%n&Ps@+WD6$fCsL8^^-1GGKke{K)yS7 zLs53=W(XrM1A}bHV`hV<)(_px^DB22Mxn(KE8U{o&cF)9=#O9wW14T>OU12kk?s;o zG&+&EUpWaB<%#bd+S7@wPWKCC;aQd#y-Ql>0M-;!jk~xg1y>s~11@Qs)`C*bf zU;8DurG*cz?>3L1HYKp`?FAK}u0C3r8JYb=0 zq_3nbZ5M1I-%A>`^QSBNqcAS!#TZdq@2D*8JPFUfhb>Y}rUiIBsAa^S6>RH zfTPgEJGs1#HDaVbJseI%CyMRtGz2V^n_J$Aa&;UFkC7ZHO2(leFE%^9xB2Qdr~ad{ zx>r&MD!1F#Ut#dwZkB`h;zkz+rs<|ed+cVxY?fnZr#a^J-aR=jWM3q+{`vn;E&V_6 zPWYz_16ua%W^<((7f~w!ZAvh|_4rqve%}KZ!uGGiL?qL4{%xciz>r}raS92}KYvuW)je)6}6vkr7 zGaKMzgRcccz|gjUx5;4zZ`HcgwQo@!0v}(ah9TTuyX##dp}!K?)H_%q28`3hs~paQ zsYN|wiu{YuXs`734juQ|LT|05R;pgc({8we10$Uwr}lY@(WJ6>QbC-L=LqvTi)-fr z{C!=G?sx?3Z7ES|Z84O0#dOS$DbOF?=2}LI3LZ2SyxK34s*IFvqP@5E4Y#*Q;>_fr zFiH6#VJhaD3kS}*+s+gQ4_xYq-bT4!U-BHCZhgIT&H#r(FS7V|d;$Vg9k?qMJTAD# z+YV?A?=qNB2#KeX`D!}fyO{E)_08@^IrFMWIOvXrFO>@Qu?I50Mq-*@3<~okO^=28 z?4koS&hMy5u0LX*`84KB8}niRV@6wGk>}(aCsWX5Q0?^gDvocBt6WTH6S)6i7f&KC zCzJtl{4jwjlLLbB5#*l&_mE(x{ zr8O+sD%eV_*HqAXY>~4{j8pq?H8)b~oa1>L#^W9}G}8PBrA4yw+>_v~h^{k6pI40G z^inCbKywxfBP}X6(QFs5E_TRrj~`&$@}XYO**$&R7sV^h*0ui7rhId>oN6pr$zL=@ zCb!gylu*alRZz0Lnpt;>@VSci3Xtp!PvPCMMiH6jTi;JQR8io0E4qjuvo#2OR#q9= zdukFJU)UlaIuh5Vxu4Dm?_pH1V?lg`p-j>s&%)+p^%W?btd|9s!8EPskh-X_wib>A zq6b*-4Cyx%&KS%Cu~|>+zRZF1>onYD^93m9Stp$nONmOOB+e_#iEPBcYN77+oV1z# zZv~er&f+`}tJkUwwsjDeh}d7Z`JXyDzN6<<8+%*!vaDB0-*PuI>+by47^`D;Kc_w( zc2w7w;w-2A8TY<}Z|+XW^)K>z7xeV>n1J=Bb$`5`rcFep>ZgzzIYv?CDmm$$flx** zww_5^sg>{?{U5Q?m6-;|IL|EU;Rw2c*IVyB>sdsRRLbi!5FejBxF@6I_K+V_LbiIz zq1&Gw$s|p20z4Gr>ah2zD0kc4_Rdi&4E5@ZvSfqii6UsR?P_9UCEOh|Y|7HFQGL-b zoar89`0IKuF~Xf;~(KCZO0nfI9TUM zO!I}(FzI@QahAfB zIA3YV2q=h5Qf~OmhY*!GpDGgjeURn7xzFl}VEv`&ANCy1tc_Qi(j?4Yn8t(@7!2Q&eKAJlMuDycxBfKBF81{Ro);JHiuTRTB7cmyy3IrKZ68zBR-e* zB?R5QNd=Q8n~{4ngPWD4*hNCyM(wFk3-)@_NFO`lLHU~AHbhwSq_Z^}wzGqKb6S;+ z)j^em={q&YaavpLGc$It8`yk=sC9SEqr92i)`_vzf!))>{;fqWit!$t&pi9H`(%xV z1}!{?lBeCMj$$U?MGbmd#}o6-dIuQ!?3~h!;cgczJi~GFtjuq&<=^g+f8OGMe8G31 z_s_;=OgY}|L>F8V`|Zzp6w6RCl))*X+NYTsEpo2?im5rXhh@u{J}1u%G*^P*bU`o0Y-1h|46b4Nn(hqVevB#k&JL z@6QNZJHHJNm#3N-C~-it=OV~AaOy(;j^yU>2Y(sf=K}@P_45!w7x0tG?wg!(6VEwL z*C~k-MeZ5j9_*UV9qYT7+aDvD91nkuJ{FgoQ@mh@!|+n~?@T{zZ>WRnmFd)lJJ#!k zFw*hh8n^UIjSMl?n_uS6`q+lGLXsm5uAHaFpHPo70UGmgrRT`03+DTDaz@|m>}=oi zOY)o!lQl%U>z0XxaJb;nZVd@?)TUFdPT$_Djh-PASh`AX-MtzTem&)$jH!nRbE8dv zb~L=@9fx5DHNo!9T3~tVve?3W0DLnAc$s%IY?wq8#$ti3Xr`_a66)0MuD5YjT%=qy zpA>O|_aUeHB3vD2;A(r0w~$Nn?b0Maa&~oKdaL5myq?8P&=R?oNL&3rW}gy6ss%xs zv^xDQXK(JnfJCU3V+?dL_~r`Gn-jiU`o*HgMQ}o91y{GmLu-vl>xZbZxV~(phluoA z2hv{#vyq)KQ(c%BCM8H(;V02@e7wZ#>56Tdx{^{S*o}6A0_ujxsHh8XlvpV`_EieO za&E`DKRY7I+CydzCaFgk_M-K=+^DJsaW=DE)87D$YXG`t>!TJubCI3k93~DV39Mn; z2Bxh|0$j9?qD{>4maPRa^|BgQ35|^70~2 z64q)wOR_SSF*d51Q)W4KZ?@ZE(8{hoCZ{0((onpTa7KOo%=$mGV#WjW$1IIVMAeij>&?UR?tF zpsBvS0fQ_*N1>Z#P%c94<}O7|7_2-|bUMK8;;AdEtpl&B^%-qBhv&h5xy(c(V`tXs z?e*PzX-21!vFH_@lE%3&g|l_XDE1YJ8FPrFWo8CHKgB`6;jb>80n&%=rce>yV+H=mI^7l4^I(H1o-3`ujT@#fLTv5ucSUKUUXvp`&BCLFWA> zyKDf+i^(PZP%1=%anh9U!Lv`}#d_p)baXa`KQ&KXxk|11@goH`obLK0uz6{jL>{(g zZ=dQ^S5=dzRJ`UN$macMY!3p*!>JB_%A+%}{sy)!OQAH&6K_;{0+n5pNCDGF8HKLY zhcFqP;igapKg~}kJ{Q^<4LzY&o9WzIK2`9;r{)D+^jn=w{Oe0i0f-sSo#^$4%u-%A zPG1ne>RHeH&S2A5$KI@R!Nab-`o1Wgl*Qta5XloF=j30uPl*V4?rG4);5fI040hmC zo8xK_Klx{|1P_7U&Nyigr>OXD53auK?pQQv(QrwOciZK`1d&;lH8KC}FwKCl_8UnK zt<%>X6ffkn(ZQ0m#+*!~!X^l5642qNW+YVLf+5435$;54_9{+6 zm-)W70p!Z{-Q`fl$fK8R@Cn_*w|pySKM2?ke_0S!=VL85o10x#oW9jIou3Bb z$+9G63b;`{q8?kA+Lhmzw7{gs5T;%?4I?*M&bx5^_Ot)_w|D6F*;p4IZM@9v+;3cR z$$#$SXY$@MW!rJCSdGR937DpTBiA`;P~%LwlZ(3xHCugPdDd@!gXYMI83$N5$)(q8 z=|_~JTIGgSEn z(keat`q_8+RjAibtUkM)kG@y!eA}MRpf-`2oSYP}?wL`DzXp`K)QO5RWl+znFEhZy zyP9!2Ad%Jqr=UP}ut|xsdugypaH_35S#R3P{txUN|Lsrp_3Mv~ za#A~Qg7h_dpYB!_IcJ>zWp{O;{&8FI=cc5jc;k-k+kX=JbI(+ebE~heuj&r2Y%k=r zmcCWMtrVNo1Z+XN%KQl(LSA(ZSapuNC?1Tsn+)zeQ@7e2>>0viju@ z{6}BR@c6DQ(!KIOcmp8hG`8P=_>OK05gQMI?245aJco0N>pm3=tK*q)TQ5}6r_Zze zEE6Ys_>ss)Kt>PINn-4&XrUOn)S*l7Pk&AMZ!g&&WX_*`Pd3VJhp~r8Fu!kKzy0eg zWZVuPWw@N={ROBHy?C%a{YvLcdzPH;$(v2)o{{#xUaqsU?Ip3+L39AEs`^p1=O7Yu z3bta$DGCWD&u<#DI!=+|oBXB#ceE+bL4Sx1ra$>3C6|7`zd3RS{Hhwl#oir}k&y(X_`$<(se;c4TpnG1=~n;r$ea6(VX_649MiX% zh@}_&l_ghOPeDs@F%MbZ(QF>id{!o|pBh$~p!i7Uw0)n>bbT;`MLm1q8o!qjz+9qz zIYw+CPZ|m%M53NX4l?z923xvs5MR1=fP}d_n(|HpuRnu1G8I1~`4fIme{3c^GW!qY1abbS@WB7toxfjfnW2M@+t0lCng{!I|Hy&(&ma8%vkn~va3iM~@~u2s z_vkYdVESu^`CmLp%M2N*2<-iJ$0zH9R4FX~;#L1QEBrIxS-az#A9Izr;JB0L4P*h{CgXrkS8p(agQ5O`YQ3?`+U@9;u~ zFcywx74IGu%sYARX1zbXAu}Lf3mr*XS-K4U`c4|47g7IuReCM{IQ{i?MplJ=p3+-Y zZj73}coYgreD3;7B=A7XX!L#|2=~B$Nbeg>z9l?2T`S_P{{n5)A;YbxPxXt-1}0op)2gNT>P^E z%R9qig66HkR^7^jco%@S>tiH6?{BY|$suh8P(2`MdOcq$o?~SuctG?XQT80_kM55cZE5Zbl%NNK=)7V}{^|chc$uSce1+WuXQV>|mC@wd69v+?t z4COCC64~$&0J;Yw)UY^N?DMyhj`kt0_nRYatew~xe?`##wtds#dGO%8 zOIHyWKR^E*C&g5e3u3s~!N_JY6;;G^`GErXU=3f{_%dz^rDL12bS$WTQb z=Nznd#Ren3v)w8oq7^0{1_CK}u5wMa6N9#9Rebb~ECT=jSm29c4{LeHuAO72-(rY* z@j=j{AycOyF*7r>w{+UE^!*iwdt`z^p2vE62}qwdq$u%=c#c}7qCZW1nKyL1b1Rza zzpxWLDrKbfo*1J?eONq4sHDF8k~m&UZfqTE^BgWYviw}d>jGxG%?BEdeWC*mPFSMA zz4Cye!6F3X>G@3+vDpx)XY^H#lo!dJ&;E$TUryfN_eIAWihG%ce9ay!v~5}VBOiVC z#G`0>GqSQml%foSq4s=k){<_zI;EtvUtL|jwn1v6>C7c#<2MbU?zr&#xMrHA`Q8k#c?YwVA7t`msMMu)C&4yLvQ5 zf?@zGa4~)4px5`>G(5cK{>H*p0VJVGu7R*F{_{UJ-z0wyZ@P*<%pTU8MIZ&huulCj znM3bBv08L~QT^{*)L-t1j`Dwmf{BDoH~yLh&o`glr_qTI%CM5CpUM5ksH44#At>7s z{lnPurLx#}AH{73Z*}GvRlX*ay?{n@?JAc4RJzuoZ_$7IfstW5)kxp>hCZ{uAsZ2D z*gh7h!WoI%SR5LcmnL`vOAwWY`BV*4YK+IF9{F^}>+{i*0o`=9zb(G}vPd#tjZZbo z)m0Tgm|v74-zc;+82hmrxye4NOI$bvU=pJPfNyznS=CtFf=qH8(uvL3?x*{uE`;pJafCb!aT>>u{&HT^3 zeE*|78-hN$BobBisi6{xW1n4NTs|W*wJ?Q2fm;E%TmC5|8XbG(QnD+@)+i zWUq)UDpdO5_&_mG@nsPTdFxQL`dv*;&7N++ErOb}=m5H)$L&s4%Igedv_n_IW~Gqq znw7Q(%|M=~L&?ooo!a>icGC%4s$Lln)}gt5Qa11yLO>f|dn(n!#B18j1X&Z*uIPX3 z&4mW&QR}7|p*=Kq7c8{uprvqoP*{tM29|uU4!REk?7R{HCrk~@PWnh9sK_#dl8`5I z0ARSk`P}>Z$)07ayJc~xA^mtGSAV9CL604k9fJA2R?kJ~D`s*3ggHaFLrVrhTmh0fGQsQ_n%i!F`C;(ak-VifKu_ z-DUNh?1Ahqz+$RaojgMQ6@=_=LDCrIfi}Y&# z{iT&J=4@EY1+q z4n;WI|G)*$-ROak`^wnzJJd&p&0(kMePerUx=ifJ#_81o-Db!r`sfURV)kBa zy*A-%$;&mgb#Jo*d@A!cG1Q57{Uw+(533}t@htQrQ>@R~W-?{$ITpgEWQvkFr}xSm zwtBd_S)Z9G5-Pxu4Uj%|e*!QcHJQD)-X@4>8LayytjzTa%T0oUj;Z;Zcn|W?-dQT= z05=0VGcz;)^_1e802=yHgP3I~Ph%?)q4+M^nQSG@< z32k*!HFXR1m^yrOJ{j9(Faz!cwhx0{q;L%SNNm$-TvXgwjXaPi> zUL%uXK(IW_zk2ccH9yKas1(SVVBG+?0r6|*WIqS3$rGT4uaqPeIVfW1EkLd3dEPz? zcHTe82LW>sTGdQhpOsm}xN|8>t}7{(sY7`*Z{+ikybqQGMDK)>>rB`k_o4P#jA_=f zh*ooMhoz$hktt3f<3cxwt77h0l1wE9^-?Cc$hP<1whzO2gUUrQS2C9Z?k)awgf={b z)NzQtbW-##>(Fe00fJ)7GiwnqSzLNL9d?&F`h>YFd^XE*&me0#-P=p|T7~eD#i90< z|5x;yyDl)>9_?+`P1#L@~Q2T{<9idKB;ZUViYn;d=wiHC4xQ!LQJFcWpV#MNBgU{~uBpGzs z;?_9s1n`!O4D!B@R+2s^IC3ojRXZu$L@r;aVk=J@SfMr6|AkzWP$ z_01#cvm!s57Pm8s`Ub4qAaErq6l>UbfU*|uNk%Zdq#uvQ?`F*4d}K1FnbRoYQ3ngf z1`HXvwIQ@0x=Q=+=QG;#>Rg7Kl|Ec8KE>SZ*2oTyB>JkQ$g3P|=S|eE{gu4kovZmt^Dwvbu18o4*cQ}sfm~c%2^AF;X|`>Vkv!{{N8)pAUOvz}ZYzvP{ZI&uBX$kAGUNV+x$|EP4S&7BP zB1@Q^c1VOi$k`k^&ibRB=g_u)Kb&e)Ktb|=HBBaY)B?RPXprlV7Wmf`_CI-aS1$eo zZ~kD6ZZG?ymcq>bEV+;3s0z@JU7lSTrFoU2eaI_NBt@YnVL_{##Y3D)zSi8X7 zg$ITd$cV>SJZovC`)W$be73v47HRLmH=u%qbgRUk3^}k!u6(36@_e58Y)A0lq)M1i zx0&fMIWH?r_fD%T&Hn}DxI9#Sib{6ni$32P&xO8#%_-_`PBktLbv<)PyGk=Lx+Zygt9y8jQa7$_iMkdgu-AfR+ei-2@X4JzGTLy3qe-6P%I zox`X|cMM2N#}En(9nZy{-#M$_=j1N_1uvMn?<+oC@9)arAf~ZhQVSV^(Dn+mp{^=W z-Z%rwyrdskP2`7m8<~V$tpH-bxy&S!Ba8Q2Ehwp8-V$kRKZx9l?jC9)P))Vo7%;~WK<>gW)Wv&7ud->UekVUHTOJgTNsW8ueF0x2(EB`x-xyB)9S(gKm_I0+e|8A8gqb27<7_ta0~dP<(uZ`bMYQ`qgR|6^ zFensGf&Szb(c*Gzc($^RZ_`>3I9+d4J>=cf!hV6i{iv)poi^;yH<&CFzmUS#l zcd4r?d96&SAJKP_=(;v#n~| z|Jqh#AO(W>{!JESN$O74;4+sTQIpD56TsBb(zP_r1Tsm{K}!_fcZI>3_3tj&`Et+w zCHCpG@QJ4_$-G@|!;iUyx03dkUtrRP289JrQJqZ!z^o zQGEucWr?v|w)J9i!;@dKVQGwNNl($=H@v*O;8zm^ax;?Drc3begT2=9rlYNl4Q2Vr zO9(jdeuIJKnj_mTN$o~?`1ORrq}KU+N?6Ud%Bi81wfFMedH*(90zzhJSr+t5(bNN{ zHQk#?PF2a|m+VFf=pY&RKReyiK; zVm0konF4(+OxX~GhwLv2xVlSGB{JVh6bEK%y12uFCP)S}0SVd&Lcyra(Cu4MD7>&38%1miA#h6`N6b>plm0C2AOQ9HBY{@AE-crDK?OFn?1IQJdq zxwpmx>Tx3OK~IZMje9?Z?Qg3L4CLK4O?b6>YJ&J5b;UZ_#X*;EVJAB|&?A;)tyr`x zQ3VGk9OXf&!5%tw>+VG2EU=Axy5m4`&mcuB)Iom?!@Z&@sP1OW5aFu>%ewE};ua_@ zlloF4#A(>7dtp;iSy}n7maY90l`EXoePtE|elHKAI{fyu*lN;9geGkzl(U}D6r=_y~zd)bIn|KK7j{ZeM4AWeq6 z5FMD`7J6DFL)ZiB4ru!Py*UvdWKHPY(;Pt?2urs5nVZuPmh$%8qTqvMQIQ6&s#~o{hs_kFDu@Hx?twv@ z+4NhQppJ=P^PzzGZbZJ$s;lzMsXNW@xbpVYVBA7EN!Dg2y!z&GyqW0mBnvYB70mZ? z(7>NC!%FsWaJV|z9F*TCdbhpgAid(b!x$75SnRmEyqk-txzC@lmId}XRPZjhpoR_9 z$rTUZD1dL%7h8^xyyrA?tlbBaL+3O~r8iWd)49ER=3(*QyaZ`Nf<+;)XYlj(;<+G~ zI0coCT|ENnS?1RnoR%S?=(XDQwI-x{P8|>e&Ks@GdfO|T)30x2h=br#E@~8v@&YY> zpWX|d41Os!lFwbe#SMO1&E)KFBnZ^bl(e(FJ8dY*jNhKW%fyr`6y>O7Jn{A#&1sXI zI66CIFs#51>q9KpY8n_!bQ}fUn}g|1)Wyz#wl(IZ%xu51!P6ESmYPK?J%D4)d}+l3 zgkDew6{n?(88u20KiDv5V-zI?gEE7}qgGI_-@>+SuEWrylm!O7S90)1wzHl<6^}sG z>$??MEUW~!fvv!S`+9v=6Zump5U``HPB7)z}T?xW=5q!`~1DCwdxi3_G6sh z0=s^V8@1_fd92u`&;XF;Hl8|&Q< zG*?rrFI8)61d#FGz9aYW9%u_7nwv8ywp-{rO_qY{aQSB7z{T>b3jA&R*7#VU*(6`r zK~`4wsGj`HIK^Ey$;}mU^MHWB-Qu}`yTIQZxK5Vnd7yB_?UJF{HdqEstgMAXR^PsU z1aY09eOqb%Y>Ng9PmBrD?S72|1~<@rA!M)SbTBR-(;Y^qH99VDVPSC(gbAjQYvEeF z)QN?Gz{9->$>(r*f99nAL4+=3ZdrU-qd`cT7&4H1!fv1iRtTry?)P^ zHTn}ZzPjjC_GM7y?_344@KmQMc!}J9cj5ob0*!T&9%2vrYs(cuP%4^#-1VXkNR&Z` z&}>?NfA?RMc3wf)b=ULM2@S~CKSiH$0_*=RE$QGQ2mzdM-amgvYyNr5i%B3}2`V7G zo#p;-W$&4=jn^7M%UsD*xHd2vC)%Ic|C&u?fr8;+?WjEU!Cu_Bv)5+7Gf9mWRpMz6 zj+5@inHy(CsXsnP*!O~MwYnUrR;3pFgJ1uk-XA~v=LEa36ZR|(?5GvQC)Vn(H_`tu zJoVqc-3#|h8i-p70-}}dmii?;(X)yHqJ5xJwdP3l>{ZmXW{-TManda+>?zueps%V0;WGmK?1~VE&@Zh`nGtTm{(T%4E?m zc|#BHY3)_BBI~btI;g%jm-z@C|IJGBmr&9oj@Qjx`lp5LwCJ-BeVyu~ajFo1Z7x%m zwwmYWV!uRc{N^Qx-$Jwx^3_)&YW|c^_)jL5R{@bTof_+@ikO&q`)e-R1cUb@G~O_q z=GR;^p;w6|2{P%ItX(+i#s%9@&?pxFTQ>HuSw7TDo5dg5?(+;@kjZ`fm&hV}KVd=2 z>U$c6Daw5PSANMW@E2cr9VRw2p{8xF{vs!ZPn-(ontlu1#i#5WzveDXz1(I?gibpT zksD3F#%GkfCYcP~1Fc-Bo3io$i97$)RSCneftS((V)C}m=YNS<5;nS`pA8*W8`KzI z`UR~Er@OY#7G_Dj3iJ14As=}5BWv?W0#8z#%(jKvM;%NKiGXFQYk;9a;(Uf@b6-%{ zslN?!uwN=!;oGO}-Fg6p$w!^f5JlmoE!b|;@(B&BxL}0h52neYH^$uD(TlGijvqYx z@KQ7hLaCiX_n(|AuaiXh!OQTJx)Yw`*nD*c%*^IqSLKf^jIT%)Ik;9XX>r`e`htC3 z?EdX-gyIYJfRvOMG>)k+br?i1q&dmmtUg~bS#k2vb#0=nt78J<#lI#Ptl=~tomp?> z_f}3fUktsfsE-ukG ziD1hjuIV=UJmcgTF@jlsgLbPyA4z^1QH~E51Ok6yp`p~4l@G)POLl~*h~>iZE?`{8 zxg=XC$v^SqH2wc(4gYr4NjBI#WVr7XT5~)h6tzvgcUO>Y3Xp#DiA7$AFOV*5F;1{5YgZ+Z1@;I zzzuO=dv$ckC>HK2K_D!Rjg3l*BJUw}R~LTx2-W|FQt|%>DB>_Um)K2&+o??LN)as4 z*WcfWLO-fpK||^I`LzZd&?y6z!jfen_<8D+c>%sZeqUDk!;-xu819FrEPymzau-A# zr#cXMK`#-={e7D9S)8SD0tP^$f?g64=Xu7;&aOOWseV&5KKCn}oF9u8|MFuLZ&vKf zJ26=&DpErh51~H->imWwt0sJO*J8Y;9I)6T#nJK0n*;<;G&Eewg3kZQP5%{B{M*e4 zU&*qD11L!8Cr|wJ_4VJjt43>lMMKjqM$H-S-o0EYlDmeH{0%>bXIbzj&Ci!6tNsBc z+v^!p!TEYQGAgPS;F&+pg7m{zS8)FAEB`lI^nzZy%aq%3_bxMYV9?J99OR8spCc9c>Q#{D#AyGID$Y`L!rH(Wl?}y;775M#DMMmkU}gAa-TTt@X(Ecfx)D0 z)X?hBy!T(SO;PLx6+;mb5w9#9Z%M@|DC5jaC0DPIJJ0Xl2TG`$34ftRglSst1@^lJqiOVmz-e&L|a&} z<&R71d3{l{TuF#0eu{kAYj&y($l;#XP91}1$&$j)u zyIX#vXUh^CPFE1*r^C5$am=!EO2SY|>Rm)s6xYZ261p>$1IEVZBFz+(lp@WNUZGXC z&!rn;FsjIdX)BE6yWBr<4i&Rz*;_`?#n@7yquRRGi+$E-f~GAp8)C`M`X(;n-zoT3 z%{D}VDot0F^%eR$o6WT!B}j`ZEfXHhBJQDp{rK@k+uFe4e;ZY|NSXm z0(40wxGM7^X`cVEDww1u=^6r}YaKhQ`_+ROeW!a{Dkno0m&vG@S<&m76WKGP2g*A=2Mv$G>fE;C|_ z7~H;qQ7^!G1mO?PD14YEfx4DA^wx5!np}r1Ti2(Gtm#`FghXU1lG;|o$X7;tK6Hp{ z?^bV)2G$P;>sl#nn!{al4k1M4A>=t3^ve2Qzx_we_}}i!RYn+G?aFyrJ4u4F!R?y_ z*YaR1SFLGBLmX?>g?*M~Cki`m<`D7cVvQ+VsA&DTw95m*!cU$UDAkhY*VW~DTr#-% z!$JT3?*7?*{+EACBE%>j#w?D$Tuz)bY=32mA4yAl0mb=BDq^3q8F#p$S@29nX=|5c&;|&o58iniFcT+>U9`R|t$P}=3(5IKx z4oZ4nAl0s9@Rfe;n>2YdAyN&U{1dZ|Uw9#ge)TbA*R8(hs-)E!pB63#;{g?MUK^c% z=i{t~BH3EAyRlU?UtCt8>T4FY= zU7=md`?9?>Hu1c>ng679ft4tCCU8#J8W8)1Xqx1%1t#>{`Yq z`TpVMxRh5jNL60{psaD(#)Uw$FjVz0aaRtS`ble zpn@kmM}8aX@{7f~0z56Mei#vB~q{TUwq7rZV!L--b`kIu)&W4V@9NS{ajCs*F3PDOp_ zxaL((*VXcT_o!oAb&4Vs`@6$;_uH#6`>u&HiEj1*x^nHDw>Z)8QlUQ0PBkHLvsX?ESaq$QSeyrka@%sZi^JJr3-y`y{FzdH|h@-Gj_uOOTIO^ z{Pfxns_b8o>Hn}P4x)2x_@>U8DxT;#*Hqb6^D!txV@Sk z(A)n6MT{K^6{h#MbcwV>8GjHAXDr6>g_D-Bjj3fhuDr`#vMRS(>tRt@-$OG@WBce! zIx5tpU;N~+t2G@_Jxa#rt|z(iBt||9vJ&s=DlPnG6%~17oAc7OwMiuxS{Pn*_;kq3 zc5j+p%$@i?(XchF*5%u>QADO2%FiX$*07$qD2VSN>(Z(@NX7tINZFviu9f77v$vAM z)Ic-Ao(T+kac-ex#P>HSc??nlC0n;VNYVcQ5M?&W^&-L1mcpVRZ3sWazD;X{#cJC2cu+7$7t5s)QKdtrAh7Z*L@w)51z zl{EC_cCBBzsF%VBZx+@^-A3He^Tc=8-99L?Rp>JF7at_>)%OsQ9WJn69oRFCiU1zcM%65^t-Y9Ku9-i~a$ea>*% zQ1#6U=V$1x_PELUTm`ln(>P6qK5aRM@1qi*R)_i+W}t6ozpP;C86BA`#OCC@K!_bz z4A7KrbWq!<<_Abv4H$Dm$F1-R8q@*yZGK!>aTLL^JakWsV^g-}z>9EOD!g z^s1fX>T^C$2i;j-m^9yMNzEl^V@2$vkD?y>DNb<^vqP6Dn z#ciE|VQO{99Vw z!#tn9Zqcyd8z=Z(M>NKd+xDMuXz0d$F?(i~*}*eL&p5^!-ACQYx=y(YbB)SuDMjVr zA(Xvd_Tz27(^O|OP>A)jR`}YGt2C>dn@cGa{Qy-fTPP!Y%zNL3ozqj6{7qSY2(^Vc zg>Lw5y!^Zg5ua_iv#|oyFh&TbcA$PPP?ro9;;QaEJBd2FUgmKxRflzLI*fn%)8$km zX52T+Gu`CNA!Z)d?dk~RD*wk9&N+WwkN$Jn=9NL0WF%q&Eu;7dMZ0NrBfZD&pmXtI z4a9E-nP~39+0KuC;r#n7fIRx#U<-Iji&<c3B{PW!*ngKFR!mTc4vXI+?CgrXohgVXE}9MABnUqcqqbF zBaCpRSQa~b6osk_jH2z^zqJMWn?IZ8U-`Jne=u}UrH}=8%C&H53d*#S=tA&#uPfBU zWRA-Nl1rob+^-U~Q>+E`8!P_oamYTxZwCC4XmuY3K~LlAV;rb~>hqb};82H+Gggm( zkU2-0uw*dM@;4;JSko9f3qP&iSywm2LQ0o4?_(izEg=M3nIl=8Yx#3U_XKeJQVumO zamD#l0{gjC3VRkJct;z6fHzm+-8 zv89O3)DCG-ltw>KeNb5?NcPx?DO`DEm|upRxa2DGz$Q~`qI0t?69J_|d>Yw13^K6I zphz%Mt;3Z)p6KR#Xromvoslmc${>{9(vPYusc3-)dam9&|AO<1!(Ug|f1KctzX_KT z^`xRjsf*?8Ot*PBF;D&XG>`4)#%eTzhzXkDJglcWPihJ>Hgh;Vs>kVE=#UrU=-{se z`tNt9x3=$>$G6R;TqL^w(o7LUdC*%=Bqj4K%E@TRaAFf&#tc{kU z#y2cHB#$d;k}xm$>AQ05(HZ7nAwSM+-Oy=EYI|<)6s(<%xzq?lx$e)w6KBlCfjQfL z%q%TSq>?mIB_3mr>-m^*J-v-efOCij5BGksr-Uw|?x6HeeU1dQLGP6bUL{&? zBpJ*0v09}GlTn3}Bva*gNY>*@R;keFSkZt$qy*=7nHJW4mKK1?^;DvQGO5JTwCtD3>Bs*|<6 z)6ehh;J-bR1nC!^NkuRSygl`O+3*5?qvJUtL;jQG>Fm8M%MVK?mhn6=|Ym~6x zC75cOM+YoE!`)Gy3DB7hyPe4U^gdg2d^?7%d4+Tdyy=02eO3rVdwz4k)_C|j~m|O6Rq2~+Mop_eR(I1|_@c;;mU!%_D=Lovq^3&Ph)OTybwOoymadKISP`cJL z`)WO2X{Azk)DF5ko^&sm;qY5pTu8?kePX$hrx&Iz3hx&*d=b+hyDf_dW+-tsl2jwQ zw8d(Ib{n1C**%W?ITv?^Qm<1^Sh*Mq+KJuAcP&ktzU5X{5TEZFc$j1P0APXxN z^PH;r8Oz4W6oZ79qZd{uQ*va*C_9G@A-ab#%gaT=c>T2t^a$V?ow#N}4slX^S!33x zcJ}5S)i{~3I(J&KFQ(@YIVVP~atLyV7DEJ6v=anBQ)iahNl8~0%coskKSRR$KaXm? z@_LIWQ{gUc!E8)_4j+i^$Sp-G5>z=Dy24~8zp~paJKS#K6Z3}hNEt%P)sD7@8qBY< zf9~jnRNHANFus}>m`!`{-B$8YM8iYL*37}wL%D&=QcqPlal6`qVPm1dpb2|lV;v_E z7%cEdcn)?gDdd)WEV|*{p4e@D@v7av*{P7w)dz(-s+GxKsK;LA=e+ECmy$fSFP^UaJ;&zN`rXFp}Z90PB?P@8`;tJjP z?*7J5y`^WRZNy@ZB|33E!V3Ki5nTCZwvtwiYNmOX?9VH(f3NL~LBdi6_Itu|s57y) zGZ_=58pu_wo9z+CXl0R&W2)@s6zQO9kpNkUJcv@iXrrnlb-WlQD7Pm)v|;RfDqsn+ zN9%g8?0oy^GYK_-cpZ({)eU0Xn!XcT&2v>9tk`(J;A(9k95mTX7vJA0;uc!mrz64( zER*Bw)yc5MWHS~Qi&E(X$gLi+osQ=&2WgtVHTle3-IUQZ$L`|E%6Nn91tz+ME(Nb z3dD7B5C1Osc(8^4S9#Shh4WtCp+2HiHz#N=CwgE1fEMQ9__ke<;A@8H+MR9xfF*yj z*ONygz7z=tlobZXabG{@XVNsm1Rhu&#+3``YR!f@Rr1M>H>0z#umj*xliHZtXKt4))&2xo7d-^?3?TT;6dxAC#;nX-MXfi~gg6J4WSrlD-_9km&`BIovjB-@Vx{ zyexawd8T7-{=absv(uWe$UZsbx)pS*PWmy@IaGR-$rQ2ELhQN$7bLr$uP(sv71D6C zAafbR5l=1UoF_s}-wsu|w1a-N{^-;UU0N0IYC%h9j1uP>*MjQh*jw+|yUjrkRN`8yY)LW<5Ty@gibuygJ{W?Xjmp@;;}%fb?iReJSgsGe&C zy@0TLXYAH%2lJ|Wp1W2S-`k>B16?~dE*R(=1=kf#@HLv}ig$gbM>x+d`yer+hgpaB zA&*CL6&ka1=?+a-zqe55liNOxYPn{C(MR7;WMb&-WGYg9@>^)=q`Ko=?IqBAh>L${0`3D8rMM9jg)R8aNt{YM+H0)~xQP1FK>+bo^_ zS8;QX{RNc~!qd2ckm|Du*r*O$N%$SH67N3de75^$7VnhjE$x6

Ac$){>0U$(qa}F>e~+80_;|y#K?B*z}7Q(OY~7KR#PdK zF*wn&3H}T|;G;Qw(9%~UxKLT^A1}5}sLAubKyZFit>6_pfCg>0l%-dcU{m+VC>H&j z5E^P%YML%pKvBkB;CsiY@uE~tF8#`_9&hx(wTr)sE`>kbOWG*rc!ln`?@-vEspHTz)l!bRkWoXvY_Bg@YXzKdTRb}t>jq06j{d5KmP?_+MkL&p&1C|v9o zY+qh|dnXu<@lwRDC6S|ToA>#6HrKZ;Vb2Bk%q4yFHS*{j3x>F&8&(G#3LA*awwnlz z%qzbYV`=E6~~QLVWW5$zW40UlPC4<>{4N}2SX`Stj7;oBYdZ8=jOd+QHwhwnJG zGC&i}$Av1&1`~amYO80n#mLy!@kF9M-F)h7tG+{;D}u=o#lwd(neQpzN!p!lx$94+ zej3|MYuxk&S??=xqrG&AxZCZzHBr)qIEhtcA3^dtw??{F<^AAbgcy3jP*q_f)vPYV zoxeP3EC=(dW@I$sl)eD_(Z(3{3#?ZERnNnE7T)KR8`gJ6leh?M#R}P?UG%Ht;`DH| zYO`Uwa%So*7Mn)%=-7_0?0-=+a4&vfzAEH0|A8C1zAZ@5r-7$a#uQAJn=FrI&CqB7c9+}OU%RVgkbhk zJK}Pw>+D=4@tz|D5f*dvt{W{M*hmJNMr5we+Zb``fWSy9us9#;*2*}$vIdkzdM4yIIs;kTgv}~IXEQFMNXuF zkm~jo)lS9qb31vWXb`s~#O;%IB#{+RVV%Bjp(BjtK5t#jZrh%w^``oGJn;yG0Lh*? zN=C_NP-dKFRs}UEe8MF|_h2?d2zY;lZL1%^Y=cc^mOkgh# zB@L=LNrw6vZX85Dj(I%EeX}-=;~9?9D1;)yXix+5O1)i#ZrA#3gi0nMg;=*U_PW75 zl`O8M1+Gp

+#_oA~_X?QlfAk+xCVam<>*#-QTuWtWGdc<%w%NGI?;qFlId_f#jX zd(FAhPQecDkfzI0X6@`ABG$ETT<^QNIbM>{vU1-hdyhnMMxK9w9_HvERg>GNfn-3X zmd3Lg8B41C_S~%+ML)w{oJ@PyCB11u2JK=k9IcHU=c&k9&+@$^2sj+r=46mvq$A2T zeP8jv@I?RAN4(})lCGzULdz1O!uu!QuOP<^NS~clL$d}my^lDtkggtZi907Z&0iu1 zJ=$D6FF#?bwCS87OmD%2;zJzhu0JH6Ttlr=RL{E3yw3^58aps9;!V5Phq#?2RWBcY z&q?y3+(Gb%i@*o*@OluDU+RH4=KoBlPekHs7A;nRN_Nag7uzWZy3<$;93ZikXTx8&G(gIcGw( zXZ(ZOWj(9nfdF!H!%mke0)8Fw?9CGP$llvYX+d{zn35| zdBw%Kry{|?zg|7u4vgyR>fW||Ezfrp+(X_211cmBca3>>zj~*ENuPbyc1EpTmP|`a zOV7imr(Xn~F``5=|GP`RVuX|P%}0gn#U=wg_kn>qp6_fL@%g48 zb7gAZitV<#s;_0`;^!2T-Gg!Nl|E8>Zq9oJ1Fe!d#FYuu+PrZ2RXUOAssX0(eJ#wA zY|f@ac8_a?mL<4I)W70sc3N%@byyt{2P2NICve@wYQ>~q|cr)00|Ay-VTkzcA9W=LZO!gbf!xdORVnZ^y z+hn-ApajH{9|$=cdm4dwg%}wHqsWjAv8EG(&h%|1h}qmPC^x3bF5d(?#C%4a48VLm$>| zf&pp$XoWhbxoD$=uyA>bg!?MpmgJ0Y<D4c&~uc=e7uj@Ht<~`Sv$g z%?zeKx$N&uxt2J87X>)$@p%xqsNmi#4e$P9YRnC6*ZjxNR=zwaaa?7LW?x|6+v*QC zINImjs6-r<$3V0n|6~XJDd`BVx9GaUFebHZnqjt%8jYg5kr#-dJ}aoKc;8U=drg?K z>b4XMetwR61I6AeQ+U&}3fq~%8!X?#bq`BYTA1PNZf_ic2~naeU3hQUgu;BdAc?|b zKIGb}fUOHrqP-;h=;KSHQ+A6Y=9bZi$_kGA9eUy;;uA!uO>%yT@K|VO3&|=|TI6U| zr6fPP;8maC9+C#H0H-zM`T^(X?O}~;5!ZD6$q-h4+QXbw=QT-o$Vb(DFa>KT@-aUz znH6SvtcKQ?ZXA~A!?X&PsBNDF$;ZXG;8`uCx18i-JxQov8>HA|S0}tbsm|$<-N@Fa zD*EE8bY8=v<+))*I@}ve+|9mR!s)W43l*Y&iBM*Z5%pUn2; ziF$dmd#FX%*b1z>lGkA4n1z?Eot`2SF5=-MHZe9Gm7VJi%`&t_1$Q+3Bi^HM!wYn* zwZFbHW3bpm&AFszF?xJ-&<>_q-lKUO#}H00A4dk&* zc1DhY3JpHiyF0kOwzeaqnGaRjFTqd}Uo&rbPur?ojJbOFIp5cm#0nIZg^SaxT=d&R zht$+lMvHYV8;Q$0MFg4PE=6QW9jM6mZ9Q!*5tj5AVJOMrxl3mQBE^yprhNhp)NnRV zljM{2CG^)Pd-*c@dQy_dnZDmh){SK)h=zx9rPSRIgZB58<8R}-zmlbkoGE0$l4NE> z;rLslf|V`(#B7x~7>0-rVvh^!`kuu%bIK^;(HG+`?F*2i4AoUSnfp#$XI0;!$wy#zz49Mx~q~Ll{|MsS2gv@r^+Jekj|gUK2(@=Q0M=4#kd!>><@Gqc;IcQTey?y{ zHd5%gN>a1JTw{TbhzQoQGF;l=B_(uJR@XK20Q5M?3SaEWhggueWD5!b5IidtEkX2v zP#XZgHSRMbz5kU;fFqx3X`92m2E%UN?ap|OL;2WOFgI)N!+E^oy2o^95aHlpJ-0y< zhM4TSEfDgA<|(U7@%Wbw_{SKEGF5^YZWE0hnMnnQf((k`VdhgCR=v2Sg*nqraVV=| z(fWtR2M+3U9>jE>?6F!!6T9Cl+ZKD(H89}E`!dlFW>llOt?K6-YTE#m#G@{ulZRl& zZ7Fl?!{gl>(2z-Z)X;WR+dkHy|M+^I#!0BnOhNdw5bL?8L_x8YA0}?*!J?xXmTNyw zNv@r2J!=jkxBYMqlWYA}$66|ebkw~lLT1fJ-FkR#f{7HGqf8ZkdjF`;{PPOYI0Iu= zg4T0Jrx99|z_aCf_bSVMr`YdYS-%Moq`}tuJ{9gN2$X-_6}(!1h43c}DNyq(<;i<} zlAIkdZM3cEdBa@OEvo{Xtb~ywtZ8L;Br&DOZfL9U#l7rmhR0t0a{Q`!T>6w6kZ@o{12t} z*SsZ8f}Sm0>Q`vfwhI0c`AOpIo;_p*m5Ub=vtU>w{>(Y~%VHuwsjskW#6rhv)w5y# zva-#=iBzeN1Ec2JVX+0sGSNT)?4z2}6u@d~S$@e+k%}p|ydws!7Wk<;fX4dGZx~nU zte3MhY2)~W5W-O`I*edcH&J3YJ?NZs{Isn-c5p#SS=oXpKFZKj)&cs}%h&usE`I<0 zD(6of9)EtnU#`5SO_L}k=^tAeQ9@{4+<5Ye%_f?DiC0An>HF%Z=c>?K1JINfK*%I9 zM*s=L763fA0O$tutis?MoEfBAo!7JmNC!0UJ_dF;nG2ZU85jw!P&k#yxHrXTl@thd z0ur8YR3w6j!EE|1#eHyBR+mlLS7`H(F;hM}6Rx^ATsM(g{BI>rd>q}B_OH+HGLEjzUwrWJMmMR-}hvf?v?T_vynepAS7WY%wjKecjDDZoDflR&(m(eqGTQ`a5+ew-9kSxH>n z$*!Joo@ zKuQEkfVSHamU(~}6Zr~5l+D7c>e+QFh3-e97k|8iKcW@?+iwbX=a|!WY!*)xNF#+o z&SXuCB1F0VveaZS*%XXV&0(4J=U}enC&*S z+Bx1G=ZCTzu8-Y?a@XYxhqUxIYaClTI&e-%6o+gUgMZ@X|Lq|EAfLtC{fOWK1FC;KmP6|ReWW!z8s^uXr29MdsQ!EDJ z#NOaU0Teg}&CJ2=?a}o|-LVZHJ&!jnc^1Ecq5KtNmL(sZ8LJj6MlC~c$nA>p$gtAU z(YaX-Bnc+US6Cd#f>HkTLWf0?U|97PhI{wQ;tFfp8gThlSn79g^Dbx6pj|ZIwa;zx&i(3aUeW9_IHR&TZxPrS>(Ojz}!N|-Ud3cC%8fX~vJUK6Q zt1*a@S53qnrsHU`J7HvGgxaCugbJzL*FUwR$Eu`&LdYrHn=CO!=12}*ayee`(;clM;08%7a=-oUQ;w#fY8)gQVuIEvpwgVD5wGW&{7N@ZXB6$5~MDWSwPs_;M zxvCkt%av04?!YK{Gn(b8W82!ekGj1ykRAScEjcAc^hCykMjgV-R|hlpoy1caZ4E!6 z27Ah)ARV6QQRf`4ambZPJPyn1hNOh_?b;x#v9Pg9H8jnHbVBD>PTUrN+7qD{yxUdLy6F9*b4PnDk<3~fvtaDGB(&qvq!HMk z;)IKlnllMw-FiXo+Q7*}KI+4creogZjYUmmSYYnqWNJAm}Er=3T<>2^`nlQL@Yw(=c?YAl;j?=F&v6`xwV|nsZmUXOZkqIG1kTOvcE2&8ftT1V$n^n0 z+xGUOeKh+3eN3U%q{kHgXI?wOavf!JVzreIt;E^*dE2WbB4SyaU()$PH2JY+uJZ)(A%)h^*Cm=*NNbcp;NHR zVj9+<>q>F9Z5so8d!@>CZCn~=ssw#eT0Z@>k;{Jp!KvEFn&IOdACJ~8s`^!uj zA6i=+&a852ReZaoPw^^L$oCJ1J`ZS8=HM4}3m!aTsa*+soeWijmzI{I@k>14 zoKMLs;BMmc6$^g^{%ls@uL$P!Jn~5&_dJ2CiN!9fd>b6AE=7klV4I7fW#T;wzX02O z3+{d=Ghtt%_Rdwcbw}6P?97A^q2uonX+qqL-;`I4oiN~UTcyhQoYvp;6YXJ(>h(UjR1PG(vAv-4V z39ZIHIskS2BGM%QS8PLSKl5qDp?8SM4ybshWaxQ#+jfsw^eXv>Xa1oh0+#+SMJWT&p=t zDl0)#(w$VtaX6jLafNvFsPp~zC-CuLU@|^m8ZOOT)pp(g1dL5(6ocyBWUMcvI^q|n zbZi>u&}?;BTy9{R6|Df=a4MG3y0qR8%QV-7gvp$B51ayGaC(aM zB&wHl6gihfwa$ctE@42+Aa@@XL9Tu__WQ|d=YV>7;|aDDHC5Xo?#FS@N*!uW4~>MF zjoz@sqx1+{WBjq4 zYiEM4WT5n#Av9pvRmQ&LDc;uX$?OR>pOZ}*e%N{scEs_Xe^MmSnIXN`(}E% zpPGSEinm7%B2_506v1Q*q2t}uj`#x?=b%RiibszFYee_AS8wothPaURonVuyn!eZq zTCW8dhT;PJ@7l_Tg39aM#vNu(Ey<`Mm2}O1;55%wFJ!dR1j|I81_1_+ikTR{t^yrY zT03@k+27AkHj%y7Cy>NWb}MY;08i+iUp)wMk--fe@JG394_7NE-^4=Uknts(T+25# z06wx!UDus%bDA^)+1!p$jD$=U0Iat*{u4`gR~G!0LU8{5h%S zcq(wsmb=R*?V0PRYfv4N>^JBqs40T!>rJ+_-81h!EfUUG3MZhl9wQzUG}qC(h%M8IM9P zCdAuyxnz9H4hX>6JKP-Z1IYC4_5UAj-yPR<_HFB^hyx-Pic&43hzO{3kYZO5QF<=| z(m{F+5gkCfQl%@s_g-!EUIU>-dI=DEfDm{)bAR_YI(OcCzq#Z5qkI%da=z#6v-jF- zt$p#W(egOE$Fp3R2B=b`5CT|#h}=V=mLsp%x@4L@>&TO^e%}+8N%|NPqPMey7l}v7 zKa17)pq9`9!TU4`=FrIk0Av}GxmOwoahKZbP*(~DT7%H}`(<~tt$gGI zFYOHn0F~j~O4Z&YyD)6sR(T*klv8bX#9K~(@oPLMKI=wpH>@l%aoUzIOyPn`f*Zvh zM&VV#{wh&%Sz1?nK_;i?11nZgDpRe!31Sg-sz2??bZl5HA?rOxVH)+t3mK-8KO6!x zsur!vY-TR;JgqnbaJFff{ixUH@uW!epS7x&Y9p!UqaG&1;70T#dZEYfgOX#-iKUOs z7OHnO!2->PSD-RoqU_CCZn`xgA5LhKoQBzSNWqe;MPgQvlY9P(^Py1BFaoQmHv!^1 zx5Ty=;}^>*3gz5F$jC&DdAsNOt@WDUS^}PaVj(%E#i%RhXYu1bR0YpQsI34!zZEN_ zza4;lAbH}v{fD0jksgJFhq6?~rVT-qTqW&S@8M#c7eXnyD?aeXq&>pij25;%Mw>uS zxRmm)9dhgZx%f|n)@v)KO(un@E~8#`w-K2B5Xh$#sTnFIyA1?ngGT_`A=Rk?^5Mf4 zr4w|b*H#=q$NrpjhmQ85&0~Z?^~UIGPP%bil@h#?5fs_+mz?AkZK26Gr=p>pFuzCr zKS>b215W=e;V|8QW5h|Ci652vhaO=cB^eZerpjwD(S~Y@%JEor=td#`INA<12&Xp` z=G4cbAC;msoriLMg-V7usxD@Hf_TXw7Lmm+FH`vVqYg~C`m`KTwqRFIHR6%>knB!> z2+Z1IyfOG>VCdOr>1D{8Z>P(jK*8P`uihofQ}1!UteSn8t9rXF?neJyBLRnmPRNOU zWAbXWRW<;BPV1-*%$Iqfsv)!N)3mrmKiL+`?a9o4foVC(U*Yjn3{sq%$yg!!4aG&c z^w^UK?_U(`tS0-6W3#J^hK#pYZ2I-X(8JWRZONVzF$`3KKFqu)4mH-$YhA3~UY0T~ z9C6s*Q2Xt}_BSK?FZAS#Q0R5L+_ALMRzclgN5U!h?;Rml?QAvoC3)zkKmP>CfSi1Zj*(I7 z`%DUIrfUwb=2gwh=huHFFkk+<=d*+J@-6p{a};j!I=)lU_HL);Win+>4m(b1EYBqO zjv&+gnkF8c&`d!qhp3sCN>guEa5JPOqc5yba-Cp@5sY~XVTMD{E%;H^EGYs%asCqV zD_ArMJUZ~b+KRzV!p=_Z^F{fCY8s6sunGoy9|V<}h9v1~RSnB!OvCw}%&u3nsMK+2 ziC8OYjuuga;qfP2qis69eh#Cja3Alun|xclybdjU&!qJdrQf^ycp2zzyf4B0Hk^K@Ra-j9pgO!X>ie0J%Dcq{E^I&0*MlP}i# zme$%`T&r{#aX)L8olXgekt%iQr6MyPt8w=tR0h|z&GD|~+4O7`4GI)-EgN~9R?kpL z*ml;?-plESq+z{#ow8yyfsbpWj(>{nTGk|fG|K{fUt;4 z{E~gnHPiNF`TMQ)nJzUFYWUd%vH?uli*R6n_k1(WcZ6cS>GG5gUiX!9*wXW3&?m2!h?fZ%x=r#YjrPQ*;K*=Fzsx-EuMmngQyMezLQR zrKjap3TpcVq4li0yZf8>Cd4XRlhHjWC_9JkOl@PkSMj}*q10(+nNpi-%J&CBzHlDJvZqB?9TrMop&0WJ&j>Bz-bnSGi zufgQeo}>waeZRh8m8R;VOGyIY>8c!IrpI?XxPDm7bwqdUclK4HK{7qXL+q zmvzp&7Dnfl#n~C1MbL?EO=Bd>SLR)b`>_*OST9IvuXmg|d*=|hF+Klev!jsgLD`#)%M(rUfHvvN zNfBVy8&mup#EA+;hwFs(`7x#Hva57l>Tf9}8N^+0Ky2A?zz^9|CikdtQ!R5uMeY3* z<1pIrDJyMlmrxx!W*sZ?e$)Y=5RP>L&sLj&<7{FYQ;%nPoR(_9LicvxXHi`M1RGK75JMvL(Cb&%l@0`k^+B-0+hdjXdgg;Ekaov~jw(T%_=J zK5}>VIs%VDB5Qbp?UGJa;Kj)ggdUzim*c9`23-kS7yU!*lG;m?F0?_`65W*WuCON^ zC4cA;Vyy=?TftA2^q~&;UOgh&SB`fY477^iXjln-IfB#gUOtIMteY>3GFZoyP1?tE>t8uLG+|4yxFUO<>0Q`c*5i~J?-69 z)b|7ikqCcd%>2Lb%*UR26x5&@O)S0t(Fq$jt@^FgI4_SIoT*#M52KfpXQ3RafP8p! zy*48upC;6%x1|(YxqfqS)5S@@} zp|OH(KaH_1;P+E3Mx<8Mll3{FH=jOamCd3y3omj$QaYloF=Co%0-<~*QDf5%noKKe zlZwE}*t(e#(U@`?FZS%~hqNxcLCd-lT-B079iwo2x>B~sLk)`+28KI=_6rp!_)Ytq zMDC7!8Y)+!_Dtt?$$b_b&SUU&-w}>#{{gdNjgjuOHJZG2$mbQ9Et(~6zUWQMEPhhs zZG3ZcXI0>3hLq6syM5NDEoN*NFi6j7bfH?!>uTG6U4#aVcEk#|2|F&2AFv=UlvAdA z+)HY6_t=lE1f-q{ZPA<2PZeQs?0;oq{@=&wUF!a;kAsM8$9s^*RjGD)hrj!6rkCA{ zhn>VPW!il%yMZ>IGEJH4%ny#Sy&0{miwk;@&?-hqhk3=ZUch+?Wj271%ZW9a^`9@o zMrx7JJHJ@s9Q~%<&5O*!Hm{(6_(iE|dBS09hD~?$3)^VAmT38CB71$BDy(=|I#tM8 zwq~U;{j?JQ;`O_@VMg)h%+7wu?|YNpGWh- z&^@0~clsR`lqMlk5H1DX@%p2s+NJzvs>N>!nH&eL;e7O?az}8OvKwOLho&*7g4`+T z`3;AYc6N-9y!czgsXp8}dL*Oxai5vw^Z$Mf&-b{koxN<(8Wrbmk2Xq(7xWyr#8U5HpMpK9X#$O*w` z5*@;oP72gp5m$7db_{MYtW0sI2elDAemdqmTb}4~AiJmdp~e_A zRntry@|jKG2-G;sj2K!}YcP4MT8@%O1H6t;`wT#Gws2ADp}BHg-54Z<{!qW36Shrb zdD?gE+SVFYY3(hpV&!2^uH?S_r!86C(O7I(vP{pFecyV^|K(`m7JBN@%E!}W*ur0x znofQjciJV~pr4*=I0=(Xz0r*MkDWq0^Ua&{5#5zgbEI1~vM1AuJ`|bvvE{N~ZeTO` z9Fs;Kkf~mp)`~@;zE%?libprb#0OHIXLshW&JPIG22_hUt!`W%G@0oJ8MI$5JqMrpSXzr3?rV4MjJC#3%&Wx(DF>_-K8!3YD%-M zYnjTqakG7smjNY9DcOM@U${91{0@BD@Ez!0r28u{Ob=H&8Db$t;n0W+_*zQ@oy*FsdZ-xeK%=`U&hVrcq~`h(mv{I?@}tSFeVzXi(+f94cr|fd?aV} z-CUs$)^Hth7k@>`eXTk}+_u1|OW1XLjI}nbdYhZJ4&yjAf8z2xWKC|EX2da*-i%bi z-o@4j4?PV@^9)A^orD9`?yBLSKYCWMz{>Q?WaI?$LmdD^>hl7r8`@8GzElybQM9&m9*jk-Ys1s|HD7TvzZ`5ac%> zM-z9otl0&{EcI}NMMn7;@JO_516mxlp%K#msD+c`*j#QM%Mzqh3QQdHOkyq$MoLx0 zUNwseY^0ig6Q@Wmq^2w;k9h2QAqrLm?fI%?&Ui1y;xIS_nBV(_5@s@ zBXuXw1~rVoY?po3ALH!r%@%8_tSz@>ERB*hxNzvPl)(doA^9cWRYMa!&CsmkhU^V`RwhN*VLWnypxvQ@1_TU!UfoaVZp$mdu+ zne7aH8Tc;3_4TL#`opc99#o8U1E%@X(CUr6V$wU8W?ejFH;|^AxDUuY-in#3A$C(} zNap-VBvx43x!z1CL9LNN#Cm^uPN^o=_T<`Z&$DK*J|g*vK? z$PbXGEAc6FBku6?DqGaQj!tJ8FGOjk3m2tQyG(FsHF(S_?26oiDv=2?DRCch;!NnE zfn4fcie3|Q{f{rmZtqHSU(=#6n(xmy;5wC)Q>}`C8zq&$;QCIvtgZFm3?=7}rZi;9 z9uGmDsl3mhbMU*vW@_lB-xOL?VrfrnMksBIe$+jD!mpDjfhQ^7ym5kn5wD(|@9FOT z(&oC}ws00e@B)^dD@u!J_4>9sgs{l<+8aPx84|%?u~Z$0|<_WKfU*^?}^8@ z8L8y6S7-Zjb)$83+zmFH4Swr`aQ=36eb^`dc&TirE1jH&#irfOy(v{7_rvxkPF}7$ScAcbVkmH5_2~u- zHP!BJPpLI-8H@OfuJ@shE8AeA^Q)21_!N81`CnD;rrIG*9Gx>`xipc-8 zHHr?d%m>>e)B;o4v5-*6Q_eC#$SJVEh=~_xNrFMT^$3EB>Q079W{dt@R{4(Vnj*Ex zT>CUCTdQXY?FPx~Ij7ZW&4EkK!%SjoP3BuK{UNrdp&xBGRY%c6{+T5lb6}QYGJWOK z+O>^Ol-!C#Bk<>|RYwJ_&7SP63}OAH(Q^u)52S1AeY51>?fCyJrnNWk@01Bc-8w(J z+tBpX?pfV;lOWy7$QG&yF>kLqT6H93BZ*OQb~hQr)UAvXBq~?$tp&)+_9^MyH;^(I zWNL(UvalVVltFHZ>yJUZ-H(itE_f~3pH$FO^rmGea4q4*#>m(jm*w-S1jQ{ehFsh9%o^9nSuZJJL@la%^!Hv!o@22Po=ksxEfskCrXOX z11t_-KYn^2w*_E!Amu8@>?Nb^>Ro)$Gz7-`IL{W2?26gXwd93mHws)go6279!Wo|-?&Xvfu5hJQL}0z&04JP15Jiq8V$;(Ph@B@ynr~@DUn2!x^=BV9 z6{ae7wg%q{SZMYvNh98=UKmFgnqX~bKv)puVYEKmQ{GULU9}aFW|H{2hIMCAJl#Lp z4HO1v4hw4UrdcnP8mw&KEEV?rt$6t1{OLzQ*u}O=L+|Q3$ zg#V%N%$GowHK1j0Qp1&d);d7m!t}ngKQo~ru1T^@k+;N)52$8K07ucM5BEI(i8!|S zxh~WXl7|vfdFI1ac8cCbX@Cpy@Fxv`prvg978j70lRGZzyzWcHW4No=d&-O?50+dB)Zt%?I0^O-y>3BEv>9a_h-l z88&NENTbZg3qs8+S& zPbr4eITn|wksD*4K?0xApWJbZ71-5qs3r-DOj6OLYuA&dOuW-TU$+s`cnw=8XoPXN zW+_&_^LK-P;Do57U|S0#@5B2{vPC)kN!82F6mqA0RM~8*4XJ70Za9Cf?b{sVf0Jdm zr=4T!{4T+kcxSn{c+kp(M98~MuL1On+^Lv&@2y^gv-2VAmoCjbm@$o%1A=~buVXpT z8t?aS$ha==K3SXP(6^u`yvf314x0#3F?KKsPOlm!n8fmeE*on~E z-I{f&EC{?Y#p1G9wNZz>CR%JTvhg#U3qSoW1;$||K}9v>YDaaCqHbrx{VTe)zAohj zfiH-irQBuHpHA=@%X1xEe0}q<7t}{$_zTfmeN|htCKQpIThaEzA=yf438&KF1^F43 z?PazxyF+iO_PSgIs4=xQ=Yu4cS3wJLhrNCgiWx5-?j8JK_85(mAY2|x0~pQYW3@w% z4Zfn0L==*inTJdaQ2xQVs!w+)TAdd^60C8_=pCBS;x;kox?g{`N1dz?fGT~?+1_?u zKSpXlu%XG%iPp4mBR8ciF^I7-)}4`*>49RIL(IazR4s>a8|)Kio49e=#{k(!(tK=> z(ns1$pa)BPFkL9E-GPnOWbw7r%0<19DX3%MlrXY0<>f*Raa#d{Wlz8@)v@}q5~r(2 z3%VXQh_YIK8SxuBBfe{2U4BI?TYi&>+vUcqJcHKYq?mXY63JaUE}j=_a{Mfrhaw02 zhAp~aRwtk*t4ro@T@Hrkd&39au687qGB-PZ8$Tr88SMwUX{X@g2bo(G8>yUO8tW^9 z085W1hH0kFt8%vi$YYX74gDavwwpRHhaxwG!g^H5!K3|j=S44owlC(bHW zw+2)b*9Vp=aR~9974fE&D2B0zNAu*W*- zYY{+6eE17xIsUb9K?G7+TsrKR9_KpH z#jJRUP(2;dn$#AiwLNOEG{(An8C!5o zwb+~%DklwtEc; z+&0vD!OrqgkKXf;X#oJzNWrMv(R~WQlR<` zmD9z;T;(GkjANh>NVB_NC5~{zw72JTBW9X%0WRAvBykm!Z&N%>Pfs{i`7pYuSxi`g z>PdQ~m^&YWh{dFsO~%T#58tLIp2BFNB!#Uh;?fm?s!osGY+~;5z|O~tA)KPKRVpc6 ze*Ib6Eciw>Y^ zrGfNY8e`+_vEsCgUJWm`ndua6!@zxYPbW$GXj&M5*-C5q>|pk@XCI!sxwqUwiQ`L; z>&~MK{i?FiWSE_G`^Z&rq+*m?Tnr9%bM*FKfsyvw*3~6DluUqp`XNE*Rwei_Z{Le=+L?|k#1-I9)N?BKay0j?BhTAHgXe$pNz%H_Ho#99Lo%tglR?6Vp{S<)uH z%pygmPH3L_p};1f=%ukBd(wJH)ie;Rf~k1QQVT>d=1?d^InAgryQt&wL)$6OP#8?p^Bz0gCp1Q{d0o{zdi4@AhZCas+? zXv^Guf-W$kDl;GblB^4Y2R~q~T+l=!%qvmQ^Kt;r8L8#Oept-G=9eaqP?}#tUMzD} zERrvwO|lg#FOd<6(|5(a0uZM7w*U*7Yod!~RmyDcKepGvy#%cteT$jl7_e}?-`^DP z)s8PPzsex$^ngn+eVv6N52G6(8iN!i)z=>Cft1Gx6WrO2?)(oU*iAwv}g#NHIZjbU$44{ZW>_iLex?eXP|ksmhC%;eDJ_dmc@-M#ss-4(9@zUIR!rDcrpR?wEq| zIl{zKeu-(gMY+vOMryssgi+F93!#zs(=*nlO+2ppCRcO1bR_>0pq~1l=acH7_rbva z+(bhX1a+ezTBtveMdb%ZY+2tkRs2kvKJp2tSulAHxL;xmUY)VfF3$%0uPNaNWj9r@Efq$ zmEuZCzhV-hRxPo`R{>R_{ytjITX{Hux)!cL4`eXg{eI9+3?iBhRsH%TN!5z3fs{9r zP%#H>h=e^Yt0u(MrWg!-LtS6hpmtYZkPgaD9 z+nnWqyveT;Kg@y0Os-ZLL1Qxk|Jxm*lRUGM`Q9zuZxC(scVdsWC}n+sq2RN~b7px$ zKCc#rCbk-9mWoh07LSj9>eBPkkw&Ski=vO{2f<-=XYoAe;O z^HutTbAL4@`1cEa`-L&t_}y;F?%lzsmi)@uN#|92#Cr~X_Zj@iSKq$Yzt_dhmae{AFVCdl zSVnPcAlvIHglJvWCL68<3g^*NE$54>VC-3}-!^Al{Qb1l5r@bb^lo&EwxTZBTi}#`EaDJN7^7W4KYBeG~+N z?&wd_4{X@x9JJD2hw)25ANg)dyEuO{xm09ep z^7BV0X#?YP|I7z?zL$@W?@cPa24nl6;y3Z?#|4k};Jx8+od&I;c_$)z|DmN~lsvWa z@eUk{;1b0DSjQjnvEJP$Gd3R9%2Ei*GQRSUJd0B~ANR}VX`YARefb&V-@}LhFH0cN zMWH8~6$5iVZx=HB?eq0#%L;5o(-h6_gS`XV!~Flqvvy0Ot52HMmr764>~;FHxA6CO zuJ%n*031p>k2ZbPGWWO`Oq}MQ00SYHxV|sW9w*iTHq+3^b|$g4>_-5k8YMxjn=2Uq zQfsXMkZIC(B}w~$)njjE&f|Y#ub6(?3&U6|>pieP_YS<`Ugj!4R;0E7YWnP&o76+BZDJxzXS1hn{1XdQaL+9Q_?@SO?RP0QtyPOW(9EmPOjheplxK4I zdYV=#TyUwuVK%ic4)(NV?MVZ=mT)2KJIxV%XYT~C1mR>pIv+nj$P8ptugCH0UT@Cg zn*$OhDHcQ~-?qUwh>iilMwYiImvM##nt1f=zL{nN{JBqC(8|CMuh9hrtKvy@>*VS7 zO6P!$W`l>mJ4EvF8*3ot3x}4Fd85bN&wVB=*{|jP{?YzEU*o5DdvI%A3rO&rYhtr0 zW20lNm~7Lqh9I_@jV1dU;5J+9hTK>KvO0Zf?kDX^wENSx7}}Yo#n1S<_n!WKaNaVR z8%2{(RRca&XI4ziO+o7NKNK9H%pEXy=G{05h5)`KRvQQh80C_yg3D18O=JsvC!UEu z++Ix%@cL=rfl0f2*S*f(@%0YpfzF!u-_mLPc}O=EgtC9GI#a}U)@sCKz-9$)G}k9n z1CW=pT^Fd-S)UA+4CpS6)|BP~2C4sfNlb+oM~y7GLU&2|H8zsZ#L1VbRLS*POLl5% z!+~(=w#+4PDyogU?ek>1U1Ql=Hc_j3KAvQLgV^eh+wto;A?BiITDitgH7rI}R0zUF z8z4+{iYDiLxc<`4n-nMADKW)Hi%-t;r+zRHca~icRW31{YSn ze!zTy!(VKR=eAVxhjNpwP5tH=(exDL*ALgX#(NNqRLbs*89*o z*aMrGpTNUcm-n!fd-qjuPvpZxwOecDdp|?Avm7Q~2TJ)B%4GcDK5E~# zVuk-pj`3G2jc+~#X;n-Qx|wEa7Ioi>q{{7|EUG(tmx&hA)7!;}F~4d*$CXLCwZz)# zj+zk%cnq&rQ{=&vPecUy!1Y3p)INMCi%~Xkg7TMFI#oKuvq~o$U9_xIG5{WjUQIb| zKquheea7iA9od-mT#PGuEx`72{1%?fTXiQ5wx!hV`geoFE#T7cA7oYynrs=7f- z@Mz(&;ANdp8tyG|PDZaZ86KDfhZZQI^K%k-67vg#18?9pk;Fpqw5zT`?&6WP0Z13i z-?m&GL}tQVzJ*G){~Gt}h73O-=~48k?RMM!X>I>E9^H`?kQ8~Pq^2ItP^y_aYtQ=Z z!}Z&!hcVaKf$z`}S7q!6f}C4U-3su?$_*X9e)xEM9(@P8d>YC?VH4~f#FC^75EI3{ zfi6@umjb|ZZbzXBD$kYq$FKWAQ}o{Ol!jq#$nem`r8+qCFb$8}Ku+-CXBOYdinG(v zU7gN#Z+Uz9Jy4Fk$owEq(-wHA8{r`0x7a7;C-PJ+ej0btl1j_aDCak?SVB)j=LE=e z4>#kBje9O07T-=OnMuMfBdAj6@|xZWy5(X;#!S zjPHH3HH@&=S+AO^vu>026|#ORV3^q&UH+wt!16k_T(2R}VPk}_GXJUZw5Kn4Ar4HI z1KUx3-L-cT-GBi4XG^IKZul&i?H&iC-TLUW?l-gGh#@s}FV3*s1vx^|uoHF~bQKGo zaA0dVvYT78MA;@=oJElywHYQ{KRWtJtQ-TLf9kJ>c7Zh zswSrQbsXdG1~h0Xq8N;DHXd)zieFO_)|H~_O|P6`w5Z?$y2B?!@I5qB;<|hplM)~J zVjR@5IekF8)Aivjx)9k9A)~ZPFX|Jn)~}qC{;3jwZUU*#-*TYTuMwZLr-CL!z_?q? zaxOR4Dlo#ZJVU+tgt_=a(TCwj^TG)ZnmMEdKo$;p=ZHC`_(vgSJW<7TD zAQd$>y`k!0ICzXbDl;d+8HlQNpR)3tC^AK+qAY6Pd%EU5Nzt4kBi((#`IoZ%a`bM< z;huqqLQZuognq$=lD1IySz67CAv>a#GceF*?H5Yvu;Z3OFo&joVX5sv{sH zRj^%y#7&7g-9o!J!-H%w(YEtsr;4!@1&5S@+029&8w+Q-d*wR1I3v3#UboJFY2E@U zUey0|0G)L}oD`{-fF3gZb<=26QEkl^l$goaQFA#rcTZe-k`2N)7es^mBlh%6C zD_t8YkEvF;)D1~>5ZDA|hE(l=ks`pBjX-2G?@ zr5N`eICOC~;_?VYb~*k|6$nw0+krC~+!dFFFy>w%H9quppWG?q)QT52$DrHJrp28Z zWz%W&8xeZJVIm}ql$ZtpU-2xXF^V6IKg*#%d9!iyFk_L)Ay%=AF^-d|d3+ab6QD%6 zYS22jLBPcN%ycDB?wyb|9D)GceRwJcj8%S()2;=RB2MR)l`Cdwsg5$+fj*!i>H-tT zM={eo|1xPamYZ)nXC@^n0Kr9^HdCd1BtwN~3}~CLY_bYXlw%YuUHq&wKga>_BtsR7{!G&g+W=V>dPW}Ui=Y5XBg|oyTDc$r9nPk zF4Y#nYN!)(k|(LI{*CjbO!VH~iy-I8gnCG@GD=~l5%Y%6?e`Hxpnn|BfkbM6Wy;{wO!-60)GDX zo4N8N^)R@1RxY(zxN-^OwrxF_>As(w`%x>|xxKo)T zPS!5Ey+|Z!aebf+zQ_QgH<>S5J62MUwdD8~O2&HUs;Fr=!(LFblBm{=O08bt4nI{F z*tSp};0wMNmoQ3dCxxtVd3!$oe0;%wY0T&IMT~>4=AccNEs1JWd-SeL+4^$SRA27h zS|~QzG08tZz{u{u`ljIkw$PZp&TL_7t|Q){<0!ld^T*D*{E}_5PQ8APMYjFUBcI4_ zhgsy__KdSL1G#~?f?A8X_;USC{r66VFTI zU2&J>v+XX4COd29=~?P1bJb!NbtgtOO0w)2kXc48DN;&?cH+R7yw+HKQ`T7kj`8mf*T6TjW zwcrpQ7n*X(PtnjC^W|yHu#oIof{q(bsaxK_2ZhSNi3Gz8#a|DF(7SO<++BM`~dQO~%>&D-BG z`%ET$s4Qy)PQ9qec6c27P&xjU(%hqp`&sj)BSV88_XW19qA06fHaqi10C%BXo3F%I z-Jb8>XtBt;NP*#qT)bWfXOA}E+Ol@XvoJ1=C+V4DhnzVWE*U0hSAhXr;=AOEEjYJf zwpFX0<9St|{NV<;ty-P~%9z|76~)*qx=s%wR@GIIi2%6io4YEbi@6VH5}u96qcj~8 z&BM?kQ>~oq_eY+GNG3Xh>`*%~b+Zcen!i4(yyp3X(20MC*LO9P2YXGHxJM?P_o}+wJ^A=z^UdB3 zO_wG2w^t`>z?xdRL!IhJgVS!I?2kZs^@doi|I5e1J!4>Ka0gVwD{MqiV$!TkwzL#W zaTr8dK0U-Fcmaa|BaQk4$d>wIY+3@gbFJ{4Mp#z1B4p^yQ&B4|+s}ltNsmCM_}GRK z>I-h;WRkkwXKUCYUgy1eA$=mBoVJ#Z;S>DA8acK{vpP2xAV3<3#lm-dPlOcqS?RK} z74J5NOk{VJvCP2@hwCJfj-{JZNfeYmvX0(dOK2eDA8 z8~^wQSs169V!<8H!!&Ea$EQZYKyDZDoN#Aq;$&g)~HI!v+L?s4P+$PvbX#; z1zKt(I5}#$W}`D~hmVB2J7r&S`{DVhBSnI8B|d&FVro-$Fm`M@&eF( z`^IIt?en=g>U{u}`*4Q%R#PY(BGs$|zd)*ZxvJW~HWEYKbRnWuu0< zbyVzdBc~oNO&JRI>xi$T<5XhkRN{SW_M6v6;)>c0XAFY+g2*I@HJ+(pMr(Y$_ijMK zK9DD5Yil#xU3$sJ43ZC9jm}H8hlR#-NOgO^N{r*vC&22JgN0oso!tHnPzh`GqB@01 zZ5C>A7v#d5y({36!FtnUE)a3Z4;-??h8|KFg3nTXo{mc~Ab&qP4LD-Bu$Ntt`>b+y zs%8=tBDc>2NK2#gmJ`T}(yKV}Q%~Et4iBamVV?i=GL5Qd05YC}H0%GW+=O+7O{BQs zqXiJx3AZ{pFR2w>0*tQ*@Id8)>B_jvg*0)!Z^3`pv3>9b8IJdJC?w-X6$Au*7Ev*B^Uzj0qftg@B0jWztGlT-xGZ~iF%kZzI z@c;kyQuUTNADOOnJX5vNGLj&q1W6Z6=ej67nev!GQ%K1;R)EF-3_L`oKYEYKPVcVW;9&K*}8JT#%5 zJaqnicqiyEk815qr0XYvB*ouy%sky;n=RHQBV(6ROOO*Do>s3G`ifz@KS=@XU50VO zwkTIPSU%RWHUR-z=G;BVX4&E52MM(_sr8aL)KUi92YceGo*@%r)nJqnBPdXXuVm%D zaLQt~o4#qmgoJEiyMBBmA0*35b?Wa-DrL<-7mahLKVJuql60h-mQ}=kLIX+U1KEat zZ^lUys`)9)2^)Wx-V-PN_L)+TiR8AmYESMz1bY)>(^CE9yfMtP&lb91I|7h5gYH~JT>wBFQh z3|_umiuPiEx6sT}O~=QFLtgG)7r;+JoAC?iG9KGBLp>tEf><4itLm(66`|&sZPdG( z3*xdkvF|bfUN$$V9BNJ)xLjEWmokT`=*@l{-!>Q69Cb(e_nEfB+#viMszl2R1Ozo8 z1{%$4;tBv&4{zj((D!y1e>`hgr4P95EG@0{@5>QjI~a0-u2RTVMh6jXgvcD|#!+Fv zCx^Jz0$t%aUx#FlrfxgKRs4I;g@EG^1=+=IL99T6Dg9tAL5r#Ouj)FfC_FuYRZH{& zw|f&G?&RVTFxO>;&uD~Q4n0GMl43=n5YkPJGDZsnS8?W%Ht;p25aY?Sy)vY71y zkUQjzRwh}jG9y-(az7s?uB^x<%AU~a*#FI=u|1fOt@N8U8c!#Rk))ES$(4Se53TYy zJ4ibnl{~%sAW_ZBk*fT8KY-)!NkU-P#5Uy4uNwioCBI}8xl zyj%XuodB_4c9vLW0>Ck0`t7yS1sv<*H%x(d6BG&6yy<|a=?mm&Umv?!)P*XY!47rG z&SQs+ox?P>1|A~&yCC=&NBTKEtPViKs^pn;;=(dDE6Xyp{?G_CWZyf3-y}&W2+nZ` z>i|BJUcKGCmC_{`XI1yb>$vV@vx;9CZFM#J0$0$tHcS%QJoG8+gy9(j1$u7H?Kie* zL>7D1oJIUfWLNC2*)*OeZD@d`JewgfNUJb7B^4Ox?zkXzd(9dNxpd#-@yfA4EKw#A zODcEeYO&VIEvEAZvC(gdFPYDtB`fX;)%6z=8+NfaZ;sK}_7n!AjmIMAcELedH($ph z! zLbAkWL2g^*;)hv(L!RPwF$jDB2-;8MTPpcX6v2oLp(cfL&b-rXfU)}z*|Ww_E7fbg&Kz`{GIN)<{XH4-JLUjZGgc#C zd$=UsW+BL?^AA2D;0LYc*G=*;VbS8mM>l6s3Hm`cypms`Wy3|$lU}(Yg4rz6u2l7< zj^Qq!o6^_9C%&%iMt*f84{PrIhLWu@CD>8b z?}X0@Pxs&P;5T zvgM>vGEsNX8HXs%om`$mGOmcaLu=A!6mGNBxnXF|7F&KKqYqs}cKg>xrJ`eTBxNv@ zRlUybyN1nWx9N?)kB=~I8XOBJXA8X*TZmDdOD^mQ9Ei^;IW9XZ$&)WCDG0I%Xl?tH z$$q_&conV{fK9II+;H5ZML{j)OdDzwI?2EkdZS&E)!iUlUIxEHz+i$AgGV4fWb!6v z;ED!zPJpA3l?svqFQsDwT@?wJ(c|QGUq6Z{9O_{dSm5q|R3@a45E7CVFagu68N2Z^p4973iZ_1N0m17VCtZNI>u>t2_dSGT42ukxjL|^ zY&F^rZA8m$0qVzfXR>`4{mrtX;a*L3z`~zdec3_3*D!970HXx7=nyLaK1p!3VFXTvv@}cno{al^Go_6G>`gI zt5(rv*T;SHn;~FCq>>!NMyJGgF>_kCc2INFwyd%iDVk+|TpDFxAZY7dTl#_-h25_h zZ9j=u!j510gXFhy{{n~=^QyYvxLOdvLo7?M_jT)Pp-W<*E7yh_IZHD&Uzqsrz*`)< zJb_4nIla48t~*Z|Rg9X$!AXz6m~VbIz*PAA*wweOm+!Q)1)_q&qT&iSi8}=x2=R8y zt(jdWB7uJQ0|96cBfq6!)9CIKqGcr(lg%fA6>$!@8~1+OB{oT+nu^()%n(>kif?t) zkSuU`XYD!#&@h?>nTHbXPr=H*!hqLMG*OKUXVz`Y=)4TQ&QVYC3PGswGC$tE|M4aG zRzNeQ#b^}z@b|e+W#<|=K?`*hZGs%?Yij-%xdl$)YkEO!2C@Z}t^i?E!z@K*HP&Ht zDqlWD7?vD zbKK*WJQ{rF6rauGQxeCPCmC^BYOSVrLDKiWB4eC+R-%Dqv2BOIFSLf^67bfJ+Z&d0 z_EvMs+RKi*H(z|~;Q#!C%CQu=bblDcYEzKid>Sp&}{^vG7( z4rA^8Q|i|xEzI3Oo~z1ne&f7u*RS>n!Z4?jdPn_G^A3TC&qu7oa1c&F^_IWb3^;3X zRP7Gq-#gFC5!PkWl6Bj2^*jTEgK3s8uim|am=-;)lO2883}$m(HSN>h91mi*8m}LD zO<1znSgMm7pD(`Kus*LwOm|sd+n(ij*^tZA`OGb5o5U==HKlQ*w0C^GU9^HAW<7~v zJ;dj_wQ7VjZUdL*WWDYb)c91alF&{{s^6NbIMJpo+Tl^a5?93QcKPkPh3-}xQ`x}m zkW|0gz(AL}z`#+LD1Wu%<3`7BNnbpXF-=`jZjZ~$wx8|x`WPYW`TOJriHN-bB;3oF zHZ}F-H6AC3UT%4rmvi0g*tuVXg@wN=a7?9nmWy ze&M;N{_u2I8+?11(=mYi#Foun-4z(b(714&39|e5epo%w#rcQ*aQfrH}B|X2B&$-ReGVxCmZN#4>89C+_F9!9*EgNz}h4 z%nyZfX4`tsSF088aBX$U=IOB;^~|cKYF2tw;)tx^cYcidrX734mrEkQTpg%FM24v2 zqzQEu8yk7O`=bK`xwU*l22ZITX6j=j;Bi6V{<)Fi@FsL*DprOb;V!qzw15|k8sq(_ zopO$E&G$j9SObe182cpN@{*0C9#=Nv(+AuzPq&UA8$qq?h2OdVuGp1W_PVyfa?Ij% zVV7mn6vLVzaeI~{D(?P~wZx!o$&ibj`i;SbfzosZ*(%6EQHN*Mrs&nk4YnJHrkDzD z|NhuMaK1afHa7ZXsQmiwVJ1Ndl3ic{RmefXpG}7=RD^BIu7g}%pItWL6<6>n3_@UF zt7-3ZvOa>AQ4q`h#0o2VmZ{NBoF0b8kTxsc8?zkJ&s&<@<>Gz%S(|)Va=jZiy z=kjF|jJhU;OuqX5kD$T3AKWm+yaEDb;zN}28xNH!0}|1ALR?%F>NQ+~h20q{H^HB0 zs*4S;gb?iee(>!PiBrFT`zBihunUg1_v(wj8ZNizJ}I>9_q0|U>%9b2H)Z}t2T#lM&BYt)ev zY}U?ctvZl#AGK0rIHP?`xzfq6z|hh!)%$Ji2bffKTZ`s9OZcy*6cyk{vJ68cojs1w zP6Wb?3Mnw+%y6!-9dG1dyay2=dDuDLWz)yk>!*r=9KYYA#BX0oJUrG;7W98;dkd&4 z_icSx5JW@;K}AGTLQp{z>5`C;5>OhH5J5t^%R;)OTWOH)S|~_LcO%_MEEdf-*SY7M zPnY}N|GDFyGlqK)*&A5z`->UReC9J(EAss(15ir?*I}Zp#N$kr`TSc@Nzj}IVT?Rd z>N^zsAQ2!jRMdy3WbS&`?G45+Ifi`?mqB)40_b4oZ1kmw`DF4MsZ8ZWiKk4OWgpg@ zAY$jN%WvKvTiT8ie&)-Rzk9dp%kRbnR-xfGR@i$ap(ir$*gjyXK{XzPQYo^W-dU~V zn(S<`RdAbFd2Lq$Kq1yX9nAOgfQ{L6^5qnj+=-Qdwz2MRrJV_HfBhW`%RGU&x+M%# zl&C(Qo{@Emi-Vh6>~LGRTq%7jikjbcW!R$TOw3e%Th&P}jM+74yA$Nu_KkX?_7^!!c4ev#9g>%Z!p60~31Apb99&TMW&&G@Klc!UYKh@xrOu7zsF?KA zdP?6*&bR#(Z6DgW&rfI46o&@?xFfeBNhx#-u zWrWnvz&S3gfI)e&Ww5i&KYtvpI5NL7p7VNJ={QECtnpBrS?L;UZmxOn8?TyP)FcJu zbao)Mp&Ib%wetMb>ARm5rio!%*Jxzs!~PY=ns?gzAT+Q(>F=G1v&H+`b{#PYy6h*U zvAG>KQ~CCmHex4{?mj^0kYQHNqDztr2?9a82g1Uy04$J#xfWMpV)oAhNLwjLJ4k`%=n|^bbc9Et(!qLh%-zcZ5+W4>{3{^j8+ypif~Fkoavm{FIT zknDw2&GI7iIR`T<;4|0p*xsV27aJ^IrF+qfGrHQf7Z0uY1*_AgLmn2ccZpF9BeNSv z8K}^5>qQ2%Q{LY0M0>fVfqZe79sSC}m%A3K6?UGpS~*9#OPHVbk^>hlUGqW~sa{7j zY;Um2KAT%kxYVBT+Ocakn?<(xxWRXAZTDS`e(pZK{3T&E%Y> z1*8aA@xRbWNJy|og zIp6i=Y|7bxn&rP;v2myKFO$5Q%S@FUgVv7d26(B?wRYYGEsRoj!%hvUFhBo>lOWk^ zLVtSu%dWe@BhlSYB>yzj?$I~LWkVB{6G$wXTCo8r+EQYmTiP(rcNbE_hNBe-0SONK z9*lAY4!7re4WYYaaceZUF1>rkGsd}7T*%Yw;onG(XYx^+kh=@8ZyJn zno4QxQY+YI^c;n1f6{&5%UJa%2%nMM`!pEmMbCXsMhVUok8!BscRDnKOx`|3 zx1=}Ko-jsjoMm84Q6c2fFqX>#khD0-<-lRIM_|b46aEUNi(QVKhArrWx|E_u%a2bO z;sR$$FhbDPeIye`9^JNHNOTh^GCQh~3h3vfUZH4+6GSY7AXpz+@I8lO87ZkCCdK3? zK-WpvXO;Z>=mJ2CEk#s(c728AiF%9+DBIfuyD#(2o9o9HuCA3{VVl5RqzTEwa+Ztb z`*wNu6PEd^n`}CKj{$hUY>AD0Bv7&%6D5O}@r8F+^>czE;M7q(-koRcO?szxJx&Sep1R z%i(T$-);X~0wScN{^RFNhlj)$c4-QHKDaSdliyvq0L)(J7sxM#9|hgssBd24f4tXT zC6P{=MZNrc+OdiMJdZbp?nUGW zlUxV9j(pPmF5Kk`?NLdjbiKZqGzlJLQp|~o4m^~amti38=z#5x#xP3s1_Tu(SM;)DyFw?w|vLXG^ z%%d$}R0LWd=YL=TQ9<-%lSML(;ny#~wN>17_k5z?5FkGFmh_#+ht2QhRLj~V2f(=I z9sLndgxEDoo=f*k2nAYT(sfVm)B}&MEYu_nBxLy~S zl{Y}{+ca`DN)fNdLy*csSS&?=_5u~ePWDj!7ZtqzBXoNk9p5}`Al$P<#RUs$kM@1x z_;q{qq^mc{Md}=;p8wO8{M{?%#Z^yydvFCWi7?8;QoA?zQ@#>Z$E6)}^Iyuvv1$wO zVpYTFnM*4P1;1WD^bb>a;fy+Uaqnm%Tx^r=M`8BnrJ*bQ4&73>5v?kurY}1aJv(7c z{7b_8p+(x^{AbP~S-K+Jsjy!kH%dfqmJ#iTX}i!&H*23?py5u|w6Ms78TP|mqc+P~ zcj_u%o12>}q$$v^1{gRl_5X}J^YhC06TiL^OmyYGIWBc!Pj&NW+$Dh&)z;Q;^z<=B zBva0N%gXCNJXTc*Ed^O?-tp6lyc;${KAsr}=(o;r?Ef?P6k zqCc`vJp3DK1r6o}A=D)w%4;ca8L(KWDA@Sy5Y8r6-Hs`ivNin^Tzp128+ z0yF2FWc~HE(D{`BcG}0bk`$=|xepYWXO!sW`F5O_JsHZJy=~!aH6(F&7hjOwU9i^G zxg#@ygmFENgR#E8Fl}!sV%W9$CV%4N&yiR)Tvl@d726XJVoS1!FPTb8OMigDs*NBl zo+SMC)JGDs=%5wu&)>tYE3;h3KXCL*(JFZvIClo6?V`%Mww5GDG6Y02v5%iDaj$HQ zILhKjPW`il0I8CFMMk|L#SstZ- zfC2T{Yu&rCc3}_zJFLDdJb**#&ERc^ZuL!m<{6_syr?yx@(Wv zTXA1sZ_eJf>M1s(Vp1>4l>1&ec{uz%PEh-BeXM=6lt@PvT8c0;WvmFnuA5ybBC8mN>vxxL_LfY_Td)MNT`X>c6#bx=iz< zP8Y1mjnYFlU9e(sNFC?2?g_n4EQ%~QA=1D8D1E9#NCU36blhRC50&7TvRF+8;FXuI zRyi*3`5uxcqV&gH95X>o-gQ5tAJfE)XP$I|DvL#z4CjgHau6fka#{wCDo(fIxF4?r z+2m!bw$C=kL^|KbzxZELUvL_36O4Q6N~K+4mphV-4icYzkNSw3Ie-+gO&zsJzUOhZ z40;@~c(I1jqk=zrv*gVfkI_ZSw<;-8uRC7mBQkJFBj)x88dGJ{bHY^%H{UYWz3dGtkRhEf;UlrtaIg zzIlHi#u={|er{~$FdLQQoCv$2l%H#eRz!++Y4K7>n? zQ~xkHJA!!8@OGJxilhHMMs;>0J=vysLNj)wZc$=lVm=S2wQr~Gcjr@J6bMzKO0G_9 zi6gYFsbdo_TCa|dXfAKqf&g}BWqEevaOs$L)w8z4$LR1#&T*uphjIj9nF-5z{$mHm znjl6$O4C-vAOdbRO^&#(F*rry^$BG)64PXdL3^{!6=(5&Pvq_0opk}hpN~UnTTV8iQ~oub024uYaMv9AS`QaPpI(`SsE_=#Fm9W!(OUECj|r* z-;s)~K?#5u&&2V_1vsq0{~t=DNA7c zilj10J;&rWg^`>wl>FGUam6N%pLKOAX~j-Gh`6oqBMX(ubT(O{UoSHnOfqx7wn|a- z=YdoOO+Re2Iip38_iq4D!0BxC-4~&4RgU5$aq~4Bvlbm8)BC{-^GKtKau|5Yqva67 z?C#ko&Dl|Syz97tm50qs;ua&e|6Z6(dITV|w2S{A^F_^2L%wZkE(jI%*V| zjyzlX_`HL*&h9Y|-q|bTc9&ynC*X%i)Ho0EaAwE6MS~@ecDjApXO@rktWIzi2HQcoPCwNeqYi<9!A)Zhg(Bktx~umq zs7o!TPwi}fH&#KoIP0QNV@Gas3jC}00nN$W2Z9EibsH!?@DCYdK#J6WYgn27gd^iC z0$p`QbtNo`S>6FrO+XHk`C;`f`eKiO^+G`|0v>swaR}NfUyNkO(Sden81tiaRf2cQ zVc(_FZ9xffk1rVuIp3uW)2vt(Lo}=&md0? zQUwBGa%fegE4d}^bW89GM7 z_bOc!@n@fgMQ`ui*1W^^YqW8T0BoE*Oq-!^TZCS!0vEzd*We)oA-?wXvZ#8LP1tWX zS}`!p_VCxALYJ~Ea;noG2@ZJMIUgNVtq&+KNY&O;*n}dRBT9;?T$qA(ma@30{gMxx|_;|Rv2h_d~ z8&6x5W{T~VUG{HoyytB51d{K%2QW1(j%_qo7f;uz>4RY%*FDVFI=mneqV$4sckGz@ zuh-~rg|>0J_Hq=(N6rix{iXim<6k4Aje%EQ=Xw0Ix;9Dsp$0x3W6C9xTzl;?V3#I> z_a3EjR1YR~2m?g;atl=Zo?0OV9vAyl37SfOwB4Du*8lNU?6BqdRv3_Ri8jvOP=A)i z$q$umjc2BdP0q>0H_~Fu4{jE37LY6&PJHzV?eD*o2B99*cNDGkn_zOTUP1GF%GJ$* z&R}$R*j#D10U&8xBD{xZSgZP@ow^V)E3>t2Ve>rifA!u_?6uP0B{y3l9*~_sgJD12 zjp^bEY#^eiP$;#~Cu5(}G91WzyH=Ie6=1!V#W{M33HQ|b01%t!y4&1s7tEkcwl|h< zASZ#!lfeU^z2Q6qW-Xvv_1q<1o6OBc+my9oo@|%?97d-F9;;idXR9n{Wx2rt%MJM~ zK?zN)=>ro<`?t5GTGzk}gq|UH2?5Glt3!*drL3b6<2f`!%h$58@bx(0&qOh1%i8Hm zX%kdDj9c}-9D_t)y;g|yp+3$-%?c@%i^=(Qk2%!ebIlri&U;seV0gCWcs<*dy$n~sLGx}b& zbMj$b$Hn~;`PZJVj#koWK7$OwXL({`BD2ARE(6%tReJn)Row_8|sU$awMBLk52>V<|=4yM`&1eh$-Ye!Kyb8_Y)*%OKIx` zpCw8)C7F?_RaqCVA}1J?5E{L;a|&7Z{FnOmG38LxO^1_@`+ z^;g*EpT2afozetI;mdnw4pbwX;|23U&@m|qvnW6B?{63>S|`^*kBP|=0>}&VRbih| z4#*3hZ`*xdU;QKOxP*LoY>#( zl6y1@G=E@sgoVOHHpws+PIb?%G6|^RP>>=!_X>g;oauVfHAAPvvMo>E{`4Gyk3aMF z;P#}`<{x{1%N;__hV}&i6YQS;tT!Q+jHNT^)9mZrKG2-K1=*M*R=oio3|*6giXd5M znqobBc?ZrGnxZ*mv`4}ytFm!878-bUOk$&dlcPUx8WnK1#|Gj*IP_=cx1)O{NZquH zjME@*<9ad&m_aZ)wjn`m4RXYqtU_l)OPjG>@l$e)7sPUYHKL!?>;3At-0W{I;uXQL zwX$pd3789UG3N9Whr4E@-`7fD%r^)K;Z7YrDb5yPTq7Z;=TDeGu-?nRG~TQ z?hrcxmN^ZO)NDhdgTu(%Qx|S)9R^+%_c1>jhm7_>WUETHI^oyAL}=?=12FOXUw5qT z1TuqdCs|d_ahd(TBcO8E8q*y_b7FgXdfo<*&TyzG2I;m#4-h?j{R@Av3{Yp~={0yP zcDQdI(P?dLY@EFLAO-UmB#J*7E?Khxveje))V5HyckflDfzA3B?9`?dH`)&k=LYl* zj^e_aOC!#)Kr1OdI=lxBg@ow(nl0ByS3*j@OA4;C%Pb}1uLAtqJbgi;$9fX{U{xJS zwi;3aod_F@RVGNDL+qIrIffxHpMdLB$~0peq45=AdF9v&WUspLbEcr^Xj&j{gbn1+ zzUdaoxXkTbB=zCixlSUZ?vn5Qt%mCXxor1-J>Boag%lL>aPnYNFI&B|~GNw#u!tig~Y4FC17u)SJ#002YM zqYMt4yh1=0-t^e+tdpur9tfUZ43{T|K0~&|WZC80i<}+-Cqf#1p_zup^#G|{t!njU zQz1!e5PI$$@VZ}&51C1(8@!>xu$SZ4h?Z4EaN#Nb7FPW8UlMSK5}_CzLE8aw#`<)a z_S@m&W~5x~{u4ZJQX?4@)R`wZ(B@}W0@;HfzoZ}p0DeBf$bIT zNDdQb7*&zw%B6_1rpazT{lXjqQq6Z~DMD8)<1$crU1z?!WBg(R&G7@2U;qRsWVif4 zcW{s`<^>fwIf;C>_am6nHRWbUcRY&IEEE*?1~q$AABw=tLsk%%d#eGN56}|GHT#Fn$_bU~`z2VgUTK!qW?$oD3DPdY_VqWK&mLzv6+N)XRAs$@Zd%%R4 z6D)^dguupDEn9?&%@ zNuI{^T{ws5Zpr+#9dcT4Od)Q%PV*)DBr7v>lbx>0o}84FMO@u%c2**3rc$=nP4pG+ z!oLui(}H+@TUh2+_+vEWiN4&QpUo;A_)*MA9_L{a6*T*TuH@cC(>sD0UFp<|O+$M! zT!SF{lK@L(f3_UbU4DS7>p42#=o=br|DgqNY7&1lc^i72#g1&9)aV7O3cg40yw%PB<{ie> z`&KbmxBl!7x~?X2>f(*(G7GC_nSX|YvKOEME7yE(x3W?jQB}ut6hFEM5o?)i|EO)5 zxRLRdgz;!@OJDv+sq$Ygp$OqN)@Yrs7Hq}f(LiOh1GFr* zT`}*ArJQYz2s}c{f|)ckf)Z%DNHYe8Uuq7vECC{Fkoeb2fZkvs1w}ChP2w|un(1&{ zqu$IPCBh?+uj@gk(So-tW-V5AQ=Q{7NfdI)KBMC35YI*Y{S`qM;q{poav}uy?Zy_M=RUzQ> zdEE!AobdrlSwts`11mEQiKBNaSD@72pzDw8!UFXMW;75(2*OMp1lOQS%Je8hYr%6- zz;MG%lJG`8+EG0MwB_#-3x*2ml|P=6`B&(3>CQPaG$X~yFUQJ1|uvP z`Mv_fV7D#~!_I!SxvZB$8m@TT5Cvnc`J4dMh8Z%A?DMQz-)C)49JmNPsTR^j@mxF@ zg?eD6+iqfFqMHgGHi#<(Al2(_>u@Z}p6~OcxcsdF%MQFG9Ev=*gd$0~H-fm&{dIGl~i&^)XH6s&l)>A zdm433H%`0!bl9lEKFt83?ep9GM|pr=4HUiz zW8AN&;zidPBYj#owVoS8>wFQycCVl)f5MX6W@*T;23kgBIy|o*iZPaf?4bVPQ^zBi zSNs9F*hjwjTfJLoh5&+lQa{FyH!}bg1VXEn>gEq?nYyg8Y-BlduH%#5;l6$BYCy8A z!2ZiPhV0~uK~AyULjeU zEG~;3f25vD?m}0ziAjmgGEdyrfFWZgA}&1Z>G~8?-M16g5ABXX$K==#9^7BT*N$E1a@iNPhgnj`(~)&{P#SOg z`J>8uvd%XQt_)5=pAbw>|6FSxr^e~2xa83F24~X!UA(N-tqYY2M?+?dVkBwPO&92a zDf$7XHAO`}GcvC8iCF(xL+E9Am)F;1w4&qkBo#ca!T{pP?I7n{k1{8z^RXHwEr)r1 zMXm=rpb9|jJfC>>==RgET--0m-Jm3|WECX&>AuVq&W+ zc3UqeQ@vOgl7>X1o^*u-VS8QmGk#=~Q9>3ik%e_d;8((+IkN%UzeNQVp%WtPMYhRR z!1%6$7r9GGawGggTyv=*>R7f`D3Dg(bSw9yhoLz(XVX60ep={xk-S)*VoUW$ZwQfBbpVaOD$0tK zSAc6Y{n3MtFoq^xbJ`9muehPL*lg4eP?eeR@$p9!a*Cn9#Ny{TO)vlE#k$okpns?i z7F9mxFd4i7{vdCqRD6hVP1}C@!u{iwz?QD!T*|e?I2gyURq1aTv|ibxw7oVX;7>`$}FFNhB>E3UKC!T_7rolkD8Q2K3rnH1EZQsVD%`06gu1i+w zr|Yc`H$RFI=m9;cmv3M6#Tw$0V{4J30zdzcoTqYn+Z7Q#_Z(aW*?h%kb68dLlp@(n zo0OJG$hp_86HBNIbuAzA zkCf}AFDDLNZxr{&gYrs6;bRnGObM|JLwCN(^d+##5Y1WnjFzx!AJVoZbaZqW=zlBD z(sXS2`gTJs_+W>$vKMLvgRDn9M+aaeoBMNDw>|Q$Tv03h3b{JCliYU`Vyg<~j$cAY zwEZlf$KhjdLTC(tduLs8nZl>4PUhVKnARLAmk-&sDq&u9KzMky=!G(=aRS!UD8snX zn9N;`1%nqm>-4>dJ2Qoh>B`xZo%H)ZYn*m~u_kQv;Oei2tl^3~&>K{Pw|Sev_E7Yq zCZ2racHS*O5;>Ji@32INhhGEa%{|6=%=Pr{0Sbm>h5~`S2EqJsFL`y~96wgfugEca z*MADSS2~hRfiP7t@9Gjsx9I9aymIjs=NuO^1We_u5Sbs8U9D_{)2!}Yd!`6c6D6Cu zaRzRhAwn8CnhWE)d$rDg=dJsVuY=wkpi_0HcF@rGb~*k)Ps{y~uxN$_&b#_zT>9U`*=X+e>Ag1igoZ{OsC5ETB^@3B5nyxG zRoQ{izu)}zi4iIV?UpD`g0vXLPf@02s=#lMOIcu_jC_-$-`rbg)5cHgvd)L>Q|6+- zE)a$eRVkr+nKA6Nf$^wGvGD+HrK88uYC6Vk7t+JwFdf!ATHSyU8-%jG#LlIvgwT~l=KK;zX)mOJ9273uvp$z!v0qbx_2PRe0b zW&zs~IwD%zi8iZN;_nguC5I*-7wY;qV6>mq20OvU{qSc|KJ1rnPd)4?Ehl3_!@}xj z2M8alA9hRdF)J#wO1WlZ0?_5?!%8{c?V30-e{fK1bqHnZWbQuxO7HHdR&k6BYn+d` zU3^Is(&>%4o3jcSj`J%~$$HaupU?hRxM?9zy3?C<;R>f|g>EqPcJs!YLe#uI_en%V z_8Lf$M%}hw?{;(PJOyO>>+3^i~vfpS1W`Ly%t%==ODP>xB=w zE&wAfiC);vk-8>ELVNa#oqx~RynLkNpkB|c1q4|DExnk6C?(d?qbz}hL#?3Xz7?+Y zZv;ajF`KF z74eY6c>57B&^!a`lP3*_OAP(Oy`uxi?l^?Z9m@Lba?+38Kgjd0+_&0D=^%p&C7CYA9a z$^^AA=`ySNi<_6%XWLfiC%Tz7xH|KCYwf_z1q15z?gQ5vYOHv0vNO>E*viGT`^mll zkoLzl0~x`qvDz7C2E0hR_qq=9z%dCasc{2Arbgpc0fFJR>Bit0JvUiN?2*|Hy@=iF zrj0hjFmNs9HFb#H0X1kGI4C`(Z{3i2=tPDm^Gl-Uz9B6{Vqm+}uWDMB=Dm+X2)<#* z(nMq|*oG};uTmEecix%8+mAWqM0D9|9~DnPkF|Alj`pYfXVwl~E;XT)jt*ZhryvjR z_UCqE`hWl}EX{@t2V^8VDX06q=euG#=WHYMaje+Pbx&X#vaJ!I$aguq-W_%f9%VcP z%G&gL^P)Pz51GKp`qyKqUPoAnb&%FVmj~#k@Rlpv>i=*E1|n#Oa8GUzi0Gay?r4qM4<5%dcA{ z1%MX^jn|4>cCT*!q-YI~o?!}~iT3EqM(stwk*wJ3ScVT65u6(6o4pD=|D^$g;}{T+ zyF9LfSlphCXNF$mb~R(Q$nsm8U+rkXGEN1F_VPeJTzGz)~tYG5KI9E{cNJMr~I8X5_Ip!&lmd{H zAcFwA<(1{bPm(+0P~9oL0VLmpfpp;AX#i`f*D)9{za32o3iTLEts?Cv1fOmFYKf`$ zPQvZfWLB_~2l!?1lujc9m0aWnJh;lq*z9 z^~a*h$6q<+nQ6a@v0H_W37KwI)=QJP58h~%2ufastNJgr9awF?d4+6YYn4$S!^QZO zkhxtaA}7BJX=AY#GLswYZSAzh0OI=dR~(x1e4QK1A{3Ra7tDrB0{J-wwW}^UCfLge zq!P5wZU%J#--t5-Xp@)7(ES+FF+43Q;=kM}_#`eW+y<(1yXBP5H;QL^uI6gZ=@tA! zoS`;2`SaVgO_XP?LxOq-@gI+dndoEIUH(y;gzt0rIfZ6a!av$VoRX4~y4X1#Xo)x>pz-+PwZ43p9{`2?z4{!Sy-%M?Ru0aKZX>0b&PfVn<2Q}g@qx<~e?f+RsLjTS1WTKbK zk!Vtfm(jm<1%#;e+#wlF8Q6kOug(l*Gc>~>|K=IYWj)C$t{;x8BM&n^Ccolp06ocn%G zno!_kxWN1&40@Kmo2P@uT*sJUqD>H$tHw0|N=pX#)TE zkMY}2oRkzInGNJ)rDMK~@u{N1LK_RJk|UCtr1;Xi|F3uZ?U(-Vzq!G}T`A1EsT*#d zekmX0FDCK-wBrBGQ@wxhcD-kzZaOIS{pNi}jN|`r|57hkD7_@}PBH)q-Xq+90J8ty z&l7rs!~QuoG}ZO+XWYN{H~(pDrlhfm7pK3Yd>>-8#{F(j{_l^mFXvY4;B+3-Q2g(Y z+5h+x7O6t%iE39FbG6Po?_K&Mp8UVR#;?ob_F(f!BD0%Tdo|KpSX>kC2caVk+N z{jLSic08^aR7tCcL7mxFkO$e7?eOnHSr zPwTI%|G)mf09#$7``4Ep<5B;`FB?3u)3)Lj-_|;CuZ`$_|MwoaKVEslqEs{!v^VNK z{?ljB;8bF=S7I3*kAYw8f7(<;uVOz|<1Y_TS#>(1dwK95T|=R>7haYglG!Ppr4X#a z><;@E_xxYI=Ul6}?D<;h@Lm;1)W?2{*Z%GAIHlyS)RG~tQyIOx#b){+y~N`cq&Yzg zp5C<%vj?-sj{QeJi+c8yiYhXbIK-0GE$}~U2~S41VW$NdX;z_MY{SFt1!k+(zxQ-l z3CPso5hTL*exo#Ma=!Od$TP2Qpv-SA({L`-r&& z8}oGJA%v8CvGY>Y4Fj7emcCpJFH_cW-BEANz6X;M7tgIT{+yK=QuQObe7M;_`>idOl6*PgG1ElEvKBDz4!H8xb3 zz)zxz71bDl2=3(bIdM`iN$6|C0gxX4S+Bj0I{Fdo9~GXKn(uREC*9zAzhjbI9yrotL$@vLfjt{y$>upY@l8+)_%?j(u)~30UQ;2L#C0Y$b}7qT4%Ey` zH7G+twi{iqUHl6u`u(ZrTKtQS*F2H5=~4z5S9vy1D2L9jZm}q6JS4VE91N*ZW^X)0 zLzi-cvpW8PpIWxc^-`@I7Yeyc^IpRbe;`vizirGfVsm#EemDry7f+gcf0MTHFb%I} zF|zlhsC4xzX@2+ck?hR-e(pKUu7rQwn}%ex6i;Kp8;6w#y>FaX5}oP#EHi$h?-f@u zE&$WZmhRBhwGMnBMxH@bvR0PH)6w#?s5b>|IYLTGV#zf ztlblv%#u7eIwyI>3920#g{|1{epgQ$N*iP`vFz=I9uzP8i89$Ay>msib$s4HmbG;h z2RHxqJ$K*Gc+wuf$A`a~_e!Td-VusE*Fn5+GD})@S?hEg8-m40 zRkq>=j=YUO7CwDuKkD^ASEoQ-yyTLQ{$Zg|O+j%}**jV}$V(+-c6v+AJ*R&sH*$2x zVT5~?r0G4zQvSmXxQ}B;D#?+I=vy21=eWmwHv@jMsg*~h+1WbfS*60Q{c&MM= zch0UfE{m|cFJ+@X%~g_0V9^+H;w^oGqIuvcwyNb*_nSw{uS+!sBKGPAF!`Uy+&3OS z0j&asEDi3xT}4I3&w7G{4Y|5UELKFPlg0f_JAtMm7Yrgx%Au^N1Aa#3EDd4`iWU(H z$|N6?sg@{ZkfEcer{^c^(_0$8^0(|Zz}y`K&^G6%fO;GTEj3b!B%_A3l`wp+Pd0g0 zAYny(mv5zN2a|R6&tnlFfOQbFUD$U&dG(3kU!1SjAfZiF9@dm!G%Nqh*+7@u_;<<0 zgaxXz5|WG7$%;$^u8w5dZ)e`tA|HQ9jP=ut6dqH|!PuXdrufel3IODEWLW^Ebvnt7 z=Tl2(WIAo?DJpBHJ422iF@b0a4P&q4xcgobw8gK8fUaB|pC^(%VRUJ_zer1NlwP^@Ifif!ZSo^)d#ffgj(?iRxp}nmB=iDy3hC3NjnG(6fv@F*v1SO>ewlY#G4QoOe zn`9?!6NP=ESt67ZbF7!fB#8@W3(k*PE3AL#r#8quctT$&W6u3(AG^FU&cth*qw-d9 z^pa{Tr$=0tNl4CW%fm#io)I(wI;zrXUCn2~YfW|vN{wYsj?kc05L z84trlazDwY1VumHQ%PTY;&ZN~+9%MxI11qpsbPTrH0kvx+`KKQHE z72+Uih#A@)LurWxJ3MSX;|>*oZHHYdQMyeDB1a6{&;*(xSGm&t zS)G&mJ~g{L=sMxCgGfp_Og1jZTFX2;)$-z?O86c%IX-OYz+B6dYX+K6rW*SAb$^a- z;SBuU+y&#JImc)%OmCJl38@b`D+jSWH-Wkv2o+WJ#sNX-2S~J3 z=`ckx-p}}LFBYeA%FB5x4{UVQOU8iZ@@RqIew~g27~jBTl7?>RUQ)*!lR(sr=P=Pq zId!2)5t=hnh1`!N9ra~tlI{x|!o2$e`;Abgd2*^f*o%N{Gne)C^Dt`LL0MpK+quYP|W z^xL^Hx#LI?k+jfc8l1wDB|3)n#~*j`d(;B^u|&Qk6VJ$ogKfg(PNvU)mwEqr#5kBP zQ@mKWQTgQJ$g;fK$HARbZ2XVAy2AYr)F~+k?mT>1{7Tf?g4lkp>ET5$)(2KG84F8t z1xFmXPOfh!Ug@xhFydz0TtMpe6!0@i;!B!bjE%Ct9guzeDSvU;y8N6vmgh%{va-}S zjG86^j2(_N@2~}U<;-bpk)>DaD7G}MrtjICDbSs9JWoAHB6hg(>Y6}*iGTM}aTM1H z+ac2UsO*`mO&@ic2G8FdJTF7*Yw`kTr>#U{4K+bLdGW~KZ05laii7tRGOYw(?q)ii z{b)-NbcDxv?JzGFanbg*G4(O*U;oJ6!isgOG#$A-on*W6%*m<3?p_7)Nadp4>5ddR zv&%f2{Nxew@lVnfXZ6*uVAbP5llcw(?MeR-h2e*Zpys8p4$*nyHYhuWknR_@1_V4Y zIscUOWDfN`A-9s0gk0$5e4%sl?_1;+SPkd%8(n!!9gdyQF&y+C>NEIuc6RM=@F&lI zxf_dB@<7G_t$0o*F0MBMFfK-|%IU2@6wT;ob!8oM{vM!?BuUe)j+B$aFzW9% zax`os58fZ2qPxhnI=o{75|Oo@)`HTp{^vK z-)o9_at`m=Sb-slmtWOYoUM!AE^^Y3kG8oEcV>-r-l9y`AxrF(8!lS|j1!~xWkh&O5PXy_8!diK zyo8oB-;*HkD=%QJ3WFA2(r)Naysf^O15IO1{1+}pnGF`arJY&rJR3mvx9$6{P5j5d z6{M?W8Wu_eO^YnNUWnmhyzt+@9KYdkZ&lkn0hGoe(B5K59dGLOGrqZTKp_kQ#jivJ2t-8 z>pvt1o{{8RfBQhX)^od}C75x!PG#3waK$|K){o`oo7Od60q$z?AO>tCKft1W=y5)d z%bXZ^P0cfo+dpZ1$r-zkKWU_`#>UCb%`M7%`0yd9zt$IV{dP0as}(?b5{B1pEg!Y3 zn_1J|dC2cfejIz>5TyUvO$Nhu=~B!&*DCB=qX*b^YVqEAE)9N#7R6+3SIzX2g>L&m z(7!NbPEWa6^CL@>w<}Y1Y;GiZ4O;r}*@jHILHFYU>W)h0czeP@cZRZD*KTKizGQHn z)%p~h&OMRqDAS6{%DEWZvM!+bYOFj4)qkA6VmH{U369~MIQ(>yd7f-ae~S5lBsZ&ja|j#Z85NDKBTDamQSTg*~N>C@O1 zw|3eoXdgDS3Z{T^7f%IVwf?qN4KVv@v=UhheZS$uIMT%TMC;D@;xjCxf(A6zp#6Mp zhhq9s*S0erC0@RKWkhOhq<=9k!NtTF-s2#NU{GNC=H5Ry@SlGfKSv}HkCRLK;!ZZz zJYU_fI9y!`^r!}T|R+0w}kRE=4I|AaIb9~8;bUdk0>k# zJyMP}-h8V&aR>y}UE}`h8;#@F!K&Vlhbq!xZy0${y@Iey3PRz$T?mc@g#T=VRev)@;8% z0)g{m-@}HLJ?4#Mebkm6onpVASN#&Ta+jEd*~*!4QTzSA=okqtG45%FPh&JS-o*A% z!;yoQ-uoO{jGQw|F@ZX@Yb87BL>}$kuV@5)&(>Jd0h5O zi1;=>&cxY3CuN_b39|*;|}Nb3)^w{O4x-_*CUva}{Wms!9|M(x zaK7pt&3NWF;LA8Tgd;Z(#8_yI=f1#eJ00=qSng38DcpCQQ}ET)7PGa{&xrWb3fX6U z<9mU%HpSPEWPmU&2Kb|yU_KuD^5ppj6vqr@xa}**gHT`#Dg_3nRVKIBsaTYX-jY6{ z@AhVDENF&@9ZZ0^2e8L-cRt_$ftJK1pUmB0ie|mw`=C16s$u-M3gnMU;h2DA0v&d0 zDM!I!q+PB8H%9?D^W_4)sB)H!>7z6nCH^0PiTm<;2QbJh%h3`O0&sMft=U7L7i-lB z19oXT=uebDNg1Q>i9y&08Vpfg*MrQJDjXz4#IOiJ_Y(mPNE(PSQ1~H?fQ{b#_^A$a zu=*3!jqKq58U~t@0`;;HF!H0Gbar$gg*R99@FC5K1E_ZcKt9-R?g~A<`X3>y_upf7 zeXGoP@O48I8U#Yw(H7M1_9eaN2Bp!XwbgISE!y>>ooC_IKfHL3KJXZ+wRJ*jF!a}* zMSnlFLD3f^{f;xPgwgNQoS`VM(%$e^CHUMgjXG`5pFonRT6lw@g_86M1ll=^FRcg`Ojj>Wu_q)JC>jXz;eghe#!`(>M55#-s zQYU2g7ZzA}tr%6)XEL}{=evnUa; zDA6CyQK!>|F=&kRi43{!&jKp1o^!uBh=m1K5KCPAb5b{cgKn1#DejeoQoVDwVxd<3#2(6HD&`r zvZNFqmkm6FZliaRZWH4Lffz`wQw4S0O*5v!Me?_?DoGKC`?Xr4E?r(H=_lvK3cybu zj-p8&1s*umB9EVIazXr#4i7VU9Q4fj*_vA|Go^!!n{f3Nj)9_b6i58I?FVr28}wij!>)!JbN>gh}8&@nALTqZSKONIV~rw##uo z!SNR(egC)81^yZU?^u6%I<4(feI zfmMM2!3HF80Y7%p<>Aq~2b0ekZq7S$v)(iZ4KLxM6#%v=r@vv?bboku21w?Z!beb_ zxI1n=A--|7B&+lN58g)x4oN!?n<6r)q)*m3o1#ThH^9PBf(sGi(AneDJ9@|e7H{wYY zw$X&m9}=acRby6F=!nFLP2_~oi+09e3vgLsj*sFqQhA2k5bm&OqpK)8Ah&C9 zyFMU4z_=txyaH|utPXo;dWUubw7}SC3HTD$FeE>ko72(5xXzBS0@__Y#cRsMP~BT1 z&Yw*T?zh(ntA_65!$7dS^{eF3#pRmnC6JpkERC;%@CMO&U~xCw#1tAnW;0MpNJtp? z;#u+ALA&*?@GpSlEDvCL!bLhf2hS0O@2djPYL1}4e8^9(eZ8zH#oVi&R zlgb}xx*|o@&T}0P^rV`I_=B-sTTSn7AF=9paP;sqyo*AP2c2XTKZ|Xnk-=a}G6I@~q5r+H=$I4nyx1R(DJ*kI>Kw^*>nHnM)qnvhLON;?xFnDRIpXQak>dH=)Q%JY3 zavcC5STgW+lmns>j7X1mJce zc@+&Yv7nafYnu7!HowpjaI>T5+4*q@Gb^m-`8nsR2F8o(FOAnWAM>>8G6=HT5bwU7^mFK9 z-nnN-m%JsK93;BME0j-lU;3pbmp}VM=U?Z!m$;}Wm1`X^D=Xs zjKr~}SQ zIEg~DflA9bpQ-_YJ;;R@n54tqcZ218)`6mfDGmMzdpj?QmH{$JduBGqt2KwMAI=Yc zNaeK;5@x{NV{kN7PsqBWYF4?69FqJ|{x-t}fkz9}?Y9vl+qYC$rO83Us`2D?L8Wx8 zrF|;WQJI^&eKF3*`yXsC(rV3QZaeek`!{Oj2@z`5^b_~T&30zc<@5L&x{fo9 zKGBmg?sN4S9@sG!kjdsS8ul(jK^Kes>{B}{)bVP4tZo-PPP$fhuPY{}fw8g?O?@=}ssk}lV8Kz~U=pU(7$5so*sMkND7+YxSzvZ= z=go3Hm8_1+Yl3fCJM+4wiK&GX-c^oT{E zY1_v2#d_3{{GP}_`ZTX4SMp)!_k}P%=rI94_76T>G{EL%Y@nVj=^-Ke(DXx^5ax_ z0LH2$A}|v{YkguoW>BYTq}AlkM^bGU3Hls4fG64?ZDCGT#lF-Ah;Ay>GD){jm1@YA z5`yr4n4D#MWYwa(e@PxpA+Jdp3the>$#6MR!eBAPnn6G*QZAx+M|(SUPPcc!vtYoaefsFoNQHu%RI(J!pKbTjgUk?pMSgKUv^_RJI&)qvi^6$?F{pzTXO8)CA`yaZQ9gWo$tXFte<(Oxb_EJHJ!2he;l*{1nI~%WKK~J2+ksx19 zQyeC4V>^Xv;J}C!e#Y=DpMcfmCuvBLTVocZV>ZJJFhQoo9xG^pV5PV4M_Do#!iiAU zzSd2R4}9+S-Gj-6j7IHnw*x8ZNBoX0#E_{;TqZ%VYJ)HAwW-#uV*FZ9z+Ioqo5)OV zf=|zW-a~gnQ6k(Z-!^DmfwIT^Lo`VVJq}=~XNgd^D)G3Qr;YoMYr7ktFVoyju0Or#!w(#qigvM4tiZS7jb{$k z(-BP}R5ZQQZOf=`kPvQnON(T-u|ZNu9Z(!Ot9Ij{Sx9bMnYI_WkmD39CrMKK#FPmc zm2jAW(nb=}6`t_87c0!bzTP?-pjFicI`{O?I0P-p&BnOd>s_e&OiOy<{qLl>U`=}O z6M@TO6qP#^T1mvKo*-te_KKEI6X3=sogx1MjuTl7_K6|aD5%$+#JJxFd#xb^GZl1U zwf4Ju0H$VYiyXPTbtxnj%#t7Nh`&i-%ZG|yljx1yh=1N+;9mm1qY%B3sjp8H%N6_< zLGrZ3rtx4(TwuIGyqVy;0)Aat0;?ReNR8}sFP_1(!NuAWf!7%N0*rqTkX z;rdWoZn~MNM!8T!488n4I)iF((|RJi#VhRb(TTRJ_XoZnx4(DF`KD}&eDYO2ynyY! zD1BH~^0B_k6Cx%^6OZe;XT&_cJg|j;8W1{>_yE}+hCD{8F>edl*|c|yek6o^SwLbp z>gaR>*toE=ejcgJhZyngW!q}Y*;rpsDEAU9kS>OBaJjtpwidXn9KxnreNpITwe+o_ z#f_Ilz-&0?`nsJI!}LA<5I~Rwgrh1VN9Q%>_)^7PEfU$b@uUl_D{euLkihSjAao7w z891-wG#)U=WnOyZH{T0l1V)RSKx|2Y(z@7GnQ?aJ@^FQjaqms#$lP&EXFQsC&K5Gi3&3gY40ieod)xG`nm1pWsyv&00+3F7k9}7FRI%wU|VCVsoL>5aBb&H2}Av;sehKgEcXw15*r}A)}M626L3`v*uKfBJ`y#6neJE z8WY(j!7uExM8LjIKuk<*bN1``H#~IVq`N2GgZkOdCtH&IqJIZ`7ECFcgV?!PbkG6> zG>%Tj8zKv2u|Vw%RU<^%?)1}&PEAcMdUG|5gh@FiKb8TU3i@8HS&rp|Q~H^;s1&ZO z_kfjpS>1k8R7q`LCZ#K;8#`DM8;~svCMciju zfagHmu7Q6V|0l{R*o^FzKCH<2P79WcHr~4>_kk{j!E~3PT#mz<@{=@jSD1mOdTxLH+Ge=CaU-=PQuaL3${kEA#*o z`Jp1_s5~T^T>)p{(}c5*wu0#2E_wv%p)PooAb0o&Kois$kEmG=(TqVv zPK-~`nEfgscp=8zi0J5WFIuy;HEBY+djV&6V4E{9u&hKdF23Z&2oLOYY=oND_I7c$ zG`|b_^XJd?7MTj~Q58J97w!kpDaA_=%FF;&B0Id?E~L@r?~G&}y8+$-@oJu?L*Kog zAta7nZ^aCPP!Zc)h3x5rx< zv9XbNi)^=zaw)vS6wH~qN=@JKxeAz~n%Cz6)|3*g!^Jp~A*ruXY7mZA(zn2w&KN!2 z2pr3lb4SW*vC;qreYp}T|MZr~JVt&{9R)jFefwBmWmq`f*3EG1?I28 zVB(;EXW!{n;M?5gmFwLuCVO^S4i>4^$8}jTOd!1$P2{F`)5UOCQ}Y4E<cvw(eT$si2|&8OGFPG>TW*@@*Pvd^uF>qT>z zq@5!!^k&8;&|Z7ee=+kXY^zAoE>VP|TlW*9rZV)B@%Uzd)>fj64rSLGnqr*R%}D`u zjkR7UE-;pR{O^hQFC5>|712a2-?8-^d{mR8HHOb?ed=OydBB(gI4{ZNif9@2M9Jrx zO_B>$3w`X=Ttflr z_RQRn^QXt1J55n2==Cu?l!E}DK{Nm|0=nGj=$)Ex|5`6J9-f}2sh1gzfc3LVkd!8b zh!#-mSC(Vf9zA;GoAZm68yH=Z;Sro5rA7N!#fuws)LnN^ij7xK9k2>cN?B@-4ttgv4T| zIsmYRM1+J|gvW|QNQJYpJ(q0t`{EQToiAKU-CT$PH;kLx`I!1$kyiZW>8=IZ^A*XL zz=0AU1WQe-uyc8VjRkF_Qh8_mw!&Z&ut5%jZNKz=8iWD*!!F_hcD?pbOGxZOLIbdT z)2o3<<@35S(@~=y5S&?pwhWwq$O(unrGY`K>G4L%=PUaWhoqZsw!NeK9mv(9Bs(Y( z*h_XEn7SgsNLaYI;WUr5BWJZu*pa>mOjlxG&^mU0&!Y$N#n32CP4GfmulC!*0W-iL zG4v70QiNPl(+f*>cst+c58Ids)3OG(>;R zAKC;0(7LUdBIX9}8;7awCXia13;d*GNCG@iKwvw4(Qlr1t6>IO&C1~FIS0}kgKRJh z1-S<0hy_ie+L2GTECo-^Q&gmY6%R^F-~8tJ!E(=8KKKD+l@@p+b5j*&0rS(0#{hvD zOBxcwXY+!&@ny6Fn*- zcTV9;MnDpaXE*!H{jUr< zI(qJ$GAMj&wo+_2jqe01|Bb1KK7UBq#A^PF{P)w_&1@%S;0vFGUS*wq=P7T18+Y^-4=^C7 zFiImJ%PQw_Wopjboona}s{p*aFVCO-9R!iEfn5eYjl==O?oioXrP4BGX~NGL zXJsDFX`q%eY0Y|y(`$;MIF2<;@k7JRn-6>=K^^Lw8I+-TK@&H01+lnplgi1?LPY9_ z^0}N8Hv>`RmCbh0wPB<)B;8gToDipiFo$|7e)WRF*SY0HcV7RC{%1(T0jNTFBe$sh z_4VN@oe9V-2B4~HPtVcR*Rr9|iSt#r6NFpfBk|Jb1OOXCMv({VadK>sWtvR%34M|b z0Ow{=0xl^aq>UBNKggW{^d=wbi94(x`$Em>QJ*95J|pnl^W59bBXsA#5Nh zI~2`8)9k1W@xkO^DgZdhkQ@-;;Sqmit(DuX(rUUt)2jZY0ATD5ljU;_*-=aNAsI9J zA%pP*R#W-_0w@^q({xpO>mov(o)TWCaHjNHK-FGZ-Ch&vF*jDTUPk=?NrMg<^(UEAxn{Nq27e_dpc`xK=QbBh)Ria-4USX{#sb|=5_3* zaM?mYU5y6oy7b!UT`=~S&=+(fjBGn4B~0ofg?&LpDLXh5vvQTSnyzeES%Y2HI|Ed+D*na@2@gT7sxj}MY%YH@mm8Fh40MjYl;Hudp`cXSHB(C?2hc2iKO8)TsT=FVh-i9Zt_qo~eURx7Qc+vEpz3 zUUtrl5zS{WL)C`*&+ADmrrHLzM_bhjEEk$@dr0{%4l{SpgK!qDp^o7^?lHx<0xk>8 zJfQ^I%tS;)n-|p@>=er$H*Q!rzoJuHI-%;?dr9qe$P=9dAFoOf{-L-;p)YWCBKf>* zrAhZ6`E!jak9j}ZSk2O%OITZwZ>JH9X~}Poe$~bvw=HL~XxJp}W8(aEHG_?5*#`aS z)tOE+KN;Hv`{ovPR2Q@o!wwS-)3jesfP2}tSK~v&-ySExm{_6{OS{@fX<=LQ%*`uU zvdUR89d@~;M3KUk`z=>7wUN6xqdV{8&B5^V@$VHD!6!KU1@HW|{&s1h2@gk;wWnL=t=@oz?ks=}82Y@u0GKdd8?_Gzk5BpS_eE_B|D|6T zAI-9^7V!%?-v6+49(eKi@!t2aFf=!IvEa9KJ6T3?>=w1SpR3&#eLpH*0zcP`>U4jd zs8A~MjA+oxYhjF!?yc`u)lo;TR`5T&yFL<@RF+R{bUeV&vwmF|A3$s}TJeFucze<+ z2Qy2$uLbkf`FZ@ypgdEtlX55L(;Y)JPgJ{ti%)bei2aYf051H8GN~4ZfAZ7v)UEIkg7!b}aAbyL-&V<>gCzB-bvU<~%R&N0v zhK(?7Vd1@>cLeall-ZuRVTfMr0!-hhjVqjwpA#BTccguBR^Vg9BpUU4^n?!Xb6#lG z+}xb-SV_Y~rcb1jK#<#;H$9V2Amw;mBj*k5JNvqw;94jY_$>G#xFAHm8vHkP2^H{> zjcUO?b-P$qX8SlD!>Bz4dGlY!-!OU?5Yv>iymQsC;SSi(ur56KMcI(pI8S3ytn!{S z(=PMf1@P1ws*=2)JPAX%Ykcr28O8uQA!Vk( zXIXp8l~uMEH=EcM-ga9L?{bnUHvifvYCe20VO(jd;g&EU$^-)m8JYc{72%(T7D>vZiu_cI$4m59r^ekgbxR@K z&CTDZsc5EH$}VcJ=xShfroGGb3kSj1!VlIRLIWvC(Bod$nVRFxzCKW&MQIC`qD{qh ztEx4NJ)Ff{dA;2ZQyhU!mm;S4bu&9W?~*!bVJukM_@ZgVNT6i!KUd}TSpsAVHfHVb zfAV9{C#l^W&6acm*)~OpZIT1`#f}v6=(CYk{cs4N2}!U}eD_B)%DFHg<_PSh~`#nwSoArn7drcHNYYVkV)o<<5EV$}$h9iYfm&A22G zGa5`;roQjeO|E2>Sc)`O&mAm&ml|f^R556j=Lm_uD}1i`*XiU{PS(7vw#x~u-@O@O z!Bi_|vP?VqveHZ++?r~%H5ScPr(Y86x?Zn-OwNtJyI4=f)IWhf7P8*ucXV|;G9uTm z{Twfs%q_-C2$s|cTcg=k?1`(N08_vH{5Wp)+WFy4R~KThVL199lYKMpL-)15H0O{M zv%@$pknKZnf|bTQ`4kluYua|{Vwq^dKCKsIZIC2)S}VJS6!l{hy368KV6kIvEPKUJ@GP|NMmA*|Y#T=M>ya*na|LIZ2U_6)rhgHUokNaM+WCZ+#7AwzK<(vez% zN1E+(9&q=6tn2(~XTC|-sbpSV6Pya)YivEx^wjt))YXRqeJj{4qY#46q1Rx{FIm-B zs0CJp81lG3jlt+z5=(xeF1UT4JLIZDYB5#MXsG`KE@kLF6fis_FJsR=04bABOnU$m z17oSY4?O*nbOoJy0GZ$-yxW`iXntE98v0xv-5jL#h5jg*YdJZ;q@2a(a@ecq4cEmv1l#qA`zFm)kE{GF^0#8O_q-`gsmoOyt zT=CRwU|k=v4aQO72cs7UOTxh1)0e!U6PRXCA&0jh;j^k`%UOZ5$3@a5>GrINDF8ZH z4#7*L7R@^0LMGyO^*Psvs&UF%xx2d?tX_uS1MtSA$vQYSn_j)9}EYgxU^hTxT zzmY%A)@BxdY;=#IeW!?+l~j4r2iHgU>XV;(M87d*%wZ=HoyDfn!<67oyQ322Zyx#o z<&TA?JP4($XmvzDhOZv;2gv>=M>5J21PaE|bw#mIPFv+MhTM62@7WUlZ1I^u@v6GB zd7_WBd4S6;P;N4;N3v5dgq}26<&SU?VMgC$d|H*J?&j{^`1OdIekV^|<^0b_T2b)3 zh~H^en)9{!=ehcec9ivfTf2q>IKghVMu&yKXokdU!DNlEsZ_sQ+|$;Wr{@~oG}Xr> z>h^~=hV@Osbktu;)$4GQ$7{cO_Wb;1@c8=qcphJB!A%<4KfGV$se((_3mF_|5xSUC z{~+;dRub|QJBZMyFIvBvB0Rj=7cCV#N$W9|9w<`yiZnASyT%YPPQf@C=<@Qg(|4ZZ zT+7Z;cXT|Q(U!wX>h+!$pm%_ z5~iWFBY<^fs_JsO6Aie{;7oiY)#!f1Eha85-8dGghW=ty-nAMu9;35I?S3n`D3)Ah z=Z+VINGMudWpQzJ1EtkbDFPnuG#(}<)CUd|d0d!OtofbcY8mWJI-X4W9jH?)27Wg; zHyNcxh>0b{aXL9gq5&9+Zc~Vw)3pIOT9G*zbK&ZZwv zo~h|luYf#`XH>qK<+q^Gec`NFXK(RE9=0%#Vw}~KW$SM2?Up3&F>6TlfAookVN8Gj zFsfeT-nFSR2gr}fX`uQ(Df)~P8XR>6XbL5tCp*T>--0X4*m5lRU3-Gp4z~iB)5coLhszEue11J1Ft=VgOgI~P&2f#Lrv zmHT(uv_~XIYhv1clY0dDnVj7G^p6Vw!Y)>?!?_im7OLNRPK+h!S0f3N!_(yQHatpGwQ7O-e3sK$%rq&2=kpO3s|0W^ej1gM3jT>=rgFLQ)8soV? z%ieU=;31&{Y)-#R^ShvD%h{q|`aN@8xLVTP!c#SP{W%I{$^H~5Z<~VxlS3Wf5>bVH zzDg-=49R>E^kt|GLZXdxgTAYFMHSbk?XYKVs5 zhl`Q#?vinHTZH5{4gx_brnlAv^tJl2q8Y#rhu%D0#HPFb{)}KMJpTNNF~9W^c|Txs zyd4Nk2O6J^aaGN?K%bgx(2Wtr<6zm7z(%(@ZIa1Y#`~X#S$+Pb5v(`2wOO4GMH60q zNNTZK+uz@RRejPL^A%MN9~iqt*ocZ9-1Lu?MNL>y(rbeLAp7ZGM-1keR)`&Ipa@eY_$Z?kY%_$ z&|)PgS4JPRRq5X@uCkATT5`{uy%(zEgFr%-OPq?d4q0M*V~c+kPOHN)nP+In^~$IX zsS|{ZaG3v+0Kjof>HbkG;POcEyMzM<$1iDbqCZ-v2k;|4o{4DVWF$qgx5kJWl4lAu z|4@~y<%nj)_%HJvHz<;{~ie!O33!fkyk*n!RVoNwaXdf zy^5*_2$T6~2Ex0#B*3<_TDyc7f={pZleoh4h#Q1@<8!;5Vu4oIGX+o~MYMAl-?uQz z%gbxN1J3wB=BZm*T_y;895U&ffUF%$e5Hx1S@?{@7lH1HV8Wy3Sydw>GAXR zRWLD$TagY82gsqJ$pm26GiWBU``tC3 z9v#^w4C;Kn7x01!Y=>g{+HR{pCpg{w8TxzcGyTqjpdzzgQq(^x=KEB^82ZDy0pM^^ zk*Xf4n6Dx$+jp|C(j7^UeZQJryqE$@3!~fu^(@diN?SrwV82QlR?2X?qv@y!c&l~& zR|?ZW&LNHW^<_OhB*){<6T0kF!f)Jx;)MYJ0_Wjpm1mp(*Yy7P4`HNmyxnRtV_$#j z1X8E{jhqdD>gLfm&BoR_Gpqlq=HjQBdcmN@n7Wc=!<{0|Bu%3V`$^_a9Wp+_s?rg( zl*r{SG?%W-9_Yl-l=W8c)!g;<+H3}Lu%A)uJ-mK16t=8sA1~m3?xflJDAL>R|FoK{zy7CRO6Vs zOgK);{UjHCq)6X<&_ofKTQdEr#O(Le7vfiG(&W)aRGLmWP#d>_u!OIfx;?x91$R!) z2AXB8X*}`YZhaU(A|MUUW`6xyoiYJ{j&cRfb3p$GP&2NQg#VtqAA`6evB+0c;L*VV z;&5~~!0sLs1(un0Pb$u1q^9;?TKcSSK_jl10s4(7E?c8SGJgIPuq!hNA_LzX`~o|N z!oXAd!c{(kOqV}B$584jmRbLC_Pgr3Y2BK|j;GeeeQ5{nc#x5e`FU5;Z_tl~+vcWr zH+GLH9QL$8+Cdk0l&1ezUlqyYM1coXuLu&>dlOUYA(P?nZo-ihGz@EI; z+>q?=8hmLyaINu859Nc45jHlx_cDwn{9_9U=bN_dK{r3+G;h0^u67GvBcxWSY z0{v4zaK@Jj;wwn{arfbslZZu64mS|c#hO}y|3DQ^A61Ss)>+oV0mZk5dE1~RVFPP8 zHl?q&hZ(YmXbw7CFQ|g^FPsuBesHGl^^!g;5vFF^X~S4afojDKrb|6TzD+|7;JB`M zr*Lcdrlo1+ly7CbRFwOJ;NbWq&7x3!xqJwD_WVN@M%*nVLM3m)dh})#p}46plQ$b5 zVZvX_>wCXpIxau*T@dv_+aFC>z!}v^ zz6K&s)T3Zv9o4?%{PS3hn01VLK`l#W^LV^V+439TV#&q^Pt?pHXkd~mZ9uf1{gF(< zari8&1sqC*#e8G5tJ^M5IY2#wKB1q488w2vGdM?E!2&Zp|~kz!N*UR zg`DavNuf8H-vSGdd8gg$OK8;uGGvUQ?}x0+8&0;Zbx944px`kE^E6q}Ul?8h`O)n0 zllf2m3Y$YhCAjqZ5irQF8P0#TgL%0Bia(a&?e_;a7wb}O@CQHvwQ)4q^lB_xhX633 zUa@|I!U0i&nd&PKKzP!7edF@gMkyOt?D5n1Te2rav3}22*V|+hShK)zoKV@-+ZzcI z!&wfj<#J2>ufc{J8(r8<8+2qDtGymn;OwIbfT;%)^1b;7#yfEsH~eu>&w;QSz^y)3 z9p3M+APfo9vJMoB>7gB?o)2$if_@IUfm`&{6ky-Pgp-t$V8uxcd9Fr|y)Jg-Sn#n} z_Zt7xa2kSgrj%hWeh>zuW~J7lwE@ULd3?ZcWyPdXvgEMji*&3~Zh}5l@AT-P`o*8a z0C*je9&8VypkJbfx_15|`Kw_3e_Kf2HF#Gai9~Wo)w#qyd+M+)ZwIaHIly$AL^4pr zl~I=W-?%W8q^0+n5Eh4!)zWejHOi(iA7G`1Z|J;az9{v-)~i#LKwP+RvyNF|yNSq4 zXBkeA(0gSrfu07r@VE4jJ$GYKnEQslav(m!EORedO4ZE>doIRPuEOxdmmb1IhaZx) zlbud8n(P=z9p<|v?QhSgkM%Wu$YteJwYu^#=n3X+wcP}(Y>hMgG8_7?2=U~(d=S6q zk_)}QByd<_AD*8K!0l@Nf}ZRnVaUU*?qZC!T9ZWm-ZA+~lOIpv*|J4}jE6P{Huq=D zCo~JoWmvpoRJNnMeL;tsh4?DSxBmX}Sqm5jsWe zC}?@~J8D;d8eS;Us-fM4uA|0}47If8Yb@5nA;2lxSjV39j5kU-SC8&3Nsw%?Ls-A)@S5)yDW%M$y1i3)osMz zgkExm|4!z#R?H)-AO$TV7U}FGt)e|ZNyCQoY%^c2P6dN^33PUL7JJbLkO4-1i1@_Fe&U%pZV}g`8sSkAQl8eVy}hoc3#zLd_PeF;V)* zj}MG{2*3aS+gxZO37fITtEvp;9C+({p3}}<0GXjpWAS+(%y5JSC4Cy(4<#BucHQ~HQzRA5P zG~fjL+lzxAhvuoBb$JKBqPSdva19xCMhNKrA*7DKbCq)yl|j^`;ZEM#yDCteGO9V9 zS{&u-zz&B&ZNJQhNvOY9v(W>PK-{MqT%K#!*~>bGKvD8bi2msvzas!fQo6h_jsb~V zn1&DEpQo~Cv%U~9*hvQJ{a_-=$xfgx?=;Q*K%bXAVVW=R@0F=?Q^}p0CfK|&ip5(< zA6~U*FLB!^yuiT1rM1n(=ylzhn(j#AV?4M73n;e;7p<_%-;T!8v%8zBP@U;gB`fIM zJD)|5y5X>@J*nOEMM}vzFlVo&;D07tko0z;>_|`&kQzz3Lo!Rr^~7@nloh z)j^+iUYCYT*q>OZCi`dXwf`UFI}eHPAl^RaOb2vrB6AB1XkP}yzaR`bdUJdH0^zQ7 zKF#icBIx5--{E|`A(u;1pju}1)U>q~toM@x-AxmOfQ87!8`JIx3Pt?zV-ZgTYR5zW zkAU(2?u-16%DgcoUxw~OgI0~r2vw>~j9Omgm->1PSj$hx_E3R=bgAgP1i4@Zl*xQm z)u&UHDxwcjKsTa7Kh!gnx`+xWJBxi0g|D7~b z^|{20rmzWkNqpryBxjB@gU^z^N(GQDCgnxjl5^7IaK1@LQjUMsaluQ{X1znO&nIhm z!5XU2*D-QAagQ^X8}_O+@XU4sVF8^e>ICj(Kju!&{JXJVI=Fea%7#wUuX-rKMIw*oZ!Pve)8`NXi>wd>^F z`9jbTP=;AmWe}?oj(Of3bfzW6945MZZB#xAs1sJF7TQ?d>_6)4T{+97rV~BXdQI|R zeg23Vn$ooVQ?2yMUDbc>iG*z;t?>1hnxZJR9L0f?7xX6%Dk%Z(_ZasTRx?EA9RI6WGSzMDK&`@Kb(O zd_afGj@8MNrbo-F07QAS^zLU>K!&4yAJqdIJRjezb3?cB>TfeTYM11nZtJV>elSDK z`XZ@9JM;y*I-O2;)W;fJI7p(x$`^cZFgD3n0obW1(g(ktflA|leSHLXZv~|MD98^L z@6>B$SyHIX$c^mcI2^2zC5pnr-b#CW7B|gl(4JL`-{x<_KxRBOyGrBWFOd9vhqZpX z%ad_)wDJ@5MAH1?;lQX#lI)GE;AuOKl7>fbOz}(mCifd>z%%QFSK}O%;VpjiZ3}de zf}OtM$p3lbHj^IQxt$#Lo|pimG{y>6A>K9sQ#>csWM(C#vTcea8vz6X`#g=43+2QW z7=|Mbi=Ut0C<@cqcRJMq0U~~|SwVZAvbU5HQ3}Y&lIWAthn&xt2LWKsGvK5A$MfNZ zg=sR9!3A1N+}@L)Ij&cyRvH7vgJ9Sa+nTg`P@ZU&FN9_;v=p zl5sc{JcAP~U`&yEYVU$ZHAyb|J3=3cxg@FyhJKjr9p9?*hjN~*{ z7qR2wlt=hral!{qd#f%-U_Oa%W%A$w6agAnsk$vA*<|Zx>jgK5qi26*#RY*F47coG ztq2^lUbwr*U>vWfR0<{hyxMw&{DK-D``PS-qpbH6t4Q6!wkR}`0ThBenX}QgdUjKU zKX@+aUZ^j5wJZy3g&Xn_09l)qvQ*Vtqd+bh2im)HlHm$0L{Noo=?x~p$qtedNeK9y z{Z)!@MQHUQ0HFPP4EN!3e6PPp{Q!v3rF+(T;Ncpm=MR?kf{~=F;314!Hz@OK3H5uR`JqT{kN|V+=0eL& zxlunY?yK)aC1^kRmSLaou`&ZlC+ISm3bkqiK~1H|WcxT4rsI^^xH9?%5JA(v1)4z> zXe^oT;UE{u&`g1f;-(_OA$gfR(1_mCkTYokA5R7>|F9-6QlpO;%v6qCB4TK-I7X}H z-OalAfqPjLgC_eIT^J(b{=Y)2ETH z{%T}HMcPm9%^N0Oli~d5d8`&(xOKa@0FL8(FMp!gSx@*qH#~4?cvaG{#qF?1OKInj zt(1))RBL;s7F?uK$X#yGt>`lT`}*>h&vAb!#)zpI^DI&y3F+{tH}1vyV42IYqw2NA zuYhL+7=xl0zw-%}%kelY-&R?|-ugXD_J=*mh{-&TGn=-Cr5tcwfD4As`!bCJn2q2x zeEOi9Dpdglq0&&k(J^3T9JsC@V+jcgdIuqXU-DJg{bGFa_S|X|h%@u{$4(!9`1_j- zn5v4lGaYU$cy%v3RS#cGqGR6tnl5m!a4ptx+vsJ=4)hJ~>va0a4_U}pD|wyF=b~cw zyYliT7wNKOdA5$Z=ct-eHevW=`xFP?*qVDz_hhRg33-gdPszZ5e7xue;~ODg4AA?G zttD92Fw7Y1ytg`B36(wCNY(-fW2K%#@nSpN*=aD0Vc&KUFk*9qlTYgRX2Ls{PPe@N z36_o!@l5?ng=pA-+D#Mu`oG}a|F@eFRmY(y+JKDD4SJFp=t+t>%J=JceYd?gWa`^m zGzYc~6@=Oqri6xGESJ3f4kFf9mJu+s3Ds)bF;b33x>AxPS7>LO038(PAk77#Y^bfz za)q&dpZCjN%w)Z7t_@$j>6?u&AaS1_e-{LF4G9qWs^3v(sp9X9$+u$UE^*_>R87_k6w} ztkJF)IcN#MWYYRA9eC-+o#5J;O3ESMlIw#54dkCkPenajqLKdPc8GQp@-&3Rvgu^f zI06wGz<&|KCAr7NqA1*L{<-O`iu1yz+@A2ptKNzyD?-=pyI(m*~(R^ceDmhiD78g z30bwMngRm4%tHD(D?q-$;p+o0-6)Q2y^4RgnT>F7sWO6WCYN-MeseTvUu&}(*hUFL zWVL`VvUs>(0Vq1CkR$2Kd~jT(zNI)MaR)2 zn|J2*`@%@R#8ICjI5{~59Hl(?aKk>KXY<&3{EDaD?d%oJLi`jo_zuo zrX1kr)9&GMm~ji{IK&_8yTY8jxuNu5i*Q6arsn~O<}YBxZqRk5H^ZTVxNi3re!+?P zF~pM7=`aIL>X(JuesjUIKgb5ed}xkX%k1LIbjGOoe4(%Ccr2zqAD}Lp-HWWz%3Qpz zZ*HKrB|JSW+>NjXvq{U5z;$(kbk*F$`rms|>$^!EgBZFlyYCKMnU+NfQW#ofOIzl($Xj~z|h^@ zG5lV0dwa|7?{3e%ulLvTa0lk|dB-cC&*uvasC0CFxMHZfj37sp$ezTgeEtI0N{?0Z z19;;q)Ki)|QxY0J?MePvl?VlTk>+tyk>F?9tajw;yBO&3E2=lCvX2!6^_nqUr?R{Fyr)uPJ7vI?5K(qY&3Q!pgU0dKk`tPb zzPE**ap_R-Is5xq>&wYI13-|kJ8Y72xdYPw&o0}%v}?AYaUyr!kI-he`_{3>#^9ZY z=Ny(sV!)|BCm+CkgMk^b=L8vC7l*t?CMPd#ZpLnc!ss300O_~aRKf+{&o=*HM$K0vfl^yM#_NwNjrs!|r6k1*5kUi$0?-hct$<(5Q$4Djx_ zy9Pt6uq)>@rNXd7=|m^?)DE&8;Xz_$hn!kejE*6r#l*x6K}kO-`aByOk3o}NWsRCK zawkLX?aP>ZQq$?I;~P*|@w`)U&Jl!7bM-S8P9vj_lF+b~s3n=Wa(@X%0HjS)F;U^6 zMqOyt9Gne~O}8SwJ%kN;;CnAFGk zu!4mU`YyvS*)!-WY96-V+1#Gr;muu~pQ%Y=PR$ART2e~G$~&vGuJetKmEx-;Z#_6Y z-`w}%U|=F~=PxQ=`)a38pT7E=2-ooQnuXUdC7g2*>uh%~=oLk%ZFPxC*?zaW(=04!?m}@l$)u?%rKLSbN8weap<@1Bv-%0=tclU$i6bUGH=_)CMzzqftsnJK0iWF58Q>?_TTM$^G8R^eW z27Up7;?EAtaX}Z)`3YtkVvf=mryYBWhlh7*`~eWy698N3EmK)t9sd0GnX7Sb7425< zBEGom`JdswKw&8FUs?(iTW--K1)puGTHuDfEY`}z-VHf7#~VM5*jRXVWbmr~L$H2w z52Ma0?+H!1W?XINX~$^#9bVev~n*SuLP=su`a4wfbH?J*Zj387y`_OZ_CX} z!e-R#ix0%!i7*nQ zjiW9@3c{I_pAC_1;Hh!nygW+oC*M1*-Bq-;&!%W>Qv!bV4htHDJ{ej%<$STTvCHF} z$8dj&0vu58v)iParmU{gB?eB5-sEOQfvME&38}QgnT_YeR z<$a_VBf_=3vU1f*9$>4CdvIKVjc~`0qA_;l(9vYSB}u&F4kL%Vb7w^XRdpjOD(ZWQ zihU{=tP9b?C#b2V)T2tZ_Ph!l1CkIX=+uv7ENZ3`T!gk$x9ZxicF(>#FM-o1QKigy zsS5M28R@k=lwUMPfpERj)^c;mcRS=zC4M$Y-%SdDt!H^)$9XGXT8+}LFyqd9Aw4%K zV4XPC28M{Fq(T~}y;ux2?QfJ?(yszeqaOfQZ*(}hL?x>vBp`*S^x@@))6LO)do#U9 zpT2t>DY9U|qbA1_aa-(|r_3?WAc7dG8<*rx-MW5mik5ENA!@WqV1;07Js>Np&!I2! zgZr^#cR0_T`!0Fb|BmFurB9+$`oS~$c3FGtr+aD}inG|e*e*p=j*Ypv&MynkZ#$2< zP>$QK2^5X<5_X6zhc`2!>ksMd?XI(au6f!q93a54eX;X?TmDp{nfFn;4UGpjR#_hx zdDq!cYskIz;DxW}14H{h-+lVG0|yTuBReblAAgw1J{TVQ$f%amm9S&lEzCaJWsNlc zouz8+`Q16YbuZpNd(=p7>ZxH~dD(aN3Vcgn@pV8Bs5VbRiMjuX=J7Msyxtozqj`O* z6cn7UT$>;LYs6f3y;F%aGUwfn(!GP}28*?M38cik+i1^?!Oo4rneJ|Goz11Z3J^65 zGK+}{6*8?o@ccPBdC1^*sXf6}hJg>Jv^@0A3)qFN=``C;n77dzY<5qCY18ASc-F&^ zkdQ7tUT$uv4NV1`EyGt1zfKseqKs~CN~$>Ecm3wx;&32=1kDwmZAS&g)u!F!_g1tZ z!G9y<1`{|n@N}6}EhMyP2 zF$V7}9#UP=O>=iu!@S{Np1iDA&4pL-`mOv89}#XIgi#Y#=PN)0%Xc=@e8M!}hIxK8 z#ePhd+qPD~fZq-x%`WBL)JxMT*yeKt%}HS=PEO^^BAe-(^WuW~N}+OAh3kC+nIayA zR|87^vB7S%if6s2t7^On*NwQe(^3lX+l-}dNB;f<6mK6?(%Nk`?@*z?>&onOvo^T) zLg~}!tD{1LgFf_^IU&Q