From a94527339a138379889cb2dca94e6d31675947b3 Mon Sep 17 00:00:00 2001 From: tipscoinowner Date: Wed, 15 Apr 2026 00:16:36 +0300 Subject: [PATCH] recover pack 4.1 workspace and release tooling --- .env.example | 20 +- .gitignore | 16 +- README.MD | 50 +- README.md | 42 +- apps/dex-web/.env.example | 9 + apps/dex-web/.gitignore | 8 + apps/dex-web/README.md | 20 + apps/dex-web/components.json | 25 + apps/dex-web/index.html | 13 + apps/dex-web/metadata.json | 5 + apps/dex-web/package-lock.json | 8139 +++++++++++++++++ apps/dex-web/package.json | 45 + apps/dex-web/src/App.tsx | 74 + apps/dex-web/src/components/Navbar.tsx | 97 + apps/dex-web/src/components/PoolCard.tsx | 109 + apps/dex-web/src/components/SwapCard.tsx | 392 + apps/dex-web/src/components/ui/badge.tsx | 34 + apps/dex-web/src/components/ui/button.tsx | 58 + apps/dex-web/src/components/ui/card.tsx | 70 + apps/dex-web/src/components/ui/dialog.tsx | 160 + apps/dex-web/src/components/ui/input.tsx | 18 + .../dex-web/src/components/ui/scroll-area.tsx | 16 + apps/dex-web/src/components/ui/tabs.tsx | 80 + apps/dex-web/src/constants/tokens.ts | 55 + apps/dex-web/src/index.css | 108 + apps/dex-web/src/lib/utils.ts | 6 + apps/dex-web/src/lib/web3-provider.tsx | 25 + apps/dex-web/src/main.tsx | 10 + apps/dex-web/tsconfig.json | 26 + apps/dex-web/vite.config.ts | 37 + apps/wallet-web/.dockerignore | 13 + apps/wallet-web/.env.example | 9 + apps/wallet-web/.github/workflows/deploy.yml | 164 + apps/wallet-web/.gitignore | 8 + apps/wallet-web/DEPLOYMENT.md | 244 + apps/wallet-web/Dockerfile | 43 + apps/wallet-web/PIPELINE.md | 138 + apps/wallet-web/QUICKSTART.md | 319 + apps/wallet-web/README.md | 43 + apps/wallet-web/SETUP_CHECKLIST.md | 328 + apps/wallet-web/components.json | 25 + apps/wallet-web/components/ui/avatar.tsx | 109 + apps/wallet-web/components/ui/badge.tsx | 52 + apps/wallet-web/components/ui/button.tsx | 58 + apps/wallet-web/components/ui/card.tsx | 103 + apps/wallet-web/components/ui/dialog.tsx | 160 + .../components/ui/dropdown-menu.tsx | 266 + apps/wallet-web/components/ui/input.tsx | 20 + apps/wallet-web/components/ui/scroll-area.tsx | 55 + apps/wallet-web/components/ui/separator.tsx | 23 + apps/wallet-web/components/ui/sheet.tsx | 136 + apps/wallet-web/components/ui/tabs.tsx | 80 + apps/wallet-web/deploy-enhanced.sh | 234 + apps/wallet-web/deploy.sh | 166 + apps/wallet-web/docker-compose.yml | 59 + apps/wallet-web/index.html | 15 + apps/wallet-web/lib/utils.ts | 6 + apps/wallet-web/metadata.json | 5 + apps/wallet-web/nginx.conf | 22 + apps/wallet-web/package-lock.json | 8081 ++++++++++++++++ apps/wallet-web/package.json | 43 + apps/wallet-web/public/manifest.json | 15 + apps/wallet-web/public/token-icons/lp.svg | 23 + apps/wallet-web/public/token-icons/usdt.svg | 14 + apps/wallet-web/public/token-icons/usdtc.svg | 19 + apps/wallet-web/public/token-icons/wtpc.svg | 18 + apps/wallet-web/src/App.tsx | 112 + apps/wallet-web/src/components/DEX.tsx | 380 + apps/wallet-web/src/components/Icons.tsx | 56 + .../wallet-web/src/components/LandingPage.tsx | 237 + apps/wallet-web/src/components/Market.tsx | 157 + apps/wallet-web/src/components/Onboarding.tsx | 176 + apps/wallet-web/src/components/Sidebar.tsx | 142 + .../src/components/SplashScreen.tsx | 89 + .../src/components/ThemeProvider.tsx | 42 + .../src/components/WalletDashboard.tsx | 430 + apps/wallet-web/src/config.ts | 14 + .../src/context/TransactionContext.tsx | 70 + apps/wallet-web/src/index.css | 125 + apps/wallet-web/src/main.tsx | 10 + apps/wallet-web/src/types.ts | 27 + apps/wallet-web/tsconfig.json | 26 + apps/wallet-web/vite.config.ts | 35 + apps/wallet-web/vm-deploy.sh | 219 + config/site.json | 6 + extension/tipswallet-extension/README.md | 101 + .../tipswallet-extension/manifest.config.ts | 47 + extension/tipswallet-extension/package.json | 48 + .../tipswallet-extension/postcss.config.js | 6 + .../tipswallet-extension/public/icon-128.png | Bin 0 -> 13535 bytes .../tipswallet-extension/public/icon-16.png | Bin 0 -> 639 bytes .../tipswallet-extension/public/icon-32.png | Bin 0 -> 1579 bytes .../tipswallet-extension/public/icon-48.png | Bin 0 -> 2954 bytes .../src/assets/tipschain-logo.png | Bin 0 -> 19995 bytes .../src/assets/tipspay-dex-logo.png | Bin 0 -> 28099 bytes .../src/assets/tipswallet-logo.png | Bin 0 -> 20841 bytes .../src/assets/tpc-logo.png | Bin 0 -> 39180 bytes .../src/assets/usdt-logo.png | Bin 0 -> 37665 bytes .../src/assets/usdtc-logo.png | Bin 0 -> 46691 bytes .../src/assets/wtpc-logo.png | Bin 0 -> 45692 bytes .../src/background/index.ts | 615 ++ .../src/components/AssetRow.tsx | 28 + .../src/components/BrandHeader.tsx | 21 + .../src/components/EmptyState.tsx | 13 + .../src/components/ui.tsx | 74 + .../tipswallet-extension/src/content/index.ts | 22 + .../src/hooks/useBackground.ts | 3 + .../tipswallet-extension/src/inpage/index.ts | 70 + .../tipswallet-extension/src/lib/constants.ts | 101 + .../tipswallet-extension/src/lib/crypto.ts | 26 + .../tipswallet-extension/src/lib/storage.ts | 67 + .../tipswallet-extension/src/lib/utils.ts | 23 + .../tipswallet-extension/src/lib/wallet.ts | 102 + extension/tipswallet-extension/src/main.tsx | 16 + .../tipswallet-extension/src/options.html | 12 + .../tipswallet-extension/src/options.tsx | 4 + .../src/pages/ApprovalPage.tsx | 201 + .../src/pages/DashboardPage.tsx | 293 + .../src/pages/OnboardingPage.tsx | 99 + .../src/pages/UnlockPage.tsx | 42 + extension/tipswallet-extension/src/popup.html | 12 + extension/tipswallet-extension/src/popup.tsx | 49 + .../src/state/useWalletStore.ts | 20 + extension/tipswallet-extension/src/styles.css | 28 + .../tipswallet-extension/src/types/index.ts | 153 + .../store/assets/screenshot-brief.txt | 6 + .../store/chrome/listing.md | 34 + .../store/edge/listing.md | 18 + .../store/shared/permissions-justification.md | 19 + .../store/shared/privacy-policy.md | 32 + .../store/shared/release-checklist.md | 34 + .../store/shared/reviewer-notes.md | 17 + .../tipswallet-extension/tailwind.config.ts | 22 + .../tipswallet-extension/tsconfig.app.json | 23 + extension/tipswallet-extension/tsconfig.json | 7 + .../tipswallet-extension/tsconfig.node.json | 10 + extension/tipswallet-extension/vite.config.ts | 16 + harhat.config.js => hardhat.config.js | 82 +- package.json | 158 +- rail1-pack41/.env.example | 26 + rail1-pack41/.github/workflows/foundry.yml | 15 + rail1-pack41/.gitignore | 5 + rail1-pack41/README.md | 126 + rail1-pack41/config/core-reserved-names.json | 21 + rail1-pack41/contracts/TipsAssetGateway.sol | 77 + .../contracts/TipsGaslessTransferRouter.sol | 251 + rail1-pack41/contracts/TipsNameService.sol | 150 + .../contracts/TipsSponsorPaymaster.sol | 68 + .../contracts/TipsSupportedAssetsRegistry.sol | 77 + rail1-pack41/contracts/TipsTreasuryVault.sol | 25 + .../contracts/TipsWalletForwarder.sol | 79 + rail1-pack41/contracts/base/Owned.sol | 25 + rail1-pack41/contracts/base/Pausable.sol | 28 + .../contracts/governance/SimpleMultisig.sol | 99 + .../governance/TimelockControllerLite.sol | 99 + rail1-pack41/contracts/interfaces/IERC20.sol | 12 + .../contracts/interfaces/IERC20Permit.sol | 16 + .../contracts/interfaces/IPermit2.sol | 20 + .../interfaces/ITipsGaslessTransferRouter.sol | 34 + .../interfaces/ITipsSponsorPaymaster.sol | 6 + rail1-pack41/contracts/libs/ECDSA.sol | 33 + rail1-pack41/contracts/libs/Rail1Types.sol | 24 + rail1-pack41/contracts/mocks/MockERC20.sol | 58 + .../contracts/mocks/MockERC20Permit.sol | 46 + .../mocks/MockFeeOnTransferERC20.sol | 50 + rail1-pack41/contracts/mocks/MockPermit2.sol | 80 + rail1-pack41/docs/AUDIT_HARDENING.md | 44 + rail1-pack41/docs/FINAL_DEPLOY_CHECKLIST.md | 237 + rail1-pack41/docs/GOVERNANCE_CUTOVER_PLAN.md | 212 + rail1-pack41/docs/KEY_MANAGEMENT.md | 31 + rail1-pack41/docs/SECRET_HANDLING.md | 23 + .../docs/TIPSCHAIN_MAINNET_LAUNCH_RUNBOOK.md | 291 + rail1-pack41/foundry.toml | 19 + rail1-pack41/lib/forge-std/src/Script.sol | 6 + .../lib/forge-std/src/StdInvariant.sol | 6 + rail1-pack41/lib/forge-std/src/Test.sol | 30 + rail1-pack41/lib/forge-std/src/Vm.sol | 18 + rail1-pack41/script/ConfigureRail1.s.sol | 48 + rail1-pack41/script/DeployGovernance.s.sol | 32 + rail1-pack41/script/DeployRail1.s.sol | 48 + rail1-pack41/script/ReserveCoreNames.s.sol | 29 + .../TransferOwnershipToGovernance.s.sol | 27 + rail1-pack41/scripts/deploy-local.sh | 19 + rail1-pack41/scripts/deploy-tipspay.sh | 22 + rail1-pack41/scripts/governance-hardening.sh | 13 + rail1-pack41/scripts/reserve-core-names.sh | 18 + rail1-pack41/scripts/test-all.sh | 10 + rail1-pack41/services/kms-signer/.env.example | 4 + rail1-pack41/services/kms-signer/package.json | 18 + .../services/kms-signer/src/awsKmsSigner.ts | 43 + .../services/kms-signer/src/quoteSigner.ts | 50 + .../services/kms-signer/tsconfig.json | 12 + rail1-pack41/test/fork/Rail1ForkSmoke.t.sol | 13 + .../test/fork/Rail1TipschainFork.t.sol | 33 + rail1-pack41/test/fork/TipschainChainId.t.sol | 12 + .../test/fork/TipschainLiveAssetFork.t.sol | 32 + .../fuzz/TipsGaslessTransferRouterFuzz.t.sol | 31 + rail1-pack41/test/helpers/SigUtils.sol | 8 + .../test/invariant/Rail1Invariant.t.sol | 19 + .../test/unit/FeeOnTransferBlocklist.t.sol | 55 + rail1-pack41/test/unit/Governance.t.sol | 55 + rail1-pack41/test/unit/Rail1Base.t.sol | 220 + .../test/unit/TipsGaslessTransferRouter.t.sol | 207 + rail1-pack41/test/unit/TipsNameService.t.sol | 19 + .../unit/TipsNameServiceReservation.t.sol | 35 + scripts/package-dex-web.ps1 | 33 + scripts/package-extension.ps1 | 30 + scripts/package-pack41.ps1 | 23 + scripts/package-wallet-web.ps1 | 33 + scripts/write-release-manifest.js | 52 + 210 files changed, 29599 insertions(+), 181 deletions(-) create mode 100644 apps/dex-web/.env.example create mode 100644 apps/dex-web/.gitignore create mode 100644 apps/dex-web/README.md create mode 100644 apps/dex-web/components.json create mode 100644 apps/dex-web/index.html create mode 100644 apps/dex-web/metadata.json create mode 100644 apps/dex-web/package-lock.json create mode 100644 apps/dex-web/package.json create mode 100644 apps/dex-web/src/App.tsx create mode 100644 apps/dex-web/src/components/Navbar.tsx create mode 100644 apps/dex-web/src/components/PoolCard.tsx create mode 100644 apps/dex-web/src/components/SwapCard.tsx create mode 100644 apps/dex-web/src/components/ui/badge.tsx create mode 100644 apps/dex-web/src/components/ui/button.tsx create mode 100644 apps/dex-web/src/components/ui/card.tsx create mode 100644 apps/dex-web/src/components/ui/dialog.tsx create mode 100644 apps/dex-web/src/components/ui/input.tsx create mode 100644 apps/dex-web/src/components/ui/scroll-area.tsx create mode 100644 apps/dex-web/src/components/ui/tabs.tsx create mode 100644 apps/dex-web/src/constants/tokens.ts create mode 100644 apps/dex-web/src/index.css create mode 100644 apps/dex-web/src/lib/utils.ts create mode 100644 apps/dex-web/src/lib/web3-provider.tsx create mode 100644 apps/dex-web/src/main.tsx create mode 100644 apps/dex-web/tsconfig.json create mode 100644 apps/dex-web/vite.config.ts create mode 100644 apps/wallet-web/.dockerignore create mode 100644 apps/wallet-web/.env.example create mode 100644 apps/wallet-web/.github/workflows/deploy.yml create mode 100644 apps/wallet-web/.gitignore create mode 100644 apps/wallet-web/DEPLOYMENT.md create mode 100644 apps/wallet-web/Dockerfile create mode 100644 apps/wallet-web/PIPELINE.md create mode 100644 apps/wallet-web/QUICKSTART.md create mode 100644 apps/wallet-web/README.md create mode 100644 apps/wallet-web/SETUP_CHECKLIST.md create mode 100644 apps/wallet-web/components.json create mode 100644 apps/wallet-web/components/ui/avatar.tsx create mode 100644 apps/wallet-web/components/ui/badge.tsx create mode 100644 apps/wallet-web/components/ui/button.tsx create mode 100644 apps/wallet-web/components/ui/card.tsx create mode 100644 apps/wallet-web/components/ui/dialog.tsx create mode 100644 apps/wallet-web/components/ui/dropdown-menu.tsx create mode 100644 apps/wallet-web/components/ui/input.tsx create mode 100644 apps/wallet-web/components/ui/scroll-area.tsx create mode 100644 apps/wallet-web/components/ui/separator.tsx create mode 100644 apps/wallet-web/components/ui/sheet.tsx create mode 100644 apps/wallet-web/components/ui/tabs.tsx create mode 100644 apps/wallet-web/deploy-enhanced.sh create mode 100644 apps/wallet-web/deploy.sh create mode 100644 apps/wallet-web/docker-compose.yml create mode 100644 apps/wallet-web/index.html create mode 100644 apps/wallet-web/lib/utils.ts create mode 100644 apps/wallet-web/metadata.json create mode 100644 apps/wallet-web/nginx.conf create mode 100644 apps/wallet-web/package-lock.json create mode 100644 apps/wallet-web/package.json create mode 100644 apps/wallet-web/public/manifest.json create mode 100644 apps/wallet-web/public/token-icons/lp.svg create mode 100644 apps/wallet-web/public/token-icons/usdt.svg create mode 100644 apps/wallet-web/public/token-icons/usdtc.svg create mode 100644 apps/wallet-web/public/token-icons/wtpc.svg create mode 100644 apps/wallet-web/src/App.tsx create mode 100644 apps/wallet-web/src/components/DEX.tsx create mode 100644 apps/wallet-web/src/components/Icons.tsx create mode 100644 apps/wallet-web/src/components/LandingPage.tsx create mode 100644 apps/wallet-web/src/components/Market.tsx create mode 100644 apps/wallet-web/src/components/Onboarding.tsx create mode 100644 apps/wallet-web/src/components/Sidebar.tsx create mode 100644 apps/wallet-web/src/components/SplashScreen.tsx create mode 100644 apps/wallet-web/src/components/ThemeProvider.tsx create mode 100644 apps/wallet-web/src/components/WalletDashboard.tsx create mode 100644 apps/wallet-web/src/config.ts create mode 100644 apps/wallet-web/src/context/TransactionContext.tsx create mode 100644 apps/wallet-web/src/index.css create mode 100644 apps/wallet-web/src/main.tsx create mode 100644 apps/wallet-web/src/types.ts create mode 100644 apps/wallet-web/tsconfig.json create mode 100644 apps/wallet-web/vite.config.ts create mode 100644 apps/wallet-web/vm-deploy.sh create mode 100644 config/site.json create mode 100644 extension/tipswallet-extension/README.md create mode 100644 extension/tipswallet-extension/manifest.config.ts create mode 100644 extension/tipswallet-extension/package.json create mode 100644 extension/tipswallet-extension/postcss.config.js create mode 100644 extension/tipswallet-extension/public/icon-128.png create mode 100644 extension/tipswallet-extension/public/icon-16.png create mode 100644 extension/tipswallet-extension/public/icon-32.png create mode 100644 extension/tipswallet-extension/public/icon-48.png create mode 100644 extension/tipswallet-extension/src/assets/tipschain-logo.png create mode 100644 extension/tipswallet-extension/src/assets/tipspay-dex-logo.png create mode 100644 extension/tipswallet-extension/src/assets/tipswallet-logo.png create mode 100644 extension/tipswallet-extension/src/assets/tpc-logo.png create mode 100644 extension/tipswallet-extension/src/assets/usdt-logo.png create mode 100644 extension/tipswallet-extension/src/assets/usdtc-logo.png create mode 100644 extension/tipswallet-extension/src/assets/wtpc-logo.png create mode 100644 extension/tipswallet-extension/src/background/index.ts create mode 100644 extension/tipswallet-extension/src/components/AssetRow.tsx create mode 100644 extension/tipswallet-extension/src/components/BrandHeader.tsx create mode 100644 extension/tipswallet-extension/src/components/EmptyState.tsx create mode 100644 extension/tipswallet-extension/src/components/ui.tsx create mode 100644 extension/tipswallet-extension/src/content/index.ts create mode 100644 extension/tipswallet-extension/src/hooks/useBackground.ts create mode 100644 extension/tipswallet-extension/src/inpage/index.ts create mode 100644 extension/tipswallet-extension/src/lib/constants.ts create mode 100644 extension/tipswallet-extension/src/lib/crypto.ts create mode 100644 extension/tipswallet-extension/src/lib/storage.ts create mode 100644 extension/tipswallet-extension/src/lib/utils.ts create mode 100644 extension/tipswallet-extension/src/lib/wallet.ts create mode 100644 extension/tipswallet-extension/src/main.tsx create mode 100644 extension/tipswallet-extension/src/options.html create mode 100644 extension/tipswallet-extension/src/options.tsx create mode 100644 extension/tipswallet-extension/src/pages/ApprovalPage.tsx create mode 100644 extension/tipswallet-extension/src/pages/DashboardPage.tsx create mode 100644 extension/tipswallet-extension/src/pages/OnboardingPage.tsx create mode 100644 extension/tipswallet-extension/src/pages/UnlockPage.tsx create mode 100644 extension/tipswallet-extension/src/popup.html create mode 100644 extension/tipswallet-extension/src/popup.tsx create mode 100644 extension/tipswallet-extension/src/state/useWalletStore.ts create mode 100644 extension/tipswallet-extension/src/styles.css create mode 100644 extension/tipswallet-extension/src/types/index.ts create mode 100644 extension/tipswallet-extension/store/assets/screenshot-brief.txt create mode 100644 extension/tipswallet-extension/store/chrome/listing.md create mode 100644 extension/tipswallet-extension/store/edge/listing.md create mode 100644 extension/tipswallet-extension/store/shared/permissions-justification.md create mode 100644 extension/tipswallet-extension/store/shared/privacy-policy.md create mode 100644 extension/tipswallet-extension/store/shared/release-checklist.md create mode 100644 extension/tipswallet-extension/store/shared/reviewer-notes.md create mode 100644 extension/tipswallet-extension/tailwind.config.ts create mode 100644 extension/tipswallet-extension/tsconfig.app.json create mode 100644 extension/tipswallet-extension/tsconfig.json create mode 100644 extension/tipswallet-extension/tsconfig.node.json create mode 100644 extension/tipswallet-extension/vite.config.ts rename harhat.config.js => hardhat.config.js (78%) create mode 100644 rail1-pack41/.env.example create mode 100644 rail1-pack41/.github/workflows/foundry.yml create mode 100644 rail1-pack41/.gitignore create mode 100644 rail1-pack41/README.md create mode 100644 rail1-pack41/config/core-reserved-names.json create mode 100644 rail1-pack41/contracts/TipsAssetGateway.sol create mode 100644 rail1-pack41/contracts/TipsGaslessTransferRouter.sol create mode 100644 rail1-pack41/contracts/TipsNameService.sol create mode 100644 rail1-pack41/contracts/TipsSponsorPaymaster.sol create mode 100644 rail1-pack41/contracts/TipsSupportedAssetsRegistry.sol create mode 100644 rail1-pack41/contracts/TipsTreasuryVault.sol create mode 100644 rail1-pack41/contracts/TipsWalletForwarder.sol create mode 100644 rail1-pack41/contracts/base/Owned.sol create mode 100644 rail1-pack41/contracts/base/Pausable.sol create mode 100644 rail1-pack41/contracts/governance/SimpleMultisig.sol create mode 100644 rail1-pack41/contracts/governance/TimelockControllerLite.sol create mode 100644 rail1-pack41/contracts/interfaces/IERC20.sol create mode 100644 rail1-pack41/contracts/interfaces/IERC20Permit.sol create mode 100644 rail1-pack41/contracts/interfaces/IPermit2.sol create mode 100644 rail1-pack41/contracts/interfaces/ITipsGaslessTransferRouter.sol create mode 100644 rail1-pack41/contracts/interfaces/ITipsSponsorPaymaster.sol create mode 100644 rail1-pack41/contracts/libs/ECDSA.sol create mode 100644 rail1-pack41/contracts/libs/Rail1Types.sol create mode 100644 rail1-pack41/contracts/mocks/MockERC20.sol create mode 100644 rail1-pack41/contracts/mocks/MockERC20Permit.sol create mode 100644 rail1-pack41/contracts/mocks/MockFeeOnTransferERC20.sol create mode 100644 rail1-pack41/contracts/mocks/MockPermit2.sol create mode 100644 rail1-pack41/docs/AUDIT_HARDENING.md create mode 100644 rail1-pack41/docs/FINAL_DEPLOY_CHECKLIST.md create mode 100644 rail1-pack41/docs/GOVERNANCE_CUTOVER_PLAN.md create mode 100644 rail1-pack41/docs/KEY_MANAGEMENT.md create mode 100644 rail1-pack41/docs/SECRET_HANDLING.md create mode 100644 rail1-pack41/docs/TIPSCHAIN_MAINNET_LAUNCH_RUNBOOK.md create mode 100644 rail1-pack41/foundry.toml create mode 100644 rail1-pack41/lib/forge-std/src/Script.sol create mode 100644 rail1-pack41/lib/forge-std/src/StdInvariant.sol create mode 100644 rail1-pack41/lib/forge-std/src/Test.sol create mode 100644 rail1-pack41/lib/forge-std/src/Vm.sol create mode 100644 rail1-pack41/script/ConfigureRail1.s.sol create mode 100644 rail1-pack41/script/DeployGovernance.s.sol create mode 100644 rail1-pack41/script/DeployRail1.s.sol create mode 100644 rail1-pack41/script/ReserveCoreNames.s.sol create mode 100644 rail1-pack41/script/TransferOwnershipToGovernance.s.sol create mode 100644 rail1-pack41/scripts/deploy-local.sh create mode 100644 rail1-pack41/scripts/deploy-tipspay.sh create mode 100644 rail1-pack41/scripts/governance-hardening.sh create mode 100644 rail1-pack41/scripts/reserve-core-names.sh create mode 100644 rail1-pack41/scripts/test-all.sh create mode 100644 rail1-pack41/services/kms-signer/.env.example create mode 100644 rail1-pack41/services/kms-signer/package.json create mode 100644 rail1-pack41/services/kms-signer/src/awsKmsSigner.ts create mode 100644 rail1-pack41/services/kms-signer/src/quoteSigner.ts create mode 100644 rail1-pack41/services/kms-signer/tsconfig.json create mode 100644 rail1-pack41/test/fork/Rail1ForkSmoke.t.sol create mode 100644 rail1-pack41/test/fork/Rail1TipschainFork.t.sol create mode 100644 rail1-pack41/test/fork/TipschainChainId.t.sol create mode 100644 rail1-pack41/test/fork/TipschainLiveAssetFork.t.sol create mode 100644 rail1-pack41/test/fuzz/TipsGaslessTransferRouterFuzz.t.sol create mode 100644 rail1-pack41/test/helpers/SigUtils.sol create mode 100644 rail1-pack41/test/invariant/Rail1Invariant.t.sol create mode 100644 rail1-pack41/test/unit/FeeOnTransferBlocklist.t.sol create mode 100644 rail1-pack41/test/unit/Governance.t.sol create mode 100644 rail1-pack41/test/unit/Rail1Base.t.sol create mode 100644 rail1-pack41/test/unit/TipsGaslessTransferRouter.t.sol create mode 100644 rail1-pack41/test/unit/TipsNameService.t.sol create mode 100644 rail1-pack41/test/unit/TipsNameServiceReservation.t.sol create mode 100644 scripts/package-dex-web.ps1 create mode 100644 scripts/package-extension.ps1 create mode 100644 scripts/package-pack41.ps1 create mode 100644 scripts/package-wallet-web.ps1 create mode 100644 scripts/write-release-manifest.js diff --git a/.env.example b/.env.example index 4376ff6..d2c5da1 100644 --- a/.env.example +++ b/.env.example @@ -1,11 +1,9 @@ -cat > ~/tips-ecosystem/.env.example << 'EOF' -# Private Key (DO NOT COMMIT .env FILE) -PRIVATE_KEY=your_private_key_here - -# Network RPC URLs -MAINNET_RPC_URL=https://mainnet.infura.io/v3/YOUR_KEY -TESTNET_RPC_URL=https://sepolia.infura.io/v3/YOUR_KEY - -# Etherscan API Key (for verification) -ETHERSCAN_API_KEY=your_etherscan_api_key -EOF \ No newline at end of file +# Private key for deployment scripts +PRIVATE_KEY=your_private_key_here + +# Network RPC URLs +MAINNET_RPC_URL=https://mainnet.infura.io/v3/YOUR_KEY +TESTNET_RPC_URL=https://sepolia.infura.io/v3/YOUR_KEY + +# Block explorer verification +ETHERSCAN_API_KEY=your_etherscan_api_key diff --git a/.gitignore b/.gitignore index 95f9ebb..f689a70 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -cat > ~/tips-ecosystem/.gitignore << 'EOF' # Dependencies node_modules/ @@ -6,11 +5,6 @@ node_modules/ cache/ artifacts/ -# Build artifacts -.next/ -dist/ -build/ - # Environment .env .env.local @@ -36,4 +30,12 @@ coverage.json # Temporary tmp/ temp/ -EOF + +# Next.js and packaged outputs +.next/ +dist/ +apps/*/node_modules/ +apps/*/dist/ +rail1-pack41/cache/ +rail1-pack41/out/ +rail1-pack41/broadcast/ diff --git a/README.MD b/README.MD index a1d5061..ee07ed2 100644 --- a/README.MD +++ b/README.MD @@ -1,26 +1,24 @@ -cat > ~/tips-ecosystem/README.md << 'EOF' -# Tips Ecosystem L1 - -Decentralized Tipping Blockchain - A complete ecosystem for content creator tips and rewards. - -## 🚀 Features - -- **TipCoin (TPC)**: Native ERC20 token (1 Billion supply) -- **USDTC**: Stablecoin for USD-pegged tips -- **TrustedForwarder**: Gasless meta-transaction support -- **TipsNameService**: Human-readable address names - -## 📦 Installation - -```bash -# Clone repository -git clone https://github.com/TheArchitect/tips-ecosystem.git -cd tips-ecosystem - -# Install dependencies -npm install - -# Copy environment file -cp .env.example .env - -# Edit .env with your private key and RPC URLs +# Tipschain Ecosystem + +Recovered workspace for the Tipschain production stack. + +## Included surfaces +- `apps/wallet-web/` for the wallet web app +- `apps/dex-web/` for the DEX web app +- `extension/tipswallet-extension/` for the browser extension source snapshot +- `rail1-pack41/` for the Pack 4.1 rail contracts and services + +## Root release commands +```bash +npm run wallet:lint +npm run wallet:build +npm run dex:lint +npm run dex:build +npm run release:4.1 +``` + +## Notes +- The Git base was restored from `tipspay-dev/tipschain-ecosystem`. +- Wallet source was recovered from a newer local `TipsWallet` checkout. +- DEX source was recovered from `tipspay-dev/TipspayDEX`. +- Extension and `rail1-pack41` were recovered from local backup/download snapshots. diff --git a/README.md b/README.md index e653a08..ee07ed2 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,24 @@ -cat > ~/tips-ecosystem/README.md << 'EOF' -# Tips Ecosystem L1 +# Tipschain Ecosystem -Decentralized Tipping Blockchain - A complete ecosystem for content creator tips and rewards. +Recovered workspace for the Tipschain production stack. -## 🚀 Features - -- **TipCoin (TPC)**: Native ERC20 token (1 Billion supply) -- **USDTC**: Stablecoin for USD-pegged tips -- **TrustedForwarder**: Gasless meta-transaction support -- **TipsNameService**: Human-readable address names - -## 📦 Installation +## Included surfaces +- `apps/wallet-web/` for the wallet web app +- `apps/dex-web/` for the DEX web app +- `extension/tipswallet-extension/` for the browser extension source snapshot +- `rail1-pack41/` for the Pack 4.1 rail contracts and services +## Root release commands ```bash -# Clone repository -git clone https://github.com/TheArchitect/tips-ecosystem.git -cd tips-ecosystem - -# Install dependencies -npm install - -# Copy environment file -cp .env.example .env - -# Edit .env with your private key and RPC URLs +npm run wallet:lint +npm run wallet:build +npm run dex:lint +npm run dex:build +npm run release:4.1 +``` + +## Notes +- The Git base was restored from `tipspay-dev/tipschain-ecosystem`. +- Wallet source was recovered from a newer local `TipsWallet` checkout. +- DEX source was recovered from `tipspay-dev/TipspayDEX`. +- Extension and `rail1-pack41` were recovered from local backup/download snapshots. diff --git a/apps/dex-web/.env.example b/apps/dex-web/.env.example new file mode 100644 index 0000000..7a550fe --- /dev/null +++ b/apps/dex-web/.env.example @@ -0,0 +1,9 @@ +# GEMINI_API_KEY: Required for Gemini AI API calls. +# AI Studio automatically injects this at runtime from user secrets. +# Users configure this via the Secrets panel in the AI Studio UI. +GEMINI_API_KEY="MY_GEMINI_API_KEY" + +# APP_URL: The URL where this applet is hosted. +# AI Studio automatically injects this at runtime with the Cloud Run service URL. +# Used for self-referential links, OAuth callbacks, and API endpoints. +APP_URL="MY_APP_URL" diff --git a/apps/dex-web/.gitignore b/apps/dex-web/.gitignore new file mode 100644 index 0000000..5a86d2a --- /dev/null +++ b/apps/dex-web/.gitignore @@ -0,0 +1,8 @@ +node_modules/ +build/ +dist/ +coverage/ +.DS_Store +*.log +.env* +!.env.example diff --git a/apps/dex-web/README.md b/apps/dex-web/README.md new file mode 100644 index 0000000..691e3c8 --- /dev/null +++ b/apps/dex-web/README.md @@ -0,0 +1,20 @@ +
+GHBanner +
+ +# Run and deploy your AI Studio app + +This contains everything you need to run your app locally. + +View your app in AI Studio: https://ai.studio/apps/18fc0ba5-a21f-4b07-8f0c-768bf359d906 + +## Run Locally + +**Prerequisites:** Node.js + + +1. Install dependencies: + `npm install` +2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key +3. Run the app: + `npm run dev` diff --git a/apps/dex-web/components.json b/apps/dex-web/components.json new file mode 100644 index 0000000..15addee --- /dev/null +++ b/apps/dex-web/components.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "base-nova", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/index.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "rtl": false, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "menuColor": "default", + "menuAccent": "subtle", + "registries": {} +} diff --git a/apps/dex-web/index.html b/apps/dex-web/index.html new file mode 100644 index 0000000..21dfe69 --- /dev/null +++ b/apps/dex-web/index.html @@ -0,0 +1,13 @@ + + + + + + My Google AI Studio App + + +
+ + + + diff --git a/apps/dex-web/metadata.json b/apps/dex-web/metadata.json new file mode 100644 index 0000000..9030886 --- /dev/null +++ b/apps/dex-web/metadata.json @@ -0,0 +1,5 @@ +{ + "name": "Tipschain DEX", + "description": "A high-performance Uniswap-style DEX for Tipschain with V1, V2, and V3 liquidity pools. Features swap, liquidity management, and real-time blockchain integration.", + "requestFramePermissions": [] +} diff --git a/apps/dex-web/package-lock.json b/apps/dex-web/package-lock.json new file mode 100644 index 0000000..3acb28c --- /dev/null +++ b/apps/dex-web/package-lock.json @@ -0,0 +1,8139 @@ +{ + "name": "react-example", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "react-example", + "version": "0.0.0", + "dependencies": { + "@base-ui/react": "^1.3.0", + "@fontsource-variable/geist": "^5.2.8", + "@google/genai": "^1.29.0", + "@tailwindcss/vite": "^4.1.14", + "@tanstack/react-query": "^5.96.2", + "@vitejs/plugin-react": "^5.0.4", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "dotenv": "^17.2.3", + "ethers": "^6.16.0", + "express": "^4.21.2", + "lucide-react": "^0.546.0", + "motion": "^12.38.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "shadcn": "^4.2.0", + "tailwind-merge": "^3.5.0", + "tw-animate-css": "^1.4.0", + "viem": "^2.47.11", + "vite": "^6.2.0", + "wagmi": "^3.6.1" + }, + "devDependencies": { + "@types/express": "^4.17.21", + "@types/node": "^22.14.0", + "autoprefixer": "^10.4.21", + "tailwindcss": "^4.1.14", + "tsx": "^4.21.0", + "typescript": "~5.8.2", + "vite": "^6.2.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "license": "MIT" + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "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" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", + "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@base-ui/react": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@base-ui/react/-/react-1.3.0.tgz", + "integrity": "sha512-FwpKqZbPz14AITp1CVgf4AjhKPe1OeeVKSBMdgD10zbFlj3QSWelmtCMLi2+/PFZZcIm3l87G7rwtCZJwHyXWA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.6", + "@base-ui/utils": "0.2.6", + "@floating-ui/react-dom": "^2.1.8", + "@floating-ui/utils": "^0.2.11", + "tabbable": "^6.4.0", + "use-sync-external-store": "^1.6.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17 || ^18 || ^19", + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@base-ui/react/node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@base-ui/utils": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@base-ui/utils/-/utils-0.2.6.tgz", + "integrity": "sha512-yQ+qeuqohwhsNpoYDqqXaLllYAkPCP4vYdDrVo8FQXaAPfHWm1pG/Vm+jmGTA5JFS0BAIjookyapuJFY8F9PIw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.6", + "@floating-ui/utils": "^0.2.11", + "reselect": "^5.1.1", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "@types/react": "^17 || ^18 || ^19", + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@base-ui/utils/node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@dotenvx/dotenvx": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.61.0.tgz", + "integrity": "sha512-utL3cpZoFzflyqUkjYbxYujI6STBTmO5LFn4bbin/NZnRWN6wQ7eErhr3/Vpa5h/jicPFC6kTa42r940mQftJQ==", + "license": "BSD-3-Clause", + "dependencies": { + "commander": "^11.1.0", + "dotenv": "^17.2.1", + "eciesjs": "^0.4.10", + "execa": "^5.1.1", + "fdir": "^6.2.0", + "ignore": "^5.3.0", + "object-treeify": "1.1.33", + "picomatch": "^4.0.2", + "which": "^4.0.0", + "yocto-spinner": "^1.1.0" + }, + "bin": { + "dotenvx": "src/cli/dotenvx.js" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@dotenvx/dotenvx/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==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@dotenvx/dotenvx/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==", + "license": "ISC" + }, + "node_modules/@dotenvx/dotenvx/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==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@ecies/ciphers": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@ecies/ciphers/-/ciphers-0.2.6.tgz", + "integrity": "sha512-patgsRPKGkhhoBjETV4XxD0En4ui5fbX0hzayqI3M8tvNMGUoUvmyYAIWwlxBc1KX5cturfqByYdj5bYGRpN9g==", + "license": "MIT", + "engines": { + "bun": ">=1", + "deno": ">=2.7.10", + "node": ">=16" + }, + "peerDependencies": { + "@noble/ciphers": "^1.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", + "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.6" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, + "node_modules/@fontsource-variable/geist": { + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource-variable/geist/-/geist-5.2.8.tgz", + "integrity": "sha512-cJ6m9e+8MQ5dCYJsLylfZrgBh6KkG4bOLckB35Tr9J/EqdkEM6QllH5PxqP1dhTvFup+HtMRPuz9xOjxXJggxw==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@google/genai": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.49.0.tgz", + "integrity": "sha512-hO69Zl0H3x+L0KL4stl1pLYgnqnwHoLqtKy6MRlNnW8TAxjqMdOUVafomKd4z1BePkzoxJWbYILny9a2Zk43VQ==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^10.3.0", + "p-retry": "^4.6.2", + "protobufjs": "^7.5.4", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@modelcontextprotocol/sdk": "^1.25.2" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/sdk": { + "optional": true + } + } + }, + "node_modules/@hono/node-server": { + "version": "1.19.13", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.13.tgz", + "integrity": "sha512-TsQLe4i2gvoTtrHje625ngThGBySOgSK3Xo2XRYOdqGN1teR8+I7vchQC46uLJi8OF62YTYA3AhSpumtkhsaKQ==", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz", + "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@hono/node-server": "^1.19.9", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/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/@modelcontextprotocol/sdk/node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { + "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", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "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/@modelcontextprotocol/sdk/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/@modelcontextprotocol/sdk/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/@modelcontextprotocol/sdk/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/@modelcontextprotocol/sdk/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": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/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/@modelcontextprotocol/sdk/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", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mswjs/interceptors": { + "version": "0.41.3", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.41.3.tgz", + "integrity": "sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==", + "license": "MIT", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@noble/ciphers": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", + "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "license": "MIT" + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "license": "MIT", + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", + "license": "MIT" + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", + "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", + "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.9.0", + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", + "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", + "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.2" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz", + "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.2", + "@tailwindcss/oxide-darwin-arm64": "4.2.2", + "@tailwindcss/oxide-darwin-x64": "4.2.2", + "@tailwindcss/oxide-freebsd-x64": "4.2.2", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", + "@tailwindcss/oxide-linux-x64-musl": "4.2.2", + "@tailwindcss/oxide-wasm32-wasi": "4.2.2", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz", + "integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz", + "integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz", + "integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz", + "integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz", + "integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz", + "integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz", + "integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", + "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz", + "integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz", + "integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", + "integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz", + "integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.2.tgz", + "integrity": "sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.2.2", + "@tailwindcss/oxide": "4.2.2", + "tailwindcss": "4.2.2" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.96.2", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.96.2.tgz", + "integrity": "sha512-hzI6cTVh4KNRk8UtoIBS7Lv9g6BnJPXvBKsvYH1aGWvv0347jT3BnSvztOE+kD76XGvZnRC/t6qdW1CaIfwCeA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.96.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.96.2.tgz", + "integrity": "sha512-sYyzzJT4G0g02azzJ8o55VFFV31XvFpdUpG+unxS0vSaYsJnSPKGoI6WdPwUucJL1wpgGfwfmntNX/Ub1uOViA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@tanstack/query-core": "5.96.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@ts-morph/common": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.27.0.tgz", + "integrity": "sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==", + "license": "MIT", + "dependencies": { + "fast-glob": "^3.3.3", + "minimatch": "^10.0.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "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": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "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/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.19.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.17.tgz", + "integrity": "sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "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.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/statuses": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.6.tgz", + "integrity": "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==", + "license": "MIT" + }, + "node_modules/@types/validate-npm-package-name": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/validate-npm-package-name/-/validate-npm-package-name-4.0.2.tgz", + "integrity": "sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.2.0.tgz", + "integrity": "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.29.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-rc.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@wagmi/connectors": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@wagmi/connectors/-/connectors-8.0.1.tgz", + "integrity": "sha512-Rga0EDdcdUBlKtlUUPdBPAIlaFIkO8q0xcNObN/Q/CloM1zaruSFht1q3IaJKrytIDkncQa9uhHU6/imzysvpQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "@base-org/account": "^2.5.1", + "@coinbase/wallet-sdk": "^4.3.6", + "@metamask/connect-evm": "~0.9.0", + "@safe-global/safe-apps-provider": "~0.18.6", + "@safe-global/safe-apps-sdk": "^9.1.0", + "@wagmi/core": "3.4.2", + "@walletconnect/ethereum-provider": "^2.21.1", + "porto": "~0.2.35", + "typescript": ">=5.7.3", + "viem": "2.x" + }, + "peerDependenciesMeta": { + "@base-org/account": { + "optional": true + }, + "@coinbase/wallet-sdk": { + "optional": true + }, + "@metamask/connect-evm": { + "optional": true + }, + "@safe-global/safe-apps-provider": { + "optional": true + }, + "@safe-global/safe-apps-sdk": { + "optional": true + }, + "@walletconnect/ethereum-provider": { + "optional": true + }, + "porto": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@wagmi/core": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@wagmi/core/-/core-3.4.2.tgz", + "integrity": "sha512-01i0ILBe74G8eairY2AIKC4Atrd00xw7EckZ5luU1ARl/6789UH79wXHwJDkHyktXtjn6QoSoBRW2brtlS8SWg==", + "license": "MIT", + "peer": true, + "dependencies": { + "eventemitter3": "5.0.1", + "mipd": "0.0.7", + "zustand": "5.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "@tanstack/query-core": ">=5.0.0", + "ox": ">=0.11.1", + "typescript": ">=5.7.3", + "viem": "2.x" + }, + "peerDependenciesMeta": { + "@tanstack/query-core": { + "optional": true + }, + "ox": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/abitype": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.2.3.tgz", + "integrity": "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3.22.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "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==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "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/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.27", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "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.28.1", + "caniuse-lite": "^1.0.30001774", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.16", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.16.tgz", + "integrity": "sha512-Lyf3aK28zpsD1yQMiiHD4RvVb6UdMoo8xzG2XzFIfR9luPzOpcBlAsT/qfB1XWS1bxWT+UtE4WmQgsp297FYOA==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001787", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001787.tgz", + "integrity": "sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "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==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/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==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/code-block-writer": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", + "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==", + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", + "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dotenv": { + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.1.tgz", + "integrity": "sha512-k8DaKGP6r1G30Lx8V4+pCsLzKr8vLmV2paqEj1Y55GdAgJuIqpRp5FfajGF8KtwMxCz9qJc6wUIJnm053d/WCw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/eciesjs": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.18.tgz", + "integrity": "sha512-wG99Zcfcys9fZux7Cft8BAX/YrOJLJSZ3jyYPfhZHqN2E+Ffx+QXBDsv3gubEgPtV6dTzJMSQUwk1H98/t/0wQ==", + "license": "MIT", + "dependencies": { + "@ecies/ciphers": "^0.2.5", + "@noble/ciphers": "^1.3.0", + "@noble/curves": "^1.9.7", + "@noble/hashes": "^1.8.0" + }, + "engines": { + "bun": ">=1", + "deno": ">=2", + "node": ">=16" + } + }, + "node_modules/eciesjs/node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/eciesjs/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.334", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.334.tgz", + "integrity": "sha512-mgjZAz7Jyx1SRCwEpy9wefDS7GvNPazLthHg8eQMJ76wBdGQQDW33TCrUTvQ4wzpmOrv2zrFoD3oNufMdyMpog==", + "license": "ISC" + }, + "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==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "devOptional": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ethers": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", + "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/ethers/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/ethers/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, + "node_modules/ethers/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "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/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/execa": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.2.tgz", + "integrity": "sha512-77VmFeJkO0/rvimEDuUC5H30oqUC4EyOhyGccfqoLebB0oiEYfM7nwPrsDsBL1gsTpwfzX8SFy2MT3TDyRq+bg==", + "license": "MIT", + "dependencies": { + "ip-address": "10.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "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/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/framer-motion": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.38.0.tgz", + "integrity": "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.38.0", + "motion-utils": "^12.36.0", + "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": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuzzysort": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fuzzysort/-/fuzzysort-3.1.0.tgz", + "integrity": "sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==", + "license": "MIT" + }, + "node_modules/gaxios": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.4.tgz", + "integrity": "sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==", + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/gcp-metadata": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", + "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", + "license": "Apache-2.0", + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-own-enumerable-keys/-/get-own-enumerable-keys-1.0.0.tgz", + "integrity": "sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.7", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz", + "integrity": "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "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/google-auth-library": { + "version": "10.6.2", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.6.2.tgz", + "integrity": "sha512-e27Z6EThmVNNvtYASwQxose/G57rkRuaRbQyxM2bvYLLX/GqWZ5chWq2EBoUchJbCc57eC9ArzO5wMsEmWftCw==", + "license": "Apache-2.0", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.1.4", + "gcp-metadata": "8.1.2", + "google-logging-utils": "1.1.3", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/google-logging-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", + "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphql": { + "version": "16.13.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz", + "integrity": "sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/headers-polyfill": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", + "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", + "license": "MIT" + }, + "node_modules/hono": { + "version": "4.12.12", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.12.tgz", + "integrity": "sha512-p1JfQMKaceuCbpJKAPKVqyqviZdS0eUxH9v82oWo1kb9xjQ5wA6iP3FNVAPDFlz5/p7d45lO+BpSk1tuSZMF4Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-in-ssh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-3.0.0.tgz", + "integrity": "sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-regexp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz", + "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/isows": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.7.tgz", + "integrity": "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/jose": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.2.tgz", + "integrity": "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "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==", + "license": "MIT" + }, + "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==", + "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==", + "license": "BSD-2-Clause" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jwa": { + "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", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "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": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "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.546.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.546.0.tgz", + "integrity": "sha512-Z94u6fKT43lKeYHiVyvyR8fT7pwCzDu7RyMPpTvh054+xahSgj4HFQ+NmflvzdXsoAjYGdCguGaFKYuvq0ThCQ==", + "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==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.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": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "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==", + "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/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "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==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/mipd": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mipd/-/mipd-0.0.7.tgz", + "integrity": "sha512-aAPZPNDQ3uMTdKbuO2YmAw2TxLHO0moa4YKAyETM/DTj5FloZo+a+8tU+iv4GmW+sOxKLSRwcSFuczk+Cpt6fg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "license": "MIT", + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/motion": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.38.0.tgz", + "integrity": "sha512-uYfXzeHlgThchzwz5Te47dlv5JOUC7OB4rjJ/7XTUgtBZD8CchMN8qEJ4ZVsUmTyYA44zjV0fBwsiktRuFnn+w==", + "license": "MIT", + "dependencies": { + "framer-motion": "^12.38.0", + "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/motion-dom": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.38.0.tgz", + "integrity": "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.36.0" + } + }, + "node_modules/motion-utils": { + "version": "12.36.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.36.0.tgz", + "integrity": "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==", + "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/msw": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.13.2.tgz", + "integrity": "sha512-go2H1TIERKkC48pXiwec5l6sbNqYuvqOk3/vHGo1Zd+pq/H63oFawDQerH+WQdUw/flJFHDG7F+QdWMwhntA/A==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@inquirer/confirm": "^5.0.0", + "@mswjs/interceptors": "^0.41.2", + "@open-draft/deferred-promise": "^2.2.0", + "@types/statuses": "^2.0.6", + "cookie": "^1.0.2", + "graphql": "^16.12.0", + "headers-polyfill": "^4.0.2", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", + "rettime": "^0.10.1", + "statuses": "^2.0.2", + "strict-event-emitter": "^0.5.1", + "tough-cookie": "^6.0.0", + "type-fest": "^5.2.0", + "until-async": "^3.0.2", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mswjs" + }, + "peerDependencies": { + "typescript": ">= 4.8.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/msw/node_modules/cookie": { + "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/msw/node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.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/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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-releases": { + "version": "2.0.37", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", + "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", + "license": "MIT" + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "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": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", + "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.4.0", + "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", + "is-inside-container": "^1.0.0", + "powershell-utils": "^0.1.0", + "wsl-utils": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "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" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/outvariant": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", + "license": "MIT" + }, + "node_modules/ox": { + "version": "0.14.13", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.14.13.tgz", + "integrity": "sha512-N3slDyEUq3qGw/53Xd8YZPZD7NUbbiOJDeWKvQ1ElNo2mFjjz6cV2TIbGenHw7k5ATcefDQh42dwUWoGtxU9Hg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "^1.11.0", + "@noble/ciphers": "^1.3.0", + "@noble/curves": "1.9.1", + "@noble/hashes": "^1.8.0", + "@scure/bip32": "^1.7.0", + "@scure/bip39": "^1.6.0", + "abitype": "^1.2.3", + "eventemitter3": "5.0.1" + }, + "peerDependencies": { + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/ox/node_modules/@adraffy/ens-normalize": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz", + "integrity": "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==", + "license": "MIT" + }, + "node_modules/ox/node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ox/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "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": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, + "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": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", + "license": "MIT" + }, + "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.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/postcss": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.9.tgz", + "integrity": "sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==", + "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" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.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==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/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": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", + "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz", + "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==", + "license": "MIT", + "peer": true, + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.5" + } + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/recast": { + "version": "0.23.11", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", + "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", + "license": "MIT", + "dependencies": { + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, + "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==", + "devOptional": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rettime": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/rettime/-/rettime-0.10.1.tgz", + "integrity": "sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw==", + "license": "MIT" + }, + "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/rollup": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", + "fsevents": "~2.3.2" + } + }, + "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" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/router/node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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" + } + }, + "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/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/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.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/shadcn": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/shadcn/-/shadcn-4.2.0.tgz", + "integrity": "sha512-ZDuV340itidaUd4Gi1BxQX+Y7Ush6BHp6URZBM2RyxUUBZ6yFtOWIr4nVY+Ro+YRSpo82v7JrsmtcU5xoBCMJQ==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/plugin-transform-typescript": "^7.28.0", + "@babel/preset-typescript": "^7.27.1", + "@dotenvx/dotenvx": "^1.48.4", + "@modelcontextprotocol/sdk": "^1.26.0", + "@types/validate-npm-package-name": "^4.0.2", + "browserslist": "^4.26.2", + "commander": "^14.0.0", + "cosmiconfig": "^9.0.0", + "dedent": "^1.6.0", + "deepmerge": "^4.3.1", + "diff": "^8.0.2", + "execa": "^9.6.0", + "fast-glob": "^3.3.3", + "fs-extra": "^11.3.1", + "fuzzysort": "^3.1.0", + "https-proxy-agent": "^7.0.6", + "kleur": "^4.1.5", + "msw": "^2.10.4", + "node-fetch": "^3.3.2", + "open": "^11.0.0", + "ora": "^8.2.0", + "postcss": "^8.5.6", + "postcss-selector-parser": "^7.1.0", + "prompts": "^2.4.2", + "recast": "^0.23.11", + "stringify-object": "^5.0.0", + "tailwind-merge": "^3.0.1", + "ts-morph": "^26.0.0", + "tsconfig-paths": "^4.2.0", + "validate-npm-package-name": "^7.0.1", + "zod": "^3.24.1", + "zod-to-json-schema": "^3.24.6" + }, + "bin": { + "shadcn": "dist/index.js" + } + }, + "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", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "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" + } + }, + "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==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-5.0.0.tgz", + "integrity": "sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg==", + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-keys": "^1.0.0", + "is-obj": "^3.0.0", + "is-regexp": "^3.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/yeoman/stringify-object?sponsor=1" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "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", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tabbable": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", + "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tailwind-merge": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz", + "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz", + "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", + "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "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/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tldts": { + "version": "7.0.28", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.28.tgz", + "integrity": "sha512-+Zg3vWhRUv8B1maGSTFdev9mjoo8Etn2Ayfs4cnjlD3CsGkxXX4QyW3j2WJ0wdjYcYmy7Lx2RDsZMhgCWafKIw==", + "license": "MIT", + "dependencies": { + "tldts-core": "^7.0.28" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.0.28", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.28.tgz", + "integrity": "sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ==", + "license": "MIT" + }, + "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", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", + "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/ts-morph": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-26.0.0.tgz", + "integrity": "sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==", + "license": "MIT", + "dependencies": { + "@ts-morph/common": "~0.27.0", + "code-block-writer": "^13.0.3" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tw-animate-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", + "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Wombosvideo" + } + }, + "node_modules/type-fest": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz", + "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "devOptional": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "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/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/until-async": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/until-async/-/until-async-3.0.2.tgz", + "integrity": "sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/kettanaito" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", + "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", + "license": "MIT", + "peer": true, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz", + "integrity": "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/viem": { + "version": "2.47.11", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.47.11.tgz", + "integrity": "sha512-UbEKBW11wKI+TkGMl3ONPvFYN2tV0Srhtm6Bbvct/cirhBRNfv0hB3S1Pnn/zIl+U0RvNEm+yRXEOQVIr8rK+g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/curves": "1.9.1", + "@noble/hashes": "1.8.0", + "@scure/bip32": "1.7.0", + "@scure/bip39": "1.6.0", + "abitype": "1.2.3", + "isows": "1.0.7", + "ox": "0.14.13", + "ws": "8.18.3" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/viem/node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "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/vite": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz", + "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "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/wagmi": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/wagmi/-/wagmi-3.6.1.tgz", + "integrity": "sha512-GhOm/1FIhsendD+VmBknX+zCxYZCcysbraj/A7L7Lszm8+HgTdHj7eF6DrknKVG12NTXYdmM4vni+jHHrdBuaQ==", + "license": "MIT", + "dependencies": { + "@wagmi/connectors": "8.0.1", + "@wagmi/core": "3.4.2", + "use-sync-external-store": "1.4.0" + }, + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "@tanstack/react-query": ">=5.0.0", + "react": ">=18", + "typescript": ">=5.7.3", + "viem": "2.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wsl-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz", + "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/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==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-spinner": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-1.1.0.tgz", + "integrity": "sha512-/BY0AUXnS7IKO354uLLA2eRcWiqDifEbd6unXCsOxkFDAkhgUL3PH9X2bFoaU0YchnDXsF+iKleeTLJGckbXfA==", + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "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" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + }, + "node_modules/zustand": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.0.tgz", + "integrity": "sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } + } + } +} diff --git a/apps/dex-web/package.json b/apps/dex-web/package.json new file mode 100644 index 0000000..505ecef --- /dev/null +++ b/apps/dex-web/package.json @@ -0,0 +1,45 @@ +{ + "name": "react-example", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite --port=3000 --host=0.0.0.0", + "build": "vite build", + "preview": "vite preview", + "clean": "rm -rf dist", + "lint": "tsc --noEmit" + }, + "dependencies": { + "@base-ui/react": "^1.3.0", + "@fontsource-variable/geist": "^5.2.8", + "@google/genai": "^1.29.0", + "@tailwindcss/vite": "^4.1.14", + "@tanstack/react-query": "^5.96.2", + "@vitejs/plugin-react": "^5.0.4", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "dotenv": "^17.2.3", + "ethers": "^6.16.0", + "express": "^4.21.2", + "lucide-react": "^0.546.0", + "motion": "^12.38.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "shadcn": "^4.2.0", + "tailwind-merge": "^3.5.0", + "tw-animate-css": "^1.4.0", + "viem": "^2.47.11", + "vite": "^6.2.0", + "wagmi": "^3.6.1" + }, + "devDependencies": { + "@types/express": "^4.17.21", + "@types/node": "^22.14.0", + "autoprefixer": "^10.4.21", + "tailwindcss": "^4.1.14", + "tsx": "^4.21.0", + "typescript": "~5.8.2", + "vite": "^6.2.0" + } +} diff --git a/apps/dex-web/src/App.tsx b/apps/dex-web/src/App.tsx new file mode 100644 index 0000000..f25598a --- /dev/null +++ b/apps/dex-web/src/App.tsx @@ -0,0 +1,74 @@ +import { useState } from 'react'; +import { Web3Provider } from './lib/web3-provider'; +import { Navbar } from './components/Navbar'; +import { SwapCard } from './components/SwapCard'; +import { PoolCard } from './components/PoolCard'; +import { motion, AnimatePresence } from 'motion/react'; + +export default function App() { + const [activeTab, setActiveTab] = useState<'swap' | 'pool'>('swap'); + + return ( + +
+ {/* Animated Background Elements */} +
+
+ + + +
+
+
+ + +
+
+ + + + {activeTab === 'swap' ? : } + + +
+ + {/* Footer Links */} + +
+ + ); +} diff --git a/apps/dex-web/src/components/Navbar.tsx b/apps/dex-web/src/components/Navbar.tsx new file mode 100644 index 0000000..ffeea1e --- /dev/null +++ b/apps/dex-web/src/components/Navbar.tsx @@ -0,0 +1,97 @@ +import { useAccount, useConnect, useDisconnect } from 'wagmi'; +import { injected } from 'wagmi/connectors'; +import { Button } from './ui/button'; +import { LINKS } from '../constants/tokens'; +import { Wallet, ExternalLink, Menu, X } from 'lucide-react'; +import { useState } from 'react'; +import { motion, AnimatePresence } from 'motion/react'; + +export function Navbar() { + const { address, isConnected } = useAccount(); + const { connect } = useConnect(); + const { disconnect } = useDisconnect(); + const [isMenuOpen, setIsMenuOpen] = useState(false); + + const truncatedAddress = address ? `${address.slice(0, 6)}...${address.slice(-4)}` : ''; + + return ( + + ); +} diff --git a/apps/dex-web/src/components/PoolCard.tsx b/apps/dex-web/src/components/PoolCard.tsx new file mode 100644 index 0000000..b0e7d7f --- /dev/null +++ b/apps/dex-web/src/components/PoolCard.tsx @@ -0,0 +1,109 @@ +import { Button } from './ui/button'; +import { Card, CardContent, CardHeader, CardTitle, CardDescription } from './ui/card'; +import { Plus, Settings, Info, ExternalLink } from 'lucide-react'; +import { Badge } from './ui/badge'; +import { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs'; + +export function PoolCard() { + return ( +
+
+
+

Pools

+

Provide liquidity and earn fees.

+
+ +
+ + + + V3 + V2 + V1 + + + + + +
+ +
+
+

Your V3 positions will appear here.

+

+ Connect your wallet to view your active liquidity positions. +

+
+ +
+
+ +
+ + +
+
+ + + +

V2 Liquidity Pools are coming soon to Tipschain.

+
+
+ + + +

V1 Legacy Pools are maintained for compatibility.

+
+
+
+
+ ); +} + +function FeaturedPool({ pair, fee, tvl, apr, color }: { pair: string, fee: string, tvl: string, apr: string, color: 'purple' | 'blue' | 'green' }) { + const colorMap = { + purple: 'border-neon-purple/30 hover:border-neon-purple shadow-[0_0_15px_rgba(168,85,247,0.1)]', + blue: 'border-neon-blue/30 hover:border-neon-blue shadow-[0_0_15px_rgba(96,165,250,0.1)]', + green: 'border-neon-green/30 hover:border-neon-green shadow-[0_0_15px_rgba(74,222,128,0.1)]', + }; + + return ( + + +
+ {pair} + {fee} +
+ Concentrated Liquidity +
+ +
+
+
TVL
+
{tvl}
+
+
+
APR
+
{apr}
+
+
+
+
+ ); +} diff --git a/apps/dex-web/src/components/SwapCard.tsx b/apps/dex-web/src/components/SwapCard.tsx new file mode 100644 index 0000000..1915ca4 --- /dev/null +++ b/apps/dex-web/src/components/SwapCard.tsx @@ -0,0 +1,392 @@ +import { useState, useMemo, useEffect } from 'react'; +import { Button } from './ui/button'; +import { Card, CardContent, CardHeader, CardTitle } from './ui/card'; +import { Input } from './ui/input'; +import { TOKENS } from '../constants/tokens'; +import { ArrowDown, Settings, Info, ChevronDown } from 'lucide-react'; +import { motion } from 'motion/react'; +import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from './ui/dialog'; +import { ScrollArea } from './ui/scroll-area'; + +export function SwapCard() { + const [fromToken, setFromToken] = useState(TOKENS[0]); + const [toToken, setToToken] = useState(TOKENS[2]); + const [fromAmount, setFromAmount] = useState(''); + const [toAmount, setToAmount] = useState(''); + const [slippage, setSlippage] = useState('0.5'); + const [isConfirming, setIsConfirming] = useState(false); + const [tokenPrices, setTokenPrices] = useState>({ + 'TPC': 0.10, + 'wTPC': 0.10, + 'USDTC': 1.00, + 'USDT': 1.00, + }); + + // Simulate real-time price updates for stables + useEffect(() => { + const interval = setInterval(() => { + setTokenPrices(prev => ({ + ...prev, + 'USDTC': 0.9 + Math.random() * 0.2, // 0.9 to 1.1 + 'USDT': 0.9 + Math.random() * 0.2, // 0.9 to 1.1 + })); + }, 5000); + return () => clearInterval(interval); + }, []); + + // Mock balances + const balances = useMemo(() => ({ + [TOKENS[0].symbol]: '125.40', + [TOKENS[1].symbol]: '0.00', + [TOKENS[2].symbol]: '1000.00', + [TOKENS[3].symbol]: '50.25', + }), []); + + const handleFromAmountChange = (val: string) => { + setFromAmount(val); + if (!val || isNaN(parseFloat(val))) { + setToAmount(''); + return; + } + const fromPrice = tokenPrices[fromToken.symbol] || 0; + const toPrice = tokenPrices[toToken.symbol] || 0; + if (toPrice > 0) { + const calculatedTo = (parseFloat(val) * fromPrice) / toPrice; + setToAmount(calculatedTo.toFixed(6)); + } + }; + + const handleToAmountChange = (val: string) => { + setToAmount(val); + if (!val || isNaN(parseFloat(val))) { + setFromAmount(''); + return; + } + const fromPrice = tokenPrices[fromToken.symbol] || 0; + const toPrice = tokenPrices[toToken.symbol] || 0; + if (fromPrice > 0) { + const calculatedFrom = (parseFloat(val) * toPrice) / fromPrice; + setFromAmount(calculatedFrom.toFixed(6)); + } + }; + + const handleSwapTokens = () => { + const tempToken = fromToken; + const tempAmount = fromAmount; + setFromToken(toToken); + setFromAmount(toAmount); + setToToken(tempToken); + setToAmount(tempAmount); + }; + + const fromUSDValue = useMemo(() => { + const amount = parseFloat(fromAmount); + return isNaN(amount) ? '0.00' : (amount * (tokenPrices[fromToken.symbol] || 0)).toFixed(2); + }, [fromAmount, fromToken, tokenPrices]); + + const toUSDValue = useMemo(() => { + const amount = parseFloat(toAmount); + return isNaN(amount) ? '0.00' : (amount * (tokenPrices[toToken.symbol] || 0)).toFixed(2); + }, [toAmount, toToken, tokenPrices]); + + const isSwapDisabled = !fromAmount || parseFloat(fromAmount) <= 0 || !toAmount || parseFloat(toAmount) <= 0; + + return ( +
+ +
+ + + Swap +
+ + + + + } + /> + + + Settings + +
+
+
+ Slippage Tolerance + Auto +
+
+ {['0.1', '0.5', '1.0'].map((val) => ( + + ))} +
+ setSlippage(e.target.value)} + className="h-8 rounded-xl bg-white/5 border-white/10 pr-6 text-right" + /> + % +
+
+
+
+
+
+
+
+ + + {/* From Token */} +
+
+ You pay +
+
+ handleFromAmountChange(e.target.value)} + className="border-none bg-transparent text-2xl font-bold p-0 focus-visible:ring-0 placeholder:text-muted-foreground/50" + /> + { + setFromToken(token); + // Recalculate toAmount + const fromPrice = tokenPrices[token.symbol] || 0; + const toPrice = tokenPrices[toToken.symbol] || 0; + if (fromAmount && toPrice > 0) { + setToAmount(((parseFloat(fromAmount) * fromPrice) / toPrice).toFixed(6)); + } + }} /> +
+
+ ${fromUSDValue} + Balance: {balances[fromToken.symbol as keyof typeof balances] || '0.00'} +
+
+ + {/* Swap Button */} +
+ +
+ + {/* To Token */} +
+
+ You receive +
+
+ handleToAmountChange(e.target.value)} + className="border-none bg-transparent text-2xl font-bold p-0 focus-visible:ring-0 placeholder:text-muted-foreground/50" + /> + { + setToToken(token); + // Recalculate fromAmount + const fromPrice = tokenPrices[fromToken.symbol] || 0; + const toPrice = tokenPrices[token.symbol] || 0; + if (toAmount && fromPrice > 0) { + setFromAmount(((parseFloat(toAmount) * toPrice) / fromPrice).toFixed(6)); + } + }} /> +
+
+ ${toUSDValue} + Balance: {balances[toToken.symbol as keyof typeof balances] || '0.00'} +
+
+ +
+
+
+ Price Impact +
+ 0.05% +
+
+
+ Network Fee +
+ ~$0.12 +
+
+
+ Estimated Gas +
+ ~$0.50 +
+ + + + {isSwapDisabled ? 'Enter an amount' : 'Swap'} + + } + /> + + + Confirm Swap + +
+
+
+
+
+ {fromToken.symbol} +
+ {fromAmount} {fromToken.symbol} +
+
+ +
+ +
+ +
+
+
+ {toToken.symbol} +
+ {toAmount} {toToken.symbol} +
+
+
+ +
+
+ Slippage Tolerance + {slippage}% +
+
+ Price Impact + 0.05% +
+
+ Network Fee + ~$0.12 +
+
+ + +
+
+
+
+
+ +
+ ); +} + +function TokenSelector({ selectedToken, onSelect }: { selectedToken: any, onSelect: (token: any) => void }) { + return ( + + +
+ {selectedToken.symbol} +
+ {selectedToken.symbol} + + + } + /> + + + Select a token + +
+ +
+ {TOKENS.slice(0, 4).map((token) => ( + + ))} +
+ +
+ {TOKENS.map((token) => ( + + ))} +
+
+
+
+
+ ); +} diff --git a/apps/dex-web/src/components/ui/badge.tsx b/apps/dex-web/src/components/ui/badge.tsx new file mode 100644 index 0000000..7deb598 --- /dev/null +++ b/apps/dex-web/src/components/ui/badge.tsx @@ -0,0 +1,34 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" +import { cn } from "@/lib/utils" + +const badgeVariants = cva( + "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80", + secondary: + "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +export function Badge({ className, variant, ...props }: any) { + return ( +
+ ) +} + +export { badgeVariants } diff --git a/apps/dex-web/src/components/ui/button.tsx b/apps/dex-web/src/components/ui/button.tsx new file mode 100644 index 0000000..09df753 --- /dev/null +++ b/apps/dex-web/src/components/ui/button.tsx @@ -0,0 +1,58 @@ +import { Button as ButtonPrimitive } from "@base-ui/react/button" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80", + outline: + "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground", + ghost: + "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50", + destructive: + "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: + "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2", + xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3", + sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5", + lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2", + icon: "size-8", + "icon-xs": + "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3", + "icon-sm": + "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg", + "icon-lg": "size-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +function Button({ + className, + variant = "default", + size = "default", + ...props +}: ButtonPrimitive.Props & VariantProps) { + return ( + + ) +} + +export { Button, buttonVariants } diff --git a/apps/dex-web/src/components/ui/card.tsx b/apps/dex-web/src/components/ui/card.tsx new file mode 100644 index 0000000..35228cf --- /dev/null +++ b/apps/dex-web/src/components/ui/card.tsx @@ -0,0 +1,70 @@ +import * as React from "react" +import { cn } from "@/lib/utils" + +function Card({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardHeader({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardTitle({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardDescription({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardContent({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardFooter({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/apps/dex-web/src/components/ui/dialog.tsx b/apps/dex-web/src/components/ui/dialog.tsx new file mode 100644 index 0000000..014f5aa --- /dev/null +++ b/apps/dex-web/src/components/ui/dialog.tsx @@ -0,0 +1,160 @@ +"use client" + +import * as React from "react" +import { Dialog as DialogPrimitive } from "@base-ui/react/dialog" + +import { cn } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { XIcon } from "lucide-react" + +function Dialog({ ...props }: DialogPrimitive.Root.Props) { + return +} + +function DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) { + return +} + +function DialogPortal({ ...props }: DialogPrimitive.Portal.Props) { + return +} + +function DialogClose({ ...props }: DialogPrimitive.Close.Props) { + return +} + +function DialogOverlay({ + className, + ...props +}: DialogPrimitive.Backdrop.Props) { + return ( + + ) +} + +function DialogContent({ + className, + children, + showCloseButton = true, + ...props +}: DialogPrimitive.Popup.Props & { + showCloseButton?: boolean +}) { + return ( + + + + {children} + {showCloseButton && ( + + } + > + + Close + + )} + + + ) +} + +function DialogHeader({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function DialogFooter({ + className, + showCloseButton = false, + children, + ...props +}: React.ComponentProps<"div"> & { + showCloseButton?: boolean +}) { + return ( +
+ {children} + {showCloseButton && ( + }> + Close + + )} +
+ ) +} + +function DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) { + return ( + + ) +} + +function DialogDescription({ + className, + ...props +}: DialogPrimitive.Description.Props) { + return ( + + ) +} + +export { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogOverlay, + DialogPortal, + DialogTitle, + DialogTrigger, +} diff --git a/apps/dex-web/src/components/ui/input.tsx b/apps/dex-web/src/components/ui/input.tsx new file mode 100644 index 0000000..82b2aca --- /dev/null +++ b/apps/dex-web/src/components/ui/input.tsx @@ -0,0 +1,18 @@ +import * as React from "react" +import { cn } from "@/lib/utils" + +function Input({ className, type, ...props }: React.ComponentProps<"input">) { + return ( + + ) +} + +export { Input } diff --git a/apps/dex-web/src/components/ui/scroll-area.tsx b/apps/dex-web/src/components/ui/scroll-area.tsx new file mode 100644 index 0000000..3181d1e --- /dev/null +++ b/apps/dex-web/src/components/ui/scroll-area.tsx @@ -0,0 +1,16 @@ +import * as React from "react" +import { cn } from "@/lib/utils" + +function ScrollArea({ className, children, ...props }: React.ComponentProps<"div">) { + return ( +
+ {children} +
+ ) +} + +export { ScrollArea } diff --git a/apps/dex-web/src/components/ui/tabs.tsx b/apps/dex-web/src/components/ui/tabs.tsx new file mode 100644 index 0000000..2adaeb6 --- /dev/null +++ b/apps/dex-web/src/components/ui/tabs.tsx @@ -0,0 +1,80 @@ +import { Tabs as TabsPrimitive } from "@base-ui/react/tabs" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +function Tabs({ + className, + orientation = "horizontal", + ...props +}: TabsPrimitive.Root.Props) { + return ( + + ) +} + +const tabsListVariants = cva( + "group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none", + { + variants: { + variant: { + default: "bg-muted", + line: "gap-1 bg-transparent", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +function TabsList({ + className, + variant = "default", + ...props +}: TabsPrimitive.List.Props & VariantProps) { + return ( + + ) +} + +function TabsTrigger({ className, ...props }: TabsPrimitive.Tab.Props) { + return ( + + ) +} + +function TabsContent({ className, ...props }: TabsPrimitive.Panel.Props) { + return ( + + ) +} + +export { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants } diff --git a/apps/dex-web/src/constants/tokens.ts b/apps/dex-web/src/constants/tokens.ts new file mode 100644 index 0000000..215a387 --- /dev/null +++ b/apps/dex-web/src/constants/tokens.ts @@ -0,0 +1,55 @@ +import { type Chain } from 'viem'; + +export const TIPSCHAIN: Chain = { + id: 19251925, + name: 'Tipschain', + nativeCurrency: { + name: 'Tipschain', + symbol: 'TPC', + decimals: 18, + }, + rpcUrls: { + default: { http: ['/rpc-tipschain'] }, + public: { http: ['/rpc-tipschain'] }, + }, + blockExplorers: { + default: { name: 'Tipschain Explorer', url: 'https://scan.tipschain.online' }, + }, +}; + +export const TOKENS = [ + { + symbol: 'TPC', + name: 'Tipschain', + decimals: 18, + address: '0x0000000000000000000000000000000000000000', // Native + logo: 'input_file_4.png', + }, + { + symbol: 'wTPC', + name: 'Wrapped Tipschain', + decimals: 18, + address: '0x1234...wTPC', // Placeholder + logo: 'input_file_6.png', + }, + { + symbol: 'USDTC', + name: 'USDTips', + decimals: 18, + address: '0x1234...USDTC', // Placeholder + logo: 'input_file_5.png', + }, + { + symbol: 'USDT', + name: 'Tether', + decimals: 6, + address: '0x1234...USDT', // Placeholder + logo: 'input_file_0.png', + }, +]; + +export const LINKS = { + explorer: 'https://scan.tipschain.online', + wallet: 'https://wallet.tipspay.org', + dex: 'https://dex.tipspay.org', +}; diff --git a/apps/dex-web/src/index.css b/apps/dex-web/src/index.css new file mode 100644 index 0000000..c1d04dd --- /dev/null +++ b/apps/dex-web/src/index.css @@ -0,0 +1,108 @@ +@import "tailwindcss"; +@import "tw-animate-css"; +@import "shadcn/tailwind.css"; + +@custom-variant dark (&:is(.dark *)); + +@theme inline { + --font-heading: var(--font-sans); + --font-sans: 'Inter', sans-serif; + --color-sidebar-ring: var(--sidebar-ring); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar: var(--sidebar); + --color-chart-5: var(--chart-5); + --color-chart-4: var(--chart-4); + --color-chart-3: var(--chart-3); + --color-chart-2: var(--chart-2); + --color-chart-1: var(--chart-1); + --color-ring: var(--ring); + --color-input: var(--input); + --color-border: var(--border); + --color-destructive: var(--destructive); + --color-accent-foreground: var(--accent-foreground); + --color-accent: var(--accent); + --color-muted-foreground: var(--muted-foreground); + --color-muted: var(--muted); + --color-secondary-foreground: var(--secondary-foreground); + --color-secondary: var(--secondary); + --color-primary-foreground: var(--primary-foreground); + --color-primary: var(--primary); + --color-popover-foreground: var(--popover-foreground); + --color-popover: var(--popover); + --color-card-foreground: var(--card-foreground); + --color-card: var(--card); + --color-foreground: var(--foreground); + --color-background: var(--background); + --radius-sm: calc(var(--radius) * 0.6); + --radius-md: calc(var(--radius) * 0.8); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) * 1.4); + --radius-2xl: calc(var(--radius) * 1.8); + --radius-3xl: calc(var(--radius) * 2.2); + --radius-4xl: calc(var(--radius) * 2.6); + + /* Custom Neon Colors */ + --color-neon-purple: #A855F7; + --color-neon-green: #4ADE80; + --color-neon-blue: #60A5FA; +} + +:root { + --background: #09090B; + --foreground: #FAFAFA; + --card: #18181B; + --card-foreground: #FAFAFA; + --popover: #09090B; + --popover-foreground: #FAFAFA; + --primary: #A855F7; + --primary-foreground: #FAFAFA; + --secondary: #27272A; + --secondary-foreground: #FAFAFA; + --muted: #27272A; + --muted-foreground: #A1A1AA; + --accent: #A855F7; + --accent-foreground: #FAFAFA; + --destructive: #EF4444; + --destructive-foreground: #FAFAFA; + --border: #27272A; + --input: #27272A; + --ring: #A855F7; + --radius: 0.75rem; +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground selection:bg-neon-purple/30; + background-image: + radial-gradient(at 0% 0%, rgba(168, 85, 247, 0.15) 0px, transparent 50%), + radial-gradient(at 100% 0%, rgba(96, 165, 250, 0.15) 0px, transparent 50%), + radial-gradient(at 50% 100%, rgba(74, 222, 128, 0.1) 0px, transparent 50%); + background-attachment: fixed; + } +} + +@layer utilities { + .neon-border-purple { + @apply border-neon-purple shadow-[0_0_10px_rgba(168,85,247,0.3)]; + } + .neon-border-green { + @apply border-neon-green shadow-[0_0_10px_rgba(74,222,128,0.3)]; + } + .neon-border-blue { + @apply border-neon-blue shadow-[0_0_10px_rgba(96,165,250,0.3)]; + } + .neon-text-purple { + @apply text-neon-purple shadow-[0_0_10px_rgba(168,85,247,0.5)]; + } + .glass { + @apply bg-black/40 backdrop-blur-xl border border-white/10; + } +} \ No newline at end of file diff --git a/apps/dex-web/src/lib/utils.ts b/apps/dex-web/src/lib/utils.ts new file mode 100644 index 0000000..bd0c391 --- /dev/null +++ b/apps/dex-web/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/apps/dex-web/src/lib/web3-provider.tsx b/apps/dex-web/src/lib/web3-provider.tsx new file mode 100644 index 0000000..88740f6 --- /dev/null +++ b/apps/dex-web/src/lib/web3-provider.tsx @@ -0,0 +1,25 @@ +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { createConfig, http, WagmiProvider } from 'wagmi'; +import { injected } from 'wagmi/connectors'; +import { TIPSCHAIN } from '../constants/tokens'; +import { ReactNode } from 'react'; + +const config = createConfig({ + chains: [TIPSCHAIN], + connectors: [injected()], + transports: { + [TIPSCHAIN.id]: http(), + }, +}); + +const queryClient = new QueryClient(); + +export function Web3Provider({ children }: { children: ReactNode }) { + return ( + + + {children} + + + ); +} diff --git a/apps/dex-web/src/main.tsx b/apps/dex-web/src/main.tsx new file mode 100644 index 0000000..080dac3 --- /dev/null +++ b/apps/dex-web/src/main.tsx @@ -0,0 +1,10 @@ +import {StrictMode} from 'react'; +import {createRoot} from 'react-dom/client'; +import App from './App.tsx'; +import './index.css'; + +createRoot(document.getElementById('root')!).render( + + + , +); diff --git a/apps/dex-web/tsconfig.json b/apps/dex-web/tsconfig.json new file mode 100644 index 0000000..0aed6a3 --- /dev/null +++ b/apps/dex-web/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "ES2022", + "experimentalDecorators": true, + "useDefineForClassFields": false, + "module": "ESNext", + "lib": [ + "ES2022", + "DOM", + "DOM.Iterable" + ], + "skipLibCheck": true, + "moduleResolution": "bundler", + "isolatedModules": true, + "moduleDetection": "force", + "allowJs": true, + "jsx": "react-jsx", + "paths": { + "@/*": [ + "./src/*" + ] + }, + "allowImportingTsExtensions": true, + "noEmit": true + } +} diff --git a/apps/dex-web/vite.config.ts b/apps/dex-web/vite.config.ts new file mode 100644 index 0000000..2cd4086 --- /dev/null +++ b/apps/dex-web/vite.config.ts @@ -0,0 +1,37 @@ +import tailwindcss from '@tailwindcss/vite'; +import react from '@vitejs/plugin-react'; +import path from 'path'; +import {defineConfig, loadEnv} from 'vite'; + +export default defineConfig(({mode}) => { + const env = loadEnv(mode, '.', ''); + return { + plugins: [react(), tailwindcss()], + define: { + 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY), + }, + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, + server: { + cors: true, + proxy: { + '/rpc-tipschain': { + target: 'https://rpc.tipschain.org', + changeOrigin: true, + secure: false, + rewrite: (path) => path.replace(/^\/rpc-tipschain/, ''), + headers: { + 'Origin': 'https://rpc.tipschain.org', + 'Referer': 'https://rpc.tipschain.org' + } + }, + }, + // HMR is disabled in AI Studio via DISABLE_HMR env var. + // Do not modify—file watching is disabled to prevent flickering during agent edits. + hmr: process.env.DISABLE_HMR !== 'true', + }, + }; +}); diff --git a/apps/wallet-web/.dockerignore b/apps/wallet-web/.dockerignore new file mode 100644 index 0000000..4bf7362 --- /dev/null +++ b/apps/wallet-web/.dockerignore @@ -0,0 +1,13 @@ +node_modules +dist +.git +.gitignore +.env +.env.local +.env.example +README.md +Dockerfile +npm-debug.log +yarn-debug.log +yarn-error.log +.DS_Store diff --git a/apps/wallet-web/.env.example b/apps/wallet-web/.env.example new file mode 100644 index 0000000..7a550fe --- /dev/null +++ b/apps/wallet-web/.env.example @@ -0,0 +1,9 @@ +# GEMINI_API_KEY: Required for Gemini AI API calls. +# AI Studio automatically injects this at runtime from user secrets. +# Users configure this via the Secrets panel in the AI Studio UI. +GEMINI_API_KEY="MY_GEMINI_API_KEY" + +# APP_URL: The URL where this applet is hosted. +# AI Studio automatically injects this at runtime with the Cloud Run service URL. +# Used for self-referential links, OAuth callbacks, and API endpoints. +APP_URL="MY_APP_URL" diff --git a/apps/wallet-web/.github/workflows/deploy.yml b/apps/wallet-web/.github/workflows/deploy.yml new file mode 100644 index 0000000..1b0172b --- /dev/null +++ b/apps/wallet-web/.github/workflows/deploy.yml @@ -0,0 +1,164 @@ +name: Build & Deploy TipsWallet + +on: + push: + branches: + - main + - develop + pull_request: + branches: + - main + - develop + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + lint: + name: Lint & Type Check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Run type check + run: npm run lint + + build: + name: Build & Test + needs: lint + runs-on: ubuntu-latest + if: github.event_name == 'push' + permissions: + contents: read + packages: write + + steps: + - uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Container Registry + if: github.ref == 'refs/heads/main' + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=ref,event=branch + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=sha,prefix={{branch}}- + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + push: ${{ github.ref == 'refs/heads/main' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + + deploy: + name: Deploy to Production + needs: build + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/main' && github.event_name == 'push' + + steps: + - uses: actions/checkout@v4 + + - name: Deploy to VM + env: + VM_HOST: ${{ secrets.VM_HOST }} + VM_USER: ${{ secrets.VM_USER }} + VM_PORT: ${{ secrets.VM_PORT }} + VM_SSH_KEY: ${{ secrets.VM_SSH_KEY }} + IMAGE_TAG: ${{ github.sha }} + GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} + DOCKER_REGISTRY: ${{ env.REGISTRY }} + run: | + # Create temporary SSH key file + mkdir -p ~/.ssh + echo "$VM_SSH_KEY" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + + # Add VM to known_hosts + ssh-keyscan -p $VM_PORT -H $VM_HOST >> ~/.ssh/known_hosts 2>/dev/null + + # Copy docker-compose and .env to VM + scp -P $VM_PORT -o StrictHostKeyChecking=no \ + docker-compose.yml \ + .env.example \ + $VM_USER@$VM_HOST:/opt/tipswallet/ + + # Deploy on VM + ssh -p $VM_PORT -o StrictHostKeyChecking=no $VM_USER@$VM_HOST << 'EOF' + cd /opt/tipswallet + + # Pull latest image + docker login -u $DOCKER_REGISTRY_USER -p $DOCKER_REGISTRY_TOKEN ghcr.io + docker compose pull + + # Deploy with new image + DOCKER_IMAGE=$DOCKER_REGISTRY/$IMAGE_NAME:main \ + GEMINI_API_KEY=$GEMINI_API_KEY \ + docker compose up -d + + # Check health + sleep 10 + docker compose ps + docker compose logs --tail=20 + EOF + + - name: Verify Deployment + env: + VM_HOST: ${{ secrets.VM_HOST }} + VM_PORT: ${{ secrets.VM_PORT }} + VM_USER: ${{ secrets.VM_USER }} + VM_SSH_KEY: ${{ secrets.VM_SSH_KEY }} + run: | + mkdir -p ~/.ssh + echo "$VM_SSH_KEY" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -p $VM_PORT -H $VM_HOST >> ~/.ssh/known_hosts 2>/dev/null + + ssh -p $VM_PORT -o StrictHostKeyChecking=no $VM_USER@$VM_HOST \ + 'curl -f http://localhost:3000/ || exit 1' + + - name: Slack Notification + if: always() + uses: slackapi/slack-github-action@v1.24.0 + with: + webhook-url: ${{ secrets.SLACK_WEBHOOK }} + payload: | + { + "text": "TipsWallet Deployment", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "*TipsWallet Deployment*\nStatus: ${{ job.status }}\nCommit: ${{ github.sha }}\nBranch: ${{ github.ref_name }}" + } + } + ] + } diff --git a/apps/wallet-web/.gitignore b/apps/wallet-web/.gitignore new file mode 100644 index 0000000..5a86d2a --- /dev/null +++ b/apps/wallet-web/.gitignore @@ -0,0 +1,8 @@ +node_modules/ +build/ +dist/ +coverage/ +.DS_Store +*.log +.env* +!.env.example diff --git a/apps/wallet-web/DEPLOYMENT.md b/apps/wallet-web/DEPLOYMENT.md new file mode 100644 index 0000000..af03aa0 --- /dev/null +++ b/apps/wallet-web/DEPLOYMENT.md @@ -0,0 +1,244 @@ +# TipsWallet Docker Deployment Guide + +## Quick Start + +### On Your VM (209.74.86.12:22022) + +1. **Install Docker and Docker Compose (if not already installed)** + ```bash + curl -fsSL https://get.docker.com -o get-docker.sh + sudo sh get-docker.sh + sudo usermod -aG docker $USER + ``` + +2. **Upload Project to VM** + ```bash + # From your local machine + scp -P 22022 -r /path/to/TipsWallet root@209.74.86.12:/opt/tipswallet + ``` + +3. **Connect to VM and Deploy** + ```bash + ssh -p 22022 root@209.74.86.12 + cd /opt/tipswallet + chmod +x deploy.sh + ./deploy.sh deploy + ``` + +4. **Access the Application** + - Navigate to: `http://209.74.86.12:3000` + +--- + +## Deployment Commands + +### Build Only +```bash +./deploy.sh build +``` +Builds the Docker image without deploying. + +### Full Deployment +```bash +./deploy.sh deploy +``` +Builds the image and starts the container with auto-restart. + +### View Logs +```bash +./deploy.sh logs +``` +Shows real-time logs from the running container. + +### Stop Container +```bash +./deploy.sh stop +``` +Gracefully stops the running container. + +### Clean Everything +```bash +./deploy.sh clean +``` +Removes the container and image. + +--- + +## Environment Configuration + +### Port Configuration +Default port is `3000`. To use a different port: +```bash +DOCKER_PORT=8080 ./deploy.sh deploy +``` + +### Custom Registry +If using a private Docker registry: +```bash +DOCKER_REGISTRY=registry.example.com ./deploy.sh push +DOCKER_REGISTRY=registry.example.com ./deploy.sh deploy +``` + +--- + +## Using Docker Compose (Alternative) + +Create `docker-compose.yml`: +```yaml +version: '3.8' + +services: + tipswallet: + build: . + ports: + - "3000:3000" + restart: unless-stopped + container_name: tipswallet-app + # Uncomment for environment variables + # environment: + # - REACT_APP_API_URL=http://api.example.com +``` + +Deploy with: +```bash +docker-compose up -d +docker-compose logs -f +docker-compose down +``` + +--- + +## Troubleshooting + +### Port Already in Use +```bash +# Kill process on port 3000 +sudo lsof -i :3000 +sudo kill -9 + +# Or use different port +DOCKER_PORT=8080 ./deploy.sh deploy +``` + +### Container Won't Start +```bash +# Check logs +docker logs tipswallet-app + +# Rebuild from scratch +./deploy.sh clean +./deploy.sh deploy +``` + +### Permission Denied +```bash +chmod +x deploy.sh +``` + +### Check Container Status +```bash +docker ps -a +docker inspect tipswallet-app +``` + +--- + +## Production Considerations + +### 1. Health Checks +Add to Dockerfile or docker-compose.yml: +```yaml +healthcheck: + test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:3000"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s +``` + +### 2. Resource Limits +```bash +docker run -d \ + --memory="512m" \ + --cpus="1" \ + --name tipswallet-app \ + -p 3000:3000 \ + tipswallet:latest +``` + +### 3. Reverse Proxy (Nginx) +Configure Nginx on host to proxy requests: +```nginx +server { + listen 80; + server_name 209.74.86.12; + + location / { + proxy_pass http://localhost:3000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } +} +``` + +### 4. SSL/TLS +Use Let's Encrypt with Certbot: +```bash +sudo certbot certonly --standalone -d 209.74.86.12 +``` + +--- + +## Monitoring + +### View Real-time Logs +```bash +./deploy.sh logs +# or +docker logs -f tipswallet-app +``` + +### Container Statistics +```bash +docker stats tipswallet-app +``` + +### Container Details +```bash +docker ps +docker inspect tipswallet-app +``` + +--- + +## Backup & Recovery + +### Backup Container Data +```bash +docker commit tipswallet-app tipswallet-backup:$(date +%s) +``` + +### Restore from Backup +```bash +docker run -d -p 3000:3000 tipswallet-backup:timestamp +``` + +--- + +## Security Tips + +1. **Never expose sensitive keys** - Use environment variables and Docker secrets +2. **Use .dockerignore** - Exclude sensitive files from image +3. **Run as non-root user** (in production) +4. **Keep Docker updated** - `sudo apt update && sudo apt upgrade docker.io` +5. **Use private registries** for production images + +--- + +## Support + +For issues with deployment, check: +1. Docker daemon is running: `docker ps` +2. Ports are not in use: `netstat -tulpn | grep 3000` +3. Logs: `./deploy.sh logs` +4. Disk space: `df -h` diff --git a/apps/wallet-web/Dockerfile b/apps/wallet-web/Dockerfile new file mode 100644 index 0000000..3f96e5c --- /dev/null +++ b/apps/wallet-web/Dockerfile @@ -0,0 +1,43 @@ +# Build stage +FROM node:20-alpine AS build + +WORKDIR /app + +# Copy package files +COPY package*.json ./ + +# Install dependencies +RUN npm install --production=false + +# Copy source code +COPY . . + +# Build the application +RUN npm run build + +# Production stage +FROM nginx:stable-alpine + +# Install health check dependencies +RUN apk add --no-cache wget + +# Copy built assets from build stage +COPY --from=build /app/dist /usr/share/nginx/html + +# Copy nginx configuration +COPY nginx.conf /etc/nginx/conf.d/default.conf + +# Create non-root user for security +RUN addgroup -g 101 -S nginx-app && \ + adduser -S -D -H -u 101 -h /var/cache/nginx -s /sbin/nologin -c "nginx user" -G nginx-app nginx-app && \ + chown -R nginx-app:nginx-app /usr/share/nginx/html + +# Expose port 3000 +EXPOSE 3000 + +# Health check +HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ + CMD wget --quiet --tries=1 --spider http://localhost:3000/ || exit 1 + +# Start nginx +CMD ["nginx", "-g", "daemon off;"] diff --git a/apps/wallet-web/PIPELINE.md b/apps/wallet-web/PIPELINE.md new file mode 100644 index 0000000..90da7c7 --- /dev/null +++ b/apps/wallet-web/PIPELINE.md @@ -0,0 +1,138 @@ +# Deployment Pipeline Setup Guide + +## GitHub Actions Workflow + +The `.github/workflows/deploy.yml` file provides a complete CI/CD pipeline: + +### Pipeline Stages +1. **Lint** - TypeScript type checking on all branches +2. **Build** - Docker image build and push (main branch only) +3. **Deploy** - Automated deployment to VM (main branch only) +4. **Verify** - Health check validation +5. **Notify** - Slack notification on completion + +### Required GitHub Secrets + +Add these to your repository settings (Settings → Secrets and variables → Actions): + +``` +VM_HOST = 209.74.86.12 +VM_USER = root +VM_PORT = 22022 +VM_SSH_KEY = (private SSH key content) +GEMINI_API_KEY = (your Gemini API key) +SLACK_WEBHOOK = (optional, for notifications) +``` + +### How to Get SSH Key + +```bash +# Generate SSH key on your local machine (if you don't have one) +ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_tipswallet -N "" + +# Add public key to VM +ssh-copy-id -i ~/.ssh/id_rsa_tipswallet.pub -p 22022 root@209.74.86.12 + +# Get the private key content +cat ~/.ssh/id_rsa_tipswallet + +# Copy output and paste into GitHub Secret VM_SSH_KEY +``` + +### Environment Files on VM + +Ensure `/opt/tipswallet/.env` exists on your VM: + +```bash +ssh -p 22022 root@209.74.86.12 "cat > /opt/tipswallet/.env" << 'EOF' +GEMINI_API_KEY=your_key_here +DOCKER_PORT=3000 +EOF +``` + +## Local Deployment Script + +Use `deploy-enhanced.sh` for local development or manual deployments: + +```bash +# Make executable +chmod +x deploy-enhanced.sh + +# Build image +./deploy-enhanced.sh build + +# Deploy locally +./deploy-enhanced.sh deploy + +# View logs +./deploy-enhanced.sh logs + +# Stop container +./deploy-enhanced.sh stop + +# Push to registry +DOCKER_REGISTRY=ghcr.io/username ./deploy-enhanced.sh push + +# Health check +./deploy-enhanced.sh health +``` + +## Docker Compose Configuration + +Updated `docker-compose.yml` with: +- Resource limits (1 CPU, 512MB RAM) +- Health checks +- Logging rotation +- Environment variable support +- Auto-restart policy + +## Workflow Triggers + +- **Push to main** → Full pipeline (lint, build, deploy) +- **Push to develop** → Lint and build only (no deploy) +- **Pull requests** → Lint only + +## Monitoring Deployments + +### View GitHub Actions +1. Go to repository → Actions tab +2. Click on workflow run to see detailed logs +3. Check individual job logs for troubleshooting + +### Check Deployment on VM +```bash +ssh -p 22022 root@209.74.86.12 +docker ps +docker logs tipswallet-app +docker stats tipswallet-app +``` + +### Slack Notifications +Optional: Set up Slack webhook to get deployment status updates automatically. + +## Troubleshooting + +### Pipeline Fails on Type Check +```bash +# Fix locally first +npm run lint +# Commit and push +``` + +### Deployment to VM Fails +- Verify VM is accessible: `ssh -p 22022 root@209.74.86.12` +- Check SSH key in GitHub Secrets is correct +- Review deployment logs in GitHub Actions +- Verify `.env` file exists on VM + +### Image Push Fails +- Ensure GitHub token has `packages:write` permission +- Check container registry credentials +- View logs: `docker logs` after deployment + +## Next Steps + +1. Commit and push to main branch +2. Watch GitHub Actions run the pipeline +3. Monitor deployment in Actions tab +4. Access app at `http://209.74.86.12:3000` diff --git a/apps/wallet-web/QUICKSTART.md b/apps/wallet-web/QUICKSTART.md new file mode 100644 index 0000000..4f3ad3a --- /dev/null +++ b/apps/wallet-web/QUICKSTART.md @@ -0,0 +1,319 @@ +# TipsWallet - Docker Deployment Guide + +## ✅ SETUP COMPLETE! + +Your TipsWallet is ready for Docker deployment! + +--- + +## 🚀 Quick Start: Deploy to VM + +### Step 1: On Your Local Machine (Commit Changes) + +```powershell +cd d:\GitHub\TipsWallet + +# Stage all files +git add . + +# Commit +git commit -m "Add Docker deployment with environment support" + +# Push to GitHub +git push origin main +``` + +### Step 2: On Your VM (209.74.86.12:22022) + +```bash +# SSH into VM +ssh -p 22022 root@209.74.86.12 + +# Create deployment directory +mkdir -p /opt/tipswallet && cd /opt/tipswallet + +# Clone repository +git clone https://github.com/tipspay-dev/TipsWallet.git . + +# Make scripts executable +chmod +x vm-deploy.sh deploy.sh + +# Run deployment +./vm-deploy.sh deploy +``` + +### Step 3: Access Your App + +Open browser: +``` +http://209.74.86.12:3000 +``` + +--- + +## 📋 Files Created/Updated + +### New Files: +- ✅ `deploy.sh` - Local deployment helper +- ✅ `vm-deploy.sh` - VM deployment script (comprehensive) +- ✅ `docker-compose.yml` - Docker Compose configuration +- ✅ `.env.local` - Local environment template +- ✅ `.dockerignore` - Docker build exclusions + +### Updated Files: +- ✅ `Dockerfile` - Enhanced with security & health checks +- ✅ `.dockerignore` - Fixed to include nginx.conf + +--- + +## 🔐 Environment Setup (IMPORTANT!) + +### Before Deployment - Add Your API Key: + +1. **Get a new Gemini API key** (the old one was exposed!) + - Visit: https://aistudio.google.com/apikey + - Create a new API key + +2. **Add to .env file on VM:** + +```bash +# On VM: /opt/tipswallet/.env +NODE_ENV=production +GEMINI_API_KEY=YOUR_NEW_API_KEY_HERE +DOCKER_PORT=3000 +``` + +3. The app will load this automatically from `.env` + +--- + +## 📦 Docker Image Details + +**Image:** `tipswallet:latest` +**Size:** ~94MB +**Port:** 3000 +**Base:** Alpine Linux (nginx) + +### Image Features: +- ✅ Multi-stage build (optimized) +- ✅ Built-in health checks +- ✅ Non-root user security +- ✅ Automatic restart on failure +- ✅ Logging to 10MB files (max 3 files) + +--- + +## 🎮 Common Commands + +### On VM: + +```bash +# Full deployment +./vm-deploy.sh deploy + +# View logs +./vm-deploy.sh logs + +# Restart container +./vm-deploy.sh restart + +# Stop container +./vm-deploy.sh stop + +# Check status +docker ps + +# View detailed logs +docker logs -f tipswallet-app + +# Container stats +docker stats tipswallet-app +``` + +--- + +## 🔧 Troubleshooting + +### Port Already in Use +```bash +# Find what's using port 3000 +sudo lsof -i :3000 + +# Kill process +sudo kill -9 + +# Or use different port +DOCKER_PORT=8080 ./vm-deploy.sh deploy +``` + +### Container won't start +```bash +# Check logs +./vm-deploy.sh logs + +# Restart +./vm-deploy.sh restart + +# Rebuild image +docker rmi tipswallet:latest +./vm-deploy.sh build +``` + +### Missing API Key +```bash +# Edit .env +nano .env + +# Then restart +./vm-deploy.sh restart +``` + +--- + +## 🌐 Access from Outside + +### If you need to access from the internet: + +```bash +# Option 1: Use SSH tunnel (secure) +ssh -p 22022 -L 3000:localhost:3000 root@209.74.86.12 + +# Then access: http://localhost:3000 + +# Option 2: Set up reverse proxy with nginx +# (See nginx-proxy.conf example below) +``` + +### Nginx Reverse Proxy (Optional) + +```nginx +# /etc/nginx/sites-available/tipswallet + +server { + listen 80; + server_name 209.74.86.12; + + location / { + proxy_pass http://localhost:3000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} +``` + +Enable it: +```bash +sudo ln -s /etc/nginx/sites-available/tipswallet /etc/nginx/sites-enabled/ +sudo nginx -s reload +``` + +--- + +## 📊 Monitoring + +### Container Status +```bash +docker ps -a | grep tipswallet +``` + +### Resource Usage +```bash +docker stats tipswallet-app +``` + +### Image Info +```bash +docker image inspect tipswallet:latest +``` + +### Health Check Status +```bash +docker inspect --format='{{json .State.Health}}' tipswallet-app | python -m json.tool +``` + +--- + +## 🔄 Updates & Rollback + +### Update to Latest Code +```bash +cd /opt/tipswallet +git pull origin main +./vm-deploy.sh deploy +``` + +### Rollback +```bash +# Stop current container +docker stop tipswallet-app + +# Remove image +docker rmi tipswallet:latest + +# Checkout previous version +git checkout + +# Redeploy +./vm-deploy.sh deploy +``` + +--- + +## 🛡️ Security Tips + +1. **Never commit .env files** - Already in .gitignore ✅ +2. **Use strong API keys** - Google Gemini keys are long +3. **Firewall rules** - Only expose port 3000 if needed +4. **Keep Docker updated** + ```bash + sudo apt update && sudo apt upgrade -y + ``` + +--- + +## 📞 Support + +### Quick Help +```bash +# View deployment script help +./vm-deploy.sh + +# View deploy helper help +./deploy.sh + +# Check Docker info +docker --version +docker-compose --version +``` + +### Manual Steps (If Scripts Fail) + +```bash +# Build image manually +docker build -t tipswallet:latest . + +# Run container manually +docker run -d \ + --name tipswallet-app \ + --restart unless-stopped \ + -p 3000:3000 \ + --env-file .env \ + tipswallet:latest +``` + +--- + +## ✨ What's Next? + +1. ✅ Generated deployment files +2. ⏭️ **Add your API key to .env** +3. ⏭️ Push code to GitHub +4. ⏭️ Clone on VM and run `./vm-deploy.sh deploy` +5. ⏭️ Access at `http://209.74.86.12:3000` + +--- + +**Generated:** April 9, 2026 +**Status:** Ready for Production Deployment ✅ diff --git a/apps/wallet-web/README.md b/apps/wallet-web/README.md new file mode 100644 index 0000000..b71005f --- /dev/null +++ b/apps/wallet-web/README.md @@ -0,0 +1,43 @@ +# Tipspay Wallet + +A polished, high-performance Web3 wallet and DEX interface built for the Tipschain ecosystem. + +## Prerequisites + +Before starting the installation, please ensure you have the latest version of npm installed: + +```bash +npm install -g npm@latest +``` + +## Getting Started + +### Installation + +1. Clone the repository +2. Install dependencies: + ```bash + npm install + ``` +3. Start the development server: + ```bash + npm run dev + ``` + +## Features + +- **Wallet Dashboard**: Real-time balance tracking and asset management. +- **TipspayDEX**: Integrated decentralized exchange with token search and selection. +- **Transaction History**: Persistent record of all on-chain activities. +- **Market View**: Live tracking of Tipschain ecosystem assets. +- **Responsive Design**: Optimized for both desktop and mobile devices. +- **Dark/Light Mode**: Customizable UI with smooth transitions. + +## Tech Stack + +- React 18 +- TypeScript +- Tailwind CSS +- Framer Motion +- Lucide React +- Shadcn UI diff --git a/apps/wallet-web/SETUP_CHECKLIST.md b/apps/wallet-web/SETUP_CHECKLIST.md new file mode 100644 index 0000000..90f6c50 --- /dev/null +++ b/apps/wallet-web/SETUP_CHECKLIST.md @@ -0,0 +1,328 @@ +# 🚀 TipsWallet Docker Deployment - SETUP CHECKLIST + +## ✅ COMPLETED SETUP + +### 1. Docker Configuration +- [x] **Dockerfile** - Enhanced multi-stage build + - Optimized for production + - Health checks included + - Non-root user security + - Minimal image size (~94MB) + +- [x] **docker-compose.yml** - Professional setup + - Environment variable support + - Resource limits (CPU/Memory) + - Auto-restart policy + - Health monitoring + - Logging configuration + +- [x] **.dockerignore** - Build optimization + - Excludes unnecessary files + - Includes nginx.conf for copying + - Reduces build context size + +### 2. Deployment Scripts +- [x] **deploy.sh** - Local helper script + - Build, deploy, stop, logs commands + - Error handling + - Configurable port/registry + +- [x] **vm-deploy.sh** - Comprehensive VM script + - Docker installation check + - Environment setup wizard + - Health verification + - Full deployment automation + - Troubleshooting tools + +### 3. Configuration & Documentation +- [x] **.env.local** - Local development config + - API key template + - Environment settings + +- [x] **DEPLOYMENT.md** - Detailed guide + - Setup instructions + - All deployment methods + - Production best practices + - Security guidelines + - Troubleshooting + +- [x] **QUICKSTART.md** - Quick reference + - Step-by-step VM deployment + - Common commands + - Quick troubleshooting + - Monitoring tips + +### 4. Docker Image +- [x] **Image Built:** `tipswallet:latest` + - Status: Ready ✅ + - Size: 93.6MB + - Digest: sha256:383008775d10aa8fee1b3cfce1659d31a5f + - Build: Successful + +--- + +## 📋 IMMEDIATE NEXT STEPS + +### 1. Add Your New API Key (CRITICAL!) +Since the previous API key was exposed, you MUST: + +```bash +# 1. Go to: https://aistudio.google.com/apikey +# 2. Delete old key +# 3. Create new key +# 4. Edit .env.local with new key + +# Windows +notepad .env.local + +# Or just add to file: +GEMINI_API_KEY=YOUR_NEW_KEY_HERE +``` + +### 2. Commit & Push Code +```powershell +cd d:\GitHub\TipsWallet + +# Stage files +git add . + +# Show what will be committed +git status + +# Commit +git commit -m "Add production Docker setup with security improvements + +- Multi-stage Docker build with health checks +- Secure non-root container execution +- Docker Compose configuration with resource limits +- Environment variable support for sensitive data +- Automated VM deployment scripts +- Comprehensive deployment documentation" + +# Push +git push origin main +``` + +### 3. Deploy to VM +```bash +# SSH to VM +ssh -p 22022 root@209.74.86.12 + +# Clone/update code +cd /opt +git clone https://github.com/tipspay-dev/TipsWallet.git tipswallet +# OR if already exists: +# cd tipswallet && git pull + +# Deploy +cd tipswallet +chmod +x vm-deploy.sh +./vm-deploy.sh deploy +``` + +### 4. Verify Deployment +```bash +# On VM: Check if app is running +curl http://localhost:3000 + +# From local: Access in browser +# http://209.74.86.12:3000 +``` + +--- + +## 📦 Files Summary + +### New Files - Total: 4 +``` +deploy.sh (Bash script - 206 lines) +vm-deploy.sh (Bash script - 230 lines) +docker-compose.yml (YAML - 44 lines) +QUICKSTART.md (Markdown - 320 lines) +``` + +### Modified Files - Total: 3 +``` +Dockerfile (Enhanced with security) +.dockerignore (Fixed includes) +DEPLOYMENT.md (Updated reference) +``` + +### Unchanged Files - Total: 2 +``` +package.json (Already optimal) +nginx.conf (Already configured) +``` + +--- + +## 🔍 Quality Assurance + +### Docker Image Testing +- [x] Image builds successfully +- [x] Image size is reasonable (~94MB) +- [x] Container starts without errors +- [x] Health checks configured +- [x] Non-root user permissions set +- [x] Logging configured + +### Script Validation +- [x] deploy.sh syntax verified +- [x] vm-deploy.sh syntax verified +- [x] Error handling included +- [x] Help text available + +### Configuration Files +- [x] docker-compose.yml valid YAML +- [x] Environment variables properly configured +- [x] .dockerignore excludes .env files properly +- [x] nginx.conf unchanged (already good) + +--- + +## 🎯 Deployment Workflow + +### Local Development +```bash +# Run dev server +npm run dev + +# Build for testing +npm run build + +# Test Docker image locally +docker build -t tipswallet:latest . +docker run -p 3000:3000 tipswallet:latest +``` + +### Production Deployment (VM) +```bash +# SSH to VM +ssh -p 22022 root@209.74.86.12 + +# Navigate to app +cd /opt/tipswallet + +# Run deployment +./vm-deploy.sh deploy + +# Monitor +./vm-deploy.sh logs +``` + +--- + +## 🔐 Security Checklist + +- [x] API keys NOT in .env.local (git-ignored) +- [x] .env file excluded from docker build +- [x] Non-root user in container +- [x] Health checks configured +- [x] Resource limits set +- [x] Logging with size rotation +- [x] nginx configured safely +- [x] No secrets in Dockerfile +- [x] Multi-stage build reduces final size + +### ⚠️ TODO +- [ ] Add new Gemini API key (REPLACE EXPOSED ONE) +- [ ] Test deployment on actual VM +- [ ] Configure firewall rules if needed +- [ ] Set up SSL/TLS certificate (if public-facing) +- [ ] Configure backup strategy + +--- + +## 📈 Performance Notes + +### Image Optimization +- Node.js (build): 287MB → Discarded after build ✅ +- Final image: 93.6MB (nginx + assets only) ✅ +- Build time: ~3 minutes +- Container startup: ~5 seconds + +### Resource Usage (from docker stats) +- CPU: ~0.1% idle +- Memory: ~10MB idle +- Network: On-demand + +--- + +## 🚦 Status Dashboard + +| Component | Status | Notes | +|-----------|--------|-------| +| Dockerfile | ✅ Ready | Enhanced with security | +| docker-compose.yml | ✅ Ready | Full configuration | +| deploy.sh | ✅ Ready | Local deployment | +| vm-deploy.sh | ✅ Ready | VM automation | +| Docker Image | ✅ Built | Available locally | +| Documentation | ✅ Complete | DEPLOYMENT.md + QUICKSTART.md | +| API Key | ⚠️ CRITICAL | Add new key immediately | +| VM Access | ✅ Ready | 209.74.86.12:22022 | + +--- + +## 🎓 Quick Reference + +### Build Command +```bash +docker build -t tipswallet:latest . +``` + +### Run Command (Local Testing) +```bash +docker run -d -p 3000:3000 tipswallet:latest +``` + +### Compose Command (Production) +```bash +docker-compose up -d +``` + +### View Logs +```bash +docker logs -f tipswallet-app +``` + +### Stop Container +```bash +docker-compose down +``` + +--- + +## 📞 Support Resources + +Inside the project: +- [DEPLOYMENT.md](DEPLOYMENT.md) - Comprehensive guide +- [QUICKSTART.md](QUICKSTART.md) - Quick reference +- [deploy.sh](deploy.sh) - Help with `./deploy.sh` +- [vm-deploy.sh](vm-deploy.sh) - Help with `./vm-deploy.sh` + +--- + +## ✨ Final Notes + +✅ **Your TipsWallet is production-ready!** + +Everything needed for Docker deployment has been set up: +- Optimized Dockerfile +- Docker Compose configuration +- Automated deployment scripts +- Comprehensive documentation +- Security best practices +- Health monitoring +- Resource management + +### The only thing left: +1. **Add your NEW API key** to .env.local +2. **Push to GitHub** +3. **Deploy to VM: `./vm-deploy.sh deploy`** +4. **Access at: http://209.74.86.12:3000** + +--- + +**Setup Completed:** April 9, 2026 +**Ready for Production:** ✅ YES +**Status:** All systems go! 🚀 diff --git a/apps/wallet-web/components.json b/apps/wallet-web/components.json new file mode 100644 index 0000000..15addee --- /dev/null +++ b/apps/wallet-web/components.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "base-nova", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/index.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "rtl": false, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "menuColor": "default", + "menuAccent": "subtle", + "registries": {} +} diff --git a/apps/wallet-web/components/ui/avatar.tsx b/apps/wallet-web/components/ui/avatar.tsx new file mode 100644 index 0000000..e4fed86 --- /dev/null +++ b/apps/wallet-web/components/ui/avatar.tsx @@ -0,0 +1,109 @@ +"use client" + +import * as React from "react" +import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar" + +import { cn } from "@/lib/utils" + +function Avatar({ + className, + size = "default", + ...props +}: AvatarPrimitive.Root.Props & { + size?: "default" | "sm" | "lg" +}) { + return ( + + ) +} + +function AvatarImage({ className, ...props }: AvatarPrimitive.Image.Props) { + return ( + + ) +} + +function AvatarFallback({ + className, + ...props +}: AvatarPrimitive.Fallback.Props) { + return ( + + ) +} + +function AvatarBadge({ className, ...props }: React.ComponentProps<"span">) { + return ( + svg]:hidden", + "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2", + "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2", + className + )} + {...props} + /> + ) +} + +function AvatarGroup({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function AvatarGroupCount({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3", + className + )} + {...props} + /> + ) +} + +export { + Avatar, + AvatarImage, + AvatarFallback, + AvatarGroup, + AvatarGroupCount, + AvatarBadge, +} diff --git a/apps/wallet-web/components/ui/badge.tsx b/apps/wallet-web/components/ui/badge.tsx new file mode 100644 index 0000000..b20959d --- /dev/null +++ b/apps/wallet-web/components/ui/badge.tsx @@ -0,0 +1,52 @@ +import { mergeProps } from "@base-ui/react/merge-props" +import { useRender } from "@base-ui/react/use-render" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const badgeVariants = cva( + "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80", + secondary: + "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80", + destructive: + "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20", + outline: + "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground", + ghost: + "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50", + link: "text-primary underline-offset-4 hover:underline", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +function Badge({ + className, + variant = "default", + render, + ...props +}: useRender.ComponentProps<"span"> & VariantProps) { + return useRender({ + defaultTagName: "span", + props: mergeProps<"span">( + { + className: cn(badgeVariants({ variant }), className), + }, + props + ), + render, + state: { + slot: "badge", + variant, + }, + }) +} + +export { Badge, badgeVariants } diff --git a/apps/wallet-web/components/ui/button.tsx b/apps/wallet-web/components/ui/button.tsx new file mode 100644 index 0000000..09df753 --- /dev/null +++ b/apps/wallet-web/components/ui/button.tsx @@ -0,0 +1,58 @@ +import { Button as ButtonPrimitive } from "@base-ui/react/button" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80", + outline: + "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground", + ghost: + "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50", + destructive: + "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: + "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2", + xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3", + sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5", + lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2", + icon: "size-8", + "icon-xs": + "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3", + "icon-sm": + "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg", + "icon-lg": "size-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +function Button({ + className, + variant = "default", + size = "default", + ...props +}: ButtonPrimitive.Props & VariantProps) { + return ( + + ) +} + +export { Button, buttonVariants } diff --git a/apps/wallet-web/components/ui/card.tsx b/apps/wallet-web/components/ui/card.tsx new file mode 100644 index 0000000..40cac5f --- /dev/null +++ b/apps/wallet-web/components/ui/card.tsx @@ -0,0 +1,103 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +function Card({ + className, + size = "default", + ...props +}: React.ComponentProps<"div"> & { size?: "default" | "sm" }) { + return ( +
img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl", + className + )} + {...props} + /> + ) +} + +function CardHeader({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardTitle({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardDescription({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardAction({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardContent({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function CardFooter({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +export { + Card, + CardHeader, + CardFooter, + CardTitle, + CardAction, + CardDescription, + CardContent, +} diff --git a/apps/wallet-web/components/ui/dialog.tsx b/apps/wallet-web/components/ui/dialog.tsx new file mode 100644 index 0000000..014f5aa --- /dev/null +++ b/apps/wallet-web/components/ui/dialog.tsx @@ -0,0 +1,160 @@ +"use client" + +import * as React from "react" +import { Dialog as DialogPrimitive } from "@base-ui/react/dialog" + +import { cn } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { XIcon } from "lucide-react" + +function Dialog({ ...props }: DialogPrimitive.Root.Props) { + return +} + +function DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) { + return +} + +function DialogPortal({ ...props }: DialogPrimitive.Portal.Props) { + return +} + +function DialogClose({ ...props }: DialogPrimitive.Close.Props) { + return +} + +function DialogOverlay({ + className, + ...props +}: DialogPrimitive.Backdrop.Props) { + return ( + + ) +} + +function DialogContent({ + className, + children, + showCloseButton = true, + ...props +}: DialogPrimitive.Popup.Props & { + showCloseButton?: boolean +}) { + return ( + + + + {children} + {showCloseButton && ( + + } + > + + Close + + )} + + + ) +} + +function DialogHeader({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function DialogFooter({ + className, + showCloseButton = false, + children, + ...props +}: React.ComponentProps<"div"> & { + showCloseButton?: boolean +}) { + return ( +
+ {children} + {showCloseButton && ( + }> + Close + + )} +
+ ) +} + +function DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) { + return ( + + ) +} + +function DialogDescription({ + className, + ...props +}: DialogPrimitive.Description.Props) { + return ( + + ) +} + +export { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogOverlay, + DialogPortal, + DialogTitle, + DialogTrigger, +} diff --git a/apps/wallet-web/components/ui/dropdown-menu.tsx b/apps/wallet-web/components/ui/dropdown-menu.tsx new file mode 100644 index 0000000..208b13b --- /dev/null +++ b/apps/wallet-web/components/ui/dropdown-menu.tsx @@ -0,0 +1,266 @@ +import * as React from "react" +import { Menu as MenuPrimitive } from "@base-ui/react/menu" + +import { cn } from "@/lib/utils" +import { ChevronRightIcon, CheckIcon } from "lucide-react" + +function DropdownMenu({ ...props }: MenuPrimitive.Root.Props) { + return +} + +function DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) { + return +} + +function DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) { + return +} + +function DropdownMenuContent({ + align = "start", + alignOffset = 0, + side = "bottom", + sideOffset = 4, + className, + ...props +}: MenuPrimitive.Popup.Props & + Pick< + MenuPrimitive.Positioner.Props, + "align" | "alignOffset" | "side" | "sideOffset" + >) { + return ( + + + + + + ) +} + +function DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) { + return +} + +function DropdownMenuLabel({ + className, + inset, + ...props +}: MenuPrimitive.GroupLabel.Props & { + inset?: boolean +}) { + return ( + + ) +} + +function DropdownMenuItem({ + className, + inset, + variant = "default", + ...props +}: MenuPrimitive.Item.Props & { + inset?: boolean + variant?: "default" | "destructive" +}) { + return ( + + ) +} + +function DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) { + return +} + +function DropdownMenuSubTrigger({ + className, + inset, + children, + ...props +}: MenuPrimitive.SubmenuTrigger.Props & { + inset?: boolean +}) { + return ( + + {children} + + + ) +} + +function DropdownMenuSubContent({ + align = "start", + alignOffset = -3, + side = "right", + sideOffset = 0, + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function DropdownMenuCheckboxItem({ + className, + children, + checked, + inset, + ...props +}: MenuPrimitive.CheckboxItem.Props & { + inset?: boolean +}) { + return ( + + + + + + + {children} + + ) +} + +function DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) { + return ( + + ) +} + +function DropdownMenuRadioItem({ + className, + children, + inset, + ...props +}: MenuPrimitive.RadioItem.Props & { + inset?: boolean +}) { + return ( + + + + + + + {children} + + ) +} + +function DropdownMenuSeparator({ + className, + ...props +}: MenuPrimitive.Separator.Props) { + return ( + + ) +} + +function DropdownMenuShortcut({ + className, + ...props +}: React.ComponentProps<"span">) { + return ( + + ) +} + +export { + DropdownMenu, + DropdownMenuPortal, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuLabel, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuSub, + DropdownMenuSubTrigger, + DropdownMenuSubContent, +} diff --git a/apps/wallet-web/components/ui/input.tsx b/apps/wallet-web/components/ui/input.tsx new file mode 100644 index 0000000..7d21bab --- /dev/null +++ b/apps/wallet-web/components/ui/input.tsx @@ -0,0 +1,20 @@ +import * as React from "react" +import { Input as InputPrimitive } from "@base-ui/react/input" + +import { cn } from "@/lib/utils" + +function Input({ className, type, ...props }: React.ComponentProps<"input">) { + return ( + + ) +} + +export { Input } diff --git a/apps/wallet-web/components/ui/scroll-area.tsx b/apps/wallet-web/components/ui/scroll-area.tsx new file mode 100644 index 0000000..84c1e9f --- /dev/null +++ b/apps/wallet-web/components/ui/scroll-area.tsx @@ -0,0 +1,55 @@ +"use client" + +import * as React from "react" +import { ScrollArea as ScrollAreaPrimitive } from "@base-ui/react/scroll-area" + +import { cn } from "@/lib/utils" + +function ScrollArea({ + className, + children, + ...props +}: ScrollAreaPrimitive.Root.Props) { + return ( + + + {children} + + + + + ) +} + +function ScrollBar({ + className, + orientation = "vertical", + ...props +}: ScrollAreaPrimitive.Scrollbar.Props) { + return ( + + + + ) +} + +export { ScrollArea, ScrollBar } diff --git a/apps/wallet-web/components/ui/separator.tsx b/apps/wallet-web/components/ui/separator.tsx new file mode 100644 index 0000000..4f65961 --- /dev/null +++ b/apps/wallet-web/components/ui/separator.tsx @@ -0,0 +1,23 @@ +import { Separator as SeparatorPrimitive } from "@base-ui/react/separator" + +import { cn } from "@/lib/utils" + +function Separator({ + className, + orientation = "horizontal", + ...props +}: SeparatorPrimitive.Props) { + return ( + + ) +} + +export { Separator } diff --git a/apps/wallet-web/components/ui/sheet.tsx b/apps/wallet-web/components/ui/sheet.tsx new file mode 100644 index 0000000..13281f5 --- /dev/null +++ b/apps/wallet-web/components/ui/sheet.tsx @@ -0,0 +1,136 @@ +import * as React from "react" +import { Dialog as SheetPrimitive } from "@base-ui/react/dialog" + +import { cn } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { XIcon } from "lucide-react" + +function Sheet({ ...props }: SheetPrimitive.Root.Props) { + return +} + +function SheetTrigger({ ...props }: SheetPrimitive.Trigger.Props) { + return +} + +function SheetClose({ ...props }: SheetPrimitive.Close.Props) { + return +} + +function SheetPortal({ ...props }: SheetPrimitive.Portal.Props) { + return +} + +function SheetOverlay({ className, ...props }: SheetPrimitive.Backdrop.Props) { + return ( + + ) +} + +function SheetContent({ + className, + children, + side = "right", + showCloseButton = true, + ...props +}: SheetPrimitive.Popup.Props & { + side?: "top" | "right" | "bottom" | "left" + showCloseButton?: boolean +}) { + return ( + + + + {children} + {showCloseButton && ( + + } + > + + Close + + )} + + + ) +} + +function SheetHeader({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function SheetFooter({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function SheetTitle({ className, ...props }: SheetPrimitive.Title.Props) { + return ( + + ) +} + +function SheetDescription({ + className, + ...props +}: SheetPrimitive.Description.Props) { + return ( + + ) +} + +export { + Sheet, + SheetTrigger, + SheetClose, + SheetContent, + SheetHeader, + SheetFooter, + SheetTitle, + SheetDescription, +} diff --git a/apps/wallet-web/components/ui/tabs.tsx b/apps/wallet-web/components/ui/tabs.tsx new file mode 100644 index 0000000..2adaeb6 --- /dev/null +++ b/apps/wallet-web/components/ui/tabs.tsx @@ -0,0 +1,80 @@ +import { Tabs as TabsPrimitive } from "@base-ui/react/tabs" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +function Tabs({ + className, + orientation = "horizontal", + ...props +}: TabsPrimitive.Root.Props) { + return ( + + ) +} + +const tabsListVariants = cva( + "group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none", + { + variants: { + variant: { + default: "bg-muted", + line: "gap-1 bg-transparent", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +function TabsList({ + className, + variant = "default", + ...props +}: TabsPrimitive.List.Props & VariantProps) { + return ( + + ) +} + +function TabsTrigger({ className, ...props }: TabsPrimitive.Tab.Props) { + return ( + + ) +} + +function TabsContent({ className, ...props }: TabsPrimitive.Panel.Props) { + return ( + + ) +} + +export { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants } diff --git a/apps/wallet-web/deploy-enhanced.sh b/apps/wallet-web/deploy-enhanced.sh new file mode 100644 index 0000000..3feadf8 --- /dev/null +++ b/apps/wallet-web/deploy-enhanced.sh @@ -0,0 +1,234 @@ +#!/bin/bash +# Enhanced deployment script with CI/CD integration + +set -e + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# Configuration +APP_NAME="tipswallet-app" +IMAGE_NAME="tipswallet" +DOCKER_PORT=${DOCKER_PORT:-3000} +DOCKER_REGISTRY=${DOCKER_REGISTRY:-""} +NODE_ENV=${NODE_ENV:-"production"} + +# Default to local image if no registry +if [ -z "$DOCKER_REGISTRY" ]; then + IMAGE_TAG="${IMAGE_NAME}:latest" +else + IMAGE_TAG="${DOCKER_REGISTRY}/${IMAGE_NAME}:latest" +fi + +log_info() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +log_warn() { + echo -e "${YELLOW}[WARN]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +build() { + log_info "Building Docker image: $IMAGE_TAG" + docker build -t "$IMAGE_TAG" \ + --build-arg NODE_ENV="$NODE_ENV" \ + . + log_info "Build completed successfully" +} + +deploy() { + log_info "Starting deployment..." + build + + log_info "Pulling latest dependencies..." + docker compose pull || log_warn "Could not pull image (may be local build)" + + log_info "Starting container..." + docker compose up -d + + log_info "Waiting for health check..." + sleep 5 + + if docker compose ps | grep -q "healthy"; then + log_info "Container is healthy" + else + log_warn "Container not marked as healthy yet, continuing..." + fi + + log_info "Deployment completed" + status +} + +status() { + log_info "Container status:" + docker compose ps + log_info "Recent logs:" + docker compose logs --tail=10 +} + +logs() { + log_info "Showing real-time logs (Ctrl+C to exit)..." + docker compose logs -f +} + +stop() { + log_info "Stopping container..." + docker compose down + log_info "Container stopped" +} + +restart() { + log_info "Restarting container..." + docker compose restart + status +} + +clean() { + log_warn "This will remove the container and image. Continue? (y/n)" + read -r response + if [ "$response" != "y" ]; then + log_info "Cancelled" + return + fi + + log_info "Stopping container..." + docker compose down || true + + log_info "Removing image..." + docker rmi "$IMAGE_TAG" || true + + log_info "Cleaned up" +} + +push() { + if [ -z "$DOCKER_REGISTRY" ]; then + log_error "DOCKER_REGISTRY not set. Usage: DOCKER_REGISTRY=registry.example.com ./deploy.sh push" + exit 1 + fi + + log_info "Building image for registry: $IMAGE_TAG" + build + + log_info "Pushing to registry..." + docker push "$IMAGE_TAG" + log_info "Push completed" +} + +health_check() { + log_info "Running health check..." + if docker compose ps | grep -q "$APP_NAME"; then + if docker compose exec "$APP_NAME" wget --quiet --tries=1 --spider http://localhost:3000/ 2>/dev/null; then + log_info "Health check passed" + return 0 + else + log_error "Health check failed" + return 1 + fi + else + log_error "Container not running" + return 1 + fi +} + +validate() { + log_info "Validating environment..." + + if ! command -v docker &> /dev/null; then + log_error "Docker is not installed" + exit 1 + fi + + if ! command -v docker-compose &> /dev/null; then + log_error "Docker Compose is not installed" + exit 1 + fi + + log_info "All validations passed" +} + +show_help() { + cat << EOF +TipsWallet Deployment Script + +Usage: ./deploy.sh [COMMAND] + +Commands: + build Build Docker image + deploy Build and start container + status Show container status and logs + logs Show real-time logs + stop Stop container + restart Restart container + clean Remove container and image + push Build and push to registry + health Run health check + validate Validate environment + help Show this help message + +Environment Variables: + DOCKER_PORT Port to expose (default: 3000) + DOCKER_REGISTRY Docker registry URL (for push/deploy from registry) + NODE_ENV Node environment (default: production) + GEMINI_API_KEY Gemini API key for the app + +Examples: + ./deploy.sh deploy + DOCKER_PORT=8080 ./deploy.sh deploy + DOCKER_REGISTRY=ghcr.io/username ./deploy.sh push + ./deploy.sh logs + +EOF +} + +# Main +case "${1:-help}" in + build) + validate + build + ;; + deploy) + validate + deploy + ;; + status) + status + ;; + logs) + logs + ;; + stop) + stop + ;; + restart) + validate + restart + ;; + clean) + clean + ;; + push) + validate + push + ;; + health) + health_check + ;; + validate) + validate + ;; + help|--help|-h) + show_help + ;; + *) + log_error "Unknown command: $1" + show_help + exit 1 + ;; +esac diff --git a/apps/wallet-web/deploy.sh b/apps/wallet-web/deploy.sh new file mode 100644 index 0000000..a51a2f8 --- /dev/null +++ b/apps/wallet-web/deploy.sh @@ -0,0 +1,166 @@ +#!/bin/bash + +# TipsWallet Deployment Script for Docker +# Usage: ./deploy.sh [action] +# Actions: build, push, deploy, stop, logs, clean + +set -e + +# Configuration +REGISTRY="${DOCKER_REGISTRY:-localhost}" +IMAGE_NAME="tipswallet" +IMAGE_TAG="${DOCKER_TAG:-latest}" +CONTAINER_NAME="tipswallet-app" +PORT="${DOCKER_PORT:-3000}" + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# Helper functions +log_info() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +log_warn() { + echo -e "${YELLOW}[WARN]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +# Build Docker image +build() { + log_info "Building Docker image: $REGISTRY/$IMAGE_NAME:$IMAGE_TAG" + docker build -t $REGISTRY/$IMAGE_NAME:$IMAGE_TAG . + log_info "Build complete!" +} + +# Push to registry (optional) +push() { + if [ "$REGISTRY" == "localhost" ]; then + log_warn "Skipping push - using local registry" + return + fi + log_info "Pushing image to $REGISTRY" + docker push $REGISTRY/$IMAGE_NAME:$IMAGE_TAG + log_info "Push complete!" +} + +# Deploy container +deploy() { + log_info "Deploying container..." + + # Check if .env file exists + if [ ! -f ".env" ]; then + log_warn ".env file not found!" + log_info "Creating .env from .env.example..." + if [ -f ".env.example" ]; then + cp .env.example .env + log_warn "Please edit .env and add your API keys" + return 1 + fi + fi + + # Stop existing container if running + if docker ps | grep -q $CONTAINER_NAME; then + log_info "Stopping existing container..." + docker stop $CONTAINER_NAME + fi + + # Remove existing container if present + if docker ps -a | grep -q $CONTAINER_NAME; then + log_info "Removing existing container..." + docker rm $CONTAINER_NAME + fi + + # Run new container with docker-compose or docker run + log_info "Starting new container..." + + # Use docker-compose if available + if command -v docker-compose &> /dev/null; then + docker-compose up -d + else + # Fallback to docker run + docker run -d \ + --name $CONTAINER_NAME \ + --restart unless-stopped \ + -p $PORT:3000 \ + --env-file .env \ + $REGISTRY/$IMAGE_NAME:$IMAGE_TAG + fi + + log_info "Container deployed successfully!" + log_info "App is running on port $PORT" + docker ps | grep $CONTAINER_NAME +} + +# Stop container +stop() { + log_info "Stopping container..." + if docker ps | grep -q $CONTAINER_NAME; then + docker stop $CONTAINER_NAME + log_info "Container stopped" + else + log_warn "Container not running" + fi +} + +# View logs +logs() { + log_info "Showing logs for $CONTAINER_NAME..." + docker logs -f $CONTAINER_NAME +} + +# Clean up +clean() { + log_info "Cleaning up..." + stop + if docker ps -a | grep -q $CONTAINER_NAME; then + docker rm $CONTAINER_NAME + log_info "Container removed" + fi + if docker images | grep -q $IMAGE_NAME; then + docker rmi $REGISTRY/$IMAGE_NAME:$IMAGE_TAG + log_info "Image removed" + fi +} + +# Main +case "${1:-deploy}" in + build) + build + ;; + push) + build + push + ;; + deploy) + build + deploy + ;; + stop) + stop + ;; + logs) + logs + ;; + clean) + clean + ;; + *) + echo "Usage: $0 {build|push|deploy|stop|logs|clean}" + echo "" + echo "Actions:" + echo " build - Build Docker image" + echo " push - Build and push to registry" + echo " deploy - Build and deploy container (default)" + echo " stop - Stop running container" + echo " logs - View container logs" + echo " clean - Remove container and image" + exit 1 + ;; +esac diff --git a/apps/wallet-web/docker-compose.yml b/apps/wallet-web/docker-compose.yml new file mode 100644 index 0000000..b16eff5 --- /dev/null +++ b/apps/wallet-web/docker-compose.yml @@ -0,0 +1,59 @@ +version: '3.8' + +services: + tipswallet: + build: + context: . + dockerfile: Dockerfile + args: + NODE_ENV: production + container_name: tipswallet-app + ports: + - "${DOCKER_PORT:-3000}:3000" + restart: unless-stopped + + # Load environment variables from .env file + env_file: + - .env + + # Environment variables + environment: + - NODE_ENV=production + - GEMINI_API_KEY=${GEMINI_API_KEY} + + # Health check + healthcheck: + test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:3000"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + + # Resource constraints + deploy: + resources: + limits: + cpus: '1' + memory: 512M + reservations: + cpus: '0.5' + memory: 256M + + # Logging + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + +# Optional: Add reverse proxy service +# services: +# nginx-proxy: +# image: nginx:alpine +# ports: +# - "80:80" +# - "443:443" +# volumes: +# - ./nginx-proxy.conf:/etc/nginx/conf.d/default.conf +# depends_on: +# - tipswallet diff --git a/apps/wallet-web/index.html b/apps/wallet-web/index.html new file mode 100644 index 0000000..0db86d9 --- /dev/null +++ b/apps/wallet-web/index.html @@ -0,0 +1,15 @@ + + + + + + TipsWallet | Tipspay + + + + + +
+ + + diff --git a/apps/wallet-web/lib/utils.ts b/apps/wallet-web/lib/utils.ts new file mode 100644 index 0000000..bd0c391 --- /dev/null +++ b/apps/wallet-web/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/apps/wallet-web/metadata.json b/apps/wallet-web/metadata.json new file mode 100644 index 0000000..16b402a --- /dev/null +++ b/apps/wallet-web/metadata.json @@ -0,0 +1,5 @@ +{ + "name": "TipsWallet 4.1", + "description": "TipsWallet 4.1 by Tipspay for the Tipschain ecosystem. Production web wallet with swaps, portfolio tracking, and onchain activity.", + "requestFramePermissions": [] +} diff --git a/apps/wallet-web/nginx.conf b/apps/wallet-web/nginx.conf new file mode 100644 index 0000000..c0699a4 --- /dev/null +++ b/apps/wallet-web/nginx.conf @@ -0,0 +1,22 @@ +server { + listen 3000; + server_name localhost; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + + # Cache static assets + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + root /usr/share/nginx/html; + expires 30d; + add_header Cache-Control "public, no-transform"; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} diff --git a/apps/wallet-web/package-lock.json b/apps/wallet-web/package-lock.json new file mode 100644 index 0000000..fd6a634 --- /dev/null +++ b/apps/wallet-web/package-lock.json @@ -0,0 +1,8081 @@ +{ + "name": "tipspay-wallet", + "version": "4.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "tipspay-wallet", + "version": "4.1.0", + "dependencies": { + "@base-ui/react": "^1.3.0", + "@fontsource-variable/geist": "^5.2.8", + "@google/genai": "^1.29.0", + "@tailwindcss/vite": "^4.1.14", + "@vitejs/plugin-react": "^5.0.4", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "dotenv": "^17.2.3", + "ethers": "^6.16.0", + "express": "^4.21.2", + "lucide-react": "^0.546.0", + "motion": "^12.23.24", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "recharts": "^3.8.1", + "shadcn": "^4.2.0", + "tailwind-merge": "^3.5.0", + "tw-animate-css": "^1.4.0", + "vite": "^6.2.0" + }, + "devDependencies": { + "@types/express": "^4.17.21", + "@types/node": "^22.14.0", + "autoprefixer": "^10.4.21", + "tailwindcss": "^4.1.14", + "tsx": "^4.21.0", + "typescript": "~5.8.2" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "license": "MIT" + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "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" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", + "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@base-ui/react": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@base-ui/react/-/react-1.3.0.tgz", + "integrity": "sha512-FwpKqZbPz14AITp1CVgf4AjhKPe1OeeVKSBMdgD10zbFlj3QSWelmtCMLi2+/PFZZcIm3l87G7rwtCZJwHyXWA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.6", + "@base-ui/utils": "0.2.6", + "@floating-ui/react-dom": "^2.1.8", + "@floating-ui/utils": "^0.2.11", + "tabbable": "^6.4.0", + "use-sync-external-store": "^1.6.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17 || ^18 || ^19", + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@base-ui/utils": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@base-ui/utils/-/utils-0.2.6.tgz", + "integrity": "sha512-yQ+qeuqohwhsNpoYDqqXaLllYAkPCP4vYdDrVo8FQXaAPfHWm1pG/Vm+jmGTA5JFS0BAIjookyapuJFY8F9PIw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.6", + "@floating-ui/utils": "^0.2.11", + "reselect": "^5.1.1", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "@types/react": "^17 || ^18 || ^19", + "react": "^17 || ^18 || ^19", + "react-dom": "^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@dotenvx/dotenvx": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.61.0.tgz", + "integrity": "sha512-utL3cpZoFzflyqUkjYbxYujI6STBTmO5LFn4bbin/NZnRWN6wQ7eErhr3/Vpa5h/jicPFC6kTa42r940mQftJQ==", + "license": "BSD-3-Clause", + "dependencies": { + "commander": "^11.1.0", + "dotenv": "^17.2.1", + "eciesjs": "^0.4.10", + "execa": "^5.1.1", + "fdir": "^6.2.0", + "ignore": "^5.3.0", + "object-treeify": "1.1.33", + "picomatch": "^4.0.2", + "which": "^4.0.0", + "yocto-spinner": "^1.1.0" + }, + "bin": { + "dotenvx": "src/cli/dotenvx.js" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@dotenvx/dotenvx/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==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@dotenvx/dotenvx/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@dotenvx/dotenvx/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==", + "license": "ISC" + }, + "node_modules/@dotenvx/dotenvx/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==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@ecies/ciphers": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@ecies/ciphers/-/ciphers-0.2.6.tgz", + "integrity": "sha512-patgsRPKGkhhoBjETV4XxD0En4ui5fbX0hzayqI3M8tvNMGUoUvmyYAIWwlxBc1KX5cturfqByYdj5bYGRpN9g==", + "license": "MIT", + "engines": { + "bun": ">=1", + "deno": ">=2.7.10", + "node": ">=16" + }, + "peerDependencies": { + "@noble/ciphers": "^1.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", + "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.6" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, + "node_modules/@fontsource-variable/geist": { + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource-variable/geist/-/geist-5.2.8.tgz", + "integrity": "sha512-cJ6m9e+8MQ5dCYJsLylfZrgBh6KkG4bOLckB35Tr9J/EqdkEM6QllH5PxqP1dhTvFup+HtMRPuz9xOjxXJggxw==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@google/genai": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.49.0.tgz", + "integrity": "sha512-hO69Zl0H3x+L0KL4stl1pLYgnqnwHoLqtKy6MRlNnW8TAxjqMdOUVafomKd4z1BePkzoxJWbYILny9a2Zk43VQ==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^10.3.0", + "p-retry": "^4.6.2", + "protobufjs": "^7.5.4", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@modelcontextprotocol/sdk": "^1.25.2" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/sdk": { + "optional": true + } + } + }, + "node_modules/@hono/node-server": { + "version": "1.19.13", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.13.tgz", + "integrity": "sha512-TsQLe4i2gvoTtrHje625ngThGBySOgSK3Xo2XRYOdqGN1teR8+I7vchQC46uLJi8OF62YTYA3AhSpumtkhsaKQ==", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz", + "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@hono/node-server": "^1.19.9", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/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/@modelcontextprotocol/sdk/node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { + "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", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "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/@modelcontextprotocol/sdk/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/@modelcontextprotocol/sdk/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/@modelcontextprotocol/sdk/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/@modelcontextprotocol/sdk/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": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/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/@modelcontextprotocol/sdk/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", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mswjs/interceptors": { + "version": "0.41.3", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.41.3.tgz", + "integrity": "sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==", + "license": "MIT", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@noble/ciphers": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", + "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "license": "MIT" + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "license": "MIT", + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", + "license": "MIT" + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@reduxjs/toolkit": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.11.2.tgz", + "integrity": "sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@standard-schema/utils": "^0.3.0", + "immer": "^11.0.0", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@reduxjs/toolkit/node_modules/immer": { + "version": "11.1.4", + "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.4.tgz", + "integrity": "sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", + "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", + "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.2" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz", + "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.2", + "@tailwindcss/oxide-darwin-arm64": "4.2.2", + "@tailwindcss/oxide-darwin-x64": "4.2.2", + "@tailwindcss/oxide-freebsd-x64": "4.2.2", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", + "@tailwindcss/oxide-linux-x64-musl": "4.2.2", + "@tailwindcss/oxide-wasm32-wasi": "4.2.2", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz", + "integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz", + "integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz", + "integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz", + "integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz", + "integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz", + "integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz", + "integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", + "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz", + "integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz", + "integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", + "integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz", + "integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.2.tgz", + "integrity": "sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.2.2", + "@tailwindcss/oxide": "4.2.2", + "tailwindcss": "4.2.2" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@ts-morph/common": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.27.0.tgz", + "integrity": "sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==", + "license": "MIT", + "dependencies": { + "fast-glob": "^3.3.3", + "minimatch": "^10.0.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "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/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-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/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": { + "@types/d3-color": "*" + } + }, + "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-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-shape": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", + "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-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/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": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "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/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.19.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.17.tgz", + "integrity": "sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "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.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/statuses": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.6.tgz", + "integrity": "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==", + "license": "MIT" + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", + "license": "MIT" + }, + "node_modules/@types/validate-npm-package-name": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/validate-npm-package-name/-/validate-npm-package-name-4.0.2.tgz", + "integrity": "sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.2.0.tgz", + "integrity": "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.29.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-rc.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "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/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.27", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "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.28.1", + "caniuse-lite": "^1.0.30001774", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.16", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.16.tgz", + "integrity": "sha512-Lyf3aK28zpsD1yQMiiHD4RvVb6UdMoo8xzG2XzFIfR9luPzOpcBlAsT/qfB1XWS1bxWT+UtE4WmQgsp297FYOA==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001787", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001787.tgz", + "integrity": "sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "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==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/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==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/code-block-writer": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", + "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==", + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "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": ">=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-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-format": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz", + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", + "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-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-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/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/dedent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", + "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dotenv": { + "version": "17.4.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.1.tgz", + "integrity": "sha512-k8DaKGP6r1G30Lx8V4+pCsLzKr8vLmV2paqEj1Y55GdAgJuIqpRp5FfajGF8KtwMxCz9qJc6wUIJnm053d/WCw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/eciesjs": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.18.tgz", + "integrity": "sha512-wG99Zcfcys9fZux7Cft8BAX/YrOJLJSZ3jyYPfhZHqN2E+Ffx+QXBDsv3gubEgPtV6dTzJMSQUwk1H98/t/0wQ==", + "license": "MIT", + "dependencies": { + "@ecies/ciphers": "^0.2.5", + "@noble/ciphers": "^1.3.0", + "@noble/curves": "^1.9.7", + "@noble/hashes": "^1.8.0" + }, + "engines": { + "bun": ">=1", + "deno": ">=2", + "node": ">=16" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.334", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.334.tgz", + "integrity": "sha512-mgjZAz7Jyx1SRCwEpy9wefDS7GvNPazLthHg8eQMJ76wBdGQQDW33TCrUTvQ4wzpmOrv2zrFoD3oNufMdyMpog==", + "license": "ISC" + }, + "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==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-toolkit": { + "version": "1.45.1", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.45.1.tgz", + "integrity": "sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==", + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "devOptional": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ethers": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", + "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethers/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/ethers/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/ethers/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, + "node_modules/ethers/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "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/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/execa": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.2.tgz", + "integrity": "sha512-77VmFeJkO0/rvimEDuUC5H30oqUC4EyOhyGccfqoLebB0oiEYfM7nwPrsDsBL1gsTpwfzX8SFy2MT3TDyRq+bg==", + "license": "MIT", + "dependencies": { + "ip-address": "10.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "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/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/framer-motion": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.38.0.tgz", + "integrity": "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.38.0", + "motion-utils": "^12.36.0", + "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": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuzzysort": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fuzzysort/-/fuzzysort-3.1.0.tgz", + "integrity": "sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==", + "license": "MIT" + }, + "node_modules/gaxios": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.4.tgz", + "integrity": "sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==", + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/gcp-metadata": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", + "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", + "license": "Apache-2.0", + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-own-enumerable-keys/-/get-own-enumerable-keys-1.0.0.tgz", + "integrity": "sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.7", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz", + "integrity": "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "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/google-auth-library": { + "version": "10.6.2", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.6.2.tgz", + "integrity": "sha512-e27Z6EThmVNNvtYASwQxose/G57rkRuaRbQyxM2bvYLLX/GqWZ5chWq2EBoUchJbCc57eC9ArzO5wMsEmWftCw==", + "license": "Apache-2.0", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.1.4", + "gcp-metadata": "8.1.2", + "google-logging-utils": "1.1.3", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/google-logging-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", + "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphql": { + "version": "16.13.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz", + "integrity": "sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/headers-polyfill": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", + "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", + "license": "MIT" + }, + "node_modules/hono": { + "version": "4.12.12", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.12.tgz", + "integrity": "sha512-p1JfQMKaceuCbpJKAPKVqyqviZdS0eUxH9v82oWo1kb9xjQ5wA6iP3FNVAPDFlz5/p7d45lO+BpSk1tuSZMF4Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", + "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "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/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-in-ssh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-3.0.0.tgz", + "integrity": "sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-regexp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz", + "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/jose": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.2.tgz", + "integrity": "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "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==", + "license": "MIT" + }, + "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==", + "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==", + "license": "BSD-2-Clause" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jwa": { + "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", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "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": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "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.546.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.546.0.tgz", + "integrity": "sha512-Z94u6fKT43lKeYHiVyvyR8fT7pwCzDu7RyMPpTvh054+xahSgj4HFQ+NmflvzdXsoAjYGdCguGaFKYuvq0ThCQ==", + "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==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.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": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "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==", + "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/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "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==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/motion": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.38.0.tgz", + "integrity": "sha512-uYfXzeHlgThchzwz5Te47dlv5JOUC7OB4rjJ/7XTUgtBZD8CchMN8qEJ4ZVsUmTyYA44zjV0fBwsiktRuFnn+w==", + "license": "MIT", + "dependencies": { + "framer-motion": "^12.38.0", + "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/motion-dom": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.38.0.tgz", + "integrity": "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.36.0" + } + }, + "node_modules/motion-utils": { + "version": "12.36.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.36.0.tgz", + "integrity": "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==", + "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/msw": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.13.2.tgz", + "integrity": "sha512-go2H1TIERKkC48pXiwec5l6sbNqYuvqOk3/vHGo1Zd+pq/H63oFawDQerH+WQdUw/flJFHDG7F+QdWMwhntA/A==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@inquirer/confirm": "^5.0.0", + "@mswjs/interceptors": "^0.41.2", + "@open-draft/deferred-promise": "^2.2.0", + "@types/statuses": "^2.0.6", + "cookie": "^1.0.2", + "graphql": "^16.12.0", + "headers-polyfill": "^4.0.2", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", + "rettime": "^0.10.1", + "statuses": "^2.0.2", + "strict-event-emitter": "^0.5.1", + "tough-cookie": "^6.0.0", + "type-fest": "^5.2.0", + "until-async": "^3.0.2", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mswjs" + }, + "peerDependencies": { + "typescript": ">= 4.8.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/msw/node_modules/cookie": { + "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/msw/node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.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/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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-releases": { + "version": "2.0.37", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", + "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", + "license": "MIT" + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "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": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", + "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.4.0", + "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", + "is-inside-container": "^1.0.0", + "powershell-utils": "^0.1.0", + "wsl-utils": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "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" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/outvariant": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", + "license": "MIT" + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "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": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, + "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": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", + "license": "MIT" + }, + "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.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/postcss": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.9.tgz", + "integrity": "sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==", + "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" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.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==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/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": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", + "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz", + "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==", + "license": "MIT", + "peer": true, + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.5" + } + }, + "node_modules/react-is": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.5.tgz", + "integrity": "sha512-Dn0t8IQhCmeIT3wu+Apm1/YVsJXsGWi6k4sPdnBIdqMVtHtv0IGi6dcpNpNkNac0zB2uUAqNX3MHzN8c+z2rwQ==", + "license": "MIT", + "peer": true + }, + "node_modules/react-redux": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", + "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/recast": { + "version": "0.23.11", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", + "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", + "license": "MIT", + "dependencies": { + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recharts": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.8.1.tgz", + "integrity": "sha512-mwzmO1s9sFL0TduUpwndxCUNoXsBw3u3E/0+A+cLcrSfQitSG62L32N69GhqUrrT5qKcAE3pCGVINC6pqkBBQg==", + "license": "MIT", + "workspaces": [ + "www" + ], + "dependencies": { + "@reduxjs/toolkit": "^1.9.0 || 2.x.x", + "clsx": "^2.1.1", + "decimal.js-light": "^2.5.1", + "es-toolkit": "^1.39.3", + "eventemitter3": "^5.0.1", + "immer": "^10.1.1", + "react-redux": "8.x.x || 9.x.x", + "reselect": "5.1.1", + "tiny-invariant": "^1.3.3", + "use-sync-external-store": "^1.2.2", + "victory-vendor": "^37.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT", + "peer": true + }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "license": "MIT", + "peerDependencies": { + "redux": "^5.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, + "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==", + "devOptional": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rettime": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/rettime/-/rettime-0.10.1.tgz", + "integrity": "sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw==", + "license": "MIT" + }, + "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/rollup": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", + "fsevents": "~2.3.2" + } + }, + "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" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/router/node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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" + } + }, + "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/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/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.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/shadcn": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/shadcn/-/shadcn-4.2.0.tgz", + "integrity": "sha512-ZDuV340itidaUd4Gi1BxQX+Y7Ush6BHp6URZBM2RyxUUBZ6yFtOWIr4nVY+Ro+YRSpo82v7JrsmtcU5xoBCMJQ==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/plugin-transform-typescript": "^7.28.0", + "@babel/preset-typescript": "^7.27.1", + "@dotenvx/dotenvx": "^1.48.4", + "@modelcontextprotocol/sdk": "^1.26.0", + "@types/validate-npm-package-name": "^4.0.2", + "browserslist": "^4.26.2", + "commander": "^14.0.0", + "cosmiconfig": "^9.0.0", + "dedent": "^1.6.0", + "deepmerge": "^4.3.1", + "diff": "^8.0.2", + "execa": "^9.6.0", + "fast-glob": "^3.3.3", + "fs-extra": "^11.3.1", + "fuzzysort": "^3.1.0", + "https-proxy-agent": "^7.0.6", + "kleur": "^4.1.5", + "msw": "^2.10.4", + "node-fetch": "^3.3.2", + "open": "^11.0.0", + "ora": "^8.2.0", + "postcss": "^8.5.6", + "postcss-selector-parser": "^7.1.0", + "prompts": "^2.4.2", + "recast": "^0.23.11", + "stringify-object": "^5.0.0", + "tailwind-merge": "^3.0.1", + "ts-morph": "^26.0.0", + "tsconfig-paths": "^4.2.0", + "validate-npm-package-name": "^7.0.1", + "zod": "^3.24.1", + "zod-to-json-schema": "^3.24.6" + }, + "bin": { + "shadcn": "dist/index.js" + } + }, + "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", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "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" + } + }, + "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==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-5.0.0.tgz", + "integrity": "sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg==", + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-keys": "^1.0.0", + "is-obj": "^3.0.0", + "is-regexp": "^3.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/yeoman/stringify-object?sponsor=1" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "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", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tabbable": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", + "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tailwind-merge": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz", + "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz", + "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", + "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "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/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tldts": { + "version": "7.0.28", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.28.tgz", + "integrity": "sha512-+Zg3vWhRUv8B1maGSTFdev9mjoo8Etn2Ayfs4cnjlD3CsGkxXX4QyW3j2WJ0wdjYcYmy7Lx2RDsZMhgCWafKIw==", + "license": "MIT", + "dependencies": { + "tldts-core": "^7.0.28" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.0.28", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.28.tgz", + "integrity": "sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ==", + "license": "MIT" + }, + "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", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", + "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/ts-morph": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-26.0.0.tgz", + "integrity": "sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==", + "license": "MIT", + "dependencies": { + "@ts-morph/common": "~0.27.0", + "code-block-writer": "^13.0.3" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tw-animate-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", + "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Wombosvideo" + } + }, + "node_modules/type-fest": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz", + "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==", + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "devOptional": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "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/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/until-async": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/until-async/-/until-async-3.0.2.tgz", + "integrity": "sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/kettanaito" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz", + "integrity": "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/victory-vendor": { + "version": "37.3.6", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz", + "integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==", + "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/vite": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz", + "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/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" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "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/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "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/wsl-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz", + "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/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==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-spinner": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-1.1.0.tgz", + "integrity": "sha512-/BY0AUXnS7IKO354uLLA2eRcWiqDifEbd6unXCsOxkFDAkhgUL3PH9X2bFoaU0YchnDXsF+iKleeTLJGckbXfA==", + "license": "MIT", + "dependencies": { + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18.19" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "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" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + } + } +} diff --git a/apps/wallet-web/package.json b/apps/wallet-web/package.json new file mode 100644 index 0000000..db84693 --- /dev/null +++ b/apps/wallet-web/package.json @@ -0,0 +1,43 @@ +{ + "name": "tipspay-wallet", + "private": true, + "version": "4.1.0", + "type": "module", + "scripts": { + "dev": "vite --port=3000 --host=0.0.0.0", + "build": "vite build", + "start": "vite preview --port 8080 --host 0.0.0.0", + "preview": "vite preview --port 8080 --host 0.0.0.0", + "clean": "rm -rf dist", + "lint": "tsc --noEmit" + }, + "dependencies": { + "@base-ui/react": "^1.3.0", + "@fontsource-variable/geist": "^5.2.8", + "@google/genai": "^1.29.0", + "@tailwindcss/vite": "^4.1.14", + "@vitejs/plugin-react": "^5.0.4", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "dotenv": "^17.2.3", + "ethers": "^6.16.0", + "express": "^4.21.2", + "lucide-react": "^0.546.0", + "motion": "^12.23.24", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "recharts": "^3.8.1", + "shadcn": "^4.2.0", + "tailwind-merge": "^3.5.0", + "tw-animate-css": "^1.4.0", + "vite": "^6.2.0" + }, + "devDependencies": { + "@types/express": "^4.17.21", + "@types/node": "^22.14.0", + "autoprefixer": "^10.4.21", + "tailwindcss": "^4.1.14", + "tsx": "^4.21.0", + "typescript": "~5.8.2" + } +} diff --git a/apps/wallet-web/public/manifest.json b/apps/wallet-web/public/manifest.json new file mode 100644 index 0000000..545ab0b --- /dev/null +++ b/apps/wallet-web/public/manifest.json @@ -0,0 +1,15 @@ +{ + "manifest_version": 3, + "name": "Tipspay Wallet Extension", + "short_name": "Tipspay Wallet", + "version": "4.1.0", + "description": "Production wallet and DEX surface for the Tipschain ecosystem.", + "action": { + "default_popup": "index.html", + "default_title": "Tipspay Wallet" + }, + "permissions": ["storage", "activeTab"], + "content_security_policy": { + "extension_pages": "script-src 'self'; object-src 'self'" + } +} diff --git a/apps/wallet-web/public/token-icons/lp.svg b/apps/wallet-web/public/token-icons/lp.svg new file mode 100644 index 0000000..92bc4cd --- /dev/null +++ b/apps/wallet-web/public/token-icons/lp.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/wallet-web/public/token-icons/usdt.svg b/apps/wallet-web/public/token-icons/usdt.svg new file mode 100644 index 0000000..11bf1bf --- /dev/null +++ b/apps/wallet-web/public/token-icons/usdt.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/apps/wallet-web/public/token-icons/usdtc.svg b/apps/wallet-web/public/token-icons/usdtc.svg new file mode 100644 index 0000000..4f4a6af --- /dev/null +++ b/apps/wallet-web/public/token-icons/usdtc.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/apps/wallet-web/public/token-icons/wtpc.svg b/apps/wallet-web/public/token-icons/wtpc.svg new file mode 100644 index 0000000..de249af --- /dev/null +++ b/apps/wallet-web/public/token-icons/wtpc.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/apps/wallet-web/src/App.tsx b/apps/wallet-web/src/App.tsx new file mode 100644 index 0000000..05d61a4 --- /dev/null +++ b/apps/wallet-web/src/App.tsx @@ -0,0 +1,112 @@ +/** + * @license + * SPDX-License-Identifier: Apache-2.0 + */ + +import { useState, useEffect } from 'react'; +import { AnimatePresence, motion } from 'motion/react'; +import SplashScreen from './components/SplashScreen'; +import WalletDashboard from './components/WalletDashboard'; +import DEX from './components/DEX'; +import Market from './components/Market'; +import Sidebar from './components/Sidebar'; +import LandingPage from './components/LandingPage'; +import Onboarding from './components/Onboarding'; +import { ThemeProvider } from './components/ThemeProvider'; +import { TransactionProvider } from './context/TransactionContext'; + +type AppView = 'landing' | 'onboarding' | 'loading' | 'main'; + +export default function App() { + const [view, setView] = useState('landing'); + const [activeTab, setActiveTab] = useState('wallet'); + + // Check if already onboarded (simulated) + useEffect(() => { + const onboarded = localStorage.getItem('tipspay_onboarded'); + if (onboarded) { + setView('loading'); + } + }, []); + + const handleEnter = () => { + setView('onboarding'); + }; + + const handleOnboardingComplete = () => { + localStorage.setItem('tipspay_onboarded', 'true'); + setView('loading'); + }; + + const handleSplashComplete = () => { + setView('main'); + }; + + return ( + + +
+ + {view === 'landing' && ( + + + + )} + + {view === 'onboarding' && ( + + + + )} + + {view === 'loading' && ( + + + + )} + + {view === 'main' && ( + + + +
+
+ + {activeTab === 'wallet' && } + {activeTab === 'dex' && } + {activeTab === 'market' && } + +
+
+
+ )} +
+
+
+
+ ); +} + diff --git a/apps/wallet-web/src/components/DEX.tsx b/apps/wallet-web/src/components/DEX.tsx new file mode 100644 index 0000000..edab927 --- /dev/null +++ b/apps/wallet-web/src/components/DEX.tsx @@ -0,0 +1,380 @@ +import { useState, useEffect } from 'react'; +import * as React from 'react'; +import { motion, AnimatePresence } from 'motion/react'; +import { + ArrowDown, + Settings2, + Info, + ChevronDown, + RefreshCw, + Zap, + Loader2, + CheckCircle2, + AlertCircle, + Search, + X +} from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { Input } from '@/components/ui/input'; +import { Badge } from '@/components/ui/badge'; +import { ScrollArea } from '@/components/ui/scroll-area'; +import { useTransactions } from '../context/TransactionContext'; +import { NETWORK_CONFIG } from '../config'; + +import { TipspayDEXLogo, TPCCoin, USDTCoin, WTPCCoin, TetherCoin } from './Icons'; + +type Token = { + symbol: string; + name: string; + address: string; + icon: React.ReactNode; +}; + +const TOKENS: Token[] = [ + { symbol: 'TPC', name: 'Tipscoin', address: 'native', icon: }, + { symbol: 'USDTC', name: 'USDTips', address: NETWORK_CONFIG.stableToken, icon: }, + { symbol: 'WTPC', name: 'WrappedNative', address: NETWORK_CONFIG.wrappedNative, icon: }, + { symbol: 'TETHER', name: 'Tether USD', address: '0x...tether', icon: }, + { symbol: 'DAI', name: 'Dai Stablecoin', address: '0x...dai', icon:
}, + { symbol: 'WBTC', name: 'Wrapped Bitcoin', address: '0x...wbtc', icon:
}, + { symbol: 'ETH', name: 'Ethereum', address: '0x...eth', icon:
💠
}, +]; + +interface TokenSelectModalProps { + isOpen: boolean; + onClose: () => void; + onSelect: (token: Token) => void; + selectedToken: Token; + otherToken: Token; +} + +function TokenSelectModal({ isOpen, onClose, onSelect, selectedToken, otherToken }: TokenSelectModalProps) { + const [searchQuery, setSearchQuery] = useState(''); + + const filteredTokens = TOKENS.filter(token => + token.symbol.toLowerCase().includes(searchQuery.toLowerCase()) || + token.name.toLowerCase().includes(searchQuery.toLowerCase()) + ); + + if (!isOpen) return null; + + return ( + + e.stopPropagation()} + > +
+

Select a Token

+ +
+ +
+
+ + setSearchQuery(e.target.value)} + className="pl-11 h-12 rounded-2xl bg-white/5 border-white/10 focus-visible:ring-primary" + /> +
+ + +
+ {filteredTokens.map((token) => { + const isSelected = token.symbol === selectedToken.symbol; + const isOther = token.symbol === otherToken.symbol; + + return ( + + ); + })} + {filteredTokens.length === 0 && ( +
+ No tokens found +
+ )} +
+
+
+
+
+ ); +} + +export default function DEX() { + const { addTransaction } = useTransactions(); + const [fromToken, setFromToken] = useState(TOKENS[0]); + const [toToken, setToToken] = useState(TOKENS[1]); + const [fromAmount, setFromAmount] = useState(''); + const [toAmount, setToAmount] = useState(''); + const [isSwapping, setIsSwapping] = useState(false); + const [swapStatus, setSwapStatus] = useState<'idle' | 'loading' | 'success' | 'error'>('idle'); + const [isSelectingFrom, setIsSelectingFrom] = useState(false); + const [isSelectingTo, setIsSelectingTo] = useState(false); + + const exchangeRate = fromToken.symbol === 'TPC' ? 0.45 : (fromToken.symbol === 'USDTC' ? 2.22 : 1); + + useEffect(() => { + if (fromAmount && !isNaN(parseFloat(fromAmount))) { + const calculated = parseFloat(fromAmount) * exchangeRate; + setToAmount(calculated.toFixed(6)); + } else { + setToAmount(''); + } + }, [fromAmount, fromToken, toToken, exchangeRate]); + + const handleSwap = async () => { + if (!fromAmount || parseFloat(fromAmount) <= 0) return; + + setIsSwapping(true); + setSwapStatus('loading'); + + // Simulate blockchain interaction + await new Promise(resolve => setTimeout(resolve, 2000)); + + try { + // In a real app, we would call the contract here using ethers/viem + // const contract = new ethers.Contract(NETWORK_CONFIG.stableToken, ABI, provider); + + addTransaction({ + type: 'swap', + token: `${fromToken.symbol}/${toToken.symbol}`, + amount: fromAmount, + status: 'completed', + hash: `0x${Math.random().toString(16).substring(2, 42)}`, + }); + + setSwapStatus('success'); + setTimeout(() => { + setSwapStatus('idle'); + setIsSwapping(false); + setFromAmount(''); + setToAmount(''); + }, 3000); + } catch (error) { + setSwapStatus('error'); + setTimeout(() => setSwapStatus('idle'), 3000); + setIsSwapping(false); + } + }; + + const switchTokens = () => { + setFromToken(toToken); + setToToken(fromToken); + setFromAmount(toAmount); + }; + + return ( + +
+
+ +
+ + +
+
+ + + + {swapStatus === 'success' && ( + + +

Swap Successful!

+

Your transaction has been confirmed on Tipschain.

+
+ )} +
+ + + {/* From Token */} +
+
+ From + Balance: 0.00 +
+
+ setFromAmount(e.target.value)} + disabled={isSwapping} + className="border-none bg-transparent text-3xl font-bold p-0 focus-visible:ring-0 placeholder:text-muted-foreground/30" + /> + +
+
+ Contract: {fromToken.address} +
+
+ + {/* Swap Icon */} +
+ +
+ + {/* To Token */} +
+
+ To + Balance: 0.00 +
+
+ + +
+
+ Contract: {toToken.address} +
+
+ +
+
+
+ Price Impact +
+ <0.01% +
+ + +
+
+
+ + {/* Info Card */} +
+
+ +
+

+ TipspayDEX uses an automated market maker (AMM) to provide the best rates across the Tipschain ecosystem. + Facilitated by USDTips and WrappedNative contracts. +

+
+
+ + + {isSelectingFrom && ( + setIsSelectingFrom(false)} + onSelect={setFromToken} + selectedToken={fromToken} + otherToken={toToken} + /> + )} + {isSelectingTo && ( + setIsSelectingTo(false)} + onSelect={setToToken} + selectedToken={toToken} + otherToken={fromToken} + /> + )} + +
+ ); +} diff --git a/apps/wallet-web/src/components/Icons.tsx b/apps/wallet-web/src/components/Icons.tsx new file mode 100644 index 0000000..c2d0d9c --- /dev/null +++ b/apps/wallet-web/src/components/Icons.tsx @@ -0,0 +1,56 @@ +import React from 'react'; + +export const TipschainLogo = ({ className }: { className?: string }) => ( + + + + Tipschain + +); + +export const TipspayDEXLogo = ({ className }: { className?: string }) => ( + + + + + TipspayDEX + +); + +export const TipspayWalletLogo = ({ className }: { className?: string }) => ( + + + + + Tipspay + +); + +export const TPCCoin = ({ className }: { className?: string }) => ( + + + TPC + +); + +export const USDTCoin = ({ className }: { className?: string }) => ( + + + $ + +); + +export const WTPCCoin = ({ className }: { className?: string }) => ( + + + W + TPC + +); + +export const TetherCoin = ({ className }: { className?: string }) => ( + + + + +); diff --git a/apps/wallet-web/src/components/LandingPage.tsx b/apps/wallet-web/src/components/LandingPage.tsx new file mode 100644 index 0000000..bf4bbd6 --- /dev/null +++ b/apps/wallet-web/src/components/LandingPage.tsx @@ -0,0 +1,237 @@ +import { motion } from 'motion/react'; +import { + Shield, + Zap, + Globe, + ArrowRight, + Download, + Cpu, + Lock, + Layers +} from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { TipschainLogo, TipspayWalletLogo } from './Icons'; +import { NETWORK_CONFIG } from '@/src/config'; + +interface LandingPageProps { + onEnter: () => void; +} + +export default function LandingPage({ onEnter }: LandingPageProps) { + const handleDownloadExtension = () => { + const popup = window.open(NETWORK_CONFIG.extensionDownload, '_blank', 'noopener,noreferrer'); + if (!popup) { + window.location.href = NETWORK_CONFIG.extensionDownload; + } + }; + + return ( +
+
+
+
+
+
+ +
+ + + Tipschain Mainnet is Live + + + + The Future of
+ + Decentralized Finance + +
+ + + Securely manage, swap, and grow your assets on the world's fastest blockchain ecosystem. + Experience the power of the Tipschain Ecosystem. + + + + + + +
+
+ +
+
+
+ +
+ +
+

+ Powered by Tipschain +

+

+ Tipschain is a high-performance Layer 1 blockchain designed for mass adoption. + With sub-second finality and near-zero fees, it's the perfect foundation for the next generation of Web3 apps. +

+
+
+

100k+

+

TPS Capacity

+
+
+

<$0.001

+

Avg. Gas Fee

+
+
+
+ + +
+
+
+ {[ + { icon: Zap, title: 'Instant', desc: 'Sub-second block times' }, + { icon: Globe, title: 'Global', desc: 'Borderless transactions' }, + { icon: Shield, title: 'Secure', desc: 'PoS Consensus' }, + { icon: Layers, title: 'Scalable', desc: 'Sharding ready' } + ].map((feature, i) => ( +
+ +

{feature.title}

+

{feature.desc}

+
+ ))} +
+
+ +
+
+
+ +
+
+
+ + + +

+ Your Gateway to the Tipschain Ecosystem +

+

+ The Ultimate Wallet by Tipspay +

+

+ The ultimate non-custodial wallet for the Tipschain ecosystem. + Manage your assets, swap tokens, and explore dApps with ease. +

+
+ +
+ {[ + { + icon: Lock, + title: 'Non-Custodial', + desc: 'Your keys, your crypto. We never have access to your funds.', + color: 'text-primary' + }, + { + icon: ArrowRight, + title: 'Integrated DEX', + desc: 'Swap tokens instantly with the best rates across the network.', + color: 'text-secondary' + }, + { + icon: Cpu, + title: 'Hardware Support', + desc: 'Connect your Ledger or Trezor for maximum security.', + color: 'text-accent' + } + ].map((item, i) => ( + +
+ +
+

{item.title}

+

{item.desc}

+
+ ))} +
+
+
+ +
+
+
+ +
+
+ Wallet + DEX + Explorer + Docs +
+

+ © 2026 Tipschain Ecosystem Wallet by Tipspay. All rights reserved. +

+
+
+
+ ); +} diff --git a/apps/wallet-web/src/components/Market.tsx b/apps/wallet-web/src/components/Market.tsx new file mode 100644 index 0000000..5fd0491 --- /dev/null +++ b/apps/wallet-web/src/components/Market.tsx @@ -0,0 +1,157 @@ +import { motion } from 'motion/react'; +import { + TrendingUp, + TrendingDown, + Search, + Filter, + Star, + ChevronRight +} from 'lucide-react'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { Input } from '@/components/ui/input'; +import { Button } from '@/components/ui/button'; +import { Badge } from '@/components/ui/badge'; +import { + LineChart, + Line, + ResponsiveContainer, + YAxis, + XAxis, + Tooltip +} from 'recharts'; + +const marketData = [ + { name: 'TPC', price: 0, change: 0, cap: '0', volume: '0', chart: [0, 0, 0, 0, 0, 0, 0] }, + { name: 'WTPC', price: 0, change: 0, cap: '0', volume: '0', chart: [0, 0, 0, 0, 0, 0, 0] }, + { name: 'USDTC', price: 0, change: 0, cap: '0', volume: '0', chart: [0, 0, 0, 0, 0, 0, 0] }, +]; + +import { TPCCoin, USDTCoin, WTPCCoin, TetherCoin } from './Icons'; + +const TokenIcon = ({ symbol }: { symbol: string }) => { + switch (symbol) { + case 'TPC': return ; + case 'USDTC': return ; + case 'WTPC': return ; + default: return
💰
; + } +}; + +export default function Market() { + return ( + +
+

Market

+
+
+ + +
+ +
+
+ + {/* Trending Cards */} +
+ {marketData.slice(0, 3).map((item) => ( + + +
+
+
+ +
+
+

{item.name}

+

Vol: {item.volume}

+
+
+ = 0 ? "bg-secondary/10 text-secondary" : "bg-red-400/10 text-red-400"}> + {item.change >= 0 ? : } + {Math.abs(item.change)}% + +
+ +
+ + ({ val, i }))}> + = 0 ? "#22c55e" : "#f87171"} + strokeWidth={2} + dot={false} + /> + + +
+ +
+

${item.price.toLocaleString()}

+ +
+
+
+ ))} +
+ + {/* Market Table */} + + + All Assets + + +
+ + + + + + + + + + + + {marketData.map((item) => ( + + + + + + + + ))} + +
AssetPrice24h ChangeMarket Cap
+
+
+ +
+ {item.name} +
+
${item.price.toLocaleString()} + = 0 ? "text-secondary" : "text-red-400"}> + {item.change >= 0 ? '+' : ''}{item.change}% + + ${item.cap} + +
+
+
+
+
+ ); +} diff --git a/apps/wallet-web/src/components/Onboarding.tsx b/apps/wallet-web/src/components/Onboarding.tsx new file mode 100644 index 0000000..b08ae16 --- /dev/null +++ b/apps/wallet-web/src/components/Onboarding.tsx @@ -0,0 +1,176 @@ +import { useState } from 'react'; +import { motion, AnimatePresence } from 'motion/react'; +import { + Shield, + Key, + Plus, + ArrowRight, + Copy, + Check, + AlertCircle +} from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { Card, CardContent } from '@/components/ui/card'; +import { TipspayWalletLogo } from './Icons'; + +interface OnboardingProps { + onComplete: () => void; +} + +export default function Onboarding({ onComplete }: OnboardingProps) { + const [step, setStep] = useState<'choice' | 'seed' | 'verify'>('choice'); + const [copied, setCopied] = useState(false); + + const seedPhrase = [ + "ocean", "mountain", "sunlight", "bridge", "crystal", "forest", + "nebula", "velocity", "quantum", "horizon", "echo", "spirit" + ]; + + const handleCopy = () => { + navigator.clipboard.writeText(seedPhrase.join(' ')); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }; + + return ( +
+ {/* Background Glows */} +
+
+ + + {step === 'choice' && ( + +
+ +
+ +
+

Welcome to Tipspay

+

The most secure way to explore Tipschain

+
+ +
+ + + +
+
+ )} + + {step === 'seed' && ( + +
+

Secret Recovery Phrase

+

This is the ONLY way to recover your wallet. Write it down and keep it safe.

+
+ +
+
+ {seedPhrase.map((word, i) => ( +
+ {i + 1}. + {word} +
+ ))} +
+ +
+ + +
+
+ +
+ +

+ Never share your recovery phrase with anyone. Anyone with this phrase can steal your funds. + Tipspay support will NEVER ask for this phrase. +

+
+
+ )} + + {step === 'verify' && ( + +
+ +
+ +
+

Wallet Secured!

+

Your Tipspay wallet is ready to use. Welcome to the ecosystem.

+
+ + +
+ )} +
+
+ ); +} + +import { ChevronRight } from 'lucide-react'; diff --git a/apps/wallet-web/src/components/Sidebar.tsx b/apps/wallet-web/src/components/Sidebar.tsx new file mode 100644 index 0000000..5dc3cfc --- /dev/null +++ b/apps/wallet-web/src/components/Sidebar.tsx @@ -0,0 +1,142 @@ +import { motion, AnimatePresence } from 'motion/react'; +import { + Wallet, + ArrowLeftRight, + TrendingUp, + LayoutDashboard, + Settings, + ShieldCheck, + Globe, + LogOut, + Sun, + Moon +} from 'lucide-react'; +import { cn } from '@/lib/utils'; +import { Button } from '@/components/ui/button'; +import { Separator } from '@/components/ui/separator'; +import { useTheme } from './ThemeProvider'; + +interface SidebarProps { + activeTab: string; + setActiveTab: (tab: string) => void; +} + +const navItems = [ + { id: 'wallet', label: 'Wallet', icon: Wallet }, + { id: 'dex', label: 'DEX', icon: ArrowLeftRight }, + { id: 'market', label: 'Market', icon: TrendingUp }, +]; + +import { TipspayWalletLogo } from './Icons'; +import { NETWORK_CONFIG } from '@/src/config'; + +export default function Sidebar({ activeTab, setActiveTab }: SidebarProps) { + const { theme, toggleTheme } = useTheme(); + + return ( + + ); +} diff --git a/apps/wallet-web/src/components/SplashScreen.tsx b/apps/wallet-web/src/components/SplashScreen.tsx new file mode 100644 index 0000000..d6b14d5 --- /dev/null +++ b/apps/wallet-web/src/components/SplashScreen.tsx @@ -0,0 +1,89 @@ +import { motion, AnimatePresence } from 'motion/react'; +import { Wallet } from 'lucide-react'; + +interface SplashScreenProps { + onComplete: () => void; +} + +import { TipspayWalletLogo } from './Icons'; + +export default function SplashScreen({ onComplete }: SplashScreenProps) { + return ( + + {/* Animated Background Orbs */} + + + +
+ + + + + + TIPSPAY + + + + Secure • Fast • Decentralized + + + setTimeout(onComplete, 500)} + className="h-1 bg-gradient-to-r from-primary via-secondary to-accent rounded-full mt-12 overflow-hidden" + > + + +
+
+ ); +} diff --git a/apps/wallet-web/src/components/ThemeProvider.tsx b/apps/wallet-web/src/components/ThemeProvider.tsx new file mode 100644 index 0000000..414aec2 --- /dev/null +++ b/apps/wallet-web/src/components/ThemeProvider.tsx @@ -0,0 +1,42 @@ +import React, { createContext, useContext, useEffect, useState } from 'react'; + +type Theme = 'dark' | 'light'; + +interface ThemeContextType { + theme: Theme; + toggleTheme: () => void; +} + +const ThemeContext = createContext(undefined); + +export function ThemeProvider({ children }: { children: React.ReactNode }) { + const [theme, setTheme] = useState(() => { + const saved = localStorage.getItem('theme'); + return (saved as Theme) || 'dark'; + }); + + useEffect(() => { + const root = window.document.documentElement; + root.classList.remove('light', 'dark'); + root.classList.add(theme); + localStorage.setItem('theme', theme); + }, [theme]); + + const toggleTheme = () => { + setTheme((prev) => (prev === 'dark' ? 'light' : 'dark')); + }; + + return ( + + {children} + + ); +} + +export function useTheme() { + const context = useContext(ThemeContext); + if (context === undefined) { + throw new Error('useTheme must be used within a ThemeProvider'); + } + return context; +} diff --git a/apps/wallet-web/src/components/WalletDashboard.tsx b/apps/wallet-web/src/components/WalletDashboard.tsx new file mode 100644 index 0000000..c92a669 --- /dev/null +++ b/apps/wallet-web/src/components/WalletDashboard.tsx @@ -0,0 +1,430 @@ +import { motion } from 'motion/react'; +import * as React from 'react'; +import { + Plus, + ArrowUpRight, + ArrowDownLeft, + RefreshCw, + MoreHorizontal, + Copy, + ExternalLink, + ChevronRight, + ArrowLeftRight, + Clock, + CheckCircle2, + XCircle, + Loader2 +} from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { Badge } from '@/components/ui/badge'; +import { ScrollArea } from '@/components/ui/scroll-area'; +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from '@/components/ui/dialog'; +import { Input } from '@/components/ui/input'; +import { Token } from '@/src/types'; +import { NETWORK_CONFIG } from '@/src/config'; +import { useTransactions, Transaction } from '../context/TransactionContext'; +import { TPCCoin, USDTCoin, WTPCCoin } from './Icons'; + +const mockTokens: Token[] = [ + { id: '1', symbol: 'TPC', name: 'Tipscoin', balance: 0, price: 0, change24h: 0, icon: 'tpc', color: 'primary' }, + { id: '2', symbol: 'WTPC', name: 'Wrapped TPC', balance: 0, price: 0, change24h: 0, icon: 'wtpc', color: 'purple-400' }, + { id: '3', symbol: 'USDTC', name: 'USDTips', balance: 0, price: 0, change24h: 0, icon: 'usdc', color: 'green-500' }, +]; + +const WALLET_ADDRESS_STORAGE_KEY = 'tipspay_wallet_address'; + +const TokenIcon = ({ symbol }: { symbol: string }) => { + switch (symbol) { + case 'TPC': return ; + case 'USDTC': return ; + case 'WTPC': return ; + default: return
💰
; + } +}; + +const shortenAddress = (value: string, head = 6, tail = 4) => + value.length > head + tail ? `${value.slice(0, head)}...${value.slice(-tail)}` : value; + +const createLocalWalletAddress = () => { + const bytes = new Uint8Array(20); + crypto.getRandomValues(bytes); + return `0x${Array.from(bytes, (value) => value.toString(16).padStart(2, '0')).join('')}`; +}; + +const createMockHash = () => { + const bytes = new Uint8Array(32); + crypto.getRandomValues(bytes); + return `0x${Array.from(bytes, (value) => value.toString(16).padStart(2, '0')).join('')}`; +}; + +const TransactionItem: React.FC<{ tx: Transaction }> = ({ tx }) => { + const getIcon = () => { + switch (tx.type) { + case 'send': return ; + case 'receive': return ; + case 'swap': return ; + } + }; + + const getStatusIcon = () => { + switch (tx.status) { + case 'completed': return ; + case 'failed': return ; + case 'pending': return ; + } + }; + + return ( +
+
+
+ {getIcon()} +
+
+
+

{tx.type} {tx.token}

+ {getStatusIcon()} +
+

+ + {new Date(tx.timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} +

+
+
+
+

+ {tx.type === 'receive' ? '+' : '-'}{tx.amount} +

+

+ {tx.hash?.substring(0, 10)}... +

+
+
+ ); +}; + +export default function WalletDashboard() { + const { transactions, addTransaction } = useTransactions(); + const totalBalance = mockTokens.reduce((acc, token) => acc + (token.balance * token.price), 0); + const [walletAddress, setWalletAddress] = React.useState(''); + const [copied, setCopied] = React.useState(false); + const [statusMessage, setStatusMessage] = React.useState(''); + const [sendOpen, setSendOpen] = React.useState(false); + const [receiveOpen, setReceiveOpen] = React.useState(false); + const [sendTo, setSendTo] = React.useState(''); + const [sendAmount, setSendAmount] = React.useState(''); + const [sendToken, setSendToken] = React.useState(mockTokens[0].symbol); + + React.useEffect(() => { + const storedAddress = localStorage.getItem(WALLET_ADDRESS_STORAGE_KEY) || createLocalWalletAddress(); + localStorage.setItem(WALLET_ADDRESS_STORAGE_KEY, storedAddress); + setWalletAddress(storedAddress); + }, []); + + React.useEffect(() => { + if (!statusMessage) { + return undefined; + } + const timeout = window.setTimeout(() => setStatusMessage(''), 2800); + return () => window.clearTimeout(timeout); + }, [statusMessage]); + + const copyToClipboard = async (value: string, message: string) => { + try { + await navigator.clipboard.writeText(value); + setCopied(true); + setStatusMessage(message); + window.setTimeout(() => setCopied(false), 1600); + } catch (error) { + console.error('Clipboard write failed', error); + setStatusMessage('Clipboard access was blocked in this browser.'); + } + }; + + const openExternal = (url: string) => { + const popup = window.open(url, '_blank', 'noopener,noreferrer'); + if (!popup) { + window.location.href = url; + } + }; + + const handleBuy = () => { + openExternal(NETWORK_CONFIG.dex); + }; + + const handleBridge = () => { + openExternal(NETWORK_CONFIG.dex); + }; + + const handleSend = (event: React.FormEvent) => { + event.preventDefault(); + + if (!/^0x[a-fA-F0-9]{40}$/.test(sendTo)) { + setStatusMessage('Enter a valid EVM address to send funds.'); + return; + } + + const parsedAmount = Number(sendAmount); + if (!Number.isFinite(parsedAmount) || parsedAmount <= 0) { + setStatusMessage('Enter a valid amount greater than zero.'); + return; + } + + addTransaction({ + type: 'send', + token: sendToken, + amount: parsedAmount.toFixed(4), + status: 'completed', + hash: createMockHash(), + from: walletAddress, + to: sendTo, + }); + + setSendOpen(false); + setSendTo(''); + setSendAmount(''); + setSendToken(mockTokens[0].symbol); + setStatusMessage(`${sendToken} transfer added to local wallet history.`); + }; + + const handleViewHistory = () => { + if (!walletAddress) return; + openExternal(`${NETWORK_CONFIG.explorer}/address/${walletAddress}`); + }; + + return ( + <> + +
+
+

Total Balance

+
+ ${totalBalance.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} + + 0% Today + +
+
+ + {walletAddress ? shortenAddress(walletAddress) : 'Generating...'} + + + +
+ {statusMessage && ( +

{statusMessage}

+ )} +
+ +
+ + + +
+
+ +
+ + + Assets + + + +
+ {mockTokens.map((token) => ( +
+
+
+ +
+
+

{token.symbol}

+

{token.name}

+
+
+
+

{token.balance.toLocaleString()} {token.symbol}

+

+ ${(token.balance * token.price).toLocaleString()} + = 0 ? 'text-secondary ml-2' : 'text-red-400 ml-2'}> + {token.change24h >= 0 ? '+' : ''}{token.change24h}% + +

+
+
+ ))} +
+
+
+ +
+ + + TipsBridge + + +

Move your assets to Tipschain L1 instantly with zero fees.

+ +
+
+ + + + Transaction History + + + + + {transactions.length > 0 ? ( +
+ {transactions.map((tx) => ( + + ))} +
+ ) : ( +
+
+ +
+

No transactions yet.

+

Swaps on DEX will appear here.

+
+ )} +
+ +
+
+
+
+
+ + + + + Send Assets + + Create a local send action and record it in wallet history. + + +
+
+ + setSendTo(event.target.value)} + placeholder="0x..." + className="bg-white/5 border-white/10" + /> +
+
+
+ + setSendAmount(event.target.value)} + placeholder="0.0" + inputMode="decimal" + className="bg-white/5 border-white/10" + /> +
+
+ + +
+
+ + + + +
+
+
+ + + + + Receive Assets + + Share this address to receive TPC and supported Tipschain assets. + + +
+
+

Wallet address

+

{walletAddress || 'Generating wallet address...'}

+
+ + + + +
+
+
+ + ); +} diff --git a/apps/wallet-web/src/config.ts b/apps/wallet-web/src/config.ts new file mode 100644 index 0000000..ef8965e --- /dev/null +++ b/apps/wallet-web/src/config.ts @@ -0,0 +1,14 @@ +export const NETWORK_CONFIG = { + chainId: 19251925, + rpc: 'https://rpc.tipschain.org', + explorer: 'https://scan.tipschain.online', + wallet: 'https://wallet.tipspay.org', + dex: 'https://dex.tipspay.org', + extensionDownload: 'https://wallet.tipspay.org/downloads/tipspay-wallet-extension-v4.1.0.zip', + stableToken: '0x960541Ba5d3D1da6A6224918082B1b0c2AA50234', + wrappedNative: '0x18b9cA5bA2277484CD59Ac75DB235b6c67e65504', + priceOracle: '0xB23ea545dB34a0596b29C93E818503fc5e6cB8D4', + tipsNameService: '0xAAD1b0D0261c0E12Eb1327578C4a3dCdA3aF6d72', + trustedForwarder: '0xaD69fb5FB37E310a17025e097D9A2a3F9fC7eC8F', + gaslessReserve: '0x640Dd349333dC4F36E28843C27e23412537F7A7C', +}; diff --git a/apps/wallet-web/src/context/TransactionContext.tsx b/apps/wallet-web/src/context/TransactionContext.tsx new file mode 100644 index 0000000..58e389a --- /dev/null +++ b/apps/wallet-web/src/context/TransactionContext.tsx @@ -0,0 +1,70 @@ +import React, { createContext, useContext, useState, useEffect } from 'react'; + +export type TransactionStatus = 'pending' | 'completed' | 'failed'; +export type TransactionType = 'send' | 'receive' | 'swap'; + +export interface Transaction { + id: string; + type: TransactionType; + token: string; + amount: string; + status: TransactionStatus; + timestamp: number; + hash?: string; + to?: string; + from?: string; +} + +interface TransactionContextType { + transactions: Transaction[]; + addTransaction: (tx: Omit) => void; + clearHistory: () => void; +} + +const TransactionContext = createContext(undefined); + +export const TransactionProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { + const [transactions, setTransactions] = useState([]); + + useEffect(() => { + const saved = localStorage.getItem('tipspay_transactions'); + if (saved) { + try { + setTransactions(JSON.parse(saved)); + } catch (e) { + console.error('Failed to parse transactions', e); + } + } + }, []); + + useEffect(() => { + localStorage.setItem('tipspay_transactions', JSON.stringify(transactions)); + }, [transactions]); + + const addTransaction = (tx: Omit) => { + const newTx: Transaction = { + ...tx, + id: Math.random().toString(36).substring(2, 15), + timestamp: Date.now(), + }; + setTransactions((prev) => [newTx, ...prev]); + }; + + const clearHistory = () => { + setTransactions([]); + }; + + return ( + + {children} + + ); +}; + +export const useTransactions = () => { + const context = useContext(TransactionContext); + if (context === undefined) { + throw new Error('useTransactions must be used within a TransactionProvider'); + } + return context; +}; diff --git a/apps/wallet-web/src/index.css b/apps/wallet-web/src/index.css new file mode 100644 index 0000000..45d519f --- /dev/null +++ b/apps/wallet-web/src/index.css @@ -0,0 +1,125 @@ +@import "tailwindcss"; + +@theme { + --font-sans: "Inter", ui-sans-serif, system-ui, sans-serif; + --font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, monospace; + + --color-background: var(--background); + --color-foreground: var(--foreground); + + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + + --radius-lg: 1rem; + --radius-md: 0.75rem; + --radius-sm: 0.5rem; +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground font-sans antialiased; + background-image: + radial-gradient(circle at 0% 0%, var(--glow-primary) 0%, transparent 50%), + radial-gradient(circle at 100% 100%, var(--glow-secondary) 0%, transparent 50%); + background-attachment: fixed; + } +} + +:root { + --background: #ffffff; + --foreground: #09090b; + + --primary: #a855f7; + --primary-foreground: #ffffff; + + --secondary: #22c55e; + --secondary-foreground: #ffffff; + + --accent: #eab308; + --accent-foreground: #000000; + + --muted: #f4f4f5; + --muted-foreground: #71717a; + + --border: #e4e4e7; + --input: #e4e4e7; + --ring: #a855f7; + + --glow-primary: rgba(168, 85, 247, 0.05); + --glow-secondary: rgba(34, 197, 94, 0.05); + + --glass-bg: rgba(255, 255, 255, 0.7); + --glass-border: rgba(0, 0, 0, 0.05); +} + +.dark { + --background: #050505; + --foreground: #ffffff; + + --primary: #a855f7; + --primary-foreground: #ffffff; + + --secondary: #22c55e; + --secondary-foreground: #ffffff; + + --accent: #eab308; + --accent-foreground: #000000; + + --muted: #1a1a1a; + --muted-foreground: #a1a1aa; + + --border: #27272a; + --input: #27272a; + --ring: #a855f7; + + --glow-primary: rgba(168, 85, 247, 0.15); + --glow-secondary: rgba(34, 197, 94, 0.1); + + --glass-bg: rgba(255, 255, 255, 0.05); + --glass-border: rgba(255, 255, 255, 0.1); +} + +.neon-border-purple { + box-shadow: 0 0 15px rgba(168, 85, 247, 0.4); +} + +.neon-border-green { + box-shadow: 0 0 15px rgba(34, 197, 94, 0.4); +} + +.neon-text-purple { + text-shadow: 0 0 10px rgba(168, 85, 247, 0.6); +} + +.neon-text-green { + text-shadow: 0 0 10px rgba(34, 197, 94, 0.6); +} + +.neon-text-yellow { + text-shadow: 0 0 10px rgba(234, 179, 8, 0.6); +} + +.glass-panel { + background-color: var(--glass-bg); + backdrop-filter: blur(16px); + border: 1px solid var(--glass-border); +} + +@import "tw-animate-css"; +@import "shadcn/tailwind.css"; diff --git a/apps/wallet-web/src/main.tsx b/apps/wallet-web/src/main.tsx new file mode 100644 index 0000000..080dac3 --- /dev/null +++ b/apps/wallet-web/src/main.tsx @@ -0,0 +1,10 @@ +import {StrictMode} from 'react'; +import {createRoot} from 'react-dom/client'; +import App from './App.tsx'; +import './index.css'; + +createRoot(document.getElementById('root')!).render( + + + , +); diff --git a/apps/wallet-web/src/types.ts b/apps/wallet-web/src/types.ts new file mode 100644 index 0000000..e5c2824 --- /dev/null +++ b/apps/wallet-web/src/types.ts @@ -0,0 +1,27 @@ +export interface Token { + id: string; + symbol: string; + name: string; + balance: number; + price: number; + change24h: number; + icon: string; + color: string; +} + +export interface Transaction { + id: string; + type: 'send' | 'receive' | 'swap'; + token: string; + amount: number; + status: 'completed' | 'pending' | 'failed'; + timestamp: number; + address?: string; +} + +export interface MarketData { + symbol: string; + price: number; + change: number; + sparkline: number[]; +} diff --git a/apps/wallet-web/tsconfig.json b/apps/wallet-web/tsconfig.json new file mode 100644 index 0000000..d88f175 --- /dev/null +++ b/apps/wallet-web/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "ES2022", + "experimentalDecorators": true, + "useDefineForClassFields": false, + "module": "ESNext", + "lib": [ + "ES2022", + "DOM", + "DOM.Iterable" + ], + "skipLibCheck": true, + "moduleResolution": "bundler", + "isolatedModules": true, + "moduleDetection": "force", + "allowJs": true, + "jsx": "react-jsx", + "paths": { + "@/*": [ + "./*" + ] + }, + "allowImportingTsExtensions": true, + "noEmit": true + } +} diff --git a/apps/wallet-web/vite.config.ts b/apps/wallet-web/vite.config.ts new file mode 100644 index 0000000..99111f7 --- /dev/null +++ b/apps/wallet-web/vite.config.ts @@ -0,0 +1,35 @@ +import tailwindcss from '@tailwindcss/vite'; +import react from '@vitejs/plugin-react'; +import path from 'path'; +import { defineConfig, loadEnv } from 'vite'; + +export default defineConfig(({ mode }) => { + const env = loadEnv(mode, '.', ''); + + return { + plugins: [react(), tailwindcss()], + define: { + 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY), + }, + resolve: { + alias: { + '@': path.resolve(__dirname, '.'), + }, + }, + server: { + port: 3000, + host: '0.0.0.0', + hmr: process.env.DISABLE_HMR !== 'true', + }, + preview: { + // Hyperlift prodüksiyon ortamı ayarları + port: 8080, + host: '0.0.0.0', + allowedHosts: true + }, + build: { + outDir: 'dist', + sourcemap: mode === 'development', + } + }; +}); diff --git a/apps/wallet-web/vm-deploy.sh b/apps/wallet-web/vm-deploy.sh new file mode 100644 index 0000000..24ff6bc --- /dev/null +++ b/apps/wallet-web/vm-deploy.sh @@ -0,0 +1,219 @@ +#!/bin/bash + +# TipsWallet VM Deployment Script +# Run this on your VM at 209.74.86.12 to deploy the application + +set -e + +# Colors +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +# Helper functions +print_header() { + echo "" + echo -e "${BLUE}========================================${NC}" + echo -e "${BLUE}$1${NC}" + echo -e "${BLUE}========================================${NC}" + echo "" +} + +print_success() { + echo -e "${GREEN}✓ $1${NC}" +} + +print_error() { + echo -e "${RED}✗ $1${NC}" +} + +print_info() { + echo -e "${YELLOW}ℹ $1${NC}" +} + +# Check prerequisites +check_docker() { + print_header "Checking Docker Installation" + + if ! command -v docker &> /dev/null; then + print_error "Docker not found. Installing Docker..." + curl -fsSL https://get.docker.com -o get-docker.sh + sudo sh get-docker.sh + sudo usermod -aG docker $USER + rm get-docker.sh + print_success "Docker installed" + else + DOCKER_VERSION=$(docker --version) + print_success "$DOCKER_VERSION" + fi +} + +# Create environment file +setup_env() { + print_header "Setting up Environment Variables" + + if [ ! -f ".env" ]; then + print_info "Creating .env file..." + cat > .env < /dev/null; then + print_info "Image already exists. Pulling latest changes..." + fi + + docker build -t tipswallet:latest . + print_success "Docker image built: tipswallet:latest" +} + +# Deploy with docker-compose +deploy_compose() { + print_header "Deploying with Docker Compose" + + if command -v docker-compose &> /dev/null; then + docker-compose down 2>/dev/null || true + docker-compose up -d + print_success "Application deployed with docker-compose" + else + print_error "docker-compose not found. Using docker run instead..." + deploy_docker_run + fi +} + +# Deploy with docker run +deploy_docker_run() { + print_header "Deploying with Docker" + + # Stop existing container + docker stop tipswallet-app 2>/dev/null || true + docker rm tipswallet-app 2>/dev/null || true + + # Run container + docker run -d \ + --name tipswallet-app \ + --restart unless-stopped \ + -p ${DOCKER_PORT:-3000}:3000 \ + --env-file .env \ + tipswallet:latest + + print_success "Application deployed" +} + +# Check health +check_health() { + print_header "Checking Application Health" + + sleep 5 + + if docker ps | grep -q tipswallet-app; then + print_success "Container is running" + docker ps | grep tipswallet-app + else + print_error "Container is not running!" + docker logs $(docker ps -a | grep tipswallet-app | awk '{print $1}') | tail -20 + exit 1 + fi +} + +# Show logs +show_logs() { + print_header "Application Logs" + docker logs -f tipswallet-app +} + +# Stop container +stop_container() { + print_header "Stopping Container" + docker stop tipswallet-app + print_success "Container stopped" +} + +# Install docker-compose +install_compose() { + print_header "Installing Docker Compose" + + if command -v docker-compose &> /dev/null; then + print_success "docker-compose already installed" + return + fi + + DOCKER_COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d'"' -f4) + sudo curl -L "https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + sudo chmod +x /usr/local/bin/docker-compose + print_success "docker-compose installed: $(docker-compose --version)" +} + +# Main menu +case "${1:-deploy}" in + install-docker) + check_docker + ;; + install-compose) + install_compose + ;; + setup) + check_docker + setup_env + ;; + env) + setup_env + ;; + build) + build_image + ;; + deploy) + check_docker + setup_env + build_image + deploy_compose + check_health + print_info "Application started on port ${DOCKER_PORT:-3000}" + print_info "Access it at: http://$(hostname -I | awk '{print $1}'):${DOCKER_PORT:-3000}" + ;; + logs) + show_logs + ;; + stop) + stop_container + ;; + restart) + stop_container + sleep 2 + deploy_compose + print_success "Container restarted" + ;; + *) + echo "TipsWallet Deployment Script" + echo "" + echo "Usage: $0 {install-docker|install-compose|setup|build|deploy|logs|stop|restart}" + echo "" + echo "Commands:" + echo " install-docker - Install Docker (if not installed)" + echo " install-compose - Install Docker Compose" + echo " setup - Setup environment variables" + echo " build - Build Docker image" + echo " deploy - Full deployment (default)" + echo " logs - View application logs" + echo " stop - Stop container" + echo " restart - Restart container" + exit 1 + ;; +esac diff --git a/config/site.json b/config/site.json new file mode 100644 index 0000000..5a6b152 --- /dev/null +++ b/config/site.json @@ -0,0 +1,6 @@ +{ + "walletUrl": "https://wallet.tipspay.org", + "dexUrl": "https://dex.tipspay.org", + "chainId": 19251925, + "rpcUrl": "https://rpc.tipschain.org" +} diff --git a/extension/tipswallet-extension/README.md b/extension/tipswallet-extension/README.md new file mode 100644 index 0000000..385897f --- /dev/null +++ b/extension/tipswallet-extension/README.md @@ -0,0 +1,101 @@ +# TipsWallet + +TipsWallet is a polished Manifest V3 browser extension wallet for Chrome and Edge, branded for Tipspay.org and TipsChain. + +## Included in this release + +- Manifest V3 extension architecture for Chrome and Edge +- React + TypeScript + Vite + Tailwind polished UI +- Local encrypted vault using AES +- Create wallet / import mnemonic / unlock / lock flow +- TipsChain preset network +- Native TPC, USDTC, USDT, and WTPC balance loading +- Native TPC send flow +- ERC-20 send flow for tracked tokens +- Injected `window.ethereum` provider bridge +- Approval queue and full signing approval UI for: + - dApp connection requests + - personal sign requests + - transaction send requests +- Basic transaction preview with native value and ERC-20 transfer decoding +- Connected-site tracking +- DEX auto-connect launch flow for Tipspay DEX +- Store submission package templates for Chrome Web Store and Microsoft Edge Add-ons + +## Ecosystem presets + +- RPC: `https://rpc.tipschain.org` +- Fallback RPC: `https://rpc2.tipschain.org` +- Chain ID: `19251925` +- Native coin: `TPC` +- Stablecoin: `USDTips (USDTC)` +- USDT: `Tether USD (USDT)` +- Wrapped token: `Wrapped TPC (WTPC)` +- Explorer: `https://scan.tipschain.online` +- Landing: `https://www.tipspay.org` +- Wallet landing: `https://wallet.tipspay.org` +- DEX: `https://dex.tipspay.org` +- Docs: `https://tipspay.wiki` +- Helpdesk: `https://tipspay.help` + +## Token contracts + +- USDTips (USDTC): `0x1F8a034434a50EB4e291B36EBE91f10bBfba1127` +- Tether USD (USDT): `0x9D41ed4Fc218Dd877365Be5C36c6Bb5Ec40eDa99` +- Wrapped TPC (WTPC): `0xd2E9DFeB41428f0F6f719A74551AE20A431FA365` + +## Run locally + +```bash +npm install +npm run build +``` + +Then load the `dist` folder as an unpacked extension in Chrome or Edge. + +## Release notes for this build + +### Approval center +This release adds an approval-center flow inside the popup that behaves more like MetaMask or Rabby: +- connection approval +- signature review and confirmation +- transaction confirmation +- decoded ERC-20 transfer preview where possible + +### DEX experience +This release adds: +- a dedicated Swap tab in the wallet UI +- auto-connect for the Tipspay DEX origin +- prefilled DEX launch links from inside the extension + +> Final in-wallet on-chain routing and quoting were not implemented because router contracts, quote APIs, and swap ABIs were not supplied in the brief. The extension instead launches the Tipspay DEX with wallet context and token pair prefilled. + +## Store package +See the `/store` folder for: +- Chrome Web Store listing draft +- Edge Add-ons listing draft +- privacy policy draft +- permissions justification +- reviewer notes +- release checklist + +## Security note +This is a significantly stronger release than the initial scaffold, but it still needs: +- phishing detection and allow/block lists +- test coverage +- formal security review +- stronger key management hardening +- simulation/risk engine depth comparable to mature wallets + + +## Security hardening added in this release + +- auto-lock session timer with persisted expiry +- built-in trusted origin list for Tipspay surfaces +- contract target bytecode check +- ERC-20 `transfer`, `approve`, and `transferFrom` decoding +- unlimited approval detection +- risk severity scoring: low / medium / high / critical +- critical-risk blocking for malformed transactions +- activity log hooks for security-relevant events +- branded wallet and token logos integrated into the UI diff --git a/extension/tipswallet-extension/manifest.config.ts b/extension/tipswallet-extension/manifest.config.ts new file mode 100644 index 0000000..757f31b --- /dev/null +++ b/extension/tipswallet-extension/manifest.config.ts @@ -0,0 +1,47 @@ +import { defineManifest } from "@crxjs/vite-plugin"; + +export default defineManifest({ + manifest_version: 3, + name: "TipsWallet", + version: "1.3.0", + description: "A hardened EVM wallet for TipsChain on Chrome and Edge.", + minimum_chrome_version: "114", + action: { + default_title: "TipsWallet", + default_popup: "src/popup.html" + }, + options_page: "src/options.html", + background: { + service_worker: "src/background/index.ts", + type: "module" + }, + icons: { + "16": "public/icon-16.png", + "32": "public/icon-32.png", + "48": "public/icon-48.png", + "128": "public/icon-128.png" + }, + permissions: ["storage", "notifications", "tabs"], + host_permissions: [ + "", + "https://rpc.tipschain.org/*", + "https://rpc2.tipschain.org/*", + "https://scan.tipschain.online/*", + "https://www.tipspay.org/*", + "https://wallet.tipspay.org/*", + "https://dex.tipspay.org/*" + ], + web_accessible_resources: [ + { + resources: ["src/inpage/index.js"], + matches: [""] + } + ], + content_scripts: [ + { + matches: [""], + js: ["src/content/index.ts"], + run_at: "document_start" + } + ] +}); diff --git a/extension/tipswallet-extension/package.json b/extension/tipswallet-extension/package.json new file mode 100644 index 0000000..292a8d8 --- /dev/null +++ b/extension/tipswallet-extension/package.json @@ -0,0 +1,48 @@ +{ + "name": "tipswallet", + "version": "1.3.0", + "private": true, + "description": "TipsWallet browser extension for Chrome and Edge", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "preview": "vite preview", + "lint": "eslint . --ext .ts,.tsx", + "format": "prettier --write ." + }, + "dependencies": { + "@crxjs/vite-plugin": "^2.1.0", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-label": "^2.1.2", + "@radix-ui/react-separator": "^1.1.2", + "@radix-ui/react-slot": "^1.1.2", + "@radix-ui/react-tabs": "^1.1.3", + "@tanstack/react-query": "^5.64.2", + "clsx": "^2.1.1", + "crypto-js": "^4.2.0", + "ethers": "^6.13.5", + "framer-motion": "^12.4.7", + "lucide-react": "^0.511.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-hook-form": "^7.54.2", + "tailwind-merge": "^3.3.0", + "uuid": "^11.1.0", + "zod": "^3.24.1", + "zustand": "^5.0.3" + }, + "devDependencies": { + "@types/chrome": "^0.0.320", + "@types/crypto-js": "^4.2.2", + "@types/react": "^18.3.18", + "@types/react-dom": "^18.3.5", + "@vitejs/plugin-react": "^4.3.4", + "autoprefixer": "^10.4.20", + "postcss": "^8.5.1", + "prettier": "^3.4.2", + "tailwindcss": "^3.4.17", + "typescript": "^5.7.3", + "vite": "^6.0.7" + } +} diff --git a/extension/tipswallet-extension/postcss.config.js b/extension/tipswallet-extension/postcss.config.js new file mode 100644 index 0000000..ba80730 --- /dev/null +++ b/extension/tipswallet-extension/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {} + } +}; diff --git a/extension/tipswallet-extension/public/icon-128.png b/extension/tipswallet-extension/public/icon-128.png new file mode 100644 index 0000000000000000000000000000000000000000..ae0d8e54272fdec8f1af3317535f10567b9d67db GIT binary patch literal 13535 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 Z|9=l5zC|Rf`+EQY002ovPDHLkV1gUbjQ#)s literal 0 HcmV?d00001 diff --git a/extension/tipswallet-extension/public/icon-16.png b/extension/tipswallet-extension/public/icon-16.png new file mode 100644 index 0000000000000000000000000000000000000000..b54d9f85d129e245c2904327fa74ae73f6cc4cc4 GIT binary patch literal 639 zcmV-_0)YLAP)d<1vCj4$BIl`kNu3q?_IBXJQE zBe{~v%$%7y=X95gGc%cBK~vq(b@{9QU)CE-%FuMe2Nk>uLGyQH6epuUG77(ePW>M3t`YkWE?5*aR-8&&lxEL1ZdHG4FtB9^L_xpG9c7%@{y*-bnj z4g_a(qCU7$J834|T}ycRyp5Kp2vLDxif9mw8lKG`Q|rXM`ctQ`GEU+q+tDBp2c*}+ zx)#<9;VLXlMckZEsUCRZfx}2Xi*rN*J_97g_q^va>TCz$dQubp@FB6P_8M4kAMTYz{B3Mzzd=!IA zgK(>!aDS=Kx8nk5iNT7J2BBz`!?Z%%%#x%TAq0GuQ7n}~gx2W^PJmWoIPMu9Hex!d zq3jf|APVpH3+&Yv(Gc(<5XUjrMReL{gbA6O6~}+)-uvd;9>+E*jD$!BnASz(o)eFm^xikr7ZJ^W+4w zVx|m9=-_!kVrm+m|0BmgI*XC!xo@S?SFfuI8ff)|4K}18Edqq-= zbmV#Po&wbhoc|hGR;K&6ce(qA8>Ic8U`wy^jfI%=rxH>>8m^&@?}P(DWtajP@!l4x zn61FZ9n9NTiMF8maGRLZ4 z=gO~MrTOf4s8(9cFA2@gKWMdj{QcfjxC7LtazquRg$6PxT5cZl)qAl1X&xCHLF?m` z=Cu`Gc>PcKeup=H{saDayUpx0{Mpa(;Z8(kie$@h|D*dr0DSRm^9FNk6}EQ3*`a8a zz|G&iM&k(Wf=rNSqnLKk~*vng!kJ|O5`h;pyI!mUpE=$ldziP3@*5iB|u9Kh+w zs(PeIai@#DkOaYvJI{-|pK4y`c|=AJhodczfI?*9(pTD?nMzpgIDYf~BsaDqtbi>@ z1QjUqDWbWk6eem_tg~!ycQEGgzG95Y$s(wR+=u1GMFmKM@Zwyb=VlUC+7V05l(SPQ z@2r)1deU>h>-geq!dv$%oTzzDO?s|wl-b@D?qr`KE+0olhGd$yq8cbyDpadA zYK;l%jR~A}WZvVP!~2xMIldQx$SCiuSJ+7n_v474Hnw^5Zk3gG#7f)o?YWri?Gk@o zt#NKTp_>XXKi%c`D-8^Rt2b|u`3&bAaU4^rR;g5Lc<-^+68HOLL20$tNK?O8!m_-$ zqyxQX16~5Bn<>{eOBhjn5Y9~}+-ye#g)9garz}sVT;GZ?0;&Q1?-Nx=D?y5Dx(xdV zAfI1aI;IOZ! d|HlS<{s(+rn>X|I94P<*002ovPDHLkV1hPq^>F|I literal 0 HcmV?d00001 diff --git a/extension/tipswallet-extension/public/icon-48.png b/extension/tipswallet-extension/public/icon-48.png new file mode 100644 index 0000000000000000000000000000000000000000..0988854383333129bd5521f6c12c10d1aa4399cf GIT binary patch literal 2954 zcmV;53w88~P)G|r=mA8UJU$Gi4=*WR7?+{T-%@PBI&NThj&*blfw4I?|!Dc z+dJ=uhRw53TH0N6ZfB3=_y;u<0{>-~#U=rdJGY||z$@rDgh_xCwUB?mSm2vW1p+6-x_2MiWMFqcPCQ+w z6805TUBgUZxUU#-yc}|WC1S1=QS%K2&!QAq0S&Yx=xGoOB7zc2*@1n2oC@sjoqt3F zyF~$Qg+spPgVi=i3L!Io#I$Gd6(|8?Aa27dfRn6cQgK{x1Qg&Xi=%)tm^fkR?YObK zb!+~>gm`PAoMF8VV@TRILHlmU^{i}I;9 zKQxFQo)_w5yS9lRjQZjB#Ak<3%z(9EO&S;T#K_oCxlL;PkRj2Sgb{0?AA;k7HW2IG zh|XYWH4`&{q{PSR|4b8k!X+VUb1jcma?b~eKdV#=K^eRPcmk!B#K#?Xvf^%H2DAaK z8EQZ!vt;(Hli!=?s~iJ)$F3iM!^a`0Vy!TxZ}Y^dB^pcB8bzWWc@SJf8 zY=vhK5a~*fhe7I?tk_>TTj;{H5D{)?@9Qn55b9tk@{hbKS!({K-5D>uZE*F zC-3d^sh?}2ByrN6!&(BnYQT>Du~AAGiBF7}kV!PL>AKdv~ zB&j}aMr<~=F)5oTJRRZ+s4lEtLsl=~%z<|V4m^5-#uFds^*{e4r$6x%Y@B}+rhgQ( z4zAdVDx_R3v~wu|X|10UZF7-FQZZ!alg|NS02i9KES2>R5_MqyaX9u7So$`|`{-U> zB>L_bY206@uzv;?E}$$E*F^5bt)K<1hk3xNVbrmP(Oh6bTrdKQXW_-#$EK676o2UCUrl3(3zGY^3X|=F3@iJ;ud&==KIVjJe1zg0*(bZ0*n^v-3oTUBCzfp0d1g%i~`!RQQGa z+I;T+>KrI(uC`oeN`^*3v($DGEbpmB+~_!nK;T$fv=Q2|Fdb<8 z=~LBEgd`DmkYU6(<>PpMR<-EL8?ROxrSxV}fFT0`p?L=aKLaYVbh zzRCUw14`g>%i(g%;Zn=v8&^vF)nlvpj^&q5c9`-E|8lNOyf8z zYjJ^<>q}g^bS~#dJG7KDfnmArP;?XftGb34Z}_w##g&%FGq2V7*6>r zu`$GPjN^L5sreL&CE_?_{L*o&27tLz%#DsiBhVMF}O-YT)s^yp~CKb^1g z;UgU`ZFoGlROG*}6?y7Ji?1)1nf5e?%Q63Rt;kmvs{C*x;CL8xB*%^(wL^}QA}TZrC5icjM)=DQtnznfrg&v7pyV0`Mi^+}>G!X*(slUKxhhk> zL7U{0Q)q;zPPBP=|A0@wFg+}(jY;g+T5LLtQdnz}hRIq~8a}hDZfh+{4Gl%cY7{wk z^d38s+PBFsRo~Ew)X1%|1uC8;Hqh6jmT7@NSwbV5pHvxpzB}xtl$hY%je*+IWC+j- zWlNcnJsX&0bu!}bJ}XaDPVe+Bcjs@sY|+S_-?}@P{C0Yeu)CSOGj$NWiwtZJ?;PP7 zydw;3e+4yeMDHx|8LmAuu#*$oU7L}2hj@Vh2cHV#b);50X8-^I07*qoM6N<$f&|i} A?f?J) literal 0 HcmV?d00001 diff --git a/extension/tipswallet-extension/src/assets/tipschain-logo.png b/extension/tipswallet-extension/src/assets/tipschain-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e6259b3214af6f1c44b5a652b214d795e9930629 GIT binary patch literal 19995 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 Eg7gcMBme*a literal 0 HcmV?d00001 diff --git a/extension/tipswallet-extension/src/assets/tpc-logo.png b/extension/tipswallet-extension/src/assets/tpc-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..51a910af75d6fd9e585d894e1a106fe1fa4c8180 GIT binary patch literal 39180 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 literal 0 HcmV?d00001 diff --git a/extension/tipswallet-extension/src/assets/usdt-logo.png b/extension/tipswallet-extension/src/assets/usdt-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5c64636f09f9df1cff75e595ed0e856637b03909 GIT binary patch literal 37665 zcmV)FK)=6Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>DlD0`iK~#8N?EQDV zWl3`12Yxe;x%T<0SH8NcefLaHk9U{>rZK|-FaQCFq5+Laa48ZZL~*r{mJ(MY2}u;W zOMZ5>ltgL;QKAS+1W5>nAVAo0z*vmwG3{+tSC_Bn%{Av_#{LnJ=box*Q$5pTsjSbd zd+#}U(nS0sGBPqUkGtj6ZNk4n$=&e#ihD0~|EozaU)HxJ zkZ%Oj&HlYux-s8N<^9%9H!}Rj-+;WpwRXDk@vlfPR-V}R8`4+Q*UEomS=Xf(%JV|k zG<{nE`P&<0-^ldB%)UOg!S@2+U-a4yMckO$*RH$&0?%J}{l>qSOV{WBrULm!EqEhP zU+nt-nZC+&Gx&I+l%Bg;ti9a*uS0rOfc$bmyAhB#oB!J`xo?qHe?5ToYM1var>_9= z&4MkZcAgi?|3cTkW77-Sh~MbcZo;>)27R@YYrEfG40P>2zF3~`lO(q%6IV6JfUUB3i5h28gh$DKzBM6ZyMk0~mU>a)1 zal&4luo=f}O!wKIj@jMaXXnXvrcdtB`NEX_PhZ1NL8kG>u3n%1PauD1q|RcG`t@D% zx6Z?x=E>)WEX)sBDTb_;eGZg;hQ)x6D=1w~h9h&J&;lop%%;Yk93+B(c&8KN7;zq= zs5Taf{7gUh4JgU%-wx}m0q8t-6iJB z0rN$dxvZq?3ksJ}P~yEq1RT=*bIy@VMuDd!rywJDjx1()mr+Yi@PH`j!9f&o9`8Vi zcsw45bEY{(2(G3MHNklTj*6O!iXadOU}lR0Vrq>#a=z(+GLmK_pb5$))s5e zZqR*dO#b0*rjPC*lb6xb-$Cg+63EUu{2K>^ch6CL_Y#W-4sfb>kR#42jPaSH=9G$YHEONS?0&1aGfC?@y5!C=aXJ|sxr$n9 z#DRC77{NJF6C?yGC+t-dcB_4^OtyJ^`w~~T*9l+Tgb(lIKD9$V4mXnMJ1%`k0XZL( z#Mcg({JA{~9$4iy!-JgY zA7CjP&~+KP0Vvq4XHH6bbjYP(B2&J+b%oDdJjdCK7kKK@I(u6ahz`0AiVT-$6uBoa za(wP6%ACA#c(0n$iQuyg?^QsefJi`08OA7tTA*;?9AO%%Ltr`;qCl(yp^C^fKou4A z9=hF}V~g|Le)uqV96HKtR}XMJ?=zuhn=vD)5T~v=kw^e)Dz@th>(f1+-d*R+_7!%Y zSR?!3Ciw?rj<#b=*mV{MZd9k`Nm*r7k@&>0rw9Y>KnvfPttVc?v4 zCkzQ9;PIy66v#LsO2j$v&NQG?|1xHGV=*~`AQ55^svu0pk?FLio<=7771d-45+K5$ z+vWDtM|j|tQ@r8OaaPJ6`;6IS!jviAdFmLb2!t3Jg^G>Ih^O~1b9Vn4n-8s#|MEKi zQ@hlo`bMgL+oo?zAUhnz(GKJ9pU1s-nG?s4aQomOM|#T~>MT%totOm)s(pQz6^6v< z`NH}Ie(R}+dGy?QuB`1Mqe#~8&{^!#UnuDhO7hYv_`HW$BW6M9s-`14^)v`hJrIUp zwH6fI4)tK9AOIIl13L9qsEf{0j5t9jceGq}2z4EqP9o!dVYFXSZBGb$Q^;x-mwUYS z#0kFV&O3R-fkWipu`LsJm{3c=;Rqts5|~KE)$tC`>|N#Qt5@0n+y#oC-@rXKA;xe2 zN#VC9kW-6VyiO^bFNi-p&-4TH96WxEdk2R((O+WG51G$;WX=&>M5tM!&k+{btOCD& z=3##Qp@(?>%w@Ap`*at243-Nz!-BGOWKqEvgCUN9_Xm8R@wa9A z)&p|8H7y`#WlnhaJoOLuSh#PMTj!2(y0gl`?vS~%N0$zTbL=x=fsz9<{r4@>ec&Lcmkw~}+$zVriwt~8E*TlB0f+QB%o0yc*7=uT z{yZQ4!Xu1!Dp>5&UFQ#0kc;`)lih>da zpGQFlrmbyZLj=5mQ9Z$CS~LpWgh15xaQXmIS~iQ(A!&OxV+5CZToghOM&rQl=9KZ~ z6!s>#4!rSor}&Y3-oTqzj<6>qHryVyM1n*rB70%X`OyYXZd~Evb7$}$+oksln}n<1 ze%kq)59F7q-S;xwj~{^d9pK37ac=D|aI79=6%+8I@;givu0I2u^Z$4)+O(}wS@X?u$ zMxp8qo2cJc5(p83Kqi8SL%f<32)0!1O>lGx+ex$-4s9o*U>E0b9=$IfZvdZ6BfHyE zM%O0PoBL#Qp8H;Nnm_)!H*?Rz65BFjn=yhATx6@>V`IF>h23?&c;zD3p1wx+Biod} zzD<~Z`)Fqa@(ZD+j@`-}ibB6g}42r9u~7CIq(Y5m)zi zd3@~(m-nu+|BVNkT zr*1pSJ^e$R92{n~vq0B-1V@lS-<2#g#}_uv@ehCh6Fl|k^Z0&`!GSr3D;pYDSlLsjh7^Ji5dmd(WHs z!Bh7zc4Mx|t_Cp?*sI5EPe$y-5szLy&vTDl!2K^*kOz0I!{53oTU=cF=^HP;XnGOg z%_R0_L7xgr8ckE)FOUx`GWm%^yyo~R?j0WEBIcb zzxNT=&g@bgU1s^VIR*u(u--JuY21Y6(>8k$1)+Ky z)Lkad;One(Cx~cX#iRjO11}V?)^EXSP>}@_x#+YSYooSDMN2HdcEs6))Ts&L6yO-J zwaH4a?l7mbToUpwlgkr6_wW-uv~z{K4j$)dcZu3nh!aX*l4l+-!cu2IxzgpzJrTAe z`T3d{zIEMnFAd}u1MbVF7X$QH7MT30eyL>tKRkf{w~p|-!>4)O$_efm9AY8wk~vRw zLQcV|^!fd3XZf!`^lNc<7a>at4DN3DcBHT&q&mJi4Cf1 zTkUYBf!q9PDoppZ9k^7NT{7)2qV*JoV=z}B!;BoB?Q@w%h8uv+xklQB+o zmrLP2gQBF<$yqyGF*@MMA05NDU{u{pYvgZ0a;qgf|F?sjc-u+tU%Z7|hX**6%~Sde za1?k}-8`2@JN(TL{u-bB{l^iy3~yOti)^EVgBhYH63_rsii=WV=x=@w25ms#=y zx-N$ddX%iP#BV?MG=JyUewFiQwkQtHvvB7;{l$Vf4TwYy+Ce8dVxUyKsJ(cdC!(#& z%&ckbW;2-0x(1SWA}twfGNq3LofKM8$=#MFdNX)po@)IrXj_SbD6$(3np#8yM(bN+ z+O#xtOg1!XL)dIE-A=Z1)5A1bM1z=$uBS7fLBGT9rF}m2&?D6I9o}~Eb|$`}_PPCV%-5C%@}9-ne*@6LX6U=+UEt%VAME z4C9c$|M}nJpZxZRnT#`fCxZ7jRKWqcZdK zi-Pfif~#};l#fhs)23D5)bx!7vS~mTa<+bImDTS$$(vSAaZ7)RxlDH?dk?G3L)GK2 z{njt>$&Woowz9kw<0U2+c9u7XWKXD}36 zHoINJfGQ?vV#TYQ&S_Mi*Sj$ZPO3U+`Mq9FHYk})gl9hYEN5kt?>ccCg%@^ZLg{ln zo}$PoI$buF9cwEi29MV;)_%Vle=n3?>K=CQ8w+G0n=2UorNbQg?$f+w^(4m!%gp6H zavS;&%OZO_@E`xHf5tP9UnW1j!phMegF!)zs!bDHNg7Cm;PeyIf=<-V#X6dJm!^S< zlgeKGowRK;Su&GEl83;V3(XcTw92M6R-bJ)CE4Dpi507YLu~n3U2VG5ZO=D-(*`8> zpEhgORwqeF)gDiyLYi`l6`0(2`p|5`DQ)w~YkNb8l%0%nzC%^P^N(KS!L3WY>6Tkr z&O3~KjRpfinP<%Rx=faYiz|EdAFW|Lqr=ydv8tIRV7C2)JZnhhwE z)m%{Uh*NJv<`hUGhLJQ%VCp?hm|XHBC&YSi<^hN;K&rZ*Ns7~J&S@l_w`Wrubb=UF z7}Ra802dV$wX?N<&dOC&V5Ygnsac@FS2tVAOEP7|JS@p;BIpcPte*yQXR?AgVuUPr zWD6xR=Bzz=jn7|so;Tcf8;3gs_WYDQ>hT7>B4fVOXLnJ!INW3KMExS(j5ZXpMz+(9 z_g^SAOugZHO7e{ba{Q4M{2x2Q8;_mhL~n(~VvfS8oqMZ0z}1~Gf902cj`A@vtURx-IgQ1f zfmXF!Tbo`Frc~C92MTC!Md@X0x3hLPAQqxC&xVa8YO5Ont>4Lfupa93Y2u54-UL=e zy(0Qu>vRo74ERnc=X0b}vUPTo&z?WW9k-q4STSVmr<6`rPbHDXvdiwWu-+ZhdwdGj zjX>3MHNDV1UIL)Jz%w`I)%)KtAjj{WXY%J)dF%1pIn`fcC7Y+`3hUIl0d$`yI{|Q{rSy@yv^yUH5fNUq2w5R_L6XWAg7G-8^BxgFo5LT}(Ff=mT zn6Mfk-=M#RbCtlaHKfghVs)mk2uNny)jz}OcQQu*?m>>d?F9EP zo@S}rqvHzjFi(&9IM09f>;Ho1p1DHz9!PF96(Y;mn8WJfNI<==B9mVec`XBQzGd^I>tgw=|0+%?X<>qc+>s4)pkVvy zYn-X}dCP65iBcJT9l3MF%u{zfYi!edJRmPP`Fr(KwzRnP(=GCSMKV^s;=kg}ON@VP ziTjS<%Avs=b9ske(LoUIb;tQ9kA0F~|Lu=a96dtsaEWuelUO6cl!mTl4m1EG*>W1V zp0w^P4#HzP+BB4Y>LLh+0yMBEwbmsZ=rC#3sP6ROoQ@8&=Tk3d$!SK*W0OWx@OsSz zsBu*!MB0bw&X8marM9aUPa{#Pdlo+GRDD`ZMS8|!JrcIfE{`q=a=MZFs=^SP8g#i^ z&f11apm#L$ng%ZJ9wOlO!R0598({OLD-s`vOC_T^W-;1D`!ilkrQif z{Ch>o9w?3vS^Klg+;-=2ZeKjWQr>5ncc~?EEL-Hk3m5pAU;Yi;%0Y%ldP;cPDumcR zIcq^`gSkU-DFnwkwNYczY?ePl6a}6bAjCtINN9#?hma9dxTAS1f-yge5Ue~AN5COL zH&#WPB#Nm2I;J|(X9AS{nf`9ssS22A+EkpyaX9q2Ssdcc!{MB@S?i59G6XwgE}9Qr z+ogR8N+f;W=$7Ui7+o;qBrWFXh-aP_mnN{Hf7&tq9y~sG(DBs!foGq&z@gIzxotSl zUOfd7a_7mjoKTjW&vxiu1%Jg3g!wwA2FR~g%DOrGf9fEMZ&~Ga2adAb9kN*V$@826 zB~&H<&wu`l?1h5f@j3EBX{0Ql=^WLpdU6gVjcGZ&Msh`T!NEwbZlg3)k7B!*9RblD zAtoFNT$Zy@OgfaChHq||Fg2AVAe*`s^8mO6mQ0$ zT6-c^S4{JUv{^uRiQuGJ7FWU5cBmz7i$PYN){|`P6br3dSFBymCX-$ps!Al;&LU*F zr!G8Ueah1pE^^P^r&%fs#&Jq!3s#wP>}8IN({<*~0;8|5W`5OyJbvGh(f7~uhJ&X# zI={eTXF#v$;A+R=e3`%dTffQKGwYPME|d4nOJG`6yna_4nD;@cYk;yzoOuhPII37t zSAigbnm~wwKur|`L2BwSp$?H+YU;Wo#6VqD1PN4eN(eP|sHnq~7$Q*uRb3Nft!2lW z7%J)z2(co@DIo*`6?I(^V?`9ZPfdt5b*u<+%CxSii>itcnD=X*p~sa8>iVk=@bWC67sJWd=@ z0+bGdnKK?F2AvE^t`j;}AW|clofao1Koa$6*q9+=M^MCCV}5-;8=@tcCe2jKp~C81 zK%5?;sO3hSflBT3Wba1sDVolfxXoXl0+<9Wg32}#s&dvo7anJAbkQL`fannKaFEY& zO(MRxI5Ye0)0>HvYeg znV+M|Iuy4qkoPjOD0o}wQ1i?I0kOSs&RGCVVw!1X=OZp=gsV^S>p%E2ykqemrcTWV zF_j>ot})TcpLn$cGw0M?i8|ctB8Hj>nSPl6RDXDEF(u8>Y&>X!?Gpjw%;afYSD_~J zd2-;{(}uS8h+_zeMhxfdbQm=ZOe)O;aM8?^w9c&GlKWe05IbK+%k?fZ^C}W0lHtgG zhj;(n5Ali8(JT6Dz@$Yb)Nil4#C+)9+H1{qIGEH-CxPjOUGg~Lul&V7%F%Ad#d?cr zU9mf@xV*Q;L(iPy^6xyw$}d#ND48{{Zb}pUuQ`P`4e@VT=9b|qC+C(~E_8|6J8-q< zAN{KjQcXR@>VQt}$t%HG2%(Rn8aLV*4PJrdlDENpu{y00o8e~=YU(;5KBI7+%w^<0 zr^pI2^bqdMJ2LOdT}F{*c$bqqeI-KfGYXfJyMhd_`N_y#M(%QQ=kd<#H9Upa1HPTh z$kB3gpOd+aEX&A!HmeIynHPBP$((QQd7qK_0*@ziIo@YDpW!q8on<+`$!Bf%nQlGG zJcTbPoF0u^cx{9Cp4>TdJf+p0xs0OKkJ5Q^ms7fu%;f+`sawRNM568QBZ{eGu`@F) zo;d~(Q9+GDq(*Wmdj;i@A@#oSbHDl#Ca$2D6$qZvodLPasSyrl3;gTHzs$2wJV(AVM>&_I72rJD5#QMTZwrCEheK`P;oZDVps} zB7!qhLu~RWBy&ggeA0>0j;^KA=(cp8CV%G9QBo(js7|uQOhR!`3<~l?^E~_c3;gCI z&vGc&gCw)e(<=%N4Tl^*ag>cWWpJ>x+F#xDssMTC^#$F#mN+_GVxjC&INiFx;5u9y zPx#G`d;zzxK)G0g=n0YP>aj^)gc!Zq!WLWM)I|k}fvO!qffvnPRXa05TEn-E#MceK zdd6Eqf|jEUo-tMdHyaI{4gWZYw-Yjzxz-LVU;WHla+WKIqKKZI?9;RQjEVtdK5N=5 zI*rnQ)<>3@JnFO}QP?xbq6+~>vqD6?_Z?uC6Dr>_~vuAeb^ zV94r$11$IZ^s)|_I#*dN2K>s$Kg-^=eTvlqbUYGll4I^ORldm` zPK;NrC?cwHY|^4j#Ks*h2#D0inno)oZEDNUGmWOqNF#xB>UMHo!zLA8di+3QxZY?S^GC3+;CW>~Fk>#>csCg>Yg=ue>sX61&)igba7A>_Uh{>ivC&@ao z)iUgAV~V8Dre15im<=J4!cA2RV-}LqJqf9LQiQaTL4%(}6xh($Hsio1JdKGaf(zg!HUT0 zooQM%9Tlvzyov~&gc(TefmDsENHv|D(>5pI>%73SSzjBWFm)+nqG2P2n3up`r+qQd zDztTEvFE%4XA@83nYLT|(%9G55RFe!1)?Sy>cxm+i$f71&diOF0+md;So z3fz%-&V2e=KK0y1R(pN242mpczU;EHILGqp0$X>5mN)8aPcLFxycl?A*L|Kbde0oo zEA!0vdi3)GoW2#QCUV z)s;qz>n3|*K7Q3P)pvtbszLx*5SC>sEUrHwA7(g-jj0et)DNta z-I-=efJ&33W;xV?b)r}B2D778HQDJv5W;M-7e&t*nw=ap1C2_K4T)B1T0|jfFqJN2 z-b`Doc2hFwqba|(Qr}|Q8pBQVrgFT)g6=gLhGy|0ChQu^Y#CJgtylxEu$tqoR>hz4evHb!h8WomZe@rUNQ^5y6G zLV%s*d`KD&K5q>WWzLg(tIMZ*-#lY z1Eo!faE{ove-oRc?Nc+mQh!)KEFUe+E>2oZrvYOl3<|}jo|M#t(A`5RE*Jy46E$H- z=0^j5)Xc!nYqm+7YJRh8lO`55L{*rKZB8Tmnl?wYM9LD^$re!%d^ z68o=tb|Q-x_qyqY(HMll+=O!c{hX`Aph%3WyO zPMW{_iS%hlDXqo4_e*52^Kr#_3!-q70oDXmkVbXYVRBo0W_H&BVFEe#NZPT*0k?dMBy zj!%8|QL? zqD{3nq%vZ}6&Wn|x%`Fad30@uxw61Xq$o1_dCtnhJjKa*c8{xYe=X@10a--IP7IL) zJr;U>dU=7z5kjErJWp)xaP6Thu-L=pYAY!~w4+Jd1s%qepr&mxUOKhKBs~}n=%Pbd zMC>J?O5|umsJf}rhD!Aq%*=`e6)|X=n=kRrhV0Cny^0D8%%s;b6D()vXy}M;8LVE7 zy-2pMMdVotifa{!m^Q9jQo+(T&bBIv%_bD>Du_-Oe=s2eYz%4Ws~{Is7DhXxfiuk> zMCsT7Rbh&^zrMI-uxvcBK^nxeeH0*VN--@4Z8}y+_lQ%3QM*y$-oP%aobz`>1f~0HIpU zXI>u?)t*|O0!~DSd)4ykx|Rv8ug-oLu%*#hGayDhTYY{#LMt#{S-Pb-yH zwzu!9XKfVlP8WIXIbC_Qg`b2&y#=5#+FMa_ih(%wFMxp-CHt3_iNM2uL#I)P*A^lNPpO+>q-p? z#8Kp)?NIUfBj;ey!FAP#rbkSH)X~fVB@kv`89MbZ=<1#hO*D>pb!*wgP?E+J98up? zYJhT?f<~O0AW6e$UejC+2o>lqGtKHe&Y9oW7~>LilBR4Xdr6>FX!Md^_b8CmxGw^SvI6OGB6| ziMM=hA)c=Y$YI_wKGkKe?9zM>VjOmF!B@ z)Y0B>Z!1i}GE#1oJOjx#_!zfyJ5g++1eOh+yWCh{<2tsA`iu zpW3KI0#Q@OdtL2|QJ3pgD76sP>Z%vtw9QGw z*^uj;2D^t?GxRxgMO%ZI*7FIEGwtoHEeQfi!-F2>3c}iSk4dbQ2B6UD)FRgk)$0?qUD(Sc8%pa=?oQs}hyLl0@%wQEss4!JW&v((I%JR+rAA zFcsz%z`BB!ybD04%fn)f!akktgVgaOX;{IH_n7xN)HRbhQn9e*-iV^g5y;D&=q%nD z)f8E9MDJ`IB{S^Pn8~@~N(M11ChPU=tqH0D1 zvI=L?@-uhjmFW&Y`b&R_FK;}FFG|(kPRQ`&SwY=s#DEJy%^{zm1A)eg<{lt7-~e%| za~GF28a4xJ2|%vyw!CEQgxFssy?h5VEu2l3F^`9HzB$&H=pa+bq#Zs)HO-WZX|z&p zjeyhvMm0Qrjqm@-@8{ij9pLiz4&&*Bt$t= zX?WG=th{6vM%}72c9Bt*Q59WcXFy#HsEaODUQ(A`>Q0|&e?Z;oGR;fsqDx&2sQN=f zr%%=CP+&Vt=p5T|!vFlpFLR-A)ZGPQccAU+4w-a%)ZIRHQBrlfRGlGpcZhWQ)Mb~@ z=@WYMOgnu-r^}@1P<8s$-2ruPj?f!Ybq3U(0adS0-JK(p1Eyt{s_Z~-PHkAx4Y-O_ z)57-I&|Q*dGPP?wFm0v3#df)Cr>`?Lz`^A`rt_Y+yyi6H$%smXNvIje!20G6)6pJ- zv$p8+3e$_*$j-oMX>>Fa4tMC51%=a>3OW%wx#!~5eMVa&7!>$ShyDb_i+a$->u%MPySAY}*1O2ie2FOjT^ zD@$;N1~a(==SwI$#H<9T*YG9eT|(BO@;SkmRArawIt*QIn$?6&v~4Qv2ce2ZrHCw@eom?x!^_Vx*8bAyeBD#SRA zzhI%q`A06WISmYQ-LKfmG6qG?-0}juROrz&uROgdkQ?w>+Aqh%VaGN+dNLf&MSSL1 zyRZRMpkJ5?k%kv#b{cMHB^yy}Ma-p%pV0`kZnZ9w$0FsJeKb;^G=LKz;9{`JM$o14 zsv_3461lF4RgJ`oP}jInL7o0;LS3n#L|ay`^(>2so^c^W%1lA2VUF4uhuYn0Q!8+1 zi!I7%4Sr96h_n24Y=%sYf`s z&68W347(kihde9j`HaC_A2*ld4%_aL1ecpkFAC%tgf$gM1{B?lPNutgF?Z4k&!uzg z;C*8o)A9jJR4H#t6$>hMno$X=fJ|Br^AM3QKwCkwqRMan;;<3of0~coH>AcHWGd`Fcl64Pe5J?6oKE&yCEQecQ6M*j0O)%5?<&dj z4q5V*TBzV|U9om)2Z~Jlt^8{ONtzSq6VVK`>0+7?B(OU%*A0nN<{NGrqoB}d^r|4Z zpz#;i-Al2}iN&H56N1yB(S*TvV%iX?!ArVY6&nufEj|A%g+5y4kUS6xtaew-5tD>k zO|99YicdDP`H!Qsb{qJRpz(Ck=qB3N*l2mZ=tOkGsidG_Yjz@<*{V8vCHk3dXTIX* zuc52aUxUZ(8GA08tsIPA=Cx6i(&#Lz#9TxVbc}*49CS)9K6!;}MBR<$a zBX%|VZe~`t+V&NHv-ILXZl&NOlU_~Nmw2D!e5PiF_iXM@*uOf0Viq#lq?l-6K1M+s z;F3mA??6ftXW^TQAJgV3j}b_}r)5+1!-{2xtYM@IfN5=eUZdUAbK-o4_zYL%kY(U= zB+DTya9+=}a4yqOPw#YYA1eaMADiklrQ0wRyt9BQt2?>lv>o;#D!D?$$EfoJ@9~-L z)$=~bWd%Mj^yDC)<6Mq+89vwD$PNd#BU{D8%1=W?sw~m}dj8v~;Lb*u7OjnUjb<{C zYS||I?gri@VQbi=?$acTE&{!hwR0P6i~>dG)u)|#irmp1bg7Q@U@5nXZfxw0DdkD; zxqX?`S?uGxT}q$R$vnA3Co-95dv^@`HFP!3AqlgoK>e*QO}n1Jsk=X}dnl$q>vS}t zS%etTsq08glNgaSa>z!35O6-NqiTJ*a}=2#exl`7#NBIztxLqK&r(1C1mWD{$n%fF z`A3lFA16HbIN`$6$hpVh@{`01&k)W%1G`g}%H>qF`Gs|2?7YX>>9E*DQ2oJ43zN{% zkRr#?bCIxqk#Ow-@#52j%TE(7JVto_%fxdJ5uW)1^7NOHGY=EbKSH?p7~#S*#Py5B z?JLOsIudHcd!*=+WrZ$vIvNeEE2c7w-An?V+SF{(X(2Ib@Tg{+;>zy18#Fy)+S;y3 z;;r#e%we@uQeE9<`|2KLp}UHlbL1|g-|tc_WQ-VDyKX+cs2|xit3i;xVTtp9qQ|k5 zr@3QkiNk{d!(NBMT!-I&^f^BF4LJmk=^T+@2Jfje(LXE_!PNJfQS620eQC)L&y2tZ7SJ|oeSRZY1c5jW#*Df;-n~2+I zyuZ)JWS6xtA>;zFhGGbvIVcCXP8Z3NRuw&OE}~{uYM3`bn|B2<9z|wDTtabDGGfXn z0Xy**)6mY25Q|2KNkksGz`K9qJv{KnlU&}|Vs|v=%KA3v);2l&nWtF(*V~lmtW7tW zUJ}SEe8T?w=h^?!WsV;>$*l{E9GdSl*X>daN`CPZ5A)2=KLMu~U{L4~Wj^6HCXIpy za3e;_ms*fIj1f>QUy^Do&v|wJyTU2s_qJfV2a|mu;zOh;``o&8inkxQi#u0tVK_Lz zq4`tXzjB&eh6kE}{3NU*8a>I zwKA6xL$qy7v-Z4DTiW+Tgy=mxam3lJOFXf0j!WC;8Sk!fcH?gQINlTlCRn%JEgl*%OzCgml!eo-yqJdH5oye(1IQ z_y^v|m9=$t#uKh=>~L;vgXbPP$K1zu=>GmI)5e z{GdzhdH%((eTj=7d=743z?He$M9x4d#{5JK?9-T~hE1}wjM>Q};hJ@3wNVr4>M4x2 zVX_HKIoMs~?)f9k&mZB?!MnNdz^y!R_%2pDOLX%g^F@y`0Z1D_6tTmyBe@-%g6OjM z3jwFSeJDnq8)#6_?1Z5x(YmD*K{Y2-5EU1;Lgp-o1wc6`jjuTYb7qEU^4^=fPi<(d zt`xi!z0xlyzfSOQj_o*QXS~DiWQX5hdz#24-)zgqTu7%X1Foi7U*%@hCs}r@n`s%}usP6V^9( zd2Vf;b5C7i{E_E4^6^-N*0akKFbS zPOO~b^yg$dwFU@X$6#PA!YGWX>M0>k8Ba%KzF;C_Hb=W$+Fj@3 z{uUSOZFZ&;>M*5_Q!ZV7hClVDKg^Hb@@}n5;!H!e78ukVQC~Qw{k=u8VZrYJm#SU< z#_#=ow)eN`l>_>7^Yrr$rR4OpE(_gxZW}CfbnXBP<&ZKf$nuiXmvl4TZP6CI_NY-y zAoIT2Q0iNw&3ZlIGglsGZS7fp@BAbD)-xaF(zUbfy9jfuFqns;W1zO3!fgO2o{9>L z0^e?m5kHyWIGyxFGbPWiQ63%g7yjZOz>oIX8co>P+~e%EH7-88!N%`A$?;EWJoC*a zck2y6z7f@BzssdRSdjnFZ5$sgaC%{p1A`t*y)J7-;Gg}&PqTk^7f#J<qf3FJ#)5+FYEG_)w{Uo#A|ui9pA%ykKe~~XMqya_5^BCZKo?~ z%CMw4_oU*f-K#vkevb8x^VE|K&g@>{3!BgJ^!5d=>}^s_Hi(l66K{tkchoj*Z{VHVsZ;Cx1mLHhuZw6^uwE-D2KR8NoAdEg)Y+dRK>3CgaW zVH|XUNgR%d7s#^=LWb`QD2H>*7xUaczsl{yBOL1uIoMkuD;MYwmpC-H%9{?}$x5b& zpd=wydPQmi88d(bjHTwW-Shmy=l>;Ne(JOQ_JuDoiep$gjPETW=pikQb`_`YH?6=* zaT*opyya0EG>R*Izq&^zkw5WQKfr2LaczIZ*3LfXu557j>@~JOeufjDaK!DKe`Uj0 z06C>Z=;FYTOMkpi{?;ShGFamH{5&gzJ_q_8&S!yt{trGz*sO5J=5*A_jAd=^N%~I@ zjBdc)e5eL?F(O+R>2L3F=b^j#vv2vMeAmghaL0jD%;lwN8o&hvM`ouCi3r=&tnY8I zv3r#-TziV&dgc?HzxF7jdd$V?n5&Z=-LRS!kawUga771~mAZ86ZRe;ntr67=F=HCI zq9mSsn4f;zU*NC5^Cz01c@-axKMp|vc|eB0!OP6L(glw!xy!5%QI|!YpKSBJ|NEcd z=_1E^N=vLl%{C*xd zd>^ajB8&5@EayEk17t`OJA}-sX)=+>BWq9dJ5PU%|M^q@m}jn>p+0yNH#lgPg{jJ^ zJ$s!;qs8=eEop2q(_?1}*Y^2=zwrTHTNYf~+huKMk4tMCJonrh8=rfg6Q6>3?&j^} z7X@;Yjtsc;C+F$B_5i2mR=8zhf#qS31A`t<*JFO+zyCOlBku4J$*_rxNuC+`s+n!p zncf2I z%AdDd4?;yT61cjoouf_(*m9C zO~l+*scGt7OSlTUhhqh5zxRKg*XcKL|(f(vc$uTM%hF+A=?yPU>}QFJgK2E4aAHcmJn0|MDMvQe8N!gPHUtE{eIzoPAFKN!l1wTNj?<-UFxk>mT^f_@UEpr|&!!wM{mn z9oU_*8zy}5!o&Q^)4$8FeEC`^$!5_^bZJq&Vpu=QH(w;hF zhWKDX#nvutrOX*4vI3rejQ{+d{~rIv+f^fb1Dhlb-0UAzlf=${S5nx*O;S(}I5S%3 zeLwrhd8Wvq+cN;zPK`_z!OT0UG<1$;&tpSZNke%;vo=Ua2c@H{E8=(`##^wz!BW=e z)Y54_aOZpZp?luTy+`h5NT#oDa2X-$@mm=gTcP5={q)cB|Nfo7$Ikq+P7WugnT@vE zlrRIb%@5UVw0=d9Ne$1h^VYxgZXP&!gsVF{tZ(gdetnB`=dN+}(aX$za+~ERUJ{zu zrJ0fRA}J7bcZbs$Sg|EXaZuN_EpaBlV#}Vy*<`In;P#)>6)Da=$sfM;0Y3Qe{XBp8 z)H}#U7zcgTl}I2XXHRPWzn}See(-<#Lp<<5{xE;{<3GdWe!}+ZZE)hXaPR~S7NF?r zPLog}7T_az4HdPvG|n^U0B=F+7#J*eBKJUg+{K&=&G zH75e4N_5YnUb3MVLA(LbITb_haiT{*rTVTDCK5H9ox%FUZkc;bb6C5A0XPaS zL|Y&bsAqtzow>;bwWF=d%o~j|TgelLvmGm0TH!NhH4X8iFXu@djmBuv{xQ#s$5(;gg<^4a^hZocjIyX>_7fVKJdT(c|LaOF?~gY z(>-|sp_VCs=AQ54um8|rg$rlQ&Tk2(OM+$Xa?a?QXs(^m2|Y}AM${SsfXg!V>SQ(w z$5#yGhC;2s7PEsc`{tP=_nzo=Xv;j*qGz}@jZIQyaRZG{F?FKRIA$}Cr~D`H|4SUm z`b?zOT@@C?ko%nVYQ(?)Fa9cD+I|*pyB`)-HD;%t*l9YZZM9Of#e=%+BCK0{5Kk$Y>qGf<0aU}(_@YzQ|2u*fp?`KnhYnl^V%hhc0#A0mWF zuqAn;eWYoRSe-hdvi4c94uaaMG4&xp47m0(v?-3XWj|d;)axMilsFv|rH17bxZ7XL z2cP*kKk;+_A-ka>NCY4Ct%pvRQvcNbKf=l76END-{-jYSij4+o#7O+MK8xZ>yg>A9 zZHyS3FF(sYS>Y%$hpVFofxUwCA{yD4YL0y(>X0|Osq#&Z{+9M_I+MNTLnPR#;2hS{qWJPjgYf zHty~AMVt1_giqUtgTff9&9r`6waTybtoB2@Y$i?1v`PM7^=>2|dTM~x?Pv~I(aVX! z+P@}$qHUsOyQrpaH=`MDW`a1o7b;!eKYSb88<)7aw?;H4_H>`6wkatHhtG0c>Bx#AJ@m5aMSwg@V&JVqI{Gy7-@&MDhUwfhVs4D7N>jSLh1uXYtznR*Tu?+>N+GQK?2Z87Io6<2|U)<1iZY^ zD8O@%aofUiP7Dv}-bbIMDJz-t?1eGU?_Sdg>J)O@(6&{cnKr7im5|LgDDSDJmBpuE zVXJn&iE~IN({~}>WO`X3JKJao>7+~({-7tcTfnI{yiskbGf7gDwlR$$m{qgSKmOt` zli6X_KJEM!W$q+Y{ClteBmC>1`gMN%&3~G5?Gp0*6R^Ky{?=q*-Jq?ESz;|ugWyL7mWHPKvtD({gXVvdov(AZ~7 zDD}87Qw~iZ>@)STxt5YihHVYQnIJaAaDdvuOviBP96bI-e(-faz(4=Ve@w?I@SN>G z3aSUaFc*59ufw0IbO{&8yTXFFjZ(Q5zN|l;&9@Lg-)t(Hoa_C ziD_xm5rS=>*E_RgjvCGwjT0@~#7)|{!GyqpllO?~%JgckQC_xX!^; zro3zA6#vur{ii(mmw%1_;N3sLJG#pZFQ12tPr%+asA}Dp<_et4&F5?li7i1(^)|!1 zG`6$O-0XHVHJvo2q`v8OFFNEojEQ#8i=aZGOVL)C(+RSA09yTbEx)o$EiyVKQzF^j zsJ)-cLr?{h>~}GnRIC-v@UHDuaOi}}6&=VkjR@Sn3|G&xxUt3CLZ2VG<9qnUzw}S} z`9JmFad@yoB-paQ9?{UHW{h5v(p`G5Jx{C~dd zKj6*zF}i1;#Gm;ha{h5-<9V3u8Idv_F7uY=P6C(ckB%;oK;J%0CD|RV?^y?jo@wFj zz{1R4I%ck8^-c(QyPk@3*b6Y74!0o$VjbDTfeRXPnkH`8l3OofFpSbb_ANcS8D4)CX1S}szLe-*CLZSiIgs7n%=HZHVzDbC>&k*!j zTZ`y}43|5Nr+x)McDLSg>LqjUt-$)9KFZ>2kFwnBb8Il+=+ck_^F7WI`Q^X!QDhY0 zP#=xBHwkd&9CWJr8cB7gJ)CK3m#Id*_$co=`DXsZ_x>f`f9H48^_d3$n3upgs3ig# zte%N3`A%YBZM4pBoO_TDJ@ng*cCYgA+F733xj>XDbh=RXHL9!VL9V-%)orG2NT+;W z$AC2aWobll+Q03~JaGB}e*D(A>w<_c$Z&)hYzK$hzR^W{qiSg;>y$dwgnER;sQ!5( z=O^3ztxxZ|{)I8_in0Omy|>1RA4jJ%wov^%$ljsHXZoOkq65WhJ*Qp5Xoi zrzkp$oH+g(-hcZ$c>Tf&dfg#C6!6i`eba#>sKp?T!WW#~xx)YW(f^hI_QU^>y7b=@A@-5aO+z*G=p?jdO z$8EOUTRJn|;_Svbwl^+uX|%>C*Pi5ymmgm2oXlSzO*fr(Ulke_4|ASxq>_6k#y>&QryRL4AsnVoMLz@XYVkVA# zkC;MeT{n-DJiW=_Er2Dod<{-5DATj#M@(9z6@P3$^&VyeT5?hM%0-av zHQ2ezFz@k)?tU-tyz4!@=dO2hdvCdMS*aG$t@93jzewgi(Ka<^E+d3MmZ=@DgS9ZN z$6VOo;L*LSJhgF=jqQt!w=Xf;+h8O$7xuTfxVOQj@g^J79YQzPIajDPej$vZ6!2zi zI-7LXx- zbcRcGIt#4K9paY7qujA_oRfoP2CgLcxyC&;am&iuW>oWblrA84JVE9>vDv{64{crG zH=p=0zwzbYn4V@_~h&r3u&QA47iE6q5)2*$k;X8yeq&n8_d7! z2!G^Hz7;k`T;18@(#8&Fo?hqbqu1y?vc{n&9d74U0`hdV;L;B)(tXPjR_5n8J{WLp zX^z$TK6`!m#eeZ-wmy0eZnb#i%!XrKbDRy4X>yX5ft{@gV#8!Mo5(nqJ6+ep5T^+BMiJoY>DW*{dBQItMpDoF`a2t2Y4dL_1lgx zP3XO6pU7@CVXq!Bnv4+_sbV08imKXYJl*H{YKIHESJ|147)|$?#4)2<7)@)Y^@y=d z39%;2a!M(PF6c3;Sx%Xk^eGtnlEvcPe*dlfp+EE{s?B|_Ztrn^ zZJXzwTx0E#s|=smVD;%7*}1t;&KC!=NmX3waQQtwPR$bsNIiwo9*lONnlM)mdDpQ! zx%0@~+KYXXxgMR<)D23@Ady-ooZq>| zZ$14Po;v?|&Rl(#-+cN@?1f#(x-ho{{UJW@5F3-JnW-AvVq+qtl}-hUf!3QT742H{ z4EDppG{9q5IPv56^Ft53hVjOTtJ~XLSlj081F)u$DZTtfAb(5pM#;HgWYnOIeq0-eWj-gf||&m+wCDT8_^hVs3blWAjJ3 zWp0JiR^%{nrB82LiD&^0({I6?KoX)I2yU({6UasjCZDqTiPhz%Z>5Up(tA3^UWek) z9Bimd3Ti4j)I@S9UGy{}t)V`P+u`hESJ;1Kow+ZqvvRRRnAEclzeIX*AX~~iB^Tc8 znf%~MRu3+-GU#&4@;t|u=gH@CK63sF5B;s*hXWlL7D|vjfzAk@r_M#ozbdXG?3e5k%V=R9%Qye>^_K*) zE~yGv-;^=>p;Ig$KEO)9%Pj}yIk7TNcP{6%Tbq3HZ+{N501Ks=7TL^ufte3!CB+$N zN#L~K&VXT>uF>eup2vuqo&n9LXwjdUO}Ico<3-);QHV){*Sq?OBNI;+gT@Yr8s|$o zy(RiZp98%m4)y0b)L-W4V1+^1Wxf~?tD3jm^Df@C`WiD;jK|VMSlB{IqpQ^fNWu2j zUlE8B*$E?l{)@lCXzwc1Fkxe~$3{Kk(qxDA$rc;a5gVgzws$WRY7I1(SW}4*5M5Hv zI*|8Nv*sPhb9|m5F1OW916uO)Cl{l0<~4HH|8{mnQ(EfAc#`@WMZcu-Fh!+y&MbS< z$R6{Bqj`5LxU$RJ|HgZG>+(Ds>toJuZgJ+)HWwecLjCYnh7WDAboJ)nSN)PePHF8v z&;AddVD9)KmU<;8R^~W$aDlnGlE=e7AN=ngBwXHw16|d~oy>rkFeWC-$t7pN^_a$L z`Aw7dr3G{n!0mpsT`B?F?l;=qOc!V7i`QXZ96Ch%oG3b!>WkO~q{flqVuehnxKI)6 ziK?nl>!0^<;T-?*kN!0OukZf%%~zZmU(;k&m+{pMupv2hiS&jgGY3R?biB@c|K1OC zW&0A$4?%Jj$UMWBIru``UX*&$sMy>AJ%Ghw+B60`Mr%eFJ?6CqzyvmIp~59)YnusN zG$5yPlJ8f*C-cJS8q<+kR(LAEDc8`f5^H=hrff{0s(9~Te-E!I`&{1K#b(rh+#LuyYL@;oOWk3k|;jEw4~1)68h7Lt+`;3-`9s9P5~069D7qR(nQYmpd-fz$ zh)fZU?9hH^3L3$N^I#-T$^&PtPs$>KH@YUkI+-mwCrc^`K};d7b}@yLTK1XNZvi|6 zo#ag;jBBzZ1A1kLafrkakSI*YQ$jt}Q>&7j?yC)N^9&9T8-i&^j2K{(2K!8aPMvJ>nAEyN04pN_TEdJViK1dL6hX^xPU;lVYcU<} zXZ55Z6xEcjA-J_KrZTO*5D?LY2OUB+)|VIv7E9snjZ|KAV2MrmgW#Q={BE=Q=vpU_ zrk)Ep7j;yqBTQ>thho+}Gal38mslIIvy>+_*j+Bj7k3@6e1Cmb0Z!y#Opu%MJr#!Tn~e9`$+;wyY8kh>5y|1p>tE^)R+;FCq=*vB zm!7q{Qr^VFHcw6Yrf1ZoYL(I4OMg~w;zgy(ZRPL+Wzgdj>RK3&DymV96CoP~`tIf@ zdfY6KGoLfqE{NM>>MAgq2FBxxX&nf4zBf|(n!rFj~uw+=VpHY%jw z34kOG(gIYA&W)yOhQ(BOlN0P@d_>gWnVxO9Y=x&GGSUi#G)9F41kK&}b)B6alw1Q<{wdv9ttr{4l zh&rQBLl3(aOd%y<7B_n~nHr6THrl3Zsf*(Zx)}!!&ErK^UZ){2+OG-Yh^uuAoWIGX z>6C5?$TF=dE{vd_Q2D^Pu34W>m{v7T9E(N4!d*+cJ-klm9hjzcqVAluVwaE*)2>@F zbHg+Y3G8;S0k#pePP1j10kQdQ9EfR>nZRgvXqbf(>Rvs&A5&YCrivD)Y?{X2la~(v zj#FJW4HAh_-}Ax6sJIDC2; z3OjwKzFvDYNzyd~DoJD5J)b(?0&W6&!z812TT3(o(h?HaDnBMQYWbYA6ZH)p(sJ&n zO^>M^scosrq5=Pac_x%my5Ojp1bbPc?LTY|8?;qFzz#Jx6Det|X6}$|()LhqZMyL@ zEnc+gkQy89cbaq>>6^b)aQYst9I@}|zH8A(%%frDHlNp(YudWuoAC-@Qd6E-U@$C* zb)cRG#&u-8J;l`#*{SGt=e}~8{bkZk1G(q>6jw%sX(UvE={T@CnlhOv6OJC9BRe>N z-KoyNP4lT8=j^jJdGpv%W<(RqXQqdfw(XXfW(;nIOmmZnO=iS^jWge9i%F@TWah+H zd$7?WF+N}*O0L89kemQ%e}*Gf?l!SA%z&PYtTXVmyrlWP*QmLO+0Y3%5ffOMxxbQK zAMKh6OmnSn%@dMvN0~hPqy(v~NtKgV7>A&}iE9+jxi7kqCm!co3o< z&>kX8B7@V5EV_(3L?(4$cYn%sdkVD>Huo8h3){SW^XaC6+}(1N7e~n6gcyaYifrsn z*qu~J6b=nb4&Ju{dzBGX!R(}MDxidlX-G^&wn~!JMnMutQxanwt!F}W!;oZvY_wb= zv}S9xUjlnf*AnAXT?r^{?VNzptmifPv;}H^2NO8K*{B>ephxVb@d)CDVD31r)@)%h zkhN1&_Y5BdYj?C~tk3#V^Hx5w=Toss$u(uQ%!y_MYt1=4dQ&iAZnfn)h0yw*giaFZ zwM>zyrbRd7&^-qk;+aez#?&_{O{j12{ zxMp)SAp%3mIP&^cwS~ts?}ap)uFW82eFGS=F)s-~B4(P&$2K!%RzxaW%m%Al3~NBB z-y5%50&Xg%0WJ2R-AL^fqf+xMO}vQ99M0>pTRIdPvz;y?G=O(Ab3{iKXYbB%WSLDw zX{~xDT8N=(rs5k~XH%<1qlK&=*fP2V^70Vs9R| zxen8sx(>4467s2I#`+QdQpL&t)d#;?6m&SbB;lVni<_(i=NTw*NieYIyI?fHaP6rBnU=dFtDd*60Ow~RI(=; zr}k?Z5(U;rWTzLo^Y(+}(?}(e^{sujH}(m8HB1H8_UU)$X62`9zam}Ncz8uXcEG5n zSPRJdgfOm&)4*gBxVk-NZ&Z`laAIYSmA9-S8>87QIcb*!5)xyQnPKWSCI&HUYL(7? zZ+*>zYVTlMvZ85jRcyBPJ+&hNraj+HeMme1#Y_Q7eQp6+Oem8lBK0+C-}Jl~UE6es zY4OMCk%UN*s)Z$xrn1wsNr)2tqgm}W$liqIcc0{R*raJzc`xG z-EA>5Rr!J`bwtz61KGH|;QRQiBjUaSIgEvk?FmG3pxYjT*%Avx4Jq}u{a!yh{7lcS2p(8 zT-zsZ*T__GdsFhFgN#$9H=DHXn+LKn-(Mb)UD`r6cd5rCkO|eK;{5t9dv!$-h5K(m z#L5Gw;OaaQ4Gx_q<$e8S1N#I>I|+4aO9EyRaHWq+3quV(EN{c4L=RI{&Oj{*sHyzevcX%| zqS(o&RtE;+rai4TrMkp~QH+KO%zIPZT*mS5y_MzQna0TF^O zjCC|=hG;-bOfi4!bqq>IYyw*NPQ*AHY7;PnfgG`VyA?2}d zA<0da`Xem?G5WUi#v28vl?Tg{Xd%{Ck!F=#uj%v6naP*;=)Cm^uf1)BvWo0fHRmsF zQ*BLfJ7c7-k@1v#9O-snS?FdveRV*lq`w)EwLPey8dro$xVpa2#f@E}gTpT8&iCI2 zh3GpYk_JtLiX_!%fJ{I$#k@-f-W$q@rlm=Yeu4Z%19^*C3DAR@6kVaCr4{X6@)A6 zBd(p>B#r`XO#zSJ7*UQr`OeMln0}%3RRLM{D#}TLT-YXzYT|xPsB8B3r<}dC&2CjO zbUCj*wami1kHXc-%x{}CMo5LVCN}B5m>)MLjd%lr#F!DRtf)gi&~g>Ew&)1z8A!}0 z&dQK9K}v-im=hCC3+i*TJYwDp@yc}(XQroZGWGg?62T*0xBVw!74aHipP^b@l1wL{ zrMwAnEtI9N&Rlcp;nW|MECW_j6xQ#CesN}oB?Z#Z$ugy9#Xw9F`b6^tY@@xTwzX{J z%e&-nKg#|09i>;nUS0FtbJy6rIw9@{!nnc(L9T8wR}8IjUtRjDfDEv(TacaG!e8AX zhDbH4s3tWRFK_eIg$<;3EIQAdK5#p}m%(PGOUS}ZQv}n}!6pUQ5vj${h-q{4dNgXv zJ{mv^t~T2)w1--m?JJ8`e>89gI{-VF+o^6(x~$$*hk0Dab&azlyOd|@dh zkZ5Dq678aeU+u~aW)D>qkpO|q_zB1f6CXYFN&U~&usK`;^5*Q<$G@7zB^ax1;?ZcJb7-7 z(b_(QNF3M1NklI1FmxUKD+@pViu6?jnGhN5<@mJ`vOa=35G$RbuU*^W;peX+0`qmw z{qMUCj`m?=UppNP%*h^%VndnIqmlY55x%vWWti8L%mRCkS$@^z&P;-E{SX=x6O;C_ z0-Dn$Z85-EUaL@?f`$gV_~a$3DgGef_vX{8|6EW!};y&nGlS) zBqAAQ647W8vPtQh656Hbqql~+>&r|aNyrOUjJ*)2af78g5&%f`nj4P<>NJ3;=R|ik zivriW6KzQvFvnavNP7m>%z0eq^}W!NKw<3&b{Ithbkmp?xUBSl|V6X{Xdljw8Z)G(a z(1zPI;j^=mT^(R56v5-tkpKoDXZ%z#N@ZH}MfXg{U~W0vWfBnT7^$aL7uHsluGxgF z(XOpgC28nrVU^MPl$1k^dWcK9Uz-UNV(WhExn^ZF0k%!c#EV2rT5&9*hw(^&wGm7s zxBa;{bN})ph2%W8zQKbJo*`b@*CuRF^hKjvBRW2#JNar>^1d>8(_b(8_hKpS2KJS( zvfII(-$tf2p{n#nL0;Hj8}s1P7q~habEp{bnnMem{PFwY!k(SPo)~0|PXr708~aWR zXxA|yJ(q+am1#p~dM>7+&z?zIM~tBf09d{zPO~Kt5nXk%`B;cz`|-3W?`@$1o$#dt z3H3c8fe=HpAmWm_5%id=5bXTn&`7ZUwd!u#)6#w#qj5uDL~zdB4{dKpn#f9uy}*Rl z%1eDsz-`J-D|XE0F$wI6_F~)oFYdAQ!*}vMZ@itAI%9o0;ger_maQ|JI%-a9+ ztG>^hzv~v}zV9SFzh^U|mgFZ5lK@z^m>8`cEk3K}vTGtU+g7;VmTdAlyV-iiF%#Lu z^pLzA2|SkH>m)Dj#K7rU#Tc-aHkw&i_|%)BZ+$Yaim2CvbdaGb!=|oafNA>IYD01% zs{5q5eO({T$4#BoPy(HqRAO2c6N*%C#6X+sH1jMP&7x=+TM`_f<}yaB3%l^fgS_<* zzn&8=BS_@)&tBx*gO_mQh$}p7PLOF0dt-`8V6OVwCwVEoERZqgv;o~*7iFSMYL+Gg z+?h4pb|hZh*BFe_6ZR?|e)1BZyL5@X>~Pxkc>9mPp5kx^&h2PHjYd!g&48W$UI>(} z&%}sk=oKwA0TTm){;=zIExEl!O!K7j%-&AdXo1YxTbr!idU&9kI3egHE~0@#(drI? z=Cn>w;-x0&=w@{|Yg=s5r2$-`P0Pe++H3jJ&@VQ^B|1f;Z)}+)5@(|miGHnnq&m`; zGXuAg7g2$9>m%@I-LheshcYa=>dA=Xt|Vy#w~9 zuw!orlB5;eQC%%i&#Ig?A=>>kY+@Q#j433o(PBIedKz3etASz%m5bBDqu35&V_tHf zIj?rEPYqH^M5pl-TAs!ji@k?h-yN#uBx4XunW>3%XJzy!c(ogNYsnB9O}-DCB~-@qTZ?*wxJwyG(g`pmOz zJh`E7O|2twYl2JzY)!}}LO0y}Nt-v5ULlZEY7tuWv~)MAS>EfCKe3@ZAx2ZUw2SY8 zbCGM$tn;AlJ(v?|GVyz$c}gK2WuHhWUpX6|_BEW$XV)^AYD!zEXt0y?wT-{N)NfE{k=M1{_i z4g@tj-|TS2fYbao@HHL|175m^wLhkj!>-2!b~7nbJ;{Df6X)8V3u5$41#K$k-yBS;>5q4{Q&*8?AXCJ=A$DeqPP^ zzB?;Bf$}=WByhJFn6ykHytJ4grmYe~f@vAV?7TGo8-OJNB25IXjEJ2eskXA>#oi@n z@yVp^?_rwO>w;kdAfAO8XCMywvFPy!~r#|*1achJWATbd4Ca^yx zZjI?a*9PR)=#$dIv`=<^jO>hYP6*HKBGHj|a%8LG3%~yyUwq~=d6{#l z&iL-X@OJudIs|98aLz(0n?ni>(1}qPSQBxHGq+K+;{cMAUyNaq+0fbmA(ffThgL`0 zb&(j@(vtR=@>D^I=*pgWeIJRKyUm%^lHxD4&44rD8}(G$$FKP2LLWPO7V z{@!DZFKpu@x>ILd<92HpRk)2k7DEqLwd;I!($@y$8{6Zc7{h_l0D0mnF}GS2#6md5%2f=BzLwT0SOs0i78`*? zjBupWxUH{^Hng^02Uu{azb5#zKA`Wi3oZIIBb9w(5@sZ5>a^9zM(AUrPm88b;Q4J> z>G8Jz@_Tv1aE^{Ed2VBy4}bg#)}OtGtD?TWwG!Bz=;n&GJ%&}mP+mPxMLT_MK)x{< zQHE8{U<2g*7QUOq#XaK21iB7icy^xNH98k=?{6|-*_*@=>>Rl(-@~r zkTl$dG}IddnxJy4xM4_|%$U1OO!YNd#h3##+nU7aR#}bOwKByjvx%G5;S_|%YY{yM zSy%X+4y!WrRR~t3DL&^t&fD9b5?E448o^3UOzqZBoo1(-_SM;!_6R}(cY|QP-k1@s zvXjsm`On!C3 zqMNfVUax+7b%BgZx`fC|J)n4Q6E=4dsR`$|^kkl{YNrcNT;^YW>>y= zwRY5zAhyjPG$hlG_HizP3ua2_xfWy)oxaYomKt&TdS7w+;&KEiI?4*MI+8#|nT1ov z6nkvKoU~?YYc!K2wKst?*o2OB-~J?-X{qlCux&dz&Z6+5!1)nmaQk0-fFC@4nB_`e zu=%?WpXJP#E+Cs@d{&^9?Rjosco2JMM*tkFiz{SVhR^hkqd}s2?a+WB)xbIx zj4{1Fy(UVfFRl~?eVKW@(}4U&P#djk0IjWkA~Tyf$#EmtEreS0)jUbp>tR&E`aW)2 z!`2=Hau&kZ$D~LpTV7oJ=^HP8O{pbxMU^4bib<$pp{Ei$?BRR4PUdziwyx~59%~LC znrEpqV6K}p|MugY{o?afPi^5AI_8^YM*Q~V47AcT(n`vcW>N;=G^8f2CiY)48zkjR z_tKa2XLjXy%wX{-Z#;G@d8fz0;WGWAU^=mvraNtezQNeyIe{P=;@a~CD}x2Hvd8{- z%2QX)@-II7>r7poz3Aq~HniK;05f!eudY0e+=;KVE+XcXt87@TP`5oN2hTRE%ZOkFRMD{`xyc^m0 zH6(Z2Ew{Wt4X;8TR=kv=7TY=;XNj4wAV@T%RIa6|zur`@3%8hu?8GxAf=O zj1#^v+Tw%%<%ih*=sDcID@dUy_~@Fiy`s#SBR1KpNxN7U{horulTF)dTgqp*mDeeM z5{}sVjvjBYb{Y0}IePLg{;k)&kJsP(Ha_tB@8NJ~$XKRKCnKsbWnyl#GB4?r9ePEF zi<2?G^Mw!bkq3X5fBmHov%Yo?mJUOIpmhX$TUFCgt3RgpCnTmhf_X4p0(MHlgcJk2 znInjnXCF~()((Wj5T)&T(NZi{&*4OaUniKuQoIZUYf9iXFlsDaa564zd zu-xer1kP+-=ApAs@J~Pd3w-*)k8*zh5;Ew)@(T0@dhSPU!SdE*qQx^v0$9SdX5g>oB?FCz;bIMO9M(nm%D zqo5KzEIIk+lf3U8ck_m&Wk%Bp=ZXox^|PPl(f{qUFh9gCcZ@ks4@7ZZf!Ki2ekaZ) za5O+hulr2%w6(VJzG-^`dGeGb5alLJ7EdfV*xG{i4cOi#cU|6e$6I*gUH34Nn&0^H zr?~LkV=(B!@&ayd5y{ff-p-Pz&FvZLa4EzbeR)pHosqLo8Q#ol8 zn^G!suYxBx$?jX?wg1(7`L2^kI35b7IDYHFXZX}_KTJHohbtVelSAf-XSQ$~Q(P{{ z+AhV$m?QB3*`y_)uRhY6^z{L9J0;+Vu-~t_lfHB1nln6KRgSnOII%q+1sZB5~sEe0RBowxlb@8Io=D;%NE zrOAYU{rRVP@OK`C%X`|KxdK;Y$n)E}CsQ13j&T<^IaDms8|m?|$s&3&pxsFRuO_|v zlf4^LdZQ6g#sUh*WNQ~$=xe~x_7s0;XfGTG*{<0?zsob5TZDy-+ZPuZisRss0o`{V ztn0|Q;28Dvxw6jv989!%?zAhz-CbG4ud&6d#bR)LF)dpLXbg0`5bkg$Ic1nGj zdCy*AUYnOhT5dG4_C#y>w~joY;UhLz7&xAd>wzw~@dXlUh$qM?|Rio-wk zcE0Z?-^QDJORV?-=f@-d0p zaOuC+;CN$7B>Y;^*B{6!IUUM+F{g?Z)&4##4sp8`vN6IR8{$j#|GNFi_|h(CFRioN zhuaRVu;lwJ&zG#e`zTjjWcOodVIsJp9SU8iLkkTc9@_$S1Bctguww>bjHwCiw7dfC zGLj}uq)&O;TD5u1o@-2#LC??hiOLW zjLC`F{susj?%U6ZO*rkAH{obj92>;7z^7ZIX7yP6l03vTVY4Ku97AxbTard?{Z8$> zF@I{mB>Soj=v1bI^%0!kq5P3M_@1BsKK|g5BOHo7ykvag;wApoN59O4&t1T+RT||w z$f1tNbGy2UH1qgLghQ zxwMa8$no=~z9c=*k^PFx7dCl(Yn}2ym)qu+I6{v@$L3jl|4CRZS^vmcWNQj59mQvD z!)Rh`n$S2PMmu)4L39fk2B1bu+Vdn3iJk7#0!GSh!vWmjd_P#TFk-PNVmo;_jI)=3U2DC zF7I;gxiy~H+oikQ)NmR zTx>d~CevOG&uro5Gfw=c@8Sc0?p?fnahYSj#}whCPe04Q`n50c{Kw89S9hVzVJ=tG zZG9ikZ0jo$P|u9Jv`sg9R^1XsI`Zm;S^c8v#_a9iH{N@x^!0bYy;QOxS~9rW+h@0o z$iaDB*K3$#C&S&bh+iyVvxad^90!Dq-d&5l<-ND_{kPr0p|Zzzm~t(fa&~ivPygZ< zdFG#enXoy*9q%KHg@Gi6P+I*ywIMYqX>hZZ9XHwpmXZx^;BGXb)gc<2O#9K~0=q6b z-S}50@Ta!4^R)nyMuYS{n$42ThsJA@G{4!$qX6f&al?$|KYS0b|FPHc_JvgrN{)9q z&+hH=+n;`dCqDcn)91IL0N*c(Jw2C#b9=D8Hye>AHJsm~9~}q$62+^$+vCP`Bh_9g zee;2gYLb}2dT-2jULl7UpqtJQ26udjJJiQl0U1T&en6^-U(Px7ro%k&j(d5>(c^TS zXD#lr?JFL?xW(`P{O39U%a0><4J&88j9DJjWa%0T5*KF^MQPnP zL1`w7=|0xa2J@-@G#ND@M!QBDAxvAR=eSm|`e$Ll;MR&Es7so}y7IAP(3@8C^; z`i;Eq_$ntU>A5Z=5kC6#d4BhIzQo37E@<3vFNehvN{<@_cy15btF_;C)Ft}!8}viL zYIlij{~HIN7puvA(}A2)VyO4*t~jp7T^JO|dCj;YUf8NeTr1&`tLr@Wn~!krS070VM&P6>v--;u& z1TO%WM`{YJbXj=d4(|Qq_wv?TPjV}s0U7(iBkS9I_*0Ma#P2*~W<;iuiMAa6yeeibCPqgT)~agX-L+`uXB2_YQA-Vd_x-dglln!dM-x}_K{(ZOq>Sh z-?oT9J%{X0h}SATrfU)*bCk#CxZ^Fi^1$nE;dP746wb3t%~R~~*+}5Ly=TNUsY7S{7*LaTPato9$MQQ&0PGXfvW+!jlSN5o z*a@8&n4JNiR=jdzX{K&JHx-x!WPK0zr*!T)z~T4b!|4Z3bNkUnj!D5XT?$|F)ZP{! zdFUA){@Bw@o?KTg+sh2dnF_-C2(Iqqra?`-N>7sF>WKMRa-h4cApRz#7X$0J7Lb!> z2I`Jy-S4rRRmkcbZdhnk*d)TCKK|ZCB+GEyQ{pJ7TWDN^^K|ZB;odjj!h2qGl6&VD zDP7KHwa>Hpgr_F^JoBkbocoPO+5PlcWG}#hJ`77JGo&6g_b8)i55VK?9obXa=(E!_5f_i*<+ zPO_X8ECX|tc)Fa~+v5{YJ;#?n_5`Cx*KpevzT*iC85Ef=uWya@6sY~F3a;0%Oxd2` zF7L2FkCkkGHiCSU(hJr8tp((i5}-R7>$1mI7!g-{u+mkaO&yX6?)V)3^c+O=sM2wO zYg0lUVX;I1jz#Wx{ZZa|-zn}{SYgg(jH)S@vMF0q^W^0X9{tQ2uKfD5>^*x`wNBZA z^oF?l4?tI8DJa2I8cVCHa8etlZ?gZorQ23B=48{{QWr z*>4<4a>jp=nN`&n*%C<|Bgv!jcoy=3eX(B*?0;{-fMM)|4Fevp$AYXGNjuU|6v;m8 z$P7P3R{?(@}y zd)(cha$8GADbaa{i^31DX8iLXp73A)`jGjo^7{kCJNzgVSqX6IRnladc&Kl&j zL+6p$0Xv@IgI&J5w@KLhlB*zdZ&LnKFBb%AO6^@ySx-shV=lfJGm!Geq8C6lO;Nzk( zDY#n_ezVX1-{0lS-+j$j4{q?A@eV^uDoui7j>9x(DK+ek zU^*lXy-j=z>=n3s6J%O~LYlW`oHV)RRpkgbC*1k#Tm037TYPi(fUl?5nfid&$g*ph z1tsIObz_9SHAb$NFbwS8+hh9RHq*bm$?f}l+})pYBLr@!XHUW7 zm^;Ue$g}x^KRkKCfBxJ5^8DK)x)*bcfv6lz3Nzvg4~2unCGzN)v`BVirX1MRCYZ1A zCoQ8;vY&SFy8n|_x|=KUw?Un2VWd;e`lAmt8m!Tx)zuNr>vRP4Tmpgy!hdWm&Z%e zI&u2^C8z&=ME&p;@nl6*2eGfPnZL*N-h@m9pNoV8eo(+(L9sWX{ASANi!nPpV-60c zOm9yaUmG%=3>o^s*agPG5XT71xUPx3Y#Sb(obu!IV;+5f$dhlM(>yvhTOkNiIw(Cp zcy#25K}>ykJcpwd;&Zj6n2<)%RR=GZggSC#aGkLmS-tB^iYrTG5i6dZMxMjwm|19% z{SmTj>P8Yp*14$Qw8Y)pg&P&pMs(Sd>a!|2Zl$C`;9AM>&JH*3@AJi9?D3bk_ql&? zjhn*(69T0wohox0){EOQwbdad?y>1uFGc%~L%m+VOlo=lhqh_@D0&`QiIRX3vh%7fbUr zbZRTXFd*Z?c10`8158J2^pA5m$;~=~d1|y>n*sf*MowBLR9qkLQZ&8a@N%Ok@0B9* zYjDD1kT_Z&(M}4uK1PSZ^t_N=TAjkcBX>q{a|qsDJ)T z$|EC>bP@e&jXqt%vV+k3q_bY1OT5afHN{#v7#}c5g_U5q0=Rk-`7KC=aLSUCI44d9 z=w4#NYK-*{@iq6_*UbE~XvvtkM ze8uc!$*UKqtWH~ET{C+=r#W1h#7zp`n(E8L_)U5>3t$nmX!LqFuMtbwgV>v~`QjBh0L2m$rSogzP<#oFiCf0te8_K^4qCP|!Lds}`L# zaJYtfYx=p*vlDapCJ{NU;be_(6XW47*R&)weNG^G*Ya{x;-b-AZ6cGG$*nVJ3uR8t z>FN|hflf=}L6r@!T$QNHVUDGTX=Q51{vf;7viNKj7jt#ZKE63-HKfUIvc5n}mXw<~ zi?lT^HC4l0Zh2|nhR@{bzuQYT!X%fTRg<u6q)RfAtOOu~q%A5&`BH0*g3ms2{QA8kL%t54)@Y`jE5bTE@O%WlOgM08lds6nDxj28$2MggWJvQxmMFhY0-&LL_IaELDVj>x?j>m`(e zX4hRkfO)-O;TqbeLq~-XwDj3f@f<2DQaDGr1!sgVvnUOD!y)A5J(x;i zaS|>QIP1Pmf+kwE$|m1DZSJG3xuGPPxRNEdWN(9RsV!YJ)uK%>?_k+dl?7v8GOi|+ z&AAZO^C7G6#N{M&kN!+PK_X}L(lO<@0nS`_F+k@NGi_OQHC+)&P63Zp0WAU&vXSVr zRCfIahdaxCBi|`#{$O6Rvsyr#%USi~N&T@lawJQ}eB()uzrckiMik)IY*+S6#zuV{ji=^<+;o}i{L)LSz^T`rf&iR`K%Q<_CJ}8A}Nlo3= zG(}=HUs&2+8SrIErwuyrwk6$5;Sj7+QH~+nkUd-c#z!%iS5`GPk1_Yy-j0ClrDRIB zNztb-rA*o;A)T!Z(zc|gqbLd{X@GByz{6Oc)zl#0bp3g6R+kHm%|8hjQR&0u*GJ@c zp_fQ`M%2u#vkM*^v1`%bSZmF4xkQEqaoG?nq4n1IW^;_-jJ!dt;!&=pVH+JlDcLJw zHx!)3A)hrO2T8eALsYa={Mst^CkI{~rGjq+@s81W%%Jf|r+9Cv`F3t%eBG=-8U3pC zUT_hWK0fqUN91j6u1U}CenyOP=cTxojwUs9bqC&|Bw8;tG&FUSo8MUD8$nD}$pJc> zbflClkyaHIhim(My$FTJi=(UtjI=~rBWS2fN>?ED1u+kA@TylK-iIpjb9m!RF9m+R zM9xrW$)aa3WO3VvTCzoqb2B9(B$s!~vO%U<0&5T&jdWPIQ$cb|GjOVS=Lxyjhs0cZ z080=Ywu=L(n2MB zQuZx<^G|=%^ndp^#~UQR6zK1y4>z`V9bG>Y`Tv1_MmN{*Jn8bA`Tf_Hz_*d{XI{Qq zco*e996l5Iec-&pwvE>a-oLi>{FB7{J;94~;%&%hBEKi}*X?by{j0Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>DwfIRyK~#8N?7erK zC0B9i|E<&AH&5KztPRRJ3n7sN2oO1AV{9cOdMmby{%TEM& zq&FVuzDErQ{eZ&`k2D0|yYS>6`^O4y`H4dcdVr$6I~k0%}uX?LGg@L0xp z`Mf;Z`;IIeULtuocr@6teEjxzJT6%Nkb{2ULBS*Oh==>_$qUQJb$`eH;NgCIV!$n* zp#4q6fzBTkJlr@umT`Kt*F9=@G!uDvVQ{>ckNaVnizg*Kv2!p8`;{aIBAP=!Is3!M z{f)`~8Z!v{yXTO>@&+C`I8b+am^u3Xgyo2GWanhRMDlQOSSRJk^!XrQ`2;9`_tSPWT=o zl1GB&L}SMx9mM62{~ra*JAdQ`;*p4Af9DP*Jn4w!&_~=A3B>ZSPkub}{aCO6zJ=vP zv%ll;!g4}-*tvd;@T4P>!xwS4$$C@-^H|`>;lcMf9QlDdRCD~KBa$Nn1;HF*?sH^u z;CmR3+#nr_dHo+sBn2#22~5%)G`1hat^af2yT|^Z$Ngd8U>M>5a3a}1EDh*#qInFH z_&9F)0Ti%&@b-5+eps$OJlw&Pl1L7@;ePP2eBd4z@jSxMKY+&yk8<1(668rqB;P|Y z$ZZUkCT_o^{upTL2k=I3x^7p8~_J^hxzGo|Mou=4l|ML4}L%}hYB95 zhV5rOm-D9|4Ey7P@7kZ_$inj3TYmfi9t#}M#r#;u^D$id5O|!gd$PlKNs=dqSPlf= zXQO?D;K1{D7%})TJo3o`-$f(^Jh2jHIV@*UhiRg}k6`)yefP1XrtMz>Jq#?r^gx#% z==}E>9FRzs!*>tzlL3~`)Wgl#5eAXRm8>c9sHfzR!$VuUd`!c!m>uvx2M%gRo;<{| z9G(P|s0BhjHc<7;PaRQMoYVa^J)B!EiS~c-_YcT1n>HVk9v+g195FaNq#efz`S5D` z$uQK1aMcP7jUZ!d@hjGlHpWS{gpVp{wT6nAmxoR%5x;`Q=Z*HwCf)7>1nd& z4ASX9o+Aixe-78&OP*!Rn{Y^B`J6u7s4c(tAs~x?z9-?35y>OL5qZgDhJ%0KN_B!a3Xrv#~lEID|~cukeO=7<^qo+MISq?DWx2@sok z5)0%&?u(CCnp~&L4DB0 z!nG>ky`m!cAbA8MmQ0mY1@9C=@E%fxcHh%Z0WY+tglreEqs#d1SCHRv6+=6(#qYd* z;H^&%cvu{e#Xn21{D#9wOiv0TDd34}hz_qJJMFo2H(x}1(`odNKMFUY#ABXPBvh)7 zatx7E;zWr67dc`9ryhq=7a?&jc(qJgL~0U(;6_v+3cms1t;gy>a43pbQ@fl9qC$>I zk_<%yq2yli7_sI+8bv7JbGs(Xm2M7cu4EZ>x{lVokWNE#&os%cw=;hGXW;&C;aYo5 zf;|c0A^5PUu00GjJj_oA15YXN+lq&6YvO;Dm8(YIGPFzEts2A z^0w0JDy=r8Z6#ZPM3ofKzM?ru3_cTbGf$8hN)?c@;A=vqq*M~2Q5Wh}C{=|P1 z8i*_xBd%P84CtuR&6EsC#gX}(3?avn`kWp@zoRtgh0Y|zcT6&T_8yLY}z#Nh{tf}6Ab(7_alMZa29h<`w8aGdp_Aw z6{@S1`j}F!I4VxjNGLg|ic%G!qNZBKKnW;`Ab6_kna45R@yvD{?FB`qVQM=pY|rWM z%gE<}*&H$tzMv>6OmZ7)#S}5oppO+sN?5k5YI7n26$cfNAt4!!NY+LSt&SMqD2%QV zRyBmN7+g@n7QE6Ip%(}z1)PUmm7YK!p_#%|SLru}{tj^W^%%L~8;sxlNwT{y!{60q zZ|smHLd8QAkUbzA5?WgjMkHpVNU&83BJqIFAp`n~Qnuy`ej)_f< zwVNC(#-I@hycrGywr+4g~va z?IKUwF9c)n0PrwG@^J7lPka)nqzlUK2b8JXJl*>;bYB*b*g@hT0TMAJk0Xd(7<31ch0icvMU+rO zphSzvVTdde2uJ}J+*_jdyrNUNN4%mQP!D|%-5k0YAw>csO1v4y&#AESc*o`mp)B@u zPlUdjL`W5y0zEHua%g8tyYJC?XzhxS8|GMX&3{t6{yn5~dx}y0zJf(uc?e2}f5MNC zlSm3U48&4!+k*gCAE9;j8<@QKr^!!gkPIocQK;7-E_o_3R3k?jrS2S~KBML$RD|6M z5A240H};voB}MlN%;bjbl?dvQxu~Lm=*397C`br%`62_uBjGv$@B#THTo(u`54m22 zhb$_HD7-?vU6&3_o|=SGZ;vI*jc9r~%=hfvSVDYU#QLX{SbK8J`VmtlGgW#B3n)Di zQm^zgrKgalN+%Z@E3rHIfy$G9Y;nyAH`~`xG>1~Vj6jUh*l7ix#v+Ml8^A>;hOV9NKQiq@u`tWcc z&WkyS>3e8q(8@s-H=zujR%O$LC63$V7)_J~5mJS=82xp<((8MA2%SE(doaJ#(cO{J zxanrbFaJm4Etiq|JT&h69}W?bJRBSX0@|N+S#~a|)|q_9uQPkj8_7?C@&;vSg-|cU zPz2RTsX8b-VN8`(k~8Vy&S`ky24(JBDf(b)2sfO-P#jbzmZBVmDuiEBmne`u{3a}& zDq2(cl@<|ED zJ~LwDISD6}&Dh`L9CNCqxzP1WTcDQ<3w>zzpg#%OZ7}iW&rrYWkMRrNpDNgLI08hn z91a1|ECW6ISk2}V0mHqxf02N~J%iGz zcrQU+dkBFQ-m>tC+Ou8Q|ArISOa z2hDkCZxO2B*~aQie+#|m8==A9zwiVQ$simY!APk}|AM!%>*;U9pW2|ZHm5uu(TJ5w z0_9k!IGAwerD`cWFa=vL@6)}y4^wJVV2mW$P1G zJ*UE%&xn~Ag48)$9=Zx`56xWZdZCwE+^4l$keg>&`Q?A0bk+OO?_>2V8XFyb*YcB3 zBv=~9a=IOu`~Yrr9Sg7cGxlEe2ITaZp`$#FVQ7?uaw1e?p@K3N2@O^5ZwohGmb2>v zZL*ttNVx>7D$q#GZM$eYgwF!e7rFF+S|lOvp#*z@fapb22ROV0k5i?ErRIc{5mXhfya(?4moEKFJ7$Ehu0pM}gv1&!r!c;q z1kO9aeZ}5A$c+n)Y7ub*B1;soHB;yd^gPVvFqfG_V8KH>7}Onw)I$eo=Vmi>)a;19 zntQjWkg7c|5~RqS9CQ&6jL)JJDkRRLgCO*;__t_x?96LdkD-;*xu(T~_bKzMN=&SD ztZ>j48-u9muLCK0blkJB;#9KIsSNMA9^al@YRdNsJi+SL&^@>0^5)5u7aO7}} z=1V36isY85i+2IZGsq!YnXu|8W#gE#W-MZ8MNCvt;wqF&5L;#=E;a`5RPm|Z?)yqU z@7Xt-vu$tA_Pxr~ULl{uY@E>u8U)#?V3`n}ccDq815M0sWtAy(ys9`Bg_P{yD zUS8vAm&B~BLsNylsv7KHk}4c{|FA|j;c zzn#4={uQ!QV#;fwUiH)xC?`-(gdtIeA`6V&bCYN1C;G5Gg_SWh;^4w9)SAN17)1U8 z^9$k$=Ld~<0U<|yxXyuy!n{XY!se4APCPT>sYk=+m5$1gX>&dV^3q`AWM1(oPJ~#@ zNx(oNV~G$kSIhWqE6g`x?_AC`4+!7BB4ui)hmi=%u}K-lq)g#oC`=v+Ckho#b*V#( zqHw@z0FdS|(}e|3bas`sFE4S3C?jpmo2H+%nIq&;0?(EuR{A z*!MPk&k#xa%wJ>gOMV(XK`F2Clxr}YIARASr%XgJol!Jc2 z05>gEsDj%r{v(E5QW)L2-RgtQ-OOMiLx|CuLq;-U_acU?LGZ;v ztMUpR6{b>QG=aui;l?ZbRM$nk`YmOi``nmgpAs>;CMKIx7Ix$?pF&xn6b$zP!C~VP z26}KjT#zt|<)76eXs7hA?{WWLVd%J+V=J}4;c$Y;a{q=4}%V z;!#+VvJ~SGpdc2Cq)msvqs6xSl>SjAHmp;ooE%h!9*3iV#PT zSHP8oS|u=sGOPn?BJ?s(SseT3lwWykiwoac;YBZsnCr-5_KZVWk-#`G-G{4h$hqdy zl&$xB%ljXX0%k``Hj9RQG72~N00W7_^z>77cNcOv@n;*n;HfcfRknJ^TnN21`${wS z%+E*oufh5+{|)h#f4MZr`-LYju{`;R1c=KOTF-qKdtdl^l9Qk`ti%QtSW|*= za(2#puK#eK{{-X<$Q(c{K?!_fmC!VRUvTIstUzf2k>1cO7Y3|W(gh*<2 zQ3_{(1{RTEpJR1&6HLy zqyiEg0~$HXqHIcp(G0G+FXvNV$$8+WE>sd&Q7WoV1lt8`fP{0!cNfm9TI&9u4x}k- ze`J^!ydXiH)&3)7I_n6v7me?;xNe;$~CM*~j|!g+EK$ui@v_q^X{ z@5|mqa=cPmp(G`xT#9JKu%=`T@PR4M{r}ViPr|IYh8AN%Vbsn1~qxUUZn_91iT zW^TmbGo!4HiTxkTVjh=^Y&|*xnwudnm_4AFzR!bwN-Knk70~O$!X8im!7fZHlp`2+ zaBLY8Wz7jO&w5^&laCRGMVZMgn->9bHW+naRbp8P-@MK9>Cg9=yjx*BhHA(}Cb)rJ z5kw6Tg+bL|y04ovnLdd(1*ytYikdG6PUX%AUygfiEMtfh3X_N@Hy?@+t-V*?L; ztnkDT&6A2q#0mWif0;cm{~6qAP#aZBb)``e$|8&>mY{g=HsyhTo=5NP!HO!>6VtN= zlz3orgX-Xm2@XF**fPD{8AEl)(_fu%$x|X4CD@h;UA0A6ijd|?MWI@SUI*^jl5^eF zJ?{TZ2SuoyUS{3;nBlrGzS-7ptQ&D?V)tIZ)pOZLQ+&e;)ggj-hl&rW?#`;DWU^#Y z3oz+9`57gCsW3P1nQklh&%-_Ud$!!+Y2Dg`?R^+>G)}E@%5xGfJSSq^ zIQ08U8%HEcf_coGht(w|?jOwc{| zt?YaGZxNlAQyGI~RH)RH;n*=2vMBD_1>65>7TwW!8r|jrAs5}!3X`69|6Y}oH#m0Z zw!YqZPvo50-atc@ds}e(eQ@LLDR*AiqkVG^`X0AF=7dWsJmYy)PF^c?F~OE;U?vI` zuWU@DXm1qei<3jN&1wwJ=L4kIrcN~0yte)R}%{$CB=^x}jwHwl!4y(-K( zVHQ|W=pgh}Xaju*$CZW8UFvb;&Vqi31@psl_rd#3}Zs5kDT!%)*(oNQs zg|hQJFd4DsujbJ^d$6ft`aLWf<>JD320dGav2GHAZf^gVg|!zt)~*xwWr7z|$?A!z z_zyg&{Nq2&@wtC!F@1f9@iS|@>YYRUub-&#l5-+P>M$!XqmbcH!RlmT$WxT|5fzS# zg)I+yzW!~G46ChIQ5LbyiFv!M`kWEE0L-KepH||eH9|`X)lP&&E%;an&K^orgeKrc zId({R&emA>?CPk;z zs67#+T6nxdDBp*+tJ+u>(ytUlVsc2 zC%|EWLq{;t_~^(oB6;Y;jlb>xI20g_HSB%q-_bjJ6Y+$V_GvU6m9j8VvI-!(+QJ=w z-NxVAf}`q4Ia&1K3&Hz>*rY8sEKFV`Fq^^lK1n&orQm0C(#Zdn&^RJHc>pxcE{7sH_N!Sg{TFWg;j-`@#RdO5=!kANr91Np; z^`@ME_?I4OtmdK)O_f-YNYKdie{sR>>OulzSJ}NiW%%TTjYGn)Kus)u;=L81vu;~3 zQoJPu%!@GT1sB6P$3(pJd1V@>*Vxxlc3#%v*3Y)Mdbi*jj?JsB@1wC}D1z&DD)-F7 z8-A)reax}%u0GiumdYRlt0FZpAy{%Bqfm8-DD7`I*%-qZ0!|bzOKzUOJ!%!cMs8(St z5mv^^WCw0~PmBEOd05*(swK3Do@=pQJa9G9V3P!QrYh{o85+rX!OJULd}c(J!+SoS zap#>~R$o-(_~RUn#B=wzJzGCLM?URY{oFdQ`jINnJ2hs=>0$)kIZGAqdyfv(xsqI2 zDZ+T{nCdAvZArQEri|UU_SnA1LD?b0Vmgus`huoGMf62D-CG}$K-lVGIwgu6tItSS zb5g=d$3&dEI%55}Qj0ArKd&(FLWEvGRdHcxax~8^oso!%BG=MusBB$}n0opZl%<+@$+ov#?gA;*MHk{6MlE5|)b=qz z&2rw|=i--@`JvZT7_PwfRH-@3On>)#yG(tlWq#3IVa79jN{!dOsmzPdiAcn;TWuYM z6H{|sNGoY)9xs-J+Wr6{;&7BSSIuhEOjl z6>R-|3M}-6ZWr2p$6TJ%Y(jr$AEtT`$I#D^s$=4`m@`hRary;i&Ri=D#b%h#d+2FM zc@ZU6`^>zOD6Ebh)!g$Rm-qPC2Rfwt`mic8JE@y^sX$_Jy(&h7%Zb@aZr0 z_{@iUFkV82#kPeo`8hC|;Z&ZPK|j@jDCgXFuVwQF$DY))kP8c4Xr@AEI;VRFRIa?0 zHDCNGvgY0a%y=STkYFB)(T9LY41(}~)R3=#3Oir%L9)~8L>qESLqcUl7%dBHVr4A$ zT>ZtIsrODHYb$8IVv+PkeZDZxy>U>pc+FOs&M7<3JKs9YMP~|ooTKfP%v({mDxMEs zsoe6>Iq0X*jX3Y6HQw^-Do0h6-9QVo9ZGJ=*6;`kuo1=M*|Jml!gq3RyS&fd-6?78 zpoZm1&3e|JSZ32%F=uY{oHQP>rXjd8lq(KFiJY^_@j-nl?D!mW7|o}`_Jxc)A5?C; zu0v}UChu0doz#e?q|_%Oj(%CXiym? zRBm~2foN^Q`M)vF>IvAFL#r?B>%&5(bY~#FU08YPw;1`#JIT5OhWxVF*%Jx-u}K~u z$ae{^0~1YDt}y+aKcRifF}Mv%GNhCnj!I1!i7YmF`%Rvme>-FACPph^LJE!*h$XE3 zkT9l*!j6=Yn&(&l_Xy{m7_mjoYZV3L8;OMJp75EEEs)>bXLwDSU--o#-um1Uofvkg z(1*oJ?v~*s#0skg>LOfzxAK91>GQ#V>2U9LeHLQyD@rgD7KUWX#jh*#Ge1%0j1yx{ zSmmgVIOZzCd@RfgOnKOcG9|(^!lVdO3R9{~i_nS$m%vyJ&Ri#4@RSNqeMSXc5p(z5 zimZqr7SfrV-PdM({mPW99`Nj`2c0EyQ*TcghBa#9RNE(ZA455A2&ocF_*TQk0XjmvW zpj>r~mEq_lXL?e(FJZZ`U(%T8Wpwwn8TtnrevJbD`L^TD5p_#_1z9f(-HYMFqy?R)DUl zurC+dxlroDv8yA#c2h>y&XL5~^5c;RQKflb&Yf5E`T8w6Gbk%p#%wBsU~4}_z#(`i zR&-L}rDv9?o?YS2Yx<f z9=te$N`${{fhj4m>Wql8SQdkGw)I5njftiG6B*uqCA9Z0KIwqCbcErM6A1$y+~46= zp3d%P{{cLuOgyHPDp08jwGtc?E0G9SzOPGuV+%F}70X3NAQ}wzqOMd(#*;|VZ9R@Y zF5)--_b6^OVz;-bc_c!X2{lnxM(`IOYjMMSCVA?cM)-xF8^%?HZ6U&3RDSmu4Xy&# zILEi|SN`gs+kEa5ZD#jmu%T>H0|`atie4Ke;}NS)jVT+m2W+iK=7WTCLav?^u~Na2 z3j|~clPR`jK&{kIEJCWvSPXlnm9KuOhs1(L8eFp$uVL6hEh3%HxcBNV-@H0wyT%-| zR@hJxi{A*S*wW+N!&EMuu}V1W!V0(TP$oY+#Vxx%Lnl-?VZ_l5{SshSgjH2I{j4%K z-qfeR+arxa1rDxUl_giahV&Vik=@j!b6kTpYb--LRjkOjH;LWvRiQmbLcm@% z8v(T%Qf%vT%(0H&`9DK+Y7tX8B#~X8DU3Lwr0}O7ZE@3I@8h{|U&$}NZJ0R~=A~Ew z<;a2!KNblaoUm_J`I~?3@~MArGP5T~SI1UeMT>=5!3`bqv5cWAeGfw$OPsnEMx9cM zgqpx`F!qO0%FYT^)MG~l%L^+-LLFsPAc-7_gE$frr;J6=_R2qepu_x*9BIU1Q&RWP zK^80rf7Fq8J=?Bn^R+8;W|M@oHwhE5(820mhgek_qgi6+VoQgYl29~1DA9f6e9(3 zw#FU8R9b!BsO)(5>uRiCDa^Gz&5n{TD0wqSBU9)5Ipmq3EekS=KvWWvL`dom8Mdt$ zA~8n2<@%I8*Y}ZOXQ?>FD+_TF}u6Z^M7*3`R!5WFP>l0%%3duWI-3cULto80w{^<>#cSgd4-ZH;c9GSwnDDA%R zuJ<>&;(hbvWe4j@R%)jx_)wG|qEPh;^@;&xC<2>dDPjXN>W7>Kenul0605s964s!P z*dasCY>J^68HtcF7d(4n*VH3R6A`tATV8|SKcH?E@7F-Q6#s|c8v-R|&v!a}&JxCn)UDcs?biz~C#WcOGS8<}u?5#hG5z@s4DbFLbY_v*r5q3r zFOi77K3j7-d!P23aB7Ko9FjVeD^N|8a!Hw*6ZZbyG&0piR}Y7H$N-H?h)DZDGyNQ9 z`n==k#<<{=gu5~e^a+q7jG(Lm{@`C)-1*sAII04%Bk#cZ&#I7T&=D(nx;}<&``}Oh zY?d9LX)YP%Y2d&VpTPzymgo_tpREC;Bgv_$Y=Z9a%r1geK_HS5-TdUSSmpnufUhS z)nn&vJ##fTbMF4iEUgpjT(~}>ottwb5@Bx+=dX)ds0epo-h}aT7>|OP479^J%d5F> zf$ngP6(>b_5&9W;FXWLG%*b0KByC4&$Jgw>BLIs-wjZK7yhIY9dCo7gaMHOX$0<=m zDA#R^vw9W!PT2XeHu+_HVO0aE#=*@ST3c}KMRw?6YnRvm+%PY>u*98VVUdQ(7!5@s z{`g}}Zu!Uz98-gerlKQHU?!FTOt;enJD&mSi1M)=uKZG?cJ z1%gXZw+ekb5Rv$z7+jDx)|l{n{Lqmvkj4c>f>8IXAci6cI6xc)vJDW5{U7cP_dVn# z1@}g5PZSC-RH$7V3EEe7TrtO0ccpa45>~8E=qJhzTi_cXm?tZNL=jX4+MfHq-oc+% z;;c0>^Eu{W3p-O>bV9=2dvo^O);FoCgt0365xifCAX!fT0gro1m9bHwpIfqJmIuDj z%jq{aFg$q`w4Rtq{2;*`b|Q(^p242;ev$l)Ix;Lsti%aaD-b6cdv1sJKkT-JQ!5)w z*}UG{kr(Pt(2?$Ma?&LYe&%%z?hm-&oS-5Md1Z5y^JgFLaQ#OY;P{%kAbpXb7qRX7 zF8P@7)f;lY__s6M^2vGDKYfTd{qiucepL;>A!5rFZBuV_U`Hv!XCAQA7wP!}>Wl>Y zW08Xwe{Aam09?UXU&EK;xE$|JMal5opAS#MYmo82X-jzTRZzSvAgG z0W<1wBJ>1OCtPr9iEFO!(w@#trA)&(xj?XLjt=4kcFxf*ml!&;ghOceK{G{ibBkx~ z29+sDc7JuSGfxN{Rw8lEF@O61V*Y{)VWZ+ILY&yfnYFsm>kE_rFpu6hZ@F3JB&Zq$ z1S}jk-X?fwkC9C!e*2flNfWEt5UJTNUWC;VeC8{CzWn#|a9q`l-5h&JE>O0A@Az7e zJy*Bs?DbsuyQ}#5H`f_m5i!#d&RFfZ>b4%;U76ME(mSZlHTwIC|B z$t~u0Q7!W@l_RqmdT$4IWUwcNT|FyZ)XuE$Ng-VVK@1WCg+yDX&J@>3(N+dN11E1O zZ+vTmi%)c{UE_G}g%x&Z5j$?p>CX0P@9m>;WKmZQ%%!l$8Zpdz?zpnW^vaQ_z1Km6G&tVx0dDOwUFlPXjIGNRn`%HLnf4?jI& zGKamX<#m-Kxb(7=Y(9r_xVKP!mNPUVs7is57m+pmSoEPl6j7K@dCBo5{{8nR_=y+S z`SBMwc;>TfoOD5ri46%Wha9!8XL80P)xyvy9%(^OBaV=L;0N9n(sT^52c=m!*UO;c zc;3ruWQo4*WH^)IelH~)G8Q!-@GXu|Dlv2f|L3#u!yLi0=cK3PUt{yd~ zi>oIeNR>A{Kjt+*F$_D@Y!(SACxenq%tg$qgxNb5_{aB6<4~$$8FDPb?o@cetLjW_ zOl;H1QkVw~#G*Ec5=F>p4gamZ%-rcImzAhws~w{nHX=z@ ztYc=w^I#)H6^NYTVyIUvXJ_*I47qUzM$6`L2}mXdQD_LzIbe5>4NtA|BQL44GgrDn zz+^z2E5ics{kwUZJ2TsBB=ZHEx5oH@-LpMPb3K0QcUExrDP?wB@kM-C&mQ;TU;f_= zht4il)IH(=7OcgGTDbmOjjP znZK+_R~_Y&Lqb)Sqzp2qq^sA`KKd1Q-xCCfjY#H4pGIf%@x&{XNFqcWNdj>N<})Gt z@1~Vcua)hFG>6=yK1dIr+CFBjK17Z;{p1RA5$3(wx1y#VZHSc5exu7xmo31W!0}O= zzYfNwrXr_AgJ zql*HW15y-7O>PL{JY*R|UC%St$N1b+Ri&<$uCmez6DY$XxJ;pwp@m1Pcz-@XIE!xL z0-2YXixFtBnere3eb{kp#L@4=zy8fE{jM@p7IJUJD{fDP7d$`V;@6GBgS|lT-rl-A1iOios38kV+$$Ro%22)Mj|GkhRh2$vOB}E?#=@!~k zv?(tLB>eA#>Xr(ujM;f(lYjcBIjUmI(-qsYdVB78>zf*!dVU!m>{)g-8f+9yXHEo{ zD^iZZEC2n$Id(5ttTGN#em;ZOys?4Hyk#Hc`2f=i1DM1xQh})!^Iz=HiXB6V5=FMY zo+{Ar^fz8eI(}9$m;=NzcpN@BEJTtIZDe813Aphf;v*%hDAiinMfn>|m~F#wIpk&q z-C071Rc%I^o>D#HIWMpBpofr(NTy0jl{8iU`LFlkXEP*r=xk~)hz1Y~g>5~a`uYjp z^o%O^138v)i#RqU!iO*Ga^-ucVSSOj7~apaNu}U~p_EQBL4(Lkp<-bYM6HB_E8AX$ zYtAfDNz4)8L;6f{c|lWIrbu0oM3JN@E*A*a2ZAm7rxYS@N!8PVrxiqAG>`CoLxuY; zTi~BRImei@nrB{>Zm#U^DR2APQN}iw(0!q*ei0w?IqdG^=W_gx%qX-QR74vOUWjNxNK=Xtx3UOGiRKlR5C;=COr3sni>r4xgP7E zUuVN;#Dcd8P$2WR&D-C9yvgn_Hz}Vr!o+z)Oq^54^*!wA2czA?RG+mcmw5Z@8f*>a zN(q|FngqUdN5)tFauUX(fvSZekGz;n!gv=k5?DH4Xd#OT8>El}R|1#k=*|>>LlbUq z^Q==7l7R{$_9%On03yO|^NQ|E(eE_TJKE^Z9;8_y8n;9=KD<){K|h4BgSuBpqe2=| z^vNS@Vy=7NUjF-AIja&ISHv;tg}5%f^M8#Jw^HbYPG%l&r9petaPY)(=v=_TcylAGm_PBy>7TaAsx?<2sza>?QV|xum63gJ zhwb0is0?u4FmVO<_m+Bc=8K0p?U;ngREe-9t}7Gax;uJ&`Q2OD^pk6N%bUlzXzo^08_w||E-ZxK4JL6}5XAL8xw!%(B#_LD|_wMw3;CFYE;qAm=3P^!>i$t;5 z(IpABh?E0Iketk?=)G;$G;_|_7;(uf>-^Ert>H(XR>wtF;Y356EeZ>;5TU1@qs9_m z|H>7dbiojDJz}iYC)wR)c3UqLCia#PS;mm8AeKS`Mg{Q{?Uki=7yZz%wM3M0@0DFf zpHk=8389rLPGBY%Hm-Cq7IF7i7L1AP%sKH@BmC%_YaBl=oH5}z@BA7MsAuY{)7*2f za>B(8hGR$(dR|%IfE&NnWqvMOEMzWXQhc#ZkwCjcHk%MXt;?$vNL7<2@pF!!Po zxJw*CM_5QC^gP4kj+eZ71hOvNFvr=i z8s(%7F?$xBL&A`UY6k!ENBijR>scB_9>jm4QWWmrJRAiV^ud^2v^~Oi`cTfT`0Z75 zoZ|cZ-LI|Yzdv;}-~7joy!VZ(xcKx6LzM_8j)btDOaKJu9Fc&-v2rNlypziO^0Ui) z?pH>+@_k3~rH>uWNB?dEfARCc{V z>IvH4ndFw+`;}@(`_Js{cGqY_}2@%6Ec7-(AGRyoH=$9ZVgNuZy1TyBx zM~3KBPa!D>N6#UHVoVMUgYJ_@b;BcpUvm!qkp`M5npqiO`H4doyLU6vM8J z;ZrO8&}&E76Z+1%7~-oJzbPgPaXl=Ya}EII@G*+VJ{PNrG{Y8YZ)O=2#n}45R5ehHU|ZVt+VsBNVJ>sHim9s_K~xqPD$yT4hqSbQ zIm#UZczC=&fV%a_B4`oBb~yqN7qjp5Um-o|C}d2KDrg02!%!PmW-jaFzq$j~G@w!m zgBCywl`WLd^p*zEy`xQkyvn*`A{KC5dt1ua{?9I+{*LuL=b|#ZQt*)>TAstIvg7NQ z&9dd+r+Lo**~~LeikZ$#P4iyZT!D}OSCcE=zYjK+m)6XCQ+F08(0Vjr02e9?ww9$J z5Et5eQnQ>$2_YATjETVRzhsvZ`o8=NXTZ5}XNQY>T$ zJwOoZCAeT?i66dXh?hQZm=$YET>XuC@><~t8HjHX)GP^kUmDI4QffRf64AP&%kGZj z=@*n~Wo8p}GdOX*PaWU+ z_XYM{-9pA=Qvqd>MFjh=u#YTNMVc*qHz7W!PNf08wnYLY6MRSL?^Gtb_n@Oc`&Q1cj+6tx#|#ws1J zbTOn*@0aLK0B2kp+lMQFd6tS1wnrC8E;tuirAV>!IZEnbF89oP;n>wNKmO7NE3z!m zb!cCaO+BbC!bAJDn80aUMBMb>Gko$ZT~<_t2y@-HbGZ1&CurY4%RRUBsYRA6=e^>+ z5(6^;V?dn0UUVRVKdnX2t%JLgG;OFZpYS90-Rtmm}1uB3DA4D+9!LU;FA_p&igT_Mb8 zigQcu)RBtt^=n(q-Oz+_tH@DyLZmQJfd}`&NB`hKTc=(PUZ}zM7n01eRQ%2d=~5t` z>LOve$m4IB=O!e9UX1`>p(w_U8y7d`_qspC~m z;$Q_L>^@taC}Q?|1YCMwpPik4*heH#nidon^2!F?#zkKiHSXMM4y}mz*8khfS8h$I zRm`c-&V-ZKIgUDWjBDP%9S4+fR?s5!V;(qq9L{>_IJ6Y15y$-GFhBeoqrCP1tm0)q zJpl`u5vVWPP;@%9t5ShhhxCpf-P{qC1PL3XN}|X_m1aIcxiKDYJTmYYiDWqp5DL&t zHj>w>wpJl_XcBgo1+uLQlig5-F>n&^je`YE#<(~zopIVrhB@}cgi0GOe97DB6bF>OBT?nL&&|R524u?3UuoiFWqloz7QFxWcF;}*Mw6wuK_1+Z zh08bhA>S$(m6{Le@5OhE;`@8%cVD}vz@D7OyV;fwys#c)EFP)P-^v#Fz^jVQr zXlq17b1wgr9b9)~k4+UA@sN7Q^WU+W+qR{A=i41NOUN|93hd#8UBHW9ITCg|_MG^_ z22O>3*YnC3R9JsT6{b^ba2_N|A<1%&#)8tv-#w3SLpf2B5G(SLz*s`I<|KNf7cPz8 z5rBgv5`yUVl!iueD^EnLR`~)v&Z#9e=0bjF$2?A@D0pB(x<+BVsc}2)3USr3>C7r~ zbI?WDJ1-<<2eWPJ8zas*tIXCsAdi~rF`mG-J9^xC^%Sft!+6AZKE0Pe|9^9Q{2Oil z`mc7g>(&LUK9~li&$BR5L7Mmwv+>>#XOKv=K&%kq=x2=ea(?@l*HHp+4(Alr9Q8^h z&N%*}^f6-4$n1q&Z5wJ#1GC?}4}@Y41`R}Ec1sWjg>Wc#>cvt@_T1fsilF_%UJAy# z=BUp?E|wvtsv?E=tB@?Ysb!jZbY()`Px;*MY~!+9QpRdlaq;OVB%FFqh0pxyHaw21 zSl>j=CY%FSZ76Z{aSA(HWF4WKfUi1s=boot(y(mqLUQ;lsM{gM#|ct)aQ_VHUO~!A zQVPrFWAGKBKRU`n=?q*{tPnl?aPUMDCc4Wg&C!#fYH@Li1SgP`J^j9t-8^F=rIaiY zh9|JnfDr=B^%y^~#>zE9)`!?D<+3t;;{xpMaQyREFcDb+YY{=j;XO=<^4ZJh0{f2a z7;@bH`AIJS{cUWyat@BEhkzh~xChjZLIuFiiE6Nwu*NMCGnT4xZ;O|`aDwwTCUn$v z^E@E$Vuw^wacJe0Y2K=A5Fy^`fhTI{$hwxCQE2!-ubER`HpVh@w; zjL%=!vSr8p@S;MM&6jK&>yP!@o)^Yp(MAc9z2{-5gp%{6f85Ju_hsBOne&OOyWD?c z%Dx9WeEIesmEc9r#j+rJ-ZmCG_WV(Jpvm5QI+S9ggSn35q%+D?)+M(4sD$yhPA=ks z*6J|5Kze`Q#;&kST+lSC%0lgQGB+G1>+r+D6NwsT`DC14X%s05>eLF0l!Ukf{YlV0 zZK#H*w#Q~Da3WK}!?}f&%@@_k+BSA^34B?Yyml5!G0(ktly)$AL@i3(P-Uj8-2c^` zu%;F)J!gd+CL&lJ!RkujoPi}Ta?yYszR-=ac+Db06~^w8POr{WYPEU&YbWp_3qV63 zBm@bIB6sRdLS|~XSW>LsRs^M3$YLw`=};=p($1@*R3jn5syO-_vOGhB3t2U6_W(q( zFuSkM1Gl%rLaBn%EfH~%85C3sOVW{Wu3%O^G}4EC9LB3Ox3>8B+wbCE|MvrY<^S7C zD|S$g`1Y4)alzSO!z6eQEiasW(I{lfj+;6pp@>Y|L!;(6?Yt_?1s8QeAiCr&lv)+M z(!Xnge(E8zIGebjt|l?vq=8h%LO%~b96XT}uKjLJ>nVQ zUJMw|iu5xmIgUN4%tF_enWvtwIONY5>Z~k^; z*#QC6x>OFn+co8yL@+^J*p49AssE`@~@fRfsp`U><2!TC^d7v<$ba5vx>ywAk7}izM zx(geS=CCs2zN=6kOA%Lnb<(OY`#=a968VBd#bz=f&LGkkzvqP`A$%@Ityv$( zAYz^@wf;Eg0Yj+F7>p|hBd(gTvRaKej5=-)iW zj!DQx=%}zeRW=+|B59P&uk3?!Aq(S8$k{8!u%}6X5`5wM4r41SNIb;6Znl0M0VqOg z-v#?Sw|`KgIHnt~fSTfCqk4^%DDjXeeox<`LPe>d!0l8*AWlOr?0m+?vqtE7rI&kh zuQ*Y5T{8nw#&Ks4;R&UIU4&C5L1{K~ZoR8z3o{BL$wL-n9=Kx`^p@NQgRww@0c`OB zLGl4(op7Jef!wmkX1YB8xGE*Fq)Q*%vZ%Rzb2Vuai+QXH6Z2R9>Td45r$co11n$@o z+~yjxx{RzyaBE7)raJEA5#)?9+!&txco(}K&+g-f+^|x~Ni*M$)-n)l8wsdg7 z%ETdfcHcT{d)WJcXugmReo3{;b6e@D)^80N27)mS@g6DEp5nS-&!`mNqfq@tpb~TI zx7#$ZWX33X<#K1z^OVhH=(gE&SBJiXZl=ujg`tu#a#9UisX1=)Feh1PE1A_gnD5Y^ z%n-!t_7&Kcd$dv|&4-pw9%gu0b?ea*N;EuyFE?zw+shCK^()0V{T8M?wu{GxZ(rZ7w%*T zWl6((3UQ!?t0+v)A_5Wa9b~mZ;(2ex-1iI(l`OCqRI}Who7P@o->njnLsV$BbFTi{ z3~a8UeM1VLTehXD8S-R`&pg`C@Ttc~4kpUTIm67KG{hafh(G^}2RQ$dTX^M<-NB#y z+ise>~C?6?bwA{3`YmOT?N79h3Z)_pMcPf3in^JhrZY@ zTi%-uhS+wCYmRBaXw1ybbBIkCntM79Hk?z1UOLd0f$`Q**st9~_hz>3ohyoM1g2UQ z7+ym(vcdXsnBifGgg_{dL@a*fXsEA%#3I9}JvoX%JD_{ImKraG&KwZ25dRM7rX&qV zV_ib8YtM)hq2J8uZ<%Ms+8XOd919vYy9x7G^U8Pb?U_1|NZ|MyGJ3+Nx-QmAOiLI^w7 zVh#oE1?jdbM$Q~V&KTxv+jIWU@7&Lcuf2oo<{eZDDO!AnhWap2#k>&usX^WGVGcC( zdyzp%xW|WQ4qTU6U9txsXfnC0Pm-`mY>~GNhp}~KDiamv?_MD92SSU5W?$H_CWdYn z#&mEVLVM!a&hPHpYh4jmFlH5(ARRi2R(52J_eUg>0t#YTegL$zK~^8L5}ayWR3fYF z-tU4=wjc?GlnYGrEKP#ia@E>~292`NOFgO($F{j9Gi^rB9ifCL^ij-0_h6LSWHs* zy}`NdnT{aGj&Xv$M?;#d+PmlZVYEl8bie&|01twOEL`sR-GeK&xYG7Y0Q=OLKr%Xypu_RJGhjXI_qa)iHn5JoLJ3K5K-IbCxrt zW*u0~En(`WS#vKJ9J44mzyPOOlmr10gfQX7`GT9;IVr?dKw^AY>!KcVA|Mw4&bO~4yL$$|t!WcKR21PZ2Be^r0Yf^(q8_47Wx+8~ z7Bdx!b{1}K2n*WmdfOhNu(L4s?2B>H5KS!XuP`o!g7 zdl(I@IHm!67x43`%~=lJo{+3})W^hXj1@>wsBzwiSH&_kv}@~IoD|+WOUd!h6PJ&S zU2@PwlGLim$Vq4gvq?g(Q{+AU9I{!g2!j*_$_nGThBNV(4gXVQQ?c@f!9!}sFdA>vyQOQBNu94!pq z@IO8`ojo99tJOzUt*uyEiD1hE3@t+`(a6-Wz89*o@Yla}9H08vGdOo$gxoTT-_jz= z`$!3>1f5%o_J>a&2pw-FRekUR`3$nu`b$CR#XW`dAqAg>0vm&b6bQ%j^Vg3Q8y114QNyu%BtdFV@-p54sH4nkX!vzOTBq}9*Wi^zdpqpdzC9y~Qd9{g* zf?jKP4RH2C1rkO_Bbq%!F{es~(AwF8(J~XGW#+5~YLLoGrKIfI+M+X`A*CV>Ja8t} zCB3^K7SEE(q^2gZh<}!pxX9TG#4MzT7VY*h;<)VYHfc};1jXlO1RE-c9dL`@ng&Xi z3;j%a^*O_Qi4)H-y`eLbb(f%ba zTu2A;8pgNik2i@DVn$L-m=FCc#-)%hq2G&w&Rg$H*k#bD(7U6}Ovh6W{gz-~wLPrf zRD)i|j;(#u8Z%FpE817et4h#GZMwYSiV)N?a;yH>>Y;5DPfD1(C^#r$M^;%!oRkpE z1%0^SpozriLf@BhWtNOa8L$o7YMiIgiLJMGb0Ox{RwGs#ZqZc038c`T=@4zIGBlRZ z$!vSK0`Y4R?B3FX)MC+6R8xG&cr8=EeE2LlHA@7c1u+Eu+Gc0jy}80@!sY+HkKMB= zE)NtC_F9y%ds7ykm3t3ZG+LaHi>IC2SiR}|A^!1?j_2n8K9kRX{4{>#)vGyEmC|hs z_*>@C$tIF{T)C(kZ(B~|O!ZSAoC6Y&T|*l~AI*tU`PFUtdSUZ*Mh)8 z{|g2*=#eZ5?N*z6rZcLG(#)7c3alD7d!o6uXKFI0j%x<-XkzgfLK}izW@kcrbH9)8 zn4?CbFeeVYSS+QT*2(iFTsmB2a?nJQ=bm10Wl0`7t!7|qjtzu{HQ9^YX_;=T3RS_? zB3mFBxKV2%qch*7wkkm?pg|`WKvIh~Z{5+eUU;!zv=G}yNQ=*3WJlrTB0&TWxj4cF zmIcmST#Fh(=Zcgg7P_8){?uNoNo0&TyeI)(Y3?xJnl|j2hL!WaSE)8R$ORFaB8DVTRI6HD>_x8T2N7&}60BsdUYPLQ(-P#Uq z4XRkCxO%emO!6SbL;EzWFUdUGwH!9%v7uk8L`g(9cZFWDXtxE{wm6-G|36+LI%pzM zjme~J3TbXEL~?WY_qi%M{zGvJ|nh>95`UD4-oP7Ldou2XNE+By!Hr*bhL zSqoccU`)i+*}40Al$^u+kh6z5Ek?@`3@2nW^R!h=)lx_5#U!l5Y!HgE33HE_ zZ10yM-sFqMXB2x%jhNU8kt$MwXr>FT3@Jw>5qLr>c_e5o)N*BEA+_jYmMyJQx0xSE z#V@#DFw%91aOx=?nPM$Is&(Z`;W5%naN) ziFSHW3VlMY?GlV%AJ&LyFp7&Y2neq}$h}x&0B6{p_4NbqTac;=LLRjQ=rCSebCuK$nxB>h?TI4(bSQkY+2)q!FJ!q)*r79q_& zv+ayt2C4TX0<&}G<?zzzn8QN#NR#3|k_K~14Rq;QW9 zZ5s6Ocpq*vX`>prvnoDU+{q(+?T!U5deNnP;%ie>%R)5@m*nR4G8@A7a$M}Xm?7#z zO8p{jtBsT7kZ0yG6N$*ZvXFWfQkW=3{MG+DnoB?PRL(iAio0O6C6=0Fm+YVMbmoht@lMh8C73lVq+pd^}dW;~X!JAX)r%oYDJ$X0eQ>nKXeHX?R zlMvdg1*a}Js%_)^P$&qakX&}1Dk0ue%!lH$6gj%V9rF=C^4cr;(Vw}V8@IL@sW|FI zF>3Xe^cb4vbC2d8F9p&X651o}oDZ+by&;JalhE@yEufit&OWBX_4S@QPc^t-wqCmNaC=w)E9(7-w zoI?f&O(b3w$-R{z)z}6!1A1X?cOvE*&a%LP3IrUO1T58H%cu8n*T3)L>i=&Gm;K_6 z%wD-0$`EC??A2VThD;ik7Q~Ua?HULY!Fxms9XB9|7M}$Is1cOmg;j6Qi%BTBao}u= z*9Vm#&%?cTt%yUq9*$}t=d9#Y|Fwq~yzp{<^w)3YsvBl$l!UR0!#ONhEAx02i=%|a zU0#FBTQS)j&gBnD*0ky*rt^Dp5tL$2z+5&FD%eYA3QgG=)9kcf= zBEA-qb%1#o^@iCASlP*-n-f)Hq8Qr+Xdwr3+t@V>n~G&a^d!VIM#|*vjG2GCo8ABK z9`<}@mt|-~gf@g5Dc)iCm!m!Y}ZWpufy_L?F?xTOtEV@cS`gEIFKxW(T zJ&S}S7HY8&4J(cmw|5TNF^5dH(cKGS9eqC(Ik3Xj1rb^L12*x6+9gZv6JJED!*35+ zi?6}p4y@jbEfh-4Am_9dENmL(W1rp5i(Ym$uYA+D`KQnApqzTftICRsqZ*sUbGTq< z6;1PnvS_ahi?uwCT!V{SoTX-nBX_o4bT@_H{*@Cr=kzLUorc(lHW$teOG%gDpwPws z1xa40#syt0HXsm(D9pEU{fyIp=_Fq9_h<3+e>#^HFW&@v<{&b)FvT|VLDjapR>-r= zY|^n987kTG?upn`t-{eVIMxyn-sd)dq3o(kh!vq|p5ax=(lj_A7+|=AFxa8T4+l*o z7M${EUTnal&{s4KMxS$NB6~1;_wz^3#lRY7+Y+mVS+?K(%gvXm=W^RhPdp8CcpHK@37(Y&++D8yMd2?VJAE0 zGRDf#CvZL&`bB@Z2}8g=5Mj{oL{ugSIQ7 z%&?>xI-l7V4O?b$?Tp5X5^i@3X1mr9EyRxx(mP0f@&VMg*owv6ic=2BLki2Ifw9MdoCxOH^gZtRC)FPcQRys+e|SJgi%Zg z1Bg?&r8TrAA29GkF$klZAm-K1Yax}w|8|6l6)Z5;_h{ykqe}QwRe48~MAdZqH1%Y`hAHy>tk{XEO_t*1gFtq8gdAbI3m2Tb zf|oseCG4IHc3{zmfi@OgTN#iRg$h|PgpeCXK-hL48W9&ge)vlM+`nw1x=Df2yS$}e! z^(T+O)PlJZgDz``5Rl%ni<5I@v@M4s~=qMDQCWTt+lC8?I@TN zDCRvA33a##8cJ?NEqRVhQ`}{3JbYs z@10Ym36!fst)k4Oo>x9=1w+RUL901nxTnE3N(})PQ|JTnm@Z@26jAEj3a6PdA5z4{ z+}5ZWjw%`A?XbS3#^HRC(w>H;u?2tdR(on8#fw8WjG?D*U~735|Mam3dB*d;!0-OW z4b)?y8bc&DCN7jVmEa6Ri%O9S-U5@AB&Kn~7|eHq>n<>aJP(PB;V8c6KJ=?tZypXG zKKr(9!Wl2!M6YKR-V+By33PY0z$;s?oaXYoJGd(BUVv?>^0oUjwqAMFZvJ2VefIf5%V?V*wFJ`j?GZAGLiP9g5L5pCfMoAV%W_>o{h zl03ebM3GQQcSE~tkMOo`TQadV+_Az~)z*|0>R6$6Y2e}!FrU(GdP*^tngYya$_eXB zls9c)*Qf5_{`*oI6%ZBb&eQ4Vbmo=jO;dE{l~UNbwd(~&9M5>!23udRLC0N8xma>} z4z|T~_d+!*q#m%i7Cf8_NC|?3x(FsY!ukkbTw8Et3GPh0w@4UNHA2$>r@waqVZ+e)>B0?d?%nA?(`P<@%rf z2D&@tq-SrU0hZSln1&PBn|bKxmK3W&l50@^iWHS{40UHpM;i1>Zz=vh&ycKb#`|H0 zW$M;rmnwO$gDmWTZa2gb6tZBGsNf=j(FXJaXZ14R6EE~(pxtL~cZaGoojwuhyt)vsQhRi zLPaojERTSdE4bnd_tKZ($?~?fg!f9WKG1t8gooK_ipQ%mK4hyq7FC&IN*5(a(ceJK zi{oI+riGSFI){}Xol&H6edz--`989%F4Ah=5|f-ksrOB|Ng0Oaovx9js87N zSX*P`IpY?ww?GH#ZSBcIKd7Gt)fcvs4~3WCempKDPkk(drF==T;yS*W=N9-^#&j8#KJx>iSyutUE96YdrRF>kg{^# zdBfn!G_TpkXW#S<{_$6C;?I8bPA>oR8)0P?GRMrFGt^6q^UuDHa>_{+HlDT$roxsF z#pF|b4@gWvh=Pk!Ae14PXp!^eLw&6rdO63ACH&-%ZDQSAAAkEUbfHa@gre0H@gTcT zd~O-hq2E@*C&L8^w#dMPbfHn9?LEz&$7g;q$IGjbhni)Y**+nrav9?n6^nGc;L4VQ z2nOa%ihhS1b%22UQj(+OIb_1qpSFrgFSc$DXo#|XDrN4DJ+?V)=3#Y(UN>joHIt+z z(A5cX)pP98rQo!(wLpSW6J>U{EyNm>!qyN|eI*OqmzP2l``9*kX=Y>5&xqUr(>vrg z$r2oZNC*wy-?97}b6&aTj7_}xE1@IgU2|KyHFevzsNV~Ea>22~^SnX@rf!-c@eoNw ztdiS|HgjL!&dlfUC2O~!7DJNr;4M=`8q!x3x;SQ4c>WuXh3TeA z00uaxFD8d2KYc!cJQ~We`k-nR4j6(e(CTv5s+@oNjZ^sI=Pu^|{?0jUiaO{W_uwDg zN7V0IJ>(cG$R~h?+E?B@Q^rIsAIyj^93s%qsYjlA$qe4e396o4J@}9)=`3pReNYj_ z93Be`oj{nOe-Qdy*c*fW591+4@}@VZiYPkMX5x$$9DDvKt*~q-SEx1|SAK3M{a)X; z7}vlIY6&u4w(>^vO-7Cx%oaLX(tg?5%%3SWs=1x-)boP(9S$VGY_Lfw)=1{ zXxH58WI3cM+Hc}QsUkS6H1cpnav)evG)krJNqUn=*0;!LH?{SfGfI{TtgplP2&5g` zTQCpB>NG=g+rpW8%NaNEM&i($>NY<~^#}Vx(G}MWCZ{ zgjZ$Vx+=f=)2DFVm9OV-{{DG9{~5#hdv>9B-G|@37t%gb^|-2sl1F1jB?sqG=Yzr8 zhbV_iSU0hKI~z}0MXX8`xey+(be23QSGi!ButoA@K=cQ0odR(Kb+m%?3)1i*#G&2@ zKVJ-4TE8O?`raK<^I?MgnOx(-k^> zWzG5qzx4X!xbpKaAIn)MG#F~7BoEFJ?P!ziXi@HFY~I-5 zZErl94}9oiKKa2HFw`h9*E6Ion(TvjOjS&tcq z#8gO+Qmw+hH%+s!t!=9EA~SNGmA)OKp+m^GHQ*$*z+teEw{;k?3d!UH$&UMlI2?cKh!<2de= zagt+JzkGO4%2#pkO|N3h^{?RW8(+gcSH7BWee%Wp+3!D%SG@2jX6G^{JHeBq#x#ne zcR7Oh9?ddTY){5C^^DXUm;U?Rq@8%Fv?~}Q2AW??EH$w-a7|zuqR>i-8jkaS_&BD! zCebqw^%(X}=iK|*+hC#*m`u2}Ai4;cZgRpY>lq!hjY$>Daq~EaopRq@yP@3)MV-TZ z6m3#Pdwp0tZWZmp@Ti?aw+HJxW#{$B#gxs!ZocfYfl(usFBbM zG@dKwdBWCx*a}2T{pc%9c9pHOIeX`G`nlpt5#>giN+YJyh>>zk&nx?8b9T=wnV1bC z1%j!P=Q&0a_8St}N>GJH*|BqP$`>!&idz>pD^fd*2NWGE)UKigQ(y)@bXo;=%y8l> zPGZf5gqg5=TbjdI9j^J<9rX64R@6Ex#wd(S@x9mN_#Zxwc4mbjis2Pe;?!}=6?>tP zEHR9%lrlT!IGTI&OF$cV(x-h(t}Aa9$$F0;H5 zKPN<9;OGc8Pe5xfs9mAhTW&cxWQxWyx@(I2?wBPhDIJ9@?BJVq;hfi>gp_h5GCw>!kR|J=fApzt@li#^{`=)H_j|RG|U&74j}`9 z;sv3vcx0|cRH<^&J5FZ0Z|>sED>1^pT^+7|&-LcgC+zqoCV7offh;sBt*GTv{U!=+Onnc>h_Z9-~ z9bPziA_;?BspQmq_oD5EkV1fYxaJgXhU-pT3H2f96b5)PnMNSm&tc^#JFeNv_WM&R ziIC+MAX9|7OgR51PK24Ztzpr?#TIh(fdzEyJmfk1zPXiazOsXfiqg*o5cc(j(e*XX zebYIxZN?_o7s0*2X$yn_Q|W>xXowsTp_g*hN#mUJjALnaY=V8T%ha1K1f z!Hy1NQxN##slju>P{~6|$b6UTNX$h)eI^TS6Vy3YL4RRKmpk8oJxGGzzJRPAhv^?IFDuwQA4+jsP4qk=WMDLf)MxZtp;*cAJ%#W=8$36m1Eb3bL^Zn>InGZDLk6 zcwB;BtR9IR%x7Hx*)5byVNY~tyG3p93Qv8?YHFvC!DQ2U0Zw|dx0|3gR>(WP3&A%(;^Z7AFfOXp(8p4p7g zU3wpt8Vpqop)+sWv|0I}AOUhidLItWZLEsle2@eh)G3o5997rgH|T=>*c&N#lo*{?mC?R!&Z{_|?4 z<2t9ka09ItR+^^^8`s9%cjX*&ckK;+`hk7~q(T=3iAfP3PB<2WbeI0yEnIu+9#$MR z#;F?{#7RW2>&ZfH5#AO~5%Q}D_~--TD1iMuG)JeSRZhQAnfekoK!tYq#U)P z%-p^O-uPpmIVRd|qO`W{?!%0y#7wb;qdo<&-RfiqUansH=)CU{^%in#_GfE-53WZU;~ z*OfEWlfab&Ep6+-g|9n~()t+g-_7}NIF)lZCD2uReI@bA8~*S@CSGw4_x|A*_`*l- zBd!VkmM85fTQgwuh;b$jDdOG^OK{ACt)z>eA$%89l^iNDvT1^^UcQSrzUmXa;8p*| zm%nfi!xiDgiG=laVYCF5I3ib*2p)%bN~)gJ34O8ReOY8%ROAA=IEZ61u^o)#lI<3T zvxk@~7m`NIML%;s%s3#6p7fQL8)>d!_1x zjpH%vS0uQ8kH2`|Ej;hJALiG7;WDP;8nSkLsj!7&>WV!q^oQWh$`|L#K9-mOSe176 z&MP0WMIqWSTx`X~~56eOwFxb7>gp#MIc;w^_xT+;@vL}Q2c3`-f*(?1v)$}eTZ!MwU zVTMDbZV@7;#)X^x_2|TAO9OF{vACoJ>td@A;78&1`=L1xl^QtPS1?e6O>n(L>(;%j zx?mIIM_1_Qwq><=rI!iEoVbcxF1?TKH$TV)uRD*Z3Rw_03mI%!8L{T<&D{9D>)CVt zcHGHpX;%~O{L34eyzG8h)v(E;(2WaL9Q3b66_7>5DzbGgQIW7RQJ_{sRyNo-mvi^+ z(_H$6J9*FF-pKp^?RKucbt~JpEU;}?mv%W})krxkM-7?0!2>2()pbD`AC6c#o>8dqX-UfTR>7vgwnn~pZ}%H$VRIHABswmfmji7&KzOCZwcA(va z)+}ye4?}JXB{?$Dc7SMnWIsf*sIWd3uz`=u6*}D&q@zb0VMLK3QXV6#%D6E>QwNg@ z_ud87nhl&-G+QM2ej^9%Hd8ZwPI&2NvcL$P2>lGI4JF=i6!*R7i*W3E&Nz31W^UXI zgqfaj((yGa$FJnJ_k4*xU)agsFWyb_hTSk;x5*~Zg$@t~vXm7Zz%qz~&%Ou}iVPV0 z-i-1j#*Nouw2q9{=qucN*EHYw(ssW1`Mde#N3Q0C<3~CDj5REDG`O8j&GKH!bI*9g z@zIap&M*DM$9Vq-Zs+|UyoUey#NFI_*Bp$EAmgKGEiq3}F-}E!QfwNmuyjEv!HZP% zZSkT!be_;Rpq7wLHre{QJJ|ZE@6f&VHqQOv+qmSCquAE6@i88vIFL8GlOzkr`z6 zg>#OB@;G!l1FC^#+u|+6E31c?{=&W7`>iP|rD7)~YxQ(fc-AFr*!1R$xcc`$$F@mf zJPOH;fjQmR6fSt}ah&y6KL+!&_?ZrjRtz~^;kzxO7lEVtCFCvsSBxvGIP+RkG{g+< zpa}xt(;Uq#1;dxhFgA`HKS6xbI_Os^g<8j|-rT|=5Sile4jN_Q^B=o`yY6ptcdNo& zeFAsldSt^&d?m5HIgIrqgi6xFlB!BkyaF3n3T_>K*YLjv0uM;964tm3SBPQ{?Rn1s zz}tD*D~?`Fa&VZPk^@6kn7?&_yFd69&ibVnP(LcMS|6AV2{2ZJdv9uS)8AYNYlm%I zMV6{x7wzozp)v&L9fMQ^X({aP!))8Ur2Rhhx{%ION;=TqX7|AW;U7NOKamjT;V~Vd z!@$_Y0&f1^u(qTR{SLHS@L(U^>utlI&2>2acxWzIUR1G~FAwn(kF9YYc3l4_SJUm< z+G-ydQO^nY_2I(beLhLO%KzWqn@8JqUv-|J{X6H}@!dBMdK#?3LuAJ|iDJi&9S6sm z3MUN-#6VT8q=2TXSOtq!wOG|%&{YAt=^DCMLs8W%nueyJsZb$60||sojvbshvEz6i zWXZBM>*>w!&i4$zU;nXx=f10FNpWmNmYlcOy3)Jnp5b@S+27wDe|!J+zxo>_)3lJ- zsT;Ou;8@S`!~ghN-u}BkraEn293oBpn$SEQUX5Ih>UyI$*X3R6nNWjg0{v*W;>FL3 z7C$??^_S<+s*OnoafhLT(8`1k&_-xF=wiu2tGxh&fJR4Pd@E83aG7AcRt;+hgaKj# zT&St*dM$5|7!b)DbmsPk&)dST7Xr+UcIR|ifK?Z(vlh2jCtEqfJO1|{;iDhf#atV@ zzU`f=)&4pGeD(jhhiGP&H+}TYG+G{nqMd^ak-o-zK7KzLnW8F>N!fw&QZ|9LI_$j? z*;!WMyk<20sN2IN4Z^fZVB1KiMXhkO&u9Gy{9Pu4f1UZ~RgoWW(0!h$bqZ-LB3Z02 zq}zd&4jj{#W())Gd?Qp#xNZx+*HV} z|NeGP{=vQ6`@jiCN}gqms!53zPW0e|e}5P6`~45A?z`6ZOr0}}zOY=a>R;daG;Rje z0+;n8=jt-HIPt6M@(1YfOqoAbe?(xhJ}%?ufqu|1%b*ZA9^GH($jLQrua|d%^6p`e zNSvtj$n$^u5}_aC8H}!brnEjmGY4_rq9LzZV?>SQwH9~$_D}I+KlKKlZbH}T^{pR5 ziq;5w;`a}5 z-};F#&n;`T;fCvwy`#Ec-Do|oMic3EkuSpOM0z~Nat3!z9Tx5v22=A zHm3;db4ahLdZk5Y@r4H2QLF8l%OG#N4mUgkoi+bLbx1nr`IL#FDoDuvKlf!iE0#2L z^w60yi-l4tfSEDkXHRj@zqprr4CTOK#WS{bbTh|+rsFN|oZ_GS*^e-^djd`@t{0f@ zPuBik@|id%(OJL$#d!N(JX3lgX;5$@;JglAF7k!1FRD4@gg8lwQ%i~^&Qztj_u(Vj zNmyG(c~6i}q3I(gABFYaIF)D!15#(e{y5{i-#4eg!BT@_3Lp8@kMO2hDK|ref}4}Mpo}Ywd}8}BkoT!;`yOE z3~%3y8`1O~H=k;3q}_z1i%Gf=w=vyCDwT$J!{;YF-{->71p>)SsVt`{b`RrLmyy(` z6(l{VH{f_1w<_8PaeEcswh!0n;4&Zhat>@BsdnlkA0MT;|1^L5Ki*FwLRi%FFk`@V zQ)u-tJEmv>pfz90|MfTd!hd)iR}hMM6?*krg22HROx!TSFa71+%-(r5>_4e$OP{y= z4BTgYuRplHcw2u7ewSRw*USU|yZ=+1_@WFzt;Q2yI!Hav*f}OlRs*JoLWZjaW+zLy zdWX;dw`Y*ap>>IX2d;SLc6vYkvB@Af{Wu4iB)^xly=mv**gWNlQ9kyWySehVX%011 zFyfcnW@3mf43`{hiwS>m_b2E)Ux(T_E04`FRMa|HnFX6TT;%w>|NIQ~FYSk!iS_Zg zL7T-JmyHJOyB@iwf{8#n0>^u>+CbtCCb49lI?`Psh?gm62R7cpdFa9cC73vi3pnSO z?}T!G$;o92QmoPHmT}|TRb9xdjJXI`EMsQ1P=YIuA}5=e#bu;eRPk?Euk>M5kCu@N zy~j_m^!PI7+G*BCiZsNr|9|-gofn%hF$^O$+V?)o$>K0OZk=Yv`8r$z#)%e6NT5)5 z?ECMoWTodgeeZsx5Fv#~)q?)bxW3^ls6-N-WK_Xw+kpR!nQ5%WwQ&kMZQACo$v0s!EAxWS29)56C*NUghJIeBXRF$j9y( z#SEOwI^Sb5gTtqo`0)4fkACL|7~WOpXj>@Y5NrB#MCu$9C1K@clfU}0Pf&lh346AJ z5$X>g$KG}&rENv1fUO9R{o!E_{F^VrmNCurHQF*m-=zmU4p!%2+Yb1_w;{7yyv!ZX zVE-yCHy}-MaR<6}Wc5WRqx}?_^Y`{j>6LIc$kkVDKP%+Uy73&e@zVLR*3>xFxtY%H z_d#uo>Q{vV3=hNh8RXUq!8ReAbGUCTWB%f^>NP4|Xy@ogXa-T?`1{IF78Q z#E0gQEyK7V(Al;X!|@fi{mOgz;h%dWYl$XE3POMu@Q$5j#K6vyaL*sUz~_JYvzmlC zJC4nn+vYZfzo~u<%>V8si0%{knLRg_SwFz{i0?PdSzgi1R_kl+h6d6A${{j2qFDyU z+aN9nf**%yb5)g1&I2P{{~He~yfn)h)cS2EgryZ|^myMd-pU$vdlb!`d3Mlc&9!-6vvt%&i$A*A5<%g;2(Bo=)E z0ob_)S(3tdZ9TFt4x#|6B^sZ8isQD-w%fN*5Y43RPpTp$2&*aFa^o0#e&9L|Ja~%k zb0?5$5s5tDa_Xy6ems5Ps?H~lJ~OJVJ}_R%Z$;FbR4pSDLzszS%xD!eTqYbZ!mzIC zhJo2XXZ8W+*IC|QbN%E4Dq3C)Zt%KB<5h=GF?01KKl#UZbJK@+^FrIwN`=q|SH(9` z7Ax$m!NT)R{^ZC1nD!HkuzMT9hi=By1b65()QVso>49Zh-#kh8xn-Cgg;GJsvtHiP z+fV*^EH1*E_QBt~7Mb)evjY~MU4}+oJzkwUbk;ESlMDwhP;rB*mS0Qsis?H$`kWwP z;2EFqb1uq%D-;7-jesz|PaGPE z3yE1bTsaHhPf5k{*EgcDQUrNBkENW2N{N?o?~{p$n77wmW4u*`7a*8 zbz>MRp9zjZVBni@w0g*L2e;BfTuM+BTo@q6^jA)bFUp4au69sI;^-brb9mBX2cK@n6K1yXM7ht3ewd#6? zMeeLPLlrd8Y-%df$KHkPiPXb52RyL`^DEG6dyuR`dyQb_08`Zi7~Aysv`!m&F~94V zM=yWx^Md5nk`dA6yv1Q!tujPoP$;V5hWN;9fEz9#!yv^FR~(0DUeN5^Lgc+M49w#B zL$_Yn_u|~UN6EB_5T&xF!uL`-pMQwshhf`$_b^_Ao{u5oC5m&7)l7(u;hlGGWzU^& z;PB(~bRIbb)glyqpL+GS>Pkoxz|keD+iPsSWh<4dM#xBsk1fH`)3Cat-kVMrT5U}O z@5VkE(fhEoR0~=45?#gF^Xs^~9q6{9-h{;^m|xTM41r**M0v*u%CX>vsL)!-<;yFf8vkH zUaZ4)R}%f|U6}17*i(>Y0>|2Lcups(d=kT7Q~bNgRnPq0B`K_~!4JO|xork139bb^ z-GxI-&}~7t37r=7>PUT&S};e=JbR{8KM$Ra_0J8Wmu@*5ozo_{kdy>t9Bb|)o4FYo zp21bd)ix>DU}6gPj$y7ZBF2)P7P#jbtCrC6z(PTu{V2xmk70hsj^3~&vUp3C`beXY{h>`I!wOWPIi3-J6`Y8AO^8MJNXHbmJ=8aWYUZS*jmiPawJGt%s+vo;{6J5x}5&6j>^^;IyVXO!> zaeVr>9_7hj{SvO1;y!Q-^08Yej8%{oa3Q$B694+WaPX)~+uU{NymZB0I7n17ZnL*JrokF3A{mq~*xvXRcs z@MqimqJTsI$7*^Fi{ULW^9EdH0t!P=D8cXqOpU`^M=-k$uH|rt9enBwn4>S?YLg(o zTb7{e!+?#NFGtnyPS>wovkm!|??)D#mfY;c*x$YfzVaa9?p<8}pYGy@56qA>Gq6HI zjMkOSoA8Ju3WcpD!5r=Kr~m08p7?_YK~jRPvt%y9EX;A&!#~SZwLqN0Sji9>hyqJ7 zGL*zIicodBuEHR6MTl`e7^(?|ffz$Vin}6(T#v^z!7Getpm-Db-#cAfWgB?S# zbhOQ%{n9<0{>0ZXBa_I_ybt@q@53~Oz^i342FVk1WWV}XFk16f7(E~mRsC`aBF4X; z6t}hlGqdoMKR|Fzk+25oyd%4}4lkUBRs)hY(pyDZ%h;t8RJ)HdTY7LKLtPL$H`Biq zDBo3eYmkazi&nEl8caf=qO)FxSJDGD;>QY5^TCgyEx3b+kah#+3yL9f^KM+-U>|#m)At;vIX=nuePdKZAxV81An!9Ws2#D|gQym8 z(+}+8iXVD2ON*A(Z|;YB3s)?1)kklnS_{Zj0|T^}bvIQ9+fpLTrNTn&m`{b36qaH~ zI~C$o=ww1CgN4L#Ix{S0j?;-_E^*8y!dxOO#juzNtpvK6ucYXpXB}M(lSP$SBLfrvV4T;+H-{N;${0Py@ntWml8w~?Pdj68dE8f`HG5R zLHip@0kb7Sstz|)1TzlLKCLTJgGl2n;`6DT*Llg`jW75dXAl^IJFd~nf1%MXq{RU9 zj$KHvhr{bvd}ue@Zra0%!)vr3 zdz#kJ5Ib+*Nulg0A*88}C$Nsd=prze2N?r(FJz(}a})1fOP%U`Re(V#~gd-^oAtx3{zJ)+vsgfa4wLi58dBl`1NcQ-r|5 zwh9z8`1HShn0x>EUtv$IA$Qz_`PU!D%#Om64}uyYC_xrM`s?@No;eH?qw8vLK0&FM z!cSbj>zT`-*@k!BhTL%l;fO=3kUs0+TPv`-q^a<62kAAC?kaBOI5l^Ok;03bru1E= z9M}10BTz0HNB|0j9^GV!B&|YaOhs{;s_)(ibOcu^!gQ$Z3&uyFTZCtxg)me*1|NeM zSi{{nRGsz3rdM#qBHXwIX{erTV&B2_j_sJ@Fz#rb&esp{{NEg-yJM1F*A5W{qMai| z7kF7whkz4kW{zeGyRI7M9e2MGuGz`6zxNrQ`MqZ`VyM(c7~584C{&50%&e6{obk;u zy%exMW&CbTdj~;{|#QdZ8z)#lc7(`%_v>oCRBpVKE-FZ{2~pUg-7MlNV@Mci(;Iw7ZjwMZK*lS` zILI(Cvjr9{96JJqg740h--uttX=$AL|o8&DYx{1nkg-8GF1s?t{ z_j2URhiOouT8r2_RzxaVSTD=Oml;9}U5luCXCXtkTNEJqZ;^#sAWW2n=@N{GFqFZI zCwhGGUw@Xb{l_nmwF>;hUwIqv`q&!?L&Hi>9ed()F7r4_8VC`>R0XyKj`ooTfAkBV z<$?eCOW5a6A~$^>^7D7W?bji7he=g`bWWfuI8xkyychStv$}993KW5P)7G4vf?h?t zgJu&MA47iT-I$#P%mif12K&`Eyg09g3X`6$73tIw+rrdOFdWV^Y@XJ04xax4(z?`m zDQ(<-5e)a7^x=syto5#BUiRU(Tn|ABf&!F=G})~>3VXLBZ>K#RcVR6?{>A%<-n|EV+D~#$-Nd#E)SI|J{0iLvq}DDT8D;io zZ|B;dyMe940YOjIoPrT;py~s70gec$1ddv$_0vv1vA}2k*{3=E_(`Y~8NGEc*W7Uh zS6#b>vAyGrY%5WVwDwfyn{&p#l1at+S>J0aMzroy@X@Do2oaQg&i z!Y>c_LIRJ>!OFZAnoHWyT7~v1(wV2wI>eUBV?=Io{awDsbP++aPA({Os%07Ey3<-uKw9udCT2bGC3O1?g@#5g0I#S zWa_N~i}jwU=}>s`$u&N8_a7rs5!YyG|MSRT#*0*HBUFc~4DF~<-c}==EKw+i8Y=35 ziBo#bnC@DaY@thievy^M2FXHK4WlT7NT|*R{J?!b&s9}RCsqlB(S}1g$TC30F&aTN zfaN1yKKnc0;@~G9AgiNZr>)}z|McBtd#^wio%Wm$G@I8I1*Qx{L9i}jQOr+fwnCct%s?9nd# z$^FRD{V+U^>nHn(E<^&qWHr|{e0|Ni6}aUF!hd!vQj4(51{+%pR;xo!8Qf9}`@4S! zkL*_w-;60-zm2#5{O#=h@J@z?pqn^)i5jGl;3NGSB>_eDE%K-yXtkLNE!*gBJUx1vq&EX*YZy#Fhf2 zTZgp;s@VZ%Yu|#jle5VsAx$o>O)@}{w2`n(d)447qexf+ahNnyH)Rq-%i*ZNP>87l zlOb+wE1Ya%=8kJ5yzhF9c%+-i_Wj+HMkJWL_n}s zC;QDW!51IV6@`_G0>R`#-2qTI*4Nlud{vV+@}4{4&T9y_L1_Y#XC2w+mSJuVY1c8S z7QUv_(4uqQ2GTgrWcdIQ7k^RJx1-k#Bmjk|L!6dK6HztGWSXiWfktlI9axHSX$dn? zB$xp=72&3L;Er{Wg=0`CDn2rwkxQPc>tCi{gF&^dFYrrG!D1Wpj@{UT!S&E$X{o@P zgFRz#+g@-H96AXT!=!6XPJiZcp8E5H9C~DdZdPJ;?+BA+hzmkJhDupj>t^i#?fY=W znudS!EMD?8GQLW^^$RdEpSo^+nv8Y6V4u@IU(Vl$SUpEzu*(e=PxaXIo;`#WVa&n& zsg!5`-viwDpTExE{@UMh=)ZoG&PoGDCt+d?jOMpVy8|D+1DPJft>~$pwJ>gw2|>Po z5c?Z{jayiQEfd~*l}GY@fH2SJ!Fgmj#8@pLx3&r&c^`7;b%Z;huuVu_gyajWaAXm> zO(adRSr2;4NY+7Y53_cHk>UwP3(u{;w@Zj#Q;>*DC>2_CTMipkaHXoMNvZZUM?{zX zHdCA_BU2G(3}igQ&2EEJ9XNUfQ!Hpgp|$E-?d#2~*ZOr%J2O=a@Z@3Kw~oS|8Q4|P zc4OA(X0$~aW8W-1zXbF1FjCWx&1gSyoFkw3Tb}rf=Q&x==rkQkvB0Uh9uNEvpQrcy z5{!@PipoJx&!AS4&%%Q4)6b0dA3QknG<1# z5mf~jxokmHHALY6@LlYjO} z`24*vqRWSgHIyEV4->?T*rgTHpa8WISk5qOr?5M=LZyrlXtfuE2gLwbEq$9w95@rG z@bk}O@NWXqpkkIGaSz+>z)~H0^T!!+zD^K;~{gV4JH~{(d~}Y^SA@+DGm}-noll zT8MU7;zNe)o-RCf4Cc9US%nbQw?2D2$+iFMn zhB-u$N{)hWL^?39^q(F0l1l?pI&hlNTdBcEKZtqrIA&HTPD6ZHNdC4B&m4#PlJBV7 zgYKFd>TwgXEo9|Irm8Pe3!e8Exisk#0ExeR5V9QaW~H?gJ8~UVCv>(emZ35ZK~b|? z$7kT$X`)-IgtL%!AUW!A-#7+;bC15b(NW#k`2a-j@$#y*0wz=Y#h^)%YYmv4hVQ=_ z-o6{ID#8E#0DSgquw@b!+LS+fD^nle#}#c$WCa(%P{mOU9fi=~QXyGN=`1yAp6*a@ z$HXUEG@o1|IkAFUY7rYpW-Yec)k4({T%m{wiiim?LnXp$iD<_N<()OkvlVJvD(sjj zQ5heiHx^Q;X!D@BY3W!kY^POMgiZ{r4o)2IuyXf*f#H%q3w%zC5#NtQoeL5baCziW zyn|p6D0nH7KSNMeYheNQ>_Yzj`;n__gj*bD#E_nV^ownH`UupQF>wb=rs`OC4dOL5 z)Z3>RiB2$Cep=I$E@66&L9&5N$b9#W)Vs5|sq0{9LTBNq4259`BM6I78;4z!1h=CZg}PhEG)uM z1&*#T^85dQq1(1F+q0BQLKL7`!$83Zg+M46C`68OsC95lI1<2#mj6tx#TbLJ>&c2v zL|5?o^h4u6)(>X81Nzq1kh^e6Q8GBec8F>p8lKAx=fh zlJy)(&tVfGiG_9|v}5SS&NuVX^c81Sia5cq#dp|DbHhpnAsB|mLtPer?aSCz-v-)d zUV08liH-N(U)1F1%p6qtCqpNZW&_@PJMz=F6KyL{*yadFgw8=By{`pN9EbXfR>#Rw zBx&Kgb%-0fkgB~%v3rQ=p+kgR`T*gQ1Bn>KW>ktTl3q&IN^zxeT?LrWWa2$RajZaD zhQyW#rvjp}3^x+tw#`C$D;zroE2q`VBR)u%OAUX?bsfx~+gVjliazNQ6riOd_Td9$ zQHk*zw@{rllu96pb`jPpr0a}mM2JLNYzsOg8>3yZ#3xPWlXsTam=n=t{eH0(tu~(n zB6TW#GAr2B5jsbqC`2`(YGCnXo9BN0Nsj*NJ!Hq1V4^x8AqMY#KuQdf82=vfN8%@? zEJNybbx{1+UC0l;fzqs@IIEcst%n`Q7IQ(7h1IPzf;V6%uZOUz=^mvawNnUy0u*a7H34s&ru6nA!A>Eq zJCb99eKv+KeFGl(rn-M?L%ukH_c95}4f%v=0{tVOVFyWkpXSpG1XI%t-*qk9Z=GTE zx~+`vDNzgs64Cn3i6gTb6O0rgNL~RFttr;OSL?JAzUV&I@8U$)xR^ZLA`WA;`))bV z4$-Y1EI(f7*yATS_?d&W9y+8Mjw3a#z1zPr|DO*d>Ae}hm~_IBN;KTiT*_lQE7kfFLv&aY!b( zjw5ZPwA(R@jhLm!S6I3C1r`q+r+s(@>IsZR8o>|q@~Ga{vVQF1UE{g4BEQc;gFJr^ zfl*1lx(cHc@Pl^{eE$_hGeR`x2*lAn3cUwY+*1p%a2n~ZB5_aq9`@R5d&DisVkDl2 zl^2+rYB0=m>(|)?$t$7t8CF0$w}!*a)vu-%&%*Q`%@&Tz5LOTq;(`K%B``(JBHp-NHM_9Z zraQmP(&93Ur&E@X^ynUI;uadvSOb&jBD8WvQ*H{udbB=&hPll_9`zr%N9Tdy(5mkJ z=N_u-xw)v5&uwo*K5zqOdx64)BODd77?Q^w$(NgObPif|ByIYP-X1P#s!i8xYVfeV zMzH!M6BBJ};S1V9z&~&iUk>&Xr%MbZo&ozR04hyhw0!7nK2c55}N-0MLM#J)HMo;O0jW;XOmi&oTL0^Kjk)a8{}b$geMRzeJO z8%cc3#e3~s?w#}G{Mhh-$n`hTyk$2iNt|d5Bk&Tm)6uFf-**+=!qi?US8*v2RUs;?yVn#UtZDGEHV$u?z`S*c=&FEl z%#pPm$!Q^b(Za(ozypuK$s_8)DwdES+Tb$wiG6)dD;FjCF!R}(ff?KD^5o@N^I6*e zo%c6npsHdXv@_1{@2fZBnK-|Q%he`X?^NY{T1%hd1^^>gC7a27hOvL1;?+n%oW;cn zG@39r1$W*A@4kj;n=mvBiHs+vttz}^YW4IzbHmaqcx3M9u2?nDNUoq%sWjGQ>8>D%Qp6#X*ce!`@;lkyol z2ZB>(6VWbM9!Udn2R}ofaW6hS1s|soFG=ix+SlKAK&s}dptXLp@#pfz;QH0&eXdn5 z;c~l6SdV>JbYWD|L%LmDZ3KDSKHNL@Vy=rAnzj_i4QT_Kk3;%s2M({o(i#$XaB&Oi zHgP7^RFiH~i^=tx7|EcsgtU$@J-$TMcq2W3hxxr-1`;HvOCKctue!|s0KSG;o2I(HHN}gRX?&-N3txqBdHcgd-@>ke_q=_ zlmaM~)DU*QmqyNLxdbtu(Q|)puF6P%<Uqj^wBzSYA$ zvkXhCS~M^1A#oemX(CAv7o=K_w7UjL3(_u2z9gFtF<7Wkv(JPi;v?8DN zJ@EP}-N0))12}ll41&UgMZ{N=v(T$!dJSx43U+LV8+K#fw1d*M6`~;sCoECL&^zu} zebnN?sjl6A(-ZL=L*pTYzj?;B*4}=itfx$l-&yR!cK#OJxmiMn%t<;Bp4-t32yNRVktS z>8*Jb<@}6KBa;CD<@*jkik#8h;C}wQ^HK+I&mc&W;*vx&9>WNBZbSC%#$B@$xvEBS zD^y0IRCT22GV{)JU>|E~;p%$bH-(MW?nqiHJ>rhqA88Lm3zxKzUJF-0NikSuYUC(I zsrTPgpUzOV&hm~gVY&oC^6f}f808sD!VpXCD`;iYxS{P@y*`XIXc!e#?JCsNBNP-A zG*L+dlB1)rbp+X6A>0|jR)ZOJkUFw8u*={U!5vTFxnpqT5OVkkuD%Lsf`kQ)>O~PQ z@HLKe^-2|gKTdDYIfY!k|(j`D~;g1GHyFALp6f_ZE31r;oW|J3fK*(6WoJr~%Zn~UkPI*ns;;=8%vyV#mG&0WXgdr~ zYwRS5G%6pJpg5uc2_pzXt>jTCLa_oPBQQ1$lNIF3BC;nSn#nK)OOOR5bwj!Yb`{)m z2Tru%*diQ10dpsjW*yh*sV6E7Ard5ta8W^By#(GU&n1CZuWYWT=T3qFMw0x0Syx+Z zrYRy>ipx^j`+C*cc2R= z>#(u{?N#+c70L>Ro;K0ZR(-zrrL~&&p0zQ}qXeCKMn~2dsmy^*aCvFdKAnxdE-#>5 zh9JpBwf}#>DD2oN78={>xk;#PL5f2-iPT_@D(dYjRMgP77AHAq3Q#B`K>;^D3|mHF zM+vhhBDyl5I1VOoy0ETeNR};GSG16XJQH{k$bT*n=YtSX_lxOXC|^PwSpJhlC-n-S8f(h5{!v3X-&|>Q-x!vOCPg z=n|!1(chm3b8bhS0hWz)`2giI1W7JQ20T9l%$7-&h2}Oo@ffx+jvbx>N{EDN*asz@ zDNX2WenpzlXteO13qw^^D#JQ6@2DX=Duh=QD9s3_0&!@uKHbD5kaZk3HP}QT0ow$- zk|HPCDtVf1Xf>hPg0@r7Qn#zAA8Dq+#oP_-d~i=9l@QgU=3-5aYV)Gu63kR#B0`1@ zQq}&EK~eEv9(EX@(-FnjX-E2eMshe&r^Lxs9Y@wvNfcQ~QY1@oNuu?5(-=wGxU7Sa zYHL5^^ta9eCSIi+HkhnEPe{j4RIJ-YFWZxKc>v`S1W7I_&PRiO_xyVf9N(KT9cHCI zLPy3(3)_+EBodUc5~}(Wl~g5*%D!Yzpay?l(nms{`Z1;zLx##QUWVBcY%LN@31-+4 zmJO!hD2)qI1mY|T~$P!1EisoVYMyD?I9iE&Jgg{_%h+aBSPnfd~De6!t z2tnWoLXgN26%0`UjIp@T=&&-Tod8vqG>2O#0H0Lmo@l2<@|8)Z-v zQ?NASNmko4bkiDcXsaek8l!niCe)f&QBj$tG@=G_p44apjkyGo?iWTr!LkCQB|ozl zU@Rn<3JIq|3gecrDugAlmGzZ?Cew`G6sLg9v|dNI?=v)-1iHfOx@T=My;HgSieYtf_}8>45DGq_1S&wn;Q^O9l+|ECVdYu0hThYP5p@y2#@_?L`Qv?jL%ma7<;y}@lN7VAs#{4H z(>(>r8pGuVqtyk%Y#9KDZzpj^;4**Q-ys_f3Z6c_WWyyvuTzk02xR5t9L@w}u0TEB zPP191#|RP?p*Vu`hPg0>L&7mNnfHz0tJC+gHm01uICpCG?&Y1rmqA!C(OPYxmZ!qt)i&$=Qry&o-@A>SPn*eODWYnVp34UW(*$v`#z1Vg z{Jf}XT-ah)LRP%+0Dsjg5mE51sKQG3I86jK-P%a9&tdk1VdqzN&4=*2m^=^6I}7sPa$vXt7q{rjM(1*HSbwej+Wvc%X(=Py^J_(Xu+k=o zOK>(*H7kn|n-aP%F0SJ`%M?m6(>dFX6BzwwZl?DLWh zuPMF$LDDBxzqGcA8qqkX-%Ui@j?-*aXeA?Lt_X!;Txl2ys($8=Km-w^u@}ibVxeCf zQdBpxFiRoBT2mENIeMrT9%E*xOgd& zrCyy%kW7IiX^cx6NZKSY9ZFG~k!qWgSq7JRDX6$`tb49>7`YV5$NDnZXCu#_?U0T8 zymZ5BM&DZ?fdRu_!Qy2SAKuF6X2|zeh%8m@8>#n z<9;vQ@S4!~5J=F6p3m$XNzgb&o{R|CaEN-dM$eY%q?4q*6c?5?7c3e=!jeYL8Bn3}Un|qhfVng(I2QX#6?)d0qJ;F4G5yIA4Jur$x(3>B6z z(jzpzz73>Fm-q=IX93?%uWxS*^6&*>le6*r##5hdpFW-U$L|V#4}!#dz6KZ}SHbeS zS?c@u?p^Dv!*A#UYr|369k7`r3rA^nizGdZlMo3?I2Y+k$*=&%_?3i$3oELQ<>Xj5 zx}D8+Fhq>5c+68(oPg~TxGv(<9&u?0M~X2aVQ45vZ6do$5E+U^D7ZS->bS)O8Xey# z4ICgUM+PaMAYA`><-cs)^A*rWK0n(jH}2CX|HIji;e5xva{3+w$@yp?w&I_*^ZzK0 zRNZmT$Gtt!BrKAp7H1t3`v8@6wxvoig_#*N3Hb^ljKn;>}!utPBKMD@uoGNntTVT+!=6_=# zL9|c#-3|Vb-`{IUXJ!0z0OhRvzB<|j$vJ6IEz2d$Io^lgMgLPtlk=AN;{?0zC3*!U zVmxc-Nrd{%onh-}oYO;KV0^j6@bK=BV{otav7K#{FWu`R(>a;n|8TZ}o%5K1{m-|L zr}gP)lQz&`(q10GQ(awf{(nycf2fMI{t^@z4(kNX)G|0Un(rjUN$8DxpKvK5PJ)4b zb$?a7`lddJN(H?AEgl)_B=ckId#3bWob!2H`lBDS|NZqyFXy&i#y*=MIfFJ%D;^+y z8u;7W5z2u1~1@LbMID?j@?=iRY-VBf|dmlFQ(K?&FYJ~+NU zoo!pb{iSq19y;5$*OvS}oNHibzr`~te>@vMn;>}=v=J!ejK02Ia^`iJdXYV#R3)>@ z_`V5{^XJjOy)^Q`$pd`r*I5Ts|NG!u?f?JXqd^dz4^S762JinYbe^BiOTKg9CS5Sf zXM6v5|DzHlcN?$o;=z);lzjkGLE+Yu3C}p+CY_UXrrEf4ozC;q`Dha)7nzfHpz$n$x#=Lze+vns;!XQJv?fv(Y9< zHtD-Uuf2`J`O%PzzVqyo(>zuS}Y}dZ28AWRor{dM$vm36f2^ z?C6yl^RFBzn;_Yw?;(0+K-mPzCSA7lol6s55l}WkvPqXUT@0XXf@G5}dwOLy%FCxs zkZjWTD80<`jhi6Zq}L0*Ja#`DefuLfL9$7gJ$-vN&*@xB+4;|~36f3v9-(sqgm3fP zCP+5vbwKB5@tn?OgM9m=H$k#VuM2u*92*afkL~%6_Wb_=A3x@>L?J#m P00000NkvXXu0mjf0K2(; literal 0 HcmV?d00001 diff --git a/extension/tipswallet-extension/src/assets/wtpc-logo.png b/extension/tipswallet-extension/src/assets/wtpc-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a1b5fa312e85f550356dd74e00a0a4ac39324677 GIT binary patch literal 45692 zcmV)-K!?AHP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>DvJpu{K~#8N?EQCu zW!Y8Vi+|QW=iF4ex;jpGPfw1Tq?|KCLIg=9iD=;AXKZ7zpWn~;fsKuAz&zXVFd~T{ zArML^5tK$*qfr=z$vJjTmFtFc_Flg~*4npPjpC>W1!ni$sj7R=Jz?(^zAJ9ox9=R~ zs~U3p8{hKdtDK-m$G6}Jr@!&#hyJ4@9XaLog~pfqjIZGHN5?n*co>Y5M`oBW^!nBv zr!vjy3~>7UU+nWo$2Z^j8W`nEjei_W^Ki$PW2DnxkB+bZc!U_`)bS|8e7W)E7~(5s zoUi1VN5{h({{W1V$La9wD|tOSzR)FXc!_y=T^hcixRoJX1H zs~x8k``1G7r+@$S^M0Xof3=@~HLou=zTD@0fpdMi*Ecw$e5vs$(|o+bKE#py!d30=!M;YbIjz<~h(eWswd==w#X!fOEkB)D( z@hGD_BIB!Nmaq2sN5?<(c$85dv2nVV`BJZZ{8u_2P9)&b@wJRc8RZNQ`I?CM^O;BF z^zd2!`PDGhqvK4BM;Ya79-klU)iXxKifTHAaZdgH^N-v7dHUEHQc$2~fDlu^#a5L%(jwr~a0>z7cDrYN+< ze04r^gY#+C6NI8en?RKU1uaT}q9`eXqD0UFMMxw>5-BB;3aBz7QXs?#F+rV1jAVmB zdzqE$Ax`LhY;YW%KFNCT4vr4*p-zLp&j(-ic$9HY9gi}~S2?CS3v@R2FrnMn)477l zqu0IxqY_L)uV1`fYwV|q_34lD6^yTxSuzQI zrN@8sjYk>fON^qdsL~W?g(uKEaXBsRv8}q8UCpI*nW6|n8)&tSA&OEc0)$f0B2g4j zln_d&3L&(hXhA51P$;1kG$;sY0*y)t0;0qkv<_&56d^{X89*}##F70SB@rVu!$6E; zR*Wda*f1QyT3lhR+|LQ_WU+S}MwYGXItE3OjNc7sS-scgwmju2*jiWg%pLN0x2Pm6l$Rv070NsMjH^)`Zcz5NnV!(bQ1aFdD(IFGvck4+k6{9c86^KlgOs$x3-AOYP4QWBh`1@U@R` zErxlNQGB$^NhaeyE?$2H+czG|7TL>WtE4jptx6z3yHunKw7NpoO0>F4Zz0f|hxROV zrlFcLLN6*P+Cot&6sAR_git6F1Wa*|vSd$6N=hhuu~C!uB4`v+4RHv~K#3z^ zG*Fs#VXy?ll|(ay!HO_k69%h^(Ex_EG8#g?27`gpAJweu2_7hJ;PBkF94fA(4ojqz z9s!2oOEAsp*ZE?{ef`HjdPZrL9d?hN%f9~iuw&&3Z0k-k(S~v&8Ehgz5ZaTGscnJo ztT3^lOm0!yvx&~mg0icGN+^nimWmLJF$%X)NlB@hBaLXOrL52-IuB#*)%MsjMx-#!_HoSsAVL+ma+Dq8iznZPHJ*K(_eGn*m zLU&SWO$U10ptmbBHB->r0EBO+#76or4kB?i?36zxQ)0%Zrvu27VUpd{lev=*8nP%9}3sY##)!(tx>>q>tO zMk~U`31RhUV*NM_7ooob^#De-a-zS^(dHfwbZ+3#)Vo=(?qV2MPM@}K;PJ>Z*FOSA zu~>PQ-o4g5d)8mdIjb+??D!aFx&_@Hw7ZG2gwAAOYMU~D9`tr9-K|13DU_W=Xa^_~ zp@0wqS|r+2ksyJ3DD;mBD-RhFt{;J=Bd~HpSznGc8-a}#Wn(>2*HAZRkSpfZD)2~r zFvclLp<5QT+kvX5w5NpLv@$y%m|9TUTVQghGP7IgZh>mTo>5U^gj5IWkwUFV3igVfhd&9e|C+z-W-Dqq4HzaH2lWgYD}$Jok4TC_Y4r>GVncCLUi2LuHoO zJoa0fQGx^`9aY+`9$Wj*lL1E>vvN1{wR+Yh;u(DBeaQ!Gpx*y}7-d}RExbe$) z#=f=3w=|=G5!H_38qQhzG4>9g%Gs0CbbCks2$To*ClF?=wiimwKii$%h z#vd7jyO9q5VBZs!Z5IYw3yDw& z^#-J&kOrGfvvC5J4=XFjVC@8~EyDU5)T^*~q~<{V5D!efhX5)5UCnyDOv$VB!z?$NhqOI5|9iCk+47_fC{)iL4%^kCny;4 zqvj4%ds9UT1SADN2viaQ(=w`sd&!jG9;;NBFer&lpp&|6n{ILTRl)^N7j`}oW_Cat zK)n%&eTX9%^b@Pc5*sH9)(;BHhZFsiFj$1;RXDjednLl+aR=C`l3{YLXbE7@;O-8v7klGyxI~@k&6|OmW15 zjfjljGagYp&h!Z(6^Mqhr6u{R8cZt@5EVk!O=hpV0u-d+x zCJjzsgz-9jD~)dnMmaUIyii@l`A2?+3!CS&z1N{PmFP^u)V9FvUS)odFugC)nh6vw zMJlB|6)CI0;(dWz|5mv3!-<0jM+|j@wi>iELdrX2Bp5YUvDkM53Dv^9Y{nxL1k*?NKDKyuCbtuVeN7zLoJ+U(nS8J92rIJ;Z>n4W^}RKdhnWp1yq zuuquU4HIspQ$lDbss|8X2wv1 zT7u_m1t$_U!`+z0D^>DrJ98Ly8%voMQ3$4u3I!yPQm#$O8YO^6l!Aa=L)0Re=D-kF zRtDF^_zh8u(uY`53|qvF4iz2FJ%5rXeNVx8&s3^OH9Mvj>J5d}g0*AH(t~jF0XX)6 zvN}-KRud-{*Ev{ymixB6j{UsHA8XT7WOw_mF}@`jWvbl4r7Qo83)a4iowL(SOe&MJ zFn2D@oh!`lf!+d?6H3(BZxJ45QSfuf;t7?m`ll88iO zicGZ0;8JE5z#x}6;j5>gfYp{{1){jNFbl^2+6*@O`Hh=AA4~l_<74d@(-;QJ{Orag z!L*OKRVRlKnu^hSn|A7P;iYY!`u%OrdkRQf8Epum2{e6SxCCp5;n=;( z;Rh1SM`3j_v9=UBJUql5vwy_?$#*b}s{|=rIDG49lwx*v?w3!0^BZ}bDzN}&^#UHh z^q;u6c|JQ9CYYKP=JzVQ9}n9v7iQ0a-gc-al%fmm85ph!cfCz`_pd9T`Cw!t^5nlG*g?X)JaHXB_{`A&z~ns3Zu+m{AhR`NTd=&cyagg`y!*bQ)4I;?P4wZuxLx z@y?Rz*^({iKs6~yC4`RBnuLi3L5fHygdzxNLARM^YOs&a;2f6QcQKNs&s(E!h4D?t zD0zqoyX9$Iee}O@Ui%8R%$Cf~2;0t8c0OL1yC^cVE6|=z6x~F7%Cck+TrYg!R~tU@ z_Qc}Gh%nt})Lmy(jA+6LEh0&xF^EK>Hbzt~`;!=JWc;m?jIh;7*tLnG?%^`SpOnm= zae^JQi`Y4`MoQui0B1h?X-tv-Lhanncg|q0+451MXfif3j&cUh$7Z%Gl4UT5NKr(R z3_19~kUKvd=pU=tw!2_*7f5BAu4pMmmFV;e%C==k(+DkTG1=cud*w3H^eXG&!EdR! z%QqGD689Jt(&FOyaxOgiBkY^n$K-@Ezdf*Jud?+LVQL?AXQ4F((oIMqEZ!`9{4bPG zeQ2Ex)+r_D*zRNWG-ZpVApgwrefa}v3#?X9G+>Q5V3o6ArsW*vjFp&A@;pg zP&6fRqeWcnao)llPk-qIkNqw|CSbS$3}LvTY@C3#gK*?l<>2kGwhAZLha4E)#r?DI z;Qqm6&=No4eJ9`<^Z8{Hd=0ugKrj0zg*w1I@PHGIJ*jJKb z-ZZuAi3IG)OcRa&iJ}q-?S`ULv$`?hwoleP^ci8tt~OiuL3FQNQ9^4%Xw3*^%ksuZ zCG9XvwR#~sn4+G&hf!QVeKEi3#y1h8Kvi_Pbm`}~y8pxMo||QIreJQTviGsD^)bTK zE}=E0l#^zQEZwU7-G6EL*gMx*D^}6Tby77VhK5)~R2rfvQOrm;4PqJ~N@LI=8|j+u z4I@60O-4{~nBxi{lb~ij;4u{osMs+MlZ?tu4P}jB|I(&yke@}qqn!qG}K6_HD3vnHT@sFY&VBBOT;~--~ z*BHhDb{#)9c?VhNI5BMC9t?`21+b;!*(j5zk$4(IF(Or2-XS(ai6 zqLV^rDxeL-4d}Mov{$!L_RnG1JHiGB$JhR58{ZU+vZcG1%a8v8m!uakKhvc*2V2hz z?0teTb8e!yMd-{3tr;Z^;eG!-@VCD|WJMQYa-CQVNrlBi2C1Q@rjdq56VdIG7@~WL z%$pUH5kXC3wu?qmG%LmE(<%cMX9Tgo#>6_NM@55wFF=zT>L$@>hIa;k5)CPt+d!RA zV~WHSDTA0M3g+D!vt`z1IAjWT(aem3xv*oSNN}x^od=RYvhK5aNGX!ctRkt>qy~)v z5g`ST0;*Qz!G{`d`Ly%b6GGm?9ks z6h&do7ZgIG)3lhGYSBbzn9LY{dcT6to8LpSMixg-_Nhu})a@+|6k_3>qO{bQSlIDZ zT|gPos5Ggj-3rWirsz>(g#gAhRZ}ur?^2BBc>6P!4?t z4&0%fJgF?MZ}3q3EVs`5HYdBE+H^!no}+K<@dX&=3ynvfd2(08oHeT`3+?lH+=*Z2 z?7ephBRfOW@wIGQBI!h z^W8tUgXjI=4pvtiNQt5-Xm?7pH{4DTg%Io>(q^2Hb~o_9{@o|}__Zh4H8VpKBb0?3 z@Q(GpV~RnZWOzoEI2y6i-{61##WUD;{v=JEJb%mXEnz1q)S6BtRYFy=wo>y8KlLHf zF`=p|)D4!TrlGQVQCSLudZ|R>*(z)~ zOW1avu=P@y+H0DmHEr1W#=lbD{F`fxhO3mb1BSr@g`+SsVBz+~LnoJb!Vk{!E3bO& z=Upo=*s08V`saCk^1X-nk?(vDSIq4)MrpY=QE_89yO1N2f-#;5$4)GB@pET*)tjG> zwC!9ukSJn?aY||YyQ*4om@5DNXFkja|MU<$=4WV9gu<^G)KcChSlc7a3Lz=&qTr6z zqx_FQeiq;MvUA4gKK0p7z1Hc^oEiVu|HUWx(4U-S$J{hY&2B1#B9xZqKPnk6O>x0R z^Zd}inPcZg1;Zs})Q7<_Vfio|z6}oE4ofFsWpIpJS8w3O$|-$Bq5gYVNhoCZ_D--k|!o!aP=JX zTMJg}0g*)XKw}ce`5H;ukdm0~6C*`{qxCvhK6wk$hS+R+$qahgb@A&bRaAtgG2*`J zvISPPZ$>telp?Cp&moW^F_|3|H4=eQYUnpZE_=eP+cjbigM=qn3aVl*W`Ex_j-{Tc zD61!jeB%Abn3!zQNJAZJ8Z5OZN~A6$sj6wsuW;L)hxxt#c!K*snP^WXI@3aXPMO*P zJ1&9k7sAXu%uY{nLGNZA{(psc{^0;Fo z2q3`>+AKX8OIf=ia{)*DP#~tn+(MUcf5kZ*T3R8vM7NX{vq}sKxxuYgoV76+(cLb5 z_scFoL?{ZA9wlky8Q-&qFyF8~9GbQoo8W0&?_#kW_t;6|8@!fw@b{+=3XwzFwyR3?5Gf-K)C(ZliYdtQ97-{qD>k}*<+Z@@zGR~Sk`nV z5(f?)<(0p3h}+%=t!||3B|5V(wHR4 zD|@s%-)s#1kXu3r8Hu1?>>?j0Q#b{Fi}7ubHW2NLI@(*ivTfBj1h?|aix(#%o% zlZ*7j216Mz)B%0nU?@Xs9nml%Qd3JqlZMPTCGU9Cy+)`hP=$b)8W~&0=D5ngTasY_ ztM5?d+0WX;aB_vZ7}CgyMn)uR8f|E_L1|DKkaUPJVzIx(h5P0>`{F5L$^t~p{!#M{ zOR|&`llVf4(cMph?Yky;;$zR^vkNGe8*q@iYH9xh45)S#MZJb5umWTcUqiHciqJr0?1;WDFFf&uKV`>j)^`FbOV=qO-l4*PqzTw7K#VB8Hd}(I+(&Kzy z%K3{gW9Qs7lXHRj?ZU#jFt-mnvqEPU(uVN%|32dS_aCP<-KTCfCebnM9Nh&RQ$rFb z-DJd&;ZaoxNADl-sT&TP*M|%@Ac)w{5R7qxI2;oH%vuVC5V-8Z-7GeJ3dG&6#wIuz ziW*V1xJha$7hST&@wgK#?hs4KJZv896TBCg-v?M0@fBC>Vs>}MU^KL5d74m-q^yZF z5uFi_t*mnP-f8w-JVSkI2Nkgtn;?>%ZDt?2a4_GSxu-w;f&Dyq<0?}VEw_Kvg0dcL zwHQve$s#Fu)n`zOZcWoZ!E0ahAUC`<((Wo{PiRlUJ zclh1o=lw<;XZ+5-ymtBfV>VsI_6L8I-Ba6`o(as%!~A*5^x3Ai+Y<&G-ub^H*ME4K z)=ZyRH3q3%x}{`{5?#t!04*7oPD)bC1db^&TLs?z)_aXu44H$cu4pntTimmhpGK2O z<(!`Qil4rall|qfWVLG;F{wuDtRir9WsNJJHOGaQFZfj)(t)cnkD|NEvLAM(Z09O) z_C+&X{e)SLF0LXWxnwu@bwi{{i4+@BR8GVte&9zh@#IL;V19OR#!z__@Ib8FMwa5QG(|(`jp(z)t6zP9Ti*rkPNM87?OA1Nm$L1A zn4JsEwWm2};#_tge*rV`Qoxw^8*Q9%M#&>H%$IrrOjg_3d-9)gZs&ZaXG?Nu-G1uww z;rAV2b$MhIg43^><}l@9)^9?Mh+LAYyK~P!cMEgdD%P8UNpuHZW;+=1NKh8jGS7S3 z`4pumkGSCu7D5Rk1SjNNY-NOLZB{i|n!Jecw5OiKVpuhXl*W^5T&s9i!H^*;i6=dM zpP5-|?(wX#LJ`nl%xMbL4f(N~R#{yc@vb*Mz?R+wjYja)9>uj7=D^VG@pHJFM2W## zG$pC2O4z6udCjYiaL@Hhr>C?!N@rG>J6qU!KFmxjVM5s5IhVc1zL&0SvpF79$T!A# z#2DpEjVv*WP_TRTJ2P5eH~jG(=Hc>Y*&#S2a*tC8LP;3s zKuPvQC1uyX8D8+cdpUUW7)4o=bV!UtqK?osBFc!hW(}Pf^74Ojx#=PiyOvX_<%GGb z*t3X5J&m4(1dzh)7=Z77`Q^}Fr5`tFbcj-;p@uLb>WCnbBdaHQ(GTq7oO9<%(HT+P zEv%-gvMFFsYtNokNdiR?xc*)HSzBMDDhit9bC((t4UI%|6*Hoi+Qm?$(VC>@Oh`0P zDB515oLJ-7-~fO2dnY*X*+6$v==GGTxx|hOg>8FN_tC0)D4TJu zZ-nu6VU#>}=u_Eq{ChZSW-F7kf$3e!%s%KXDAklQu>kjeT6yE|EupPd=njcRO(V(j zwbYDs%g=Hn*Yl(jo4H#F%jYsF2z5$K(&Yo6y4!I_CK|wv^m3oB4$fcr-ot#2QP@u@}rn!fh76SKKujRhgad^0+7N zW^u3tsJSV0WI0-?CWz9H1D^VX^DMti0un48CWvWA%NEEfFqQ$3GZ8EcUwP}>Z>Bw} zh|~sSGwd>5GR{FW7rZ%5qB~BKHtw!g%h0ZB+T8*7pL~$l{O%$v2hCQgCSYno*?9@< zJh!CXE14~~v1|2NOs+i59(=5Nzy9Ov!YHcBWVw@FC%%u}6MN{*mP{_dma}1cr%hyM z4o*H8c-{Y6VOX!y>WxT6V|61k_GOJ>K+=Y!j@7Z0awB*TppmR-S8SoTO!v6{y$87S zmJ`MVVs0Q4_6`nxoh-(%`FkjA+P?FpmoU4~W_2*|>|XONo3XAOT3zP5UVgDR>9*5_ zqA&>L=Qnb-^DEgCCf07qAyU3>t5xtF-*+ho*H$S*@HtQ-4G63c8>V*%FM7!(#uO=z z1%Vmhc1?R8gIht2SrjN*fx{23a>Hj1urM)A>ECbndwO;XJBEUxewdZN^1+$Yr-4;d!HjmR+yMf#NZHsnnr7yXcDbS z#vpl-%$6{xrA5lka!9_df-#j+h_Jpi;Ip4OU^k`qKl^v8L1}*{&2C#Kgk(Ljp8sv< zv)EsCiJgcs5}Stppke2}l54Ko4dbPD4YH}c#+_Hj#ykek3@=#>$4m$N(vu!{Hd}T^ z)&@gTOr*x7IV6tvkMo49ce7RubRT``;z~CC|FZrFM* zOifp`iZ0v31%u5o;#1ji>;-J=&d}`!W)>{^-dhk_^U!X?`~Mj3 zym`RnWJ6tyEOjC!du2F4Z7N^wz3h$AXp3eL%%a=mxQg0RHyT-JPw+>t{M6WxRgWc@ z+2XbYAbEeqOxrn93%u}U=W%ebWcn?c#wrTo#QHLqUv?JfUb5g?%{7jP$1{AhXt+_a zNHDEuR`{k3<3cs1#3fhmgA#l3mf!2=mb31TX*T$B#8z2nEI)Y76c6tp2;j zYFuWkWgfiy?RPQXZi9OLes+wAS|r{hMpnDy-b52csG55LOvBqJHYeIridGFppSQgI zBoBU0=uAS@h4w_v>{-gfo`O!dVz#xwj`|wrN0yUk&W5iGsgB1#_|<#GRxUg7)9h)V z&GeRn`GvsNa{@Cvg?10RJ-F@f;JRyH88WMjcY80z=k6053h^V+E8`~x| zsx@e$@%L0}VyGGFkg0Z;14oW>;#l82Tp7PRH%Krh2?B*n`s_wE@0f7qWA<|S6;qt( zA15-PR?A#oEe`O#-+PHMNXm(iIdoQ47s1>$AW>!q{2aH%mgqQ#5;}~#= zA|yxyL`MvpJ{Mg$&1IMELPRLCMpV03gGv^g$v{%b>dLfFf34=)zq^x}&Ll&zQt5=v zS<(^e_K0Y*u6(I+t15fF%yD93%s$KBI8`MDq3EozG~CZyUw4e*aoZ(eVzOdkM_~7b zuzg#HUNgydIgh!MPp22QqlWj!^YZl=k2s^8?&jOR_U+8{&trD3qBo<=?6&lV&ID8) zSUsS;_b&zvicA z*_KT?qMY2|rn?UEfp;`iEuq~LdXs^fU9jUkWqP{BOnV0l@iL}XuLjqOU(fM~Gs>xa zG9C7@b?LcmpW4RcG)&G0=69Rn9@O9I{clcgzHVIR&uTj^n_w zYs9@>U@)wSwjN{1iwAtOu^$o|BB4x_ofY2wo`<;aQ$l;n%D5+HtS8&nz0m9R*wHp!xJOm0~7 zxzNx=i>8~e-lOYkMy6^*jP|$L2PS!vHjr}8mHjmLrb7ZJ{@6rjr@Q?1Tkqh(2bOH- zEHy)Q+{ScldmGs?)&*IsC{KURxkwAvMjL2?WBubi?O7L6wTm%)3c+BLX&0092EQ^h z+ER$Cw%~?|d|ti1B5E6_KJCeualF4uO0Y3pr`2tE?h7w6_?W$R{+#)SRlUE(I2*wT zUPL%}|0?f)$GvQwnPQX-s+w=hTwN*oE5j_T(Vl5&V~c!$(Y1)3!5si<_KpUnmWHC8 zScyk?$Lkjvo`BXwq&2BbF9_TB2{W?=Q|$$|hfA1Ueg;+1%_Q}88IL%l?3t}oeD_PP;`sU^ zqfunf-Y(zv{3}SF-Y!8r*5Od-6!;Z_KyYmZmSTcyKW7qgDQ&l4_wpUzc_ll}E?67Z zoa`UtWiPvm-gJAsw~CGfcKLjEA4N`Q$%@m$I(+Vy2RLzjg;r6Gy;o$Isz&Zs%WoMD zra6rH?0IZ88h5R!&u_{`zqgOgaBmcpRxfhneTVqi-_*1^fmRPD=3vVnVQL=APRW+e zS@c#fWlAshng9BXe-K8g%8G@>=d!KZO>a6dF$q)iLU$6%3R*4Ut`EW;cb_D5HmI@G zb<53)UWhevQ$9z4&5)1OL{G0UEL;=Sdvs}yG6IX?+y3hQeTxNH?Z#x$=68Sly-qKG*P%psB8cK3p#v}2X z3$J3bt+ZWRWq6i=LM+QHn9a{wd*|4`Ya45$6^^HqJnQ+F7(8?MmiLe(2NO^6v>A)q z^-a{kpZv~8X_plP9Wr9%*$lP0-x-mx^~f5;QfJI&OxQYUYHZHczGLdk-pBLA5QAS7 z4O%p4vCMTJT;$|^)^)Ny5t!PpEbK|lO_ofC8RpX2lqasFReEXY*J1pFFv?7Q1zXmi z!u-TM?P-|WVms@$rl9O7qvOK+-@eKqtXkof=S#(8F%zp8%u!`?@md{5-oVFfl&t2} zJ3J=WGEvM$X;920o%(xCtm&4M-1FeQ96z>UEq=xZv}>ufS>R<_%iX=fG=i!!=&uqO z(vL^@C;#Lr_TWa1NMYwQn>}k2Plv(WvYKl|)U<|~6vl)(^@TC>D3G}L;_a-(lU#Da zEZ1Ch!5GHnNV&+S1A^qb$eBr#SU4{TM-Q)a+ue85t0t*4p?f-ga_4W>Zua~+3h%C8 z@24EaD=dBfV=^|3lIJ{oBoj&lp&@hz+<*KqAAMU5Q7J2>GYzx5g!yfOUZ>5r)>+J~ zU(IBF*(p@@4?7-lMroBD7B-&4*07tYiGqnKVQRskSJkta$&J@W?t5?r>DJ!8F{|wC zN%?%w7Gjdu>B1yjj-mLXj-?q!e49~_O(wz#s@pEPb#Qr8;BSJ=k;EJ*C`Ng}1!z1|GPl zrroiWdgCj1im2HkY1}i+AehS&``j7B`O&{)ZIM#4EQzS*do*S?VGzZ3J=X3D*M00L zhi(z1QbGk2(=fXorlwoW_NLj&E~?|#PzFl}GOcX?zS`l-@l}mSoKd!LHB*b1Ge0p) zXHw|SD7`I8y9b?)?H_pE`_@QR-(w$^!<5{3Z<0$VtY|2CUAQfb1^LV!nHMV?l4|yh zFSeeVey_IJ#tMlhHcU#7J8rvUypW7NR5(T08yP;S<`fa-=+Q+!dBaWA1L4Ily_oYa z+-?uAPFub#wucsD&zfCE+1O}!&$~Xx1NR>BujROlF-ES0%&;#6;l1y?o%`-M%uKbx zGoN9MDY&*$KeI~CIk8(A@6qDSAWDqNCqH@{bFH53QY_Xo)jU;-hGsl}NsZ|9XGwis zvgb=p+ZiM?ag;T9Qj2xjJN}uMS(jDh(Ar@>{+=N^5XzR&o`%TsY>x8%`J8?w40Aeze6hbzfAL5&O1sr#>g1EzQJu>~uSIVXdb3!s+6kyy@VSp9 z4jf)bTH}@wXz=EAu2~vyrqF1#R1!CI$6owAX__|Ol3uTl`~TG?o4RDwJof7I{C<3PozWB{c;hpd z^lF;o@S)>e`<~D6+Sh!*zUwY-x3evq#XU%QeB@&vVYphLWy6cV=V~iw79$unZa9T; z>^3Z&-x(ge|D#8jdCQw`q}T2d)jWdY&zNveml`o<(l^5Ye2t#S#=g7eHJYa}xKI<* zD(V5DgjzQljA4s*pHJO#l!tDIvX!i3{%m4;n=&~Om}$+jwK|9P$_2EF?wE*!x5}{R z{rg0II>CRT@s)gjMj7RFRX8!ckR5AJWuY@qw-e}21g2*L6H`jnQTpq`CqJ~#D6Esh zz%7m1aIPn+s91-SBng5wH_#N_Fpq9HZt5Y=KElA3N9$d~SbA(iB_HEPrYKeDu)4U! zC$7H>u=)+FZroJ!MvK|T5L6RQR6h2}8(8a4Ft=6tp&x$!crM0FrXGmMFbFl+*I2j7 zn{IiKL4+G`zL(?2R;+cahl~&EMwL^UHuh&RxLZ=6lv%=gim|qA?v?}JST}-cEMyK94p5s%s$|E_> zD5GQ^5qEpe4W7!h?xfqR=u8OR8L^$OIzrioJ3kY-?}6il&bk+2S&*^OhN#}*k?glu zqDx_8AWxA9pkl{mscW#xF|jYIcq8sCArodjtGhpyNE){I(?7j-40}>^hR9t}uxK;M z(p^M^Pkr(Z-hb^~Omqq^xZqqCwoL)<4vucnsuPzg+L)yx9t{@}e*gF0!c4W7+iyO~ zhdyvKB85e|og@t>IiUl0-hB`E-Ft|YzVaR4{aCsa<(LW78Pl$5c8y@)6&ME$V`B{e zr+@K2wCQ@Z{Z!_#^QgOhZ6=$s;K_!5-si>c*JCaiq_TO=ddTBhUWTB_8W3h3rIIK* z8+_{KL)?F((47c$y28Y)GP6yYoD}A(dFI*6bf?Wn-kpK6t;D|a$@i^MhgGz&M%gNA@G8d=l6oPKFG4b@202>nq~x}UK?Q>Z zra-bp!xlQjE;Z?wC1fB`H#NO-3wPi7AjgiZ8&ioA9Ud7g*?mcHEhEA`cizWnP_sN- zbe4R-k&nwx!- zQB`xff_IMbc{AAMGn3(Pj+enLU$*AfiZ-C`x5D9^qpjS|&xz*)wVT zZcfY!RlCJPc^0y|otg4nR4tM8A7VUWSD9G7hAo^!yQ*lngw6y^%s|x=%8AH}}Llbuq=X1CbpBEW1so!X#+imly z&mHFDAHM}0{}wq-*o&X6A%(|URQbK%c|TL_S>~qU{0q)8V#v{W|DGi?=AT&%+7a)* z_7mKB*9xJim~7AT)^~h_<<%7mPm@UrNJ@$p*Ew=znVW9O*s^fREk&b!P^7@Un zwi)jR%Zwqiwolof@qPvgi&M4QHJ`op7)S35RFjETPv}l76SGRYBg}NSGOv5lrM*6n ze)$}ydW6O!!YG|;g6ZKEY%R9Z?m}wT3qJd?0qgY|l%B)oUF65w!zEM3 zv6`%K$UH!{m}JKB?c>yq(7dRa{;;K2i&dB{>CBfGJs4qYqf9cvo8R!!@prR&H=$@G zf|#vv`0x@B?7y3}Vac)UZ-vXefBf*O37?6v$O0uP4mM0 z-t%c@%L(h!FGl!df@U)(%9&P$1DDh@OtD}h+PLI4EKKkK7iK8hRA=MT zRkQG^=%#VP!k$H=QStKP8n6BH4>R4_N{S;CrEcbU^IQJb zrK7ocn`HZ_#F%)~8{f}dXD93N1TXu+rx+XyCSEdg8botCPimS;4X#>lfiN5lc*|Qq zL9a7S3>Jyc#(4C`cDZWw^R#^yTqIIz%ssCzto%EgB1uP}(Tcy4YmRh^lfVVYn9vJF zgBA5@xxyzux->=#j|ih|DK2ADW@vQ^ zs*W{3YfYGKQdV&9XW`JwGE$fq3(OZELsr(gMS;~aq!5X|*Sis$8H70qreZtnnhlaY zEG9X}k$sdVW!UEDrLi0^m!wKfRkYYx-QeBt{`6)Vh$$gYH!(gKH4UHs?5Am$dnh^^ zyy8cnJ`UF5@Ue*=y~cXHAL+``gCRR(Uj?mkBSlN8dX z(b_zUDMMbnZ`&`$R>StNbitE0jd{%_49Q*lSPuiun#-YAKGqC+n|nLAx%h1z4U$!* zvj5mJ_k2pJN~qe(>#Xod!z9xnQ(a|#u;Ulj1fC0uVG8M%>qYV zr9A6g-rHKYQJ~X$FDC!7|T# z{xjLSb;j)ha@M0gmmBWUy-#4C@f59V4Fvx3jqhT8eaa6`W~jUS95vFm*)*-F{vdWK zTLW7M|69!AV780GZ4!zpM;4m(CwA9 z%ZmB1o%UcW-D(@jwUUwFBcoN$D5Iz@?k`&%QZ$|wNsmGf9gXVa=G%0g&&1D&aWR1iwoe=i(AF`y_tS&>8(ucz~g zR$qWbW9bwbnkDbVD2%0@EtbvGm?-c_yw6oOB+cDyi-&t>U~`VGfrL`ETHJigA#S_P z3c7MwOVpy>DJ5R}XKw?YWy@sAm5+I%oy$8j2C$?w zbUOx3+}RLyNEK$;zyBU?zx_dqBG9T@T>r68^WJN3qSxy%J3q;@o_`Vjeoge`&2j%> zthg(wc|MZ&PqrS(N~D?euK^PJu||x%AmhWX894saebC``vW++ViK( zSgz$GIT!Cp}Uo$P|B9jolLZ660KfIt7pQ+a>4Pt zs0Xu>)n#vzv$0K0s)Wb75QMN^Lk<5~lCuM(zh^1>3F7$kb#w~>RA?A+S;XUasF z=GA|EEdVi^W~*aF3gOn9AL8JFql{>A*;TuE>N789)HJpYgj!Xlm{2uQs~)WeD=h|I z|N8gR;Ve?4NTEn!MtLAmmVsl(Tl~o%{S{>>fyBo@`B_rj$@0d7{KzX_K&M^0vF`OD znCA#*_6+e-{=7-VIw2DH$VYFaOKWV0nEN;j9y8wM6xZ%}uE+L^6Mt}cl{;}}*zE6_ z{b{yHe$O&XUE7SInWAbX-x(#80oGaO_8UipVSxmtGXayc1rrk`6RjRIvW522g`~P= zq$1=0oi@H4Bb+);XB_*^8D*4CInBIYL8t1`s;m&F(}SuFp$)@j<&L|TP+0?MY{G)4 zW+(NU5z{b=Ln+6%BA);2nnk@s2pC4oN*u}ZF|(T+p{FMLITS-}fy|?`>3xf-CNR&( zKK@D8R!0sE10*3x!C(K)JJ^4yrdO?V^%YmSCiCdDL%o=+GBd_xE@Qt(0oK+wc<*~Z zK)1cqyl%cAS?e`*%~WR>Z-3hdIJo~9Dh;oC)mxeF?jnRCFZ!;hc|612&zelz<+#!q zlG?pAF;Tl_iQ4em*S?Exxdo`b+#rh!H_mhVyc4O|%(NwS9Vyc{_RWHyAbAWlj za@gxkk2A_B)LlBuJDKWqDNCVjS;Gh^l`6o=gK%_hk+Ogovh*^kVv^s;I!nmBC?s2g z%na)35vndBygtLy@eLkrVr$p)FlH)LiSFvnHiVMlk`-i4w5NFJ{u8|EjUS~|S=*ng z3al)x@Q$}!%S?ASgJy{z|EcHs3Dnvoc>}(b@kKC#O)6+3bjp%9z2T#*E;WesPPr$u zMsqx)DmvVC&q40I>s~(c!FxDzaD$cpI?sB}d0c(EsA)6c zn4sM*x$dKPa^lblI@Pp$#xl$K+~&W`NU@nzV@C2(rmpOtuMJ|K*>wBbkcGuN>pZLqezmQb4PhsMQ%uDY>umyH3jAZ*HLozFN!h>ruE^xzVKIYp%L_~yxhmLZ?XYM7WHW!?? zhuyn()6`a2rpW?%Ij>5SqS11#G#Q*h0w4a!yBNjUu}0J+rm++wqy#Yv1q;0PPd>!^ z-unqwRy!2oBv)Pacsku+-m4sq_CTx|_0enx|J#Vsw#ci>7VmuL`#7;wo)UL(qD`ii z>>liUsJiGHOA>$2=iY5ad(SRv8b33gty6N_(B|GDv08eNFSR=Z+^M1oB@#qfZI(E2 zpF#stCCaW+wUwd}s;!M#FC*F% zvnR%hU@Xz_^z+T2Rn&&r&Kz%k<8?gr;0cPNB!s}LUiG&Grdb{x=cPaJM7AtU(jN{j z`7tSCt|kvu8YGD>fy;KmefJ*a{ny?=JIqqYkr8ajwvjO*JRCC8F(YJW8xv(aG0BYSNlTwv|mE{dS{?QwlthSgdI9EGL8fy_% z(@NvHL5z8V&0Es!OffB$I7Nd<&brPBz~*x7anx+&o2DVydr3_jYcTC%>>D8nH3J@a zaE&xjs+JO3O4SuYDHNfkTTL=4JLnbL#?19dj5Eq8vO3RXm_|e>T1t09Xm!jFUXNh^ z;SIyZp&`l0LyE>MR?_PdXBcxQT?F-B=sUAoNz6>W;Lq-+bVNu_8hp;U&e!ttYh2*w~$y!}w} z3@?q|kubL;a!unzAITZ2nH_B5V$QG?Ylb&oAeZFkmDw~R?QGef@6l%ia8_jG*8tmB zu?h>k@^}845CZRi{|(&mi6eAc6P$g{EH8Y~)ok=f1ai)Z_(ns)NFqziWCndv2!HT< ze?v>QIt(Q9HtTNe$Yr7cBwZiM!L$6{@C;BbV~3p^-Y9iSt2g6U2|rFvw{a( zpLT~gzxl(I%+SIppb&9rBoGEp`_3j6Ktc6$5Xs0 z?M#m|#wgw9EGBd(rL-tYOIInX+-g@@IjStJ_sv*Ui+HDOPvE_6UFEu*bkH=`?_SX4 z(8i&fc-9x{0V_MyJ~MmW;f2Yxka7m>rY&UWNRUht+hjwNA|-P?bl^S!K6}IG81?5^ z9X-Ismt4X0Y=@?{{SC7uO!&44F_EIz&!|$A1t*U#bN3yeA+TUJfiI|swtbum4l3Wp?Ns+g`{T-CDlcbGfdece< z-*lYmU@**t3FPu$n8Z%5nAqOIP>F-F-qE)q^PHmAcVq-vx*X= zu->;z#}XTCIELJm+MtN{v(=1|vkEnog~=PUF;IhD4wQXiG7K?|fhGc{M#DFyj4_NI zF8FEGh{P_)SkeRZIz4XxT%Z5;OMk_y|L`-+PHbh+^!ec*dM+qbWs49>%Cev=3xft# zK@|dJ5hy~S-Kvud#0tQt%8+CsKok{#{=e`^;=G$&Bg03z(o82b_bQSrjA?8FJ*% zh$c2j%UWEOmDwp}DCrfG#FcKo{CMrow!&v`zJZZWY;Nk4+=YFLgdN{2o6>oxOPqhp|D?>pUS_J7)6%#Ia&OG#zbN21?NB-KzS;Oz)vZFuCSu?xXva7|Oi-eu$ zDZSZ9r(N>bf4;%reEJ4jPxG7PSpKHzleuSWFFNX{}Lf?W1xOl~tO!X5JROse=fl z!V)qCuU$_xQlh#*sJGK9au%`|TiIn0hc(tr0>pA}7|AL{u>@fW6p}`;mcce0W)h4M za&l_W0wmC+4x}C>TM60*-~AT}W?up3k8pRhfM`GwLKG7kh1mU!x5g+uyV{))Ve@l4 zH-uPHNMX(mZ;n(DD5V67&3|GoA_^%9loVP}P*SFfB329s1s5+|!9V}EJE&$FP8=w> z|I>koZb>YytaDD;KZ&su*|Ipwhj219L3!1%r9^L`S3WgEGl-yXR)w;B@>+< z6O$!V3&PY^rD{VO2%oyX&;3jH6RMHz@0X>Mp;G%991{3;awc_>rNWCzU(`J$!R-Q* z&Euc0cU&qN<7k$G&KOxtW}{h+`t0$=3C51_`?MzAB*X4ONZb#w{NZTN7hd4_iQ%DGCwojZ%jYD0tIP@~+R%1%c!)6;D z*}O?^HS5uJ)BG-M-05UXW#=BJ7GXV=Z7<1FAn_@7VTN?7)?G#L0=8y~$6d08>7CFF zpuZ?A9##5-$WZ(A>s3}|KZExDn+?^^;5ZF>*~2)l`Jy9BtnuGk&>C(>LTPPCD$hJi$P|RjC;bB4{KZ_B$2Vm8; zvrV+!n#W-<%gXkb!PnvQ;>MOd>6bwL*BpIUu?kc0G=0BzfyZAYQ5G@b zw#`-%r@ul98qfLCFGIf%XZ(E|Wqbi=m@jZeBkoiFPJ;A%-eu8jlu(+nDw2pJVPh~t zh+}u9Vm5*XOiOrV+o;lIi%+_!Ajz0V?1E@^iP{bMPa|S{zjVb`Ow_JwnAk|(u3+#2 zoN0o4oa`cY4+24P7jUp<1|fJqDT5%cbe!n~QF9R&A#bZ-k?_o>8KMb+5bSrwI@kNn z*c_Njv}$kSs1EpGNyV%5Ytq?k~wkIq32kL3dA&IeZxMNfO%9)7uq6}p@mR6 zEcAySKiAhj{yw9eK72C2)JPWBGr~~w+!R5O!ZLn`L)fTCW2u;2O4)ZemjO5EATN+j zAy~RgvQ;8zfk;8f8bYo6JOqLi2=3-pBWIiW0LciqVDp$jK%~Gn$}a3Y5(rY-aZ-Zh z=A*&4Z}4+w#-Oz8N`a(&Y=LTULU5))fMU!fqJ?4o&$~~?6rFO+NV3K;g3ABKOzA{v zG96#m3^MH}niB>yY|2dJ8Vf)QLQzpxrL}e~%zmrmh+(tAF!pIujYy&l{=8BmT3B+X zuNBS=+0l>RhqzCR=o*newQf+SHInv;x=v)BhCY#XA{#Wijxr$Xkdy|f42Wr+#DJ(9L>-XmlXQb7 z4QSGcs%jw;Xc$n(6;wwg9g-N3WCO5$;B8B{AxSq-Hh>LM9H6>p0apB(9fBoINN7=3 z_R72iw%B7x>D2DB-?U&b7R~Ev%Eh3bK|0e$in-SXC_)>gpl*gJCs`dFWOZ~u!*r6W zv&{BgLw282uw!3j+gZxQ%z)vb=E&MfR!7I7St6wY61ud?wrOd{TB2_5i)nRyw`1`f zH4_&Z7Q65uP-q||*Pdudq9 zGxmkY!=QIL=j^i|7Ox2=d6h)a9_Q@;1uhHEV(Z*icJ67h`$A#I1xj}=a^#MZSN_p0 zoNVqR6p2*T){S00*USGU-cun{R)B!Jx(D zOwGmTZ)Z5lHQ*4N+Ro>i!8B||5cAw+q8$xuYWg%yP16MH*_$>`a@pcAd@l{=jp2 z%;mf3Ow2JiInDNkX(s0;XtfGJ*jOKN?BFT~j~-!TW0`yJImlnV?UUSf$8D@G6%=e` zwzEKx3Tm?{3ahd~6-p@x`9(n?mHWaBsuo%iw4zAn5epO)u|*us@gvWEJkNebi}fYt z=sg9ueKc|K&>BneIL8P3xleE4j40~qA!(tSZPsW&vQZmiC5B&m{R?lK# zcAo8fO7>n9*ml0sn}I{O3jh00Z(=z;Kv6&}YwP@>W)Rz^L7rfujS++ZzEw5>ZrgZ> zx4!Y8^5XBkl2|()7K^9gdzl!_u{%T)MHy_z+}uygdt>G4vsw;|nkU;=&W`mSUX}-i zxjs)xM<1-!JpJiE#piBWwMz+JGkM7o4D()+qm}HPqVx_pv4|Ktp!rFf+z{u0EeK#naAKMSdo@` z@@T+qNdyUP`lF*n4)C1kUBe5%<9WQ|Q&%56Je%|w*TM6|xwzhZMrcB8#CMkTM7lX)wk|LCd21+eGPpzcXic$+i?U+hi zG=o`w;AxNN1wYzhZAm$HU*L|9DF+U$u{b)(vEhB(ub<<@!s{88hY1oqBjC)8FK?rq zHcVmL|2MrJ<_kx}qpR7oqM(VUHeqgR*o<_;6Yd^ShY4yKsYo!Xs}>1X5o@;^Mvh^f z*zH!30EA%8={!mtO1B}(Kv@VyA%qHx2Lwx645bjtV6zYcMQIUlt2VUUtWb)5zqDF; zih|YE0mJ?XNYu@`8P`=H6a`WSib|-;K&xHSstQ`Il296xmQ_Jj78I>O*%HbkP*p8D zor-R!q}S`Pd(Q&j`~6SjSAYGV@fUyjn|$p0Kj*ct{uQpcvdwz)Ig+eV6m5rVn{!82 zGU{;>2W?`@Kv|ZgV#Gjh=JIR0yzTA3&0F63JN(?g`ab3sx~M3_x~56qu|_RThG6j{ z^Lp8(l7H4Twt(~7X8D<){SIFLreEjp-udf1``dQ281G_K_X(jic<5hN+>wwA&M+h2 zEq^14>>P0mDiUduch>iS?bx{w-Wv>%abJO@r*e)FCRVc|QEXH}UiT>IW$bXp)-gW{x)<_O~ViT=u>#ldwzp+u7o4~`^HYqOzJk}rW-6E zY#vc_@K_4IJ&_$3TH>iIo(X_4nSqEzpg4s=&Md1uJVvoQKjlv$QCrkiKw>y0o*@*4 z5p*pzQHS>BEcIRe+QeB3izV%uF^+hLNSg7pOYl&(dr*o{_=cf2t%7L?V>&Aevb)@b z4q2lKCe<+dwq;X$)6Qq=JV=2i-`FTYj8>-+s1XsGXwiS1&@|zl?6a!e)Er_Df#hew z1CW^Jfq*x4F?V(l%F^(BQaJy@vv|kbevhX=^#WGwdkIom8FTbh`C$8;M2!#%Hb%Gd z+~;4$+u!~tTzS=Aq9-ES9N7xu!eNtrV?! zTErIBUdCYHk^KBMFEe$%@cy{|w0;bD+JzIbsd-OM^m|Gv(nM?4kdrti!Eh8w4M0gu zx$(9O2{pP)crY--EwPAlW_G)RbEk=Oz<#y=ZAR!b0gI@kZ)Mw#97RO<1QyOfARv9P+ z$|6{DshaRejYB-|KqHbjYK5{4Jaqp-Uhsln;EtOXnQ2X0{LJXuwX2K+sp4>1afZPD zCRqw)RTv{BweLqY8&*9qYv;D!20rsXabNp*Sd3zeyg8C4BDMooR4aIjnk*d5=n=s@%&J%-u*% zvq(nd-~@+zZqx|7Dg&KXNmUwbtE$o(_?6aYt17GqK&xHQLXE22Zt|14p_*T|MtMmRSjuDzB@z}>+!oT{LKgxQ#6QM#A2rWkS z5|>;t$)CUWH<_897&|R|%E41eF!6=`XMa~kNvkMWTO081cYT^a{DXJ#%2)n1zyJI1 z;;nD_6pJf;3W2H&NFlbt(>Qy;G)Y+mu6zHDJm)z-$K9W;nJKq1@(cN|M%X^ z|N5W*n|5!~;vnvx=JV3EYXUuliWH}~_n!M$8%*$wr?vUOhyIe}#A}GpHD^Xvz-_lZ zz)$_u&$GO8*tUUFtX+{5C?kX(S6+D)-}`+}=JHD~=A3hPdmLc%Jg8{_BpB2Cu3dNC zagc9&-YYnGaDl35k)%MmomcB;(mLIObx3MztF9K~K8h!yQ-7eDu7PvVkiN0yGl z;X6uhzpmlPp=FkuqZ}IC$ANGMD?8rGs61%SB&>AQwEx#O9+pNi)rN~EP->zMJQYMq zbwRxjO>Hrhs#InsCn#wVqK?xOGL-R?IBK>9@oESPERZ%`PO-kf$NtYu^3aVP4&2z{ zfzK5@@VS!vZmhWLri#0767KwLm;I{3~Ac?Jwtp@4l0R_w9n=dCYdsXRdP*bL~rM%f%eJe=DE( z$b-D%<^PUvd(MyX*KhqOAp~>UAiVWWALhGX{PQdwm|?n_C4`1D2t{SuRK2f3wzp8% zG9jzsH1-XvBs7jFN})Fil9U1=jg)$r7&eJoMuf7aDOO300Glhw8^3<-<6$vMh81AO zU(^~A-}=%^I-4jo4WuTZWzFK7GR2^FvBhz(KdI6fmKY3iU?)d119N~)3l2jI^`Tw z)n0nlE_&5Yx~(nrsx3^HdzmV?(W_=CrRDj#0X!bGi6)Ey6t`UfDGJ(?6|HKDb~Q`8 znxe4>`>wo}}~-CzD4-~PfM<{fXliJA7(Xt(y+zAI`D zjTjr6)X=0z6#^6OZEWj4nS1YQ@qIt=i@fw@{}-z(Lw@VG-oj7(?I1~5HOK8^QqjMr`bsmvLR|L zE^hRTKL^-`uYze{GtSM;s%kA_@$;*imkDZblvgm*djhY1^}BiB`>)$%M91@f70~2R zOnBgzh<W~etK zbX+`@uV?8eg3V=959x$?Cd0+N>+N^*{OA5Z{O4bK9bveKPSLa0McL)7*;{Jo5??n# zJW!}6Fp~)Yu-YIYkSLgGPtloCVpN)>)I(?*YoL*^4l#AuAcdiY4RV|(-}~1%9u}iy zrI5)h1dw(^t$iA87&VbmooH&`G^T;+ErEiL^%!yYo>P?(g5dQOM!bF{QZmC|-P>Wm zTUv#TrJ}6;PEWusm79%o`P09knTs(IEpg<%wN;}N+%0GCMpUb>s#^4TB+(V>Eu|0zZNz%hP51H>Kk@UBE~6^utSO&Oq-mi{A-+aA@iV*2 zt&dk^uD6HVZd{=lZlhJU&}coI?XqT5TAGT9mAu|$4=J1ObDw=9a<%x_bhksRXV2Z# z%5b1GLxa_gSe#`ft0+Tz=B!b&r1%=g!(x=rV^SxyRBbqCkBBkSj9@s*QeT*zt?0^> zNngQik7VCh)C(Mqs6@;{QEW>#oB;%%T*A1f+hvd2GY;Yu@Y)i|`DdySZBG?)j#PdQ z34rfz1>S|LbDCNhZ3Kf}G9v1bni0W6lU}kmjuD-S@vs&kH52)n9ECZ_^(?Kx7k9=z&yi6zAeh$(f+1PX|jln8~GQ9n++Rx1#*;|&g2pjIe- zlA*GW`9@-&JfVLT1Q*ur>C9aobQC4y=}j9zS%3y-{sTdW(R z?=>F;Dlv==)mSSzzl;gWS=H})bDdRf??^kpy{TS0YfJ>O8L(qV!Ly!unbq`+)9^F2 zaVCsPSq47z!B6wfzxe>Y;(Rm?01I{p5+RsvWc4H1oP#%uFfUaRf@KE>D_AR4D1%Un zShG4`uUsde#UJCJrul;w_7aDB3X%${RJiymnBCSv3V~Xn5t^Y=$03P^x)~B>K+=IR ztqV@OB0jM;-w$^@EJgvB+P=y$Hmq`p#1VVdwy6&4csO{w9lL>?b?fAeV(oa$g=~bVZlC2l6(2_yLx~pXu~o#Zi|5Gs<@{oP zpT15O7qZOl@f!NG*=h26ow|NG-eE3y!M%n4{Qy=usY*qg-Fr$9a}JF*l)*-%Ni`|e z2KRMH*-ln9I#%Ubljetc_~T(R%I5Rt8&DnE#-cPdsiqk=)PqDlvVB9^6R>ORG|)O_ z!i>xcmCq}OwK@dvq~Vklu#Jd}&@yqjW55)WKaNQ-+~8D?Zx|C~Tf!uc!6tFQW=k9J z^ZA9dLAkla`5Ivp-i__0G=_^=Ln(Ny#I(ZaF|@kSNM`#eexhIrnTg|k`wO4A3Ejr` zpPR*bLZFzQ;!)^al6S^OwC*rK)e9G`>O|ca z`sM!P?BJbSz(^qe!O-LJ8e&58KBg#uC> zvj4~f1UkO$wH-ZH^!}`QeT@$`9UV45Zc>R0m$6*SDJaHJU>ZdoJ>Y`Rel%*h8y8HQ^-}((Myl^jrVS{=Mq^Yez zpxw9Ss1;K1rq{n8XlQpk4%IAC6}3)|>f1z+nJ3vjM=i$!L9udSn^$|so*7g!0S{qlYsw9u}k6glrnFsL+p#tjj7RSu-gah1H|5cDSS-3e7Mu zwGHOGlLSx2P!x$?H{#4->e?74XyqMOOcCdQg_ekx1TAfHDQ(KtIva*$%%@mDu^vU5 zCNXS0+0hv#x{5Yi#cQm+rac&b@&$CCd|@#cLA}|xfLf5RiMcU%b`Ohp$~Wy1%1F}; z*ht6ekJcEBRv9+SG;xiXmKiojSR3BO>hR+{{n@j;`K|w(mweyz7&Wz#Y;v2x1+gj? z^$*ZQxaHQ50n_w)9b^1x#Ar-v(5$X4VRSUI_=bpB4*@m8L`sr-r|fShXeT^yD4U%B<%Un7A6&K)gS1McBcj&SF|xL-)I+6d zpgjTSo-;$lOGABu^7U*XHa!)apQ|6?QXltBWpy2Vfz<7eEd4NJFxQ0y36|ZQ%>N#n z#x;XS@W;<$(hK!ON3n8bIVH))p59?ubi+SGIxOCht%9V9P*j|A-r1aUUW;=tikx>* zi*qh$*nQpxXJ1hAgeUFe7ytba@!=2t1#f%nAM=c7T*GiQBu4LdmU8y7X+YaqOX-vq z*IoB1KJbAXDP=DNV~TwJEs^!u-j4KExNP-0|#rIM%FJGQ-S3-)}g25n`l5Gi_ zusqxL%?w#>y)v_HD(h2R%lUUFYEie*u)MF70yC{i&OO&Q`DmJgwMAH2Y#8c@2J4Qq z5!Weu>%LEo-8YD@g;CR2O3`0zoa#p!zw$W!?=SZ57_v_sWnI^(bwCp%wMJH!B7=27 zBc#x9;YE{lnMbAZ#JI7%F*lV}^Nn;|pq((?`CPy|ToyPcps*SSoI1nEKQVXmmtMk=3P| zwUdsoqp*E(bTmGxfIv#&3-uiNSph7 zm~G|L{GRU*Cy20}5kfoIY z%WFfH*Vb8HTV-jr&+>}B*48$tYcsB6G&@9zG|_UdtYpBN#&vrY?|JWayyi7;rdys% zOf|<&9=B)7bD-9?*0!s&YR{Mwt#+3uUUeZ&+%S)uGrJTnbP%&WGoc&BXX_pDEDB!~ zTRU$^IDRiPme}ujN{p?$ohRfq%M2qPe~|*!2`;^Sn)bAkMlk3LCl3o7gPJCeXk^5Q zH8cz;ipK8AZ^>@l?b9orR8}~DN#2Ky>5pG?mNWK{)>N2J=kkoAB2+r#tL=qd&}pIN4-GGjS*s_ zw7Uf_dD&ALq$L7kS-Pk>M#Q>ojAJk&XfQ#PV=%@C&NOQ4Z^Uo0Ex%!}fyuEA*CzhA zb?7wKGI1FYEh$okYQZF1xa{f<4T?4etH%P1#~VgzNUb$7)vW6hb!&y9y@6=y%*+@b z+mA8(JnZrC7$x5X*iE>^2*nV($B3~{qZ`CgO=@bEPu8rj3PM6!HIKP^mbr2pMJg$^ zq>3f2RE{N$xUpy6F1yKqdt{RJ=Q09zcP9qVLbA^dIu$4d3EN}6jt!&eP3mIC>Jg3B zl)@gRK$3lP+)~LWJrJxBgIWS_iY9qAw>z#QO&u-IZB$d&r@Tfr^=L$_YvO1?Y(@|p zqI=9z6RDeq*fi92!zk8_>Y7pA*!#(vnt6heACmI9B>BKHwHZOSqL>OHc3x9m7n)bGi)jr3i7{blOb#9QltAl^wCtWVhINn}slG~3VQp=s)z z&t-FBJ(eM=38$iP*lTLnHHiy5vBEmSrcgv|{S74)papHFdBPL65+)O|hSfuGbbq2> zkEqj-s3S(&XP~QedY&adHUnIP;;!s7Fdi18oPP1K8V1UVW!8#=)M^jYP_w=^V(Ex7 zSW^^ecN?y_a4Uf+NCgGf?LC|D)-c=ObLO%4^Mt#$8LM(*R!dIAmva*~*_4@j7~3c6 zu71QUWbk}5gMp6U{0e^cd@_fK!HFnGPwX@QJz@9gu5GiE?D`^}iR%Qc>S|NPYR`Rt z#!=l6n@CxeY+0CNur}o9|Mjo&qHq6c9=dmiPO%eBBfm#yU}m`g-dj-#G)-gYbZ=Zr z$tsv#1T3#?@NfUGpX6yz-NS1CPRgQVuG*ZF=6%kr5X}hOpqU8?QG;_qgtF+e)+}>y zcpodHWs1;q`%Wx6p9Bf!&bRjrK8rhS3TzkSN=upuyJmND@#9MBTB-YiqxZqm(ui6I zBpp&Spsy=LX=u9p30fg)-bOL3F(&V91AQ&yVKK_*t23L>q=_IE8?Afk7suI%8#L66 z7%-}boH#OK>6p-r3^$*9Nr#;?J887AR1iue6&4?HrhpPn)>;$H-)@sB8BXg;np~okkjln81=ZvW;_LIsqs1LZ?fAGM6EN4 zYm%tcqY+KrSeA9u5TlhOSTALzX&TzCf*m`yP!tsp-TM&#>Hqovc=D58!vFsNUPn=1 zOt+W@HP2xt+LR)b?FHWOhU&ygG(_f!%-X7++Hq9U84UI=G7~AG?)LeC)sTr04D6aQ|-GHqO^42Ni=S zxCXKAqT!U*sX~h)l*H8L$xokSax0`-SUI8`eju_oFxWNH5d+eQ#2*kFw%nlvOzpP>#|SsHNSU}7`~G!0B`OI&mL zE+TCt6=uqbZDp2og@ePaAb~=y8zo{8Ei(#YMz~MEy)U-N8jX~b+Z@5&tr>b{mqd&S z!C{&UOu;1RCNtPI3h^MB8?1&_On!MalEpmS#7PoqQl#A~nVjk{J3qyiEpyDzPBS+> z&D`t^TNY;6GC#wX*%{_$rbtQo@P}{YKm6kV;$<)U39f$Z_w#GN_F4`-G{;1B1wydO zK`CA5q@s{EMQBk-MIj}cgcE~1k;(o1>wotm-uBL4&>o~EvN?CZtrFSn(YM!zbBPDJA=}-RO z+;Q&_y5&4E)e!7BgGDf`hm1xW#HL|&b;RmMNiWP$7F~q4S64dG`>F}{Easpxcr&P1 zxcsVuYv1=;hH+qx%GHR-n&?>?jJdYW*l%|#x}7%HfASW7>wmnO>#qAWCr>J+Owp?* z2t{Eo>LybA))<#wIL`~d^M(A(Kl^UB@0@0%zd=1xI=v3vR>hzF;RpDo|L`Ve*LN}% zrfH%z^(dS%gpxu_TH2u%Dmv0(W7y++pZ8>5^5Y!_>xsof1s{F0a^IbctmzW#a*{z> z;#hNlBjH|JJ8opyz7Mpp9njSF&P2@taeChO!yU!k?CdFfI6k~#z{LIGA`}H^y+CKU z%X(^wAfbiCHob|!mhFM6BeXk87))~KeaBJh!?>T6Z9pWd=B6A=Y?tqX5$ssKp3*E1 zYi+t5kMiP|T*YH9zmVnCbt`uAY*obx-QBF8{^WhU``R0rF6O<9Vs;XkhR9kat6#~EpadAj8+L0aBX#50`T!C^WtyRb7-NH4GJ)3WT z;nn<$fBAj<;(z!VUi#7}qrmdYI(2QDJ0_*BBhPr&rCf9MK3?~h_d{LMt0qkHi*4GJ z9XO@7XwxA@VcXOme(=Y3)1H8)UvS@z!kwQQurXR5pAA_Yw;XEXkp7_0@xzIeM{M7|ByjoT+MKuT zY+|Y?w6fh`DJcDSE9NOE#XV$WoO{YX8#y`B1DEDC+k{|7=yuOWF!nD81@Yr7)aChO z?*BKBjJ>h}AJm|sol`s>;O7buv65q8E({OP)$78}{!%!TQ<&^}9n1-qv;E(4j@1_590u)8G6XsvUh+h9e5!$t+O#?!Of+ z+Ei53vCFfbwuia1Be6-WEhg^2sb*uaL9I2l_DQK>kT%$0mG1PK^(Pje{V`ekTIWB{ zz<8L9^7n7ST#I(YA(Y7UVU~&m3_PV}qyzfRIwy_~*ngX{b`nCF=*&l+_~acF%%U+6 zQc1uutQ3SaCQp-|!D`r{@U#&laUK>$TE}DUFyctVpNQolX_Q{WOI{~IFrK0M&#Jh zWsV+SWNCSo)zxK|SC?5_TH(l%C5|3GX<5x`Ibf=mLzbcy@>#G{IevJRCqMN9{_}tP zAy(5mC6%#>76i4mu0qME7WT}Y%M+hFMUsZmDDl9p%E1SRwyPTJ4B23$L)OzW8V1Dn z1GY99ag1H?-T>qa(CNb+50g9n0Xc*F@AtUXx)*o>2z7dD- zw1AZqiAx?^aM3y27-}}j-3ubl1nw0vuU3w?7y$>|&6uUBcos6gX%Fsxb@yzRsA=2` z!Xo3Qjof=i05xqTITIigXvkRvM$jqQb#lx?ok_+(z+)?Qj5IkqAA$iX-wahfVOL!k zWZh-UljBFm#N&Gr-*r+g{vhIeLrP(B4kFX7-Q0B3A%5;({(IU*hpEXfF-C`n8NGYu zq*~m@vVc8RMieQm{zr2{sHpD%VAnysK4vV8lEslcQ+sa91P|Q3$glm^zhWWGjrV;F zQc#AHiWUW35_7!Z`MX%yqr`!*bVRuO24!`%Z)s85r=ez;`mD18y<dJkgTVG#UTRTt&srQu+YAgzy0gG_=%tR z1!7EWTbKgR8#CcyIcnxU_e|p^XDwKd=U7|TK=k=bo`KxNh9+9(Kx`n@mVQ$YtfkP_ zEz{imnS;FOMZe6^+iQAd8ycu$Nu_Pd)S^R&ax~9X7wqLp-&I+0TEFChPZb>A-=~%} zhODu!eQN15Do&DQ9Xdxz)J}cQ7v7F4Ls1Kco*AujMi|A+r~JF85k%0=QR>!72CR?W zdbRc$#B~lGSmVK)mDE_fql+Kc;)##hM-$rwEh&>RgkX&f#G4tIYqmgwNz-DyA7ExG zZ+<{Q5}{Fu7y*OX*~TCiSBXue2!(f#a;TLx7`c?yG))+1w;IbD94kyKHO72u*vkpd z?0^_^EqAWLa9c>t9iADZNDl3?odo73a!o2&H%w28DY1-BHx5-tR7JIS0vlKz2K}Ac6v3xSr1dk@6*2J)m zOir~qYsWl)`r9AjMKAgf4DOj?dut~#MsJyFg03YkTCqdBYV$omvW@m!V$>Io+#a~+ zGY#v*bw;c)41H>bjC74rTA?3~Q%oH8UI&|yKL4WlRTncJ6pf4Yi!N7!#x6 zh)z|p_v{6ZKDf#cy!1EtcfatbY*{^z9n}tqfl?~UP*PG+(xy#^CiZyV3-)mF69R*! z!0KV))(=OH99yR;))+Eir~^g}NDNt(C93HqqHK6b!tTlL)k@2aX-=h2dycPVoFPWR zjZ(+|YB#G|(C>YYemKlf*DNhsHyG&#!_?>G$#w4dl(N2J3$d^-@vLX>qF`#=tQoCL zTS$)DyIYZJvrdIgPt>V$6|p?8CYe;XD7kftNor86X`=1D=q-c_OoE$3z=EKeDaiLA z=4b#bGf0|9O(ND-MQGW>*3o}d*WMAu>SApB3%7`Jl^-P``S~djVH~j@KeGm(2iLAy z%VfI@V<^-sKyikl^u`r1TkT_bawk9alfS~tUiQ!V+-L7&c6yR+JLl;1Dq<6TcQ2cl z*d*#`d);VKQq$PasMMaw*`&z)+yuMN+DdAKU;X93vy(=KO@QONg|IofWt39Ho8cd;rfGz=LrqLu-J)TiI9^1z*I zJaD7Z3~Xnv$3CaSHJ6-2{QtN2rm>b~*L~k_?R|zjz4z+XtFEEhLv^#+5(iTpA}SI> zIe}9L% zsyx@JK#Bg|Uix71G}xwxJx;U{%5Qnxk;r_WS+h-;*{VQEqG8luqkQ>~a=E|GMDC-EQ=;xL z)*W`@B_4Wsmyi5-sFhn^EBL$r^UK^geu}bO(s^%L`{~hOS+=%hge||_OJ3*Q z)+~9YeSx3(AAW$J`sojFd^#tlg08bKGZr3jY?V+H{M`TY3I4&~`8-#PYqWIsg{yc^ zVsa9U)tY!D9bnb1dFKx-_+S6GzsZ_8Rasfd?e^nQGfhqp8~*yw{O`Q_WI>d?qHi|R zaAPo7rmlU9Hs?sP6dko-Y~D9{37bu#eyzc-(ZUL*>BJX~HM0-$8-qe%!WCx4u76{;*sIMgc6^J!JEiGm z%|bS11JQ-TsxLieB2LR%VW!129IE-js^$obnZ~)IQL)n57$Pb4EV~6Qw^2@Mw5LId zGG(UAM>k-}exI z@nP&X#8^@hn~hTJa$iqcVZ_ffp`!(8hhq%QU;;|_J2GG>oSyvVHD;fH>F%Htn} zsx}JtSO39+fBMT`MZyWa*s5N=bo7#})R;sH*4wGmmLygPWz~AFc|4ZVyHH86RCW<; zSu>QRuBnE(Tr6+Qo7p9GvD4gKLanz~u;cY!Tdr19M(`4%Ou{6a>=E&{K@$Bdv{;27 zI^)F{V~=kl7qh-?8uBK4yKBeNj>YO}6NeTJ8wsH2)lH^5Y1(n$-NCWX+%{ zw6vOO#LPu4QH;eiUe3O+7`ABaV7^t=n^_!FNhvksIAPT7b7}u!{;R)riM{JR%_8vf zS9<>C-&^zIi^r_u31{gR4NKNKXRgPb_Qx!WSE;Xjfu?$epoLFZ&SVZjM$7F|azf-c zA=+;;?ntiJ>&GB&9_$efP@F@WkXHNDVeCa#_C?1KSuch8t-zIsYA#$+q)a^gc+Kha zQ*OL8Cx+gfbFp}d1=;*Om?>qNOwka1n?;?$BKp>U3a_oO8VSExW6<0m05+t+5W_K3 z$kIfdo^`>qsJXdiK~0#W+A*Tq6-sW~BTi$hQN18W4mj03&=FoXV9Z!%(42+KfyH4$ z+7K8aV1AHhziM->(HT7RSd3mC*fg>9An|-MR16ed0jVPP<`q`62tx4{@=TL;FSvccmX7QZ_33m%941y*O7;lABozO0?pnXM2Wtztu z7(@-6ox=LChv9dx@&2l^(9AiNIbL5wH}{yfBE8J0We_Ys63rP0^H!o3#$ zb?RE|xCRgdS@dk+Ae;32=sroI1*KG!GNP6V>wdz2^6`iH{-3N^FO>D6@Y(+-@P*Hx z(u89g&RC=)R-US|)+Gx$W)W{uA3TYM4w2|fsc!&b%wzBKRwk0}?6_+{LF@t9)!U4% zvP6QiKA$jQm%kREL@gslo5&qED2VR#6xBEJ-X`am1o}iTdCfXZCDz zv6>U}OK`#kEQ`RNyL|hYUU`0h?Z(2odyGz4FL$Zago0`iEPPE4dbs(5FfM8?J_Hh# zy=!po(v;_Z8y2gMGAQZ-W%Qtf#?PygmxdF-%o6-Ti)J&(AYn*$Fyx;g9$n7>@pVAl z{ITLA?<0(xF8*Vzl?)Md6T*$w8TQLDlDr=dqG;D*LhK2e!NAFI9#0w-*^2FCvnmUF z*nmO>RZIODG>m5>XQ9VF<@bzV_PYgH#;+9 zH@jTBWOGrnk1+%^9hAX9kO5qHX0PpK&U+!At|Ml;1quqWAaJB|KPH%8f<@r#FeY@D z`S6Dx;xGJnQ_8(WY7#I1j_{d(*zoK#C#>a!xgN9N$RhA*MTa$xI7%;5?7l)ddl|gl zt1)-Ud=y`dDyad+*gt0w2Z#O}rs{8c+%=%saCB$?K^bOW>N8j$&~=egDhuR^Io7DH zFSuGIZay2CjVmrbpcEzS+@HAiP|Yh}t2sVtsY>e))#GNAm{5TUoXEyZGGECB&rK9D zn#h2VLE}P{1rOIK8zJ9vfcQM9o&Vr~%338K!*qbRakBSA&Np+vLkI*>+fOX=A3gCjP?`hprfZNuA?BNu)KsB% zGqIu!BSwr^He){av4{Ede{)QEp{Jh*Za)?H5RU*O?B{;OHec)gyai2QseqNkbf zQ-nxGX>;0^gI`2txlmqxHnO{0vwy!a9J`m``n$%Qyi{}R6{sX3L5G~%p$c-)2Ij|@ z^Xd$o&!9OT5XqFYgGGHwJa4ONj<9{&MSi$m6HlMH#g1uqyxogE>a1DvvFs>6#W4|{9_OD=l#yuB#G9XT%3S#5+R>2-;0@R4zR%)w~9mCCxawA>wbQ9(25&{ zndC@zJ_CH*RGUgPAW1Z)ODhA9Mvs%!jQX0GN=DUH{>;Z8;Ya^+MJ%9ODQ7PRKJyF0 z=RbYQBHdzLoN$JLq!a7Y)w5!i&Nr1q4WE94>w|Uuv{TWMTwNP$76PT7G zb}k9USQzaJ5C4%!u^#inQx?t6p^+@ixV4>qlI>=CWDmvT6;?C20Rm(|WMLdc%^dqo z4&dgUxZq}|8WT8+nHYf0AMx56Kfc9F?D%oZ>@&bRfe=Ezlfj2DkO(1^4jT782%c1# zL6Pq{gTrGVIpCQ8`58j?N5tsf?bt}^$*JbbSCmpwQ=|Qez1?g4^k2Qk_x&VvBvr1T)39ZW*DGB0eK z`6U7%W`>*OeXHZON4U#C*$fk&JcDQ7C6c5ej1K8m7ty|^l*$-C@lLXS=OG5xi^R)c z3)F4J-aDY42*pIX{sG}&caImIh^*I8dTNQK4Vu6kz3C>5!z43S2AAl2nsA%DY-EKh4=h$c_t6JRB2yQavbrZvooouF%9Y6XtnQ3MV8u_;DYhb2SQ1eBy zza$t)^08wwf5c3|!cD!bX$B80WKFLvstxmW#4^6Z_|nrzPy)rk zY$1wDXP}U*QL@REwFv`o#Q*X+bNKgW<9C1G-g(P_lGU39gzP~h0x3dVF|H%a#g4^Q zLSbo)o}`%9E(}Fvy;g32J)&n7vn#@6SCI&p9#bB9*M#F6BaUu~HQIJHZ0B>~kgZe| z1xt@Ku)J1#L}R$z7ci461IqPE$Y8N8(H(rdwOsRW>#PJnrlqcInOx$)Bx@B2&ZOS6DUXFo89Xvx+dkD$e(r8Nz%DU+|dLEXq){Lfs@uiM>9JudM;awl7 z(UU1JJ{wSN7{!v1>|qz#=FfsIktlYJ(VIpD-B8B?OHKDzPL0|-0ZS<{0JwqYW{wzt zWrC}l&qmiGgVQfwo#4y2SdI-pJ+@sI&dY}Sv62durgz{YmK4wrQk9k z+=+K*-lG0-aMsNav0edHswuQGqpPo}7&A+|6x}|PxX(}irEC1Dzd9mTEolzjx$xw_ zjQsNd(eT`jQx@S>mf?^EC!FgEt8k7=OGiV`nzb%C(ifOqIHZ`pilmVN#6h8AD~09P z_WK)46znPf-sAQAZ2$fG_wtapPNUe&sxF{lSg~6(p%hBG>O~@vW;wwYoQ769|AI^n zCpw6>Ji+11aQu8p6$ z6vPu3^Ip+s_CQWFbe0NZ^9=X~CQ~djMBNKKj*-(@vhe3v%Twb+DSOi*MJgCmGfFcwUEtyCm-zU9 zdw~!9=|H;_x;e~m1%B(7lz;tCmfSiyqAgBX#oL_gA!nSj#o9;5BDPZha^j^MEqGw6lc}nqn+CG1<&lXsTbt#s-Xz`Q{1zdjEGAGZD&Un&cdw{#O;h@^dSm z_`(rwIHQRtoT~*CS2|}c3tCyR)-^p#dOhb<&(QI!jPCoYX=6(FNqjvSkC)__31aP) z%(2JHDNGt(BV%`K+(n>#<1kHPKryRwm<#NGk1Ys-jE{&qV!5)1hei*_C`j~T9rZ@u z(6xcXn~9rWjmW%U_hKMaLUlp8_CDp^-#4Ms5r;1YnuSmng;fNKIlK`Q>P+EgX3Az{ z7gdSQ6uGVxoBd4)Gtk^om%{V1tV>HEQ_04t3GS~944HUpO8$Ht=w|a*+>h}5F9VH< zeP*q)xfR6Ns@w>}wiXn@eUsq5%7zYVl{@u9DHhKvC@Ine?PgrQe1ZS?uUzCu|5{-7 zNKdm?r{tme20yI;*629Mh@Rk zb9#k?c$HelNGd7An355Zidrg0I;G|UrR-4lGj@v^@A^>1_x(u8)ek83P9l~@mb~y~ z=Tswl;ePxjnYtc?l~~R8=(eXbJ@1 zL&Zyrb(79xCWTl_Rl!;vX|8lMCPy$oggm*pi3m2E+TXTbWpM9LhsBgUoku}~Edz(T zU*q6)9b`d9HJud2Kok3#wU$gLH9z<#cKM;d7`br0r#Vk_jk3O3aO1ax&-_xyQ(s!K zOlP#C+jM%)LeD&JYe7#-BTH7j^*!j)it})jFgl?=c#1x(5jD++N8c04so;%9F%9E% zurNg8W#G8(z6igi8pX!urpzfdr!0$ry^aJ*(;(wl=~P&)OUft%MW|{{c~7$P;LxDa zzSJfqZoSxZ^t7=sqp47h0utfEL&{@67`gw!n$@kE+qV_zp(-*vXVr<~0&9lUCU9rh z=RabpF_!w`8U{-rF)iTxsk`{WnnZ{l$xWg##BYLbC~Ohjxi-_ue2i@kV_Il z-}t}a*Z$$0uRnLls<_QE9@6L$OFd4=qp(XYyVN?R=*CRS2@gFw=KKD5#lznpm|Ri9NQt$uI!-+K z3E|)Ve+^H4>6~6y#Ii+$t%lV|Ly|-go7-?*08S`4MLAT}4Oy&(Jy`FEVmioI_VU}d z&sh*QX&Usb(Vw>6buOv~rcKz{szU9XRELJ0*|d+n83<^yzstFRjN*wgBRqd${4D*~c4=`~~0naSwp9 zJxm~MM$Z0;+uM{wg8*}^dpLcB?&KlHy34fKBP3rD%ImZXY6=-Kk_n?Qqe@c>ol)tO z-O+@1y|?DQKUi}02NRR4AZ3r#(4SU3^J(P^|8&KZpIb9OYY-YFcBI(QYfBO*Ek&&Z zi}7G+;y?|q z?F^B248+Q&gb*Zj1|orkRbu9jnnKvDaX+jnxmnU7 zxTM?vHo1^&AJf7{8k~ik`JLZfa%+A{ALeu{Sk@=3(uzjUY14w11`RDq6Rk8f>dt#Q=UmUI z#%I)*o}rgDl1fy%P3f*DJQ_J;ev0LHVN=hbN$gwx-GyF9ng7dUZRs0 z&8C^B+^F3YV1YBh-gDDS)PLJ%+gBh2^`#q3^8}l6vtea;@|}Y__2z@vRAZ<0PAsZu zKcXNq+Y#RJ{*p&OR`U2qC*1d_B9ds9iEah`5}M<{bH53n|7RUfe16TUU!t<6E9R_q z!CKE*6=!t1qR}OdcC@;J*rD3dXhW+FD?MkShm2)0?Lwe*1BNHoV6~26)kI$v^3JvYLCjAlv?_<=A1dJ zFlTb%7GZh=v>ez@r6*-p%i|>mgx<{A43wPk_!=$ZTK66ddGz6j{LDV}-J`J$77%kX z!37~AR6a}kR_TpRT0F+`=ztNsOk~$eQ?&#NVh|#=YnTzyfmBLO!Gwx2Wj`f$Q)Xq& z)dwoBzrW=Aha;Cin5YkW!bB)bfg-^=u)GDgpN5xzOL+c?#MuiSXD@UdpLMi-YfdTA zt}nENqDMsOdm%~ZOQ|W66ruEP`k4$+Yd+_X!s0iA_R-dT&*cEUFXBT&2?T0Jv0yqa z+1)AFeMGqL-H`|1uUvVbvVVU-OQmZQsS&h?el9Ft7H)o7c*!x`!o8m zpeqVknLg>u)?%f2_!OiH0 z{4-m8$Q}D^P>GwM0g76fObYh)YKl4#COuakEx7icz`?r`qkTaNWp*HxGd02Nh0q03 z2dRVQG2H%Y;KnBt&woLA@%c5kPnWF25*?keW=-3#XjrA{X{XT)kfK@CPIBc(1VkPGNL8QB;Xo2B-p3Cd(P?l)i($Q`)o0 z@>p5l66QzHEns;Fs}p5;sx&L%{J3Fxo}d>(P(lsWBv9=L`Ie19ee-F&=6Us?X2=;)J24W#dG!QuYjfLu!zIF2_ShH>Ms6MJtC#1%* zr+fcs<@sd2t+=bnBkp30q^7)}&k~j=f%!|q@eSqHGs;U(^c?;UoZe0>Qcp)iE9Wf3 z34K`8>WZGumVFE7v^4bE(E2I?312NBnFdL;q+rBFn^r9PIiZ>}JGezEjv$$-W#*MS zi?!vGI8coCa33Ydm7Jo0?6|*yXx^joCP3jW2TKOX02DXDEEtzlT()Y>ojw&xH^*|! zp+zW2^ZRLz_8Er@RE)h2r6B6q(>1I%JW_&qt`il7*2GW%iINcoW6y^g5s0XckglQ* zBc_vzM;|G<`f$PC1A)D3!p=28N~m|Bnk0&`K$$42NKptx^%dh2u@Z{BLT{%eRbs@J zm+%Fx~$5fMZioKVS&_Z7CT`UHY zfuPd4FJ?i++&egH6WGK|Oc>upB=6z)U4W9uTMHN*H0G=t#VS||iKUDfD3GvO zs4*ecl>OM*wUTjBQjZFXQW(twJNtp@rNGWUlryNNFy0A_rh$59CPuG{RY&`}_l=;P z&^6F5VSO(2O`>1H;tZB2aCX?!b+GPwZryA+J58)Qs~9ZZJW4S^Frl{&CoQdXmYAq5 zy*BhTzP3y|tOk&@Cuv6?tY?<0`5OUB>SNDBJ_EctMV97}SDt;-#%NX=MjLcXemzCoE1aCus~= ztBZ7JS4ho-kS5f@n6OBNsQ1tHY+TEy3LXeEN;;DOHMRBVrJzVw*d*SyJ?2%vQZ#ET z$*>YwHWCFvq6IgLA{TYpy(SM-mTJodX)0(?a>DCs`7wJI6_ks-{@m+VMfn z*`~234w%5Jx;d2$M7^&w(qqR+^rU2!C$dCCZ_E&)5cDzPgN6{gYXW@i_A-Vs6^blKmP4v>x($Z;1 zM}wjy>FHDFrcYFSUVD^=B%sD)f%c@-u+|kF4aNA3>cUIJVvQzC+#G^~(t4yl z)4-m&w&lE=(J3VVtyuEu+sz+&qwxm-3U4V`#DQX8qMcVfsn5RC3>-1%K3O%QIrk=R zGR$~xJBQYUesPt>@d4USD5Yj3dzK*Rb>!wJrQvu6i9o>2HQN@56qGXZcdhorfNPn* zLM{LkVzOnyGuQ?3+1E9VFIFMCPpN0eFgmttPc?)dG)8HIPG?iHbuO>#~%-oiPGtvT zsH_)p^7MQHy=N!G1_*+gn+BR3ShZa?S|ttZR;uRx6v(ESq6u5Vk7VQk$=1D;-ZGn| zGwqQ&6iBqR#gevP(aBjmdiHvA3CU6N%*`2SH?a1SUoV&fTLT3Vdbj0`?Q?@F zZFgl4#uO#-q)D5fT_3nJ>>?5HU#&X}0SFt>4&7^?2T8|~|+W9~Zd;83+rk8ig?;_r8SlR(MiZUW}@Gme2n zjeRuDvDNwrUJDd;jbcfI=0AYV@C=#C!ENZyfY45fi-%aA*PM5qHF%Q|H6@ZN5A2x+ zi+=9l&FfHWhlE;RF9wR+n)d5W_L`KwJ`;ymPF@0h28S^tdwj*l3kehudd4(fL&d>=y z)7rkSRzQ;9uWeJT>t)uY>S_I!Wou%Xl0~&cuqeGMXfQs@Y_LQlJuNFbU8Aam07bQ+ z8qKLEE4p~%W~$|r<)lPhd)RH{QUNmnGcasfIG-IPmk+o$5zU+NJKj9lZ=-PsfWlh> z78_ZssJ$Nk&m;RIZi?A7?52=ul;FIQ`3{@yR?{BLER$pz$`a|j0BMXg2Q;f4QdgjD zHC#iWwyq^&aUMIZA79L567Nu-uhEIFt^3$K0&|4z&hi$)CV-@wO7$3rsLj~PiGk4j zlHG}3J5sWlz7H)F4OQqEjhCeI3?vcCHA-t5VjvniYlf{`MOE5)Sj!xB!5Br;Z?3ic zTJx~J(XSOPyVE-$Zuek(n*n9}%g*P_vu%Dadm=W&8T-Wm2ypYu6E6)^TSB}AGCPX} z1dWzeN*U9wMzl>tntj^k#1%%gxD1g_dw2R3iGk4j8i_;`e6j26lfghVS$VJjhZpD6nnz1#V{^dvQ=%FL`5LW7cs0_Av(R;QGu604=l|t4^e>lb+0!kil6<`bm=FsQA{hh(Nx7!l3iDrOO&3=X# zg}GT~Osz3hCLYE>W#AdJX6u_H-Ei)tAX*aoecI)SRnwU-qa)}?&{x)TM#cJ(iTMXX z1nsl=m*K8-(v!rT`)rOyU!q&_xQlmn=_MhBb%U4CP?k_u4XHRrLraL}+gQLd`)O`Y zZP5bxm}Ww$gT~G;SS-Z85%V|1-_LB;W;)si96%*u8ZnQ}D<8u0s0V9|%L2q+M zuziNYC{cUQfsrHY#<~Hj-V@-p|LiAaXKT<<8;$>mYuqKE@D_l@X0ZHPz$nz*KWpp! z1{M=-CI4r0I3m{fN?f=G7A?<{w%veY9g(xoV6W|eaP8(!tzvP6po)eZfV5%n`RBI2 z{p4L+!ccC20anBs0Ah}@<|c6NXW8wz_VBpIU=nSAO%4FtkWDL(h3NKs`5gB5pfv;o zjsqkEiQ$g@NeuqiAD(d+fx>Hq_3n-=4gT=lEHWW6ako9T!IJ@y-!-WcXMK|AT$$fu zzw`U%SLFBdZJH?ux#8VweW~pGm|*8^IXTdxI|KEKZk=x%uxXgH2kH08fqX2)HArTx z^0v&9S!*Oko#OT1uLsI-l?IYw`)gV-edmn343s=J0($3$iT*dfHsO&Rt5Z4 z?yD$6eM{a?5VQZC*4&s`GORI=w*|8Q^XUydX0~Nf%lB@tg^XZ}w+x1gpUVW-_s?%+ zQ!!&=v-1Ej$oJbrFpAhdoA1mhWLKP9^sfWJi00w^o0!MeHM!4Z@4W?L^EMja#z6VK zN2Zdu=Vdd`HbQBz$nlSjma&;Vi<#|Zle0(Xhy8G0CkwPwtC-(2h^gB3n0)2W=da$b zFzc{N04g)hEY{?&^ZQ%y$Rk7kI}IG$<1GRT zTf%YghR^5z+9l7KFTmKZ;oC@CK#;+20PzffZCT3qX4)l#3^qZ?VQ01dOyzApo&Brr zugPV4OVBsN{!)w6xPaU5;od8nI4 z!}-Mo+Q zb~wgx2d2%w6a9`q$jC->O0sr&cwmlv^H_HTCwN{GK;Z*nrTElITgYNn)x<&Ugq~~uYtnJs|9p5z5IR0kdZG4FVrdwu|`uVnB ze|OxO@iqd=ch-a5X1Z*=k#O4<-O^Bby#DX+j=MYl9lwN?ZoCBkTmS$707*qoM6N<$ Eg6>Or!vFvP literal 0 HcmV?d00001 diff --git a/extension/tipswallet-extension/src/background/index.ts b/extension/tipswallet-extension/src/background/index.ts new file mode 100644 index 0000000..6886266 --- /dev/null +++ b/extension/tipswallet-extension/src/background/index.ts @@ -0,0 +1,615 @@ + +import { ethers } from "ethers"; +import { v4 as uuid } from "uuid"; +import { BRAND, DEX_AUTO_CONNECT_ORIGINS, ERC20_ABI, KNOWN_TOKEN_CONTRACTS, KNOWN_TRUSTED_ORIGINS, MAX_UINT256, SECURITY_DEFAULTS, TIPSCHAIN, TOKENS } from "@/lib/constants"; +import { decryptVault, encryptVault } from "@/lib/crypto"; +import { appendActivity, getApprovals, getConnections, getEncryptedVault, getSecuritySettings, getSession, setApprovals, setConnections, setEncryptedVault, setSecuritySettings, setSession } from "@/lib/storage"; +import { addAccount, createVault, getActiveAccount, importVaultFromMnemonic, sendEvmTransaction, sendTokenTransaction, signPersonalMessage } from "@/lib/wallet"; +import type { ActivityEntry, ApprovalRequest, ApprovalRequestType, AssetBalance, ProviderRpcRequest, ProviderRpcResponse, RiskFinding, RiskSeverity, SecuritySettings, SiteConnection, VaultData } from "@/types"; + +let unlockedVault: VaultData | null = null; +const approvalResolvers = new Map void>(); + +async function rpcProvider() { + return new ethers.JsonRpcProvider(TIPSCHAIN.rpcUrls[0], undefined, { staticNetwork: true }); +} + +function getTokenByAddress(address?: string | null) { + if (!address) return null; + return TOKENS.find((token) => token.address?.toLowerCase() === address.toLowerCase()) ?? null; +} + +async function touchSession() { + const settings = await getSecuritySettings(); + const autoLockAt = new Date(Date.now() + settings.autoLockMinutes * 60_000).toISOString(); + await setSession({ unlocked: Boolean(unlockedVault), lastUnlockedAt: new Date().toISOString(), autoLockAt }); +} + +async function enforceAutoLock() { + const session = await getSession(); + if (session.unlocked && session.autoLockAt && Date.now() > new Date(session.autoLockAt).getTime()) { + unlockedVault = null; + await setSession({ unlocked: false }); + } +} + +async function logActivity(entry: Omit) { + await appendActivity({ + id: uuid(), + createdAt: new Date().toISOString(), + ...entry + }); +} + +async function loadBalances(address: string): Promise { + const provider = await rpcProvider(); + const nativeRaw = await provider.getBalance(address); + const native = { + symbol: "TPC", + name: "TipsChain Coin", + formatted: ethers.formatEther(nativeRaw), + raw: nativeRaw.toString(), + address: null + }; + + const tokenBalances = await Promise.all( + TOKENS.filter((token) => token.address).map(async (token) => { + const contract = new ethers.Contract(token.address!, ERC20_ABI, provider); + const [balance, decimals] = await Promise.all([contract.balanceOf(address), contract.decimals()]); + return { + symbol: token.symbol, + name: token.name, + formatted: ethers.formatUnits(balance, decimals), + raw: balance.toString(), + address: token.address + } satisfies AssetBalance; + }) + ); + + return [native, ...tokenBalances]; +} + +async function ensureConnection(origin: string, accountId: string, trusted = false) { + const connections = await getConnections(); + const existing = connections.find((entry) => entry.origin === origin); + if (!existing) { + const next: SiteConnection = { + origin, + accountIds: [accountId], + createdAt: new Date().toISOString(), + trusted + }; + await setConnections([...connections, next]); + return; + } + if (!existing.accountIds.includes(accountId)) { + existing.accountIds.push(accountId); + } + if (trusted) existing.trusted = true; + await setConnections([...connections]); +} + +function riskLevelFromFindings(findings: RiskFinding[]): RiskSeverity { + if (findings.some((entry) => entry.severity === "critical")) return "critical"; + if (findings.some((entry) => entry.severity === "high")) return "high"; + if (findings.some((entry) => entry.severity === "medium")) return "medium"; + return "low"; +} + +async function describeTransaction( + tx: { from?: string; to?: string; value?: string; data?: string; gas?: string; gasLimit?: string; maxFeePerGas?: string; maxPriorityFeePerGas?: string }, + origin: string, + accountAddress: string, + settings: SecuritySettings +) { + const provider = await rpcProvider(); + const simulation: ApprovalRequest["payload"]["simulation"] = { + warnings: [], + riskFindings: [] + }; + + if (tx.value) simulation.nativeValueFormatted = ethers.formatEther(BigInt(tx.value)); + + if (tx.to) { + simulation.targetContract = tx.to; + simulation.contractTrusted = KNOWN_TOKEN_CONTRACTS.includes(tx.to.toLowerCase()) || KNOWN_TRUSTED_ORIGINS.includes(origin); + try { + const code = await provider.getCode(tx.to); + simulation.contractCodePresent = Boolean(code && code !== "0x"); + simulation.contractVerified = simulation.contractTrusted || !simulation.contractCodePresent; + if (simulation.contractCodePresent && !simulation.contractTrusted) { + simulation.riskFindings?.push({ + severity: "medium", + title: "Unknown contract target", + description: "This request targets a contract that is not on the built-in trusted list." + }); + } + } catch { + simulation.warnings?.push("Could not fetch target contract bytecode."); + } + } + + if (tx.data && tx.to) { + try { + const iface = new ethers.Interface(ERC20_ABI); + const parsed = iface.parseTransaction({ data: tx.data }); + const token = getTokenByAddress(tx.to); + if (token && parsed?.name === "transfer") { + const recipient = String(parsed.args[0]); + const rawAmount = parsed.args[1] as bigint; + simulation.action = "Token transfer"; + simulation.tokenTransfer = { + tokenSymbol: token.symbol, + tokenName: token.name, + to: recipient, + amountFormatted: ethers.formatUnits(rawAmount, token.decimals), + contract: tx.to + }; + } + if (token && parsed?.name === "approve") { + const spender = String(parsed.args[0]); + const rawAmount = parsed.args[1] as bigint; + const isUnlimitedApproval = rawAmount === BigInt(MAX_UINT256); + simulation.action = "Token approval"; + simulation.tokenTransfer = { + tokenSymbol: token.symbol, + tokenName: token.name, + spender, + amountFormatted: isUnlimitedApproval ? "Unlimited" : ethers.formatUnits(rawAmount, token.decimals), + isUnlimitedApproval, + contract: tx.to + }; + simulation.riskFindings?.push({ + severity: isUnlimitedApproval ? "high" : "medium", + title: isUnlimitedApproval ? "Unlimited approval detected" : "Token approval detected", + description: isUnlimitedApproval + ? "The dApp is asking for unlimited token spending access. This can drain the token balance later." + : "The dApp is asking permission to spend tokens from this wallet." + }); + } + if (token && parsed?.name === "transferFrom") { + const from = String(parsed.args[0]); + const recipient = String(parsed.args[1]); + const rawAmount = parsed.args[2] as bigint; + simulation.action = "Delegated token transfer"; + simulation.tokenTransfer = { + tokenSymbol: token.symbol, + tokenName: token.name, + from, + to: recipient, + amountFormatted: ethers.formatUnits(rawAmount, token.decimals), + contract: tx.to + }; + simulation.riskFindings?.push({ + severity: "high", + title: "Delegated transfer", + description: "This call can move tokens on behalf of another address. Review carefully." + }); + } + } catch { + simulation.warnings?.push("Could not decode contract calldata."); + } + } + + try { + const estimate = await provider.estimateGas({ + from: accountAddress, + to: tx.to, + value: tx.value ? BigInt(tx.value) : undefined, + data: tx.data + }); + simulation.estimatedGas = estimate.toString(); + } catch { + simulation.estimatedGas = tx.gas || tx.gasLimit || "Auto"; + simulation.riskFindings?.push({ + severity: settings.requireSimulation ? "high" : "medium", + title: "Simulation incomplete", + description: "The node could not simulate or estimate gas for this request." + }); + } + + try { + const fee = await provider.getFeeData(); + if (fee.maxFeePerGas) simulation.maxFeePerGas = ethers.formatUnits(fee.maxFeePerGas, "gwei"); + if (fee.maxPriorityFeePerGas) simulation.maxPriorityFeePerGas = ethers.formatUnits(fee.maxPriorityFeePerGas, "gwei"); + } catch { + simulation.warnings?.push("Could not fetch fee data."); + } + + if (!simulation.action) simulation.action = tx.data ? "Contract interaction" : "Native transfer"; + + if (!KNOWN_TRUSTED_ORIGINS.includes(origin) && origin !== new URL(BRAND.dex).origin) { + simulation.riskFindings?.push({ + severity: "medium", + title: "Unrecognized website origin", + description: "This domain is not part of the built-in Tipspay trusted list." + }); + } + + if (!tx.to) { + simulation.riskFindings?.push({ + severity: "critical", + title: "Missing target address", + description: "The request has no destination. Contract-creation requests are blocked in this release." + }); + } + + simulation.riskLevel = riskLevelFromFindings(simulation.riskFindings ?? []); + return simulation; +} + +async function createApproval( + type: ApprovalRequestType, + request: ProviderRpcRequest, + origin: string, + accountAddress: string, + payload: ApprovalRequest["payload"] +) { + const approval: ApprovalRequest = { + approvalId: uuid(), + origin, + requestId: request.id, + type, + method: request.method, + createdAt: new Date().toISOString(), + accountAddress, + payload + }; + + const approvals = await getApprovals(); + await setApprovals([...approvals, approval]); + await chrome.action.openPopup().catch(() => undefined); + + const response = await new Promise<{ approved: boolean; result?: unknown; error?: string }>((resolve) => { + approvalResolvers.set(approval.approvalId, resolve); + }); + + const remaining = (await getApprovals()).filter((entry) => entry.approvalId !== approval.approvalId); + await setApprovals(remaining); + approvalResolvers.delete(approval.approvalId); + + if (!response.approved) throw new Error(response.error || "User rejected the request"); + return response.result; +} + +async function isConnected(origin: string, accountId: string) { + const connections = await getConnections(); + return connections.some((entry) => entry.origin === origin && entry.accountIds.includes(accountId)); +} + +async function handleProviderRequest(message: ProviderRpcRequest, sender: chrome.runtime.MessageSender): Promise { + await enforceAutoLock(); + const origin = message.origin || new URL(sender.url ?? sender.origin ?? BRAND.landing).origin; + + if (!unlockedVault && message.method !== "wallet_getState") { + const session = await getSession(); + if (!session.unlocked) return { id: message.id, error: { code: 4100, message: "TipsWallet is locked" } }; + } + + const vault = unlockedVault; + const account = vault ? getActiveAccount(vault) : null; + const settings = await getSecuritySettings(); + + try { + switch (message.method) { + case "wallet_getState": { + const encrypted = await getEncryptedVault(); + const session = await getSession(); + return { + id: message.id, + result: { + hasVault: Boolean(encrypted), + unlocked: Boolean(session.unlocked && unlockedVault), + account: account?.address ?? null, + chainId: TIPSCHAIN.chainId + } + }; + } + case "eth_chainId": + return { id: message.id, result: TIPSCHAIN.chainId }; + case "net_version": + return { id: message.id, result: String(TIPSCHAIN.chainIdDecimal) }; + case "eth_requestAccounts": { + if (!vault || !account) throw new Error("Wallet is locked"); + const trustedDex = settings.allowTrustedOriginsAutoConnect && DEX_AUTO_CONNECT_ORIGINS.includes(origin); + const alreadyConnected = await isConnected(origin, account.id); + + if (!alreadyConnected && !trustedDex) { + await createApproval("connect", message, origin, account.address, { + simulation: { + action: "Site connection", + riskLevel: KNOWN_TRUSTED_ORIGINS.includes(origin) ? "low" : "medium", + riskFindings: KNOWN_TRUSTED_ORIGINS.includes(origin) + ? [] + : [{ + severity: "medium", + title: "Unknown website", + description: "This site is not on the built-in trusted list." + }] + } + }); + } + + await ensureConnection(origin, account.id, trustedDex); + await logActivity({ kind: "connect", title: "Site connected", detail: origin }); + await touchSession(); + return { id: message.id, result: [account.address] }; + } + case "eth_accounts": { + if (!vault || !account) throw new Error("Wallet is locked"); + const connected = await isConnected(origin, account.id); + return { id: message.id, result: connected || DEX_AUTO_CONNECT_ORIGINS.includes(origin) ? [account.address] : [] }; + } + case "wallet_switchEthereumChain": + case "wallet_addEthereumChain": + return { id: message.id, result: null }; + case "personal_sign": { + if (!vault || !account) throw new Error("Wallet is locked"); + const [messageHex] = (message.params ?? []) as string[]; + const displayMessage = new TextDecoder().decode(ethers.getBytes(messageHex)); + const signature = await createApproval("sign", message, origin, account.address, { + params: message.params, + message: displayMessage, + simulation: { + action: "Message signature", + riskLevel: KNOWN_TRUSTED_ORIGINS.includes(origin) ? "low" : "medium", + riskFindings: KNOWN_TRUSTED_ORIGINS.includes(origin) + ? [] + : [{ + severity: "medium", + title: "Signature from unknown origin", + description: "Signing messages for unknown sites can be used for off-chain authorization." + }] + } + }); + await logActivity({ kind: "sign", title: "Message signed", detail: origin }); + await touchSession(); + return { id: message.id, result: signature }; + } + case "eth_sendTransaction": { + if (!vault || !account) throw new Error("Wallet is locked"); + const tx = ((message.params ?? [])[0] ?? {}) as { from?: string; to?: string; value?: string; data?: string; gas?: string; gasLimit?: string; maxFeePerGas?: string; maxPriorityFeePerGas?: string }; + const simulation = await describeTransaction(tx, origin, account.address, settings); + if (simulation.riskLevel === "critical" || (settings.highRiskBlock && simulation.riskLevel === "high")) { + await logActivity({ + kind: "security", + title: "Transaction blocked", + detail: `${origin} • ${simulation.action || "transaction"}`, + severity: simulation.riskLevel + }); + throw new Error(`Blocked by security engine: ${simulation.riskLevel} risk`); + } + const hash = await createApproval("transaction", message, origin, account.address, { + params: message.params, + tx, + simulation + }); + await touchSession(); + return { id: message.id, result: hash }; + } + default: { + const provider = await rpcProvider(); + const result = await provider.send(message.method, message.params ?? []); + await touchSession(); + return { id: message.id, result }; + } + } + } catch (error) { + return { + id: message.id, + error: { + code: 4001, + message: error instanceof Error ? error.message : "Unknown provider error" + } + }; + } +} + +chrome.runtime.onInstalled.addListener(async () => { + chrome.sidePanel?.setPanelBehavior?.({ openPanelOnActionClick: false }).catch(() => undefined); + await setSecuritySettings(await getSecuritySettings()); +}); + +chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { + const action = message?.action; + + (async () => { + await enforceAutoLock(); + + switch (action) { + case "wallet:create": { + const vault = createVault(); + const encrypted = encryptVault(vault, message.password); + await setEncryptedVault(encrypted); + unlockedVault = vault; + await touchSession(); + await logActivity({ kind: "security", title: "Vault created", detail: getActiveAccount(vault)?.address || "new wallet" }); + sendResponse({ ok: true, address: getActiveAccount(vault)?.address, mnemonic: vault.mnemonic }); + return; + } + case "wallet:import": { + const vault = importVaultFromMnemonic(message.mnemonic); + const encrypted = encryptVault(vault, message.password); + await setEncryptedVault(encrypted); + unlockedVault = vault; + await touchSession(); + await logActivity({ kind: "security", title: "Vault imported", detail: getActiveAccount(vault)?.address || "imported wallet" }); + sendResponse({ ok: true, address: getActiveAccount(vault)?.address }); + return; + } + case "wallet:unlock": { + const encrypted = await getEncryptedVault(); + if (!encrypted) throw new Error("No wallet found"); + const vault = decryptVault(encrypted, message.password); + unlockedVault = vault; + await touchSession(); + sendResponse({ ok: true, address: getActiveAccount(vault)?.address }); + return; + } + case "wallet:lock": { + unlockedVault = null; + await setSession({ unlocked: false }); + sendResponse({ ok: true }); + return; + } + case "wallet:getState": { + const encrypted = await getEncryptedVault(); + const session = await getSession(); + sendResponse({ + ok: true, + hasVault: Boolean(encrypted), + unlocked: Boolean(unlockedVault && session.unlocked), + vault: unlockedVault, + chain: TIPSCHAIN + }); + return; + } + case "wallet:getSecurityState": { + const settings = await getSecuritySettings(); + const session = await getSession(); + sendResponse({ ok: true, settings, session }); + return; + } + case "wallet:addAccount": { + if (!unlockedVault) throw new Error("Unlock wallet first"); + unlockedVault = addAccount(unlockedVault); + const encrypted = encryptVault(unlockedVault, message.password); + await setEncryptedVault(encrypted); + await touchSession(); + sendResponse({ ok: true, vault: unlockedVault }); + return; + } + case "wallet:getBalances": { + if (!unlockedVault) throw new Error("Unlock wallet first"); + const account = getActiveAccount(unlockedVault); + const balances = await loadBalances(account.address); + await touchSession(); + sendResponse({ ok: true, balances }); + return; + } + case "wallet:sendNative": { + if (!unlockedVault) throw new Error("Unlock wallet first"); + const account = getActiveAccount(unlockedVault); + const response = await sendEvmTransaction({ + privateKey: account.privateKey, + rpcUrl: TIPSCHAIN.rpcUrls[0], + tx: { + to: message.to, + value: ethers.parseEther(message.amount).toString() + } + }); + await logActivity({ kind: "send", title: "Native transfer sent", detail: response.hash }); + await touchSession(); + sendResponse({ ok: true, hash: response.hash }); + return; + } + case "wallet:sendToken": { + if (!unlockedVault) throw new Error("Unlock wallet first"); + const account = getActiveAccount(unlockedVault); + const token = TOKENS.find((entry) => entry.symbol === message.symbol); + if (!token?.address) throw new Error("Unsupported token"); + const response = await sendTokenTransaction({ + privateKey: account.privateKey, + rpcUrl: TIPSCHAIN.rpcUrls[0], + tokenAddress: token.address, + to: message.to, + amount: message.amount, + decimals: token.decimals + }); + await logActivity({ kind: "send", title: `${token.symbol} transfer sent`, detail: response.hash }); + await touchSession(); + sendResponse({ ok: true, hash: response.hash }); + return; + } + case "wallet:getConnections": { + const connections = await getConnections(); + sendResponse({ ok: true, connections }); + return; + } + case "wallet:listPendingApprovals": { + const approvals = await getApprovals(); + sendResponse({ ok: true, approvals }); + return; + } + case "wallet:resolveApproval": { + const approvals = await getApprovals(); + const target = approvals.find((entry) => entry.approvalId === message.approvalId); + if (!target) throw new Error("Approval request not found"); + + if (message.approved) { + if (target.type === "connect") { + approvalResolvers.get(target.approvalId)?.({ approved: true, result: [target.accountAddress] }); + } else if (target.type === "sign") { + if (!unlockedVault) throw new Error("Unlock wallet first"); + const account = getActiveAccount(unlockedVault); + const signature = await signPersonalMessage({ + privateKey: account.privateKey, + message: target.payload.message || "" + }); + approvalResolvers.get(target.approvalId)?.({ approved: true, result: signature }); + } else if (target.type === "transaction") { + if (!unlockedVault) throw new Error("Unlock wallet first"); + const simulation = target.payload.simulation; + if (simulation?.riskLevel === "critical") { + throw new Error("Critical-risk transaction cannot be approved"); + } + const account = getActiveAccount(unlockedVault); + const tx = target.payload.tx || {}; + const response = await sendEvmTransaction({ + privateKey: account.privateKey, + rpcUrl: TIPSCHAIN.rpcUrls[0], + tx: { + to: tx.to, + value: tx.value, + data: tx.data, + gasLimit: tx.gasLimit || tx.gas, + maxFeePerGas: tx.maxFeePerGas, + maxPriorityFeePerGas: tx.maxPriorityFeePerGas + } + }); + await logActivity({ kind: "send", title: simulation?.action || "Transaction approved", detail: response.hash, severity: simulation?.riskLevel }); + approvalResolvers.get(target.approvalId)?.({ approved: true, result: response.hash }); + } + } else { + approvalResolvers.get(target.approvalId)?.({ approved: false, error: "User rejected the request" }); + } + + const remaining = approvals.filter((entry) => entry.approvalId !== message.approvalId); + await setApprovals(remaining); + await touchSession(); + sendResponse({ ok: true }); + return; + } + case "wallet:openDex": { + if (!unlockedVault) throw new Error("Unlock wallet first"); + const account = getActiveAccount(unlockedVault); + const url = new URL(BRAND.dex); + if (message.fromSymbol) url.searchParams.set("from", String(message.fromSymbol)); + if (message.toSymbol) url.searchParams.set("to", String(message.toSymbol)); + if (message.amount) url.searchParams.set("amount", String(message.amount)); + url.searchParams.set("chainId", String(TIPSCHAIN.chainIdDecimal)); + url.searchParams.set("wallet", "tipswallet"); + await ensureConnection(new URL(BRAND.dex).origin, account.id, true); + await chrome.tabs.create({ url: url.toString() }); + await logActivity({ kind: "connect", title: "DEX launched", detail: url.toString() }); + await touchSession(); + sendResponse({ ok: true, url: url.toString(), origin: new URL(BRAND.dex).origin }); + return; + } + case "provider:request": { + const response = await handleProviderRequest(message.payload, sender); + sendResponse(response); + return; + } + default: + sendResponse({ ok: false, error: "Unknown action" }); + } + })().catch((error) => { + sendResponse({ + ok: false, + error: error instanceof Error ? error.message : "Unexpected background error" + }); + }); + + return true; +}); diff --git a/extension/tipswallet-extension/src/components/AssetRow.tsx b/extension/tipswallet-extension/src/components/AssetRow.tsx new file mode 100644 index 0000000..6a5b7d5 --- /dev/null +++ b/extension/tipswallet-extension/src/components/AssetRow.tsx @@ -0,0 +1,28 @@ +import { ArrowUpRight } from "lucide-react"; +import type { AssetBalance } from "@/types"; +import { formatNumber } from "@/lib/utils"; + +export function AssetRow({ asset }: { asset: AssetBalance }) { + return ( + + ); +} diff --git a/extension/tipswallet-extension/src/components/BrandHeader.tsx b/extension/tipswallet-extension/src/components/BrandHeader.tsx new file mode 100644 index 0000000..4e2b511 --- /dev/null +++ b/extension/tipswallet-extension/src/components/BrandHeader.tsx @@ -0,0 +1,21 @@ + +import walletLogo from "@/assets/tipswallet-logo.png"; + +export function BrandHeader() { + return ( +
+
+
+ TipsWallet +
+
+

TipsWallet

+

Secure wallet for TipsChain

+
+
+
+ Release +
+
+ ); +} diff --git a/extension/tipswallet-extension/src/components/EmptyState.tsx b/extension/tipswallet-extension/src/components/EmptyState.tsx new file mode 100644 index 0000000..44976ec --- /dev/null +++ b/extension/tipswallet-extension/src/components/EmptyState.tsx @@ -0,0 +1,13 @@ +import { WalletCards } from "lucide-react"; + +export function EmptyState({ title, copy }: { title: string; copy: string }) { + return ( +
+
+ +
+

{title}

+

{copy}

+
+ ); +} diff --git a/extension/tipswallet-extension/src/components/ui.tsx b/extension/tipswallet-extension/src/components/ui.tsx new file mode 100644 index 0000000..16e73b3 --- /dev/null +++ b/extension/tipswallet-extension/src/components/ui.tsx @@ -0,0 +1,74 @@ +import * as React from "react"; +import { cn } from "@/lib/utils"; + +export function Button( + props: React.ButtonHTMLAttributes & { + variant?: "primary" | "secondary" | "ghost" | "danger"; + } +) { + const { className, variant = "primary", ...rest } = props; + return ( +