From bde47f8342fdf4d06bc9e0ea0f60763401c4ca54 Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 15:52:27 -0300 Subject: [PATCH 01/36] chore: initialize repository with gitignore and README skeleton --- .gitignore | 16 +++++++ README.md | 123 ++++++++++------------------------------------------- 2 files changed, 38 insertions(+), 101 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3d18767 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# Root-level ignores (each app also has its own .gitignore) + +# OS / editor +.DS_Store +Thumbs.db +*.swp +.idea/ +.vscode/ +*.log + +# Root env used by docker-compose interpolation +/.env + +# Local docker volumes / dumps +/data/ +*.sql.gz diff --git a/README.md b/README.md index cf4604e..fa3509b 100644 --- a/README.md +++ b/README.md @@ -1,110 +1,31 @@ -# Fullstack Test Project +# Investment Manager — Coderockr Fullstack Test -You should see this challenge as an opportunity to create an application following modern development best practices (given the stack of your choice), but also feel free to use your own architecture preferences (coding standards, code organization, third-party libraries, etc). It’s perfectly fine to use vanilla code or any framework or libraries. +Fullstack application to store and manage investments, with compound-interest gain +calculation and age-based withdrawal taxation. -## Scope +- **Backend:** Laravel 13 (PHP 8.4) — JSON REST API, PostgreSQL, fully decoupled. +- **Frontend:** Vue 3 + Vite + TypeScript — separate SPA (deploy-independent). +- **Infra:** Docker Compose (php-fpm + nginx + Postgres + Mailpit + Vite) + Makefile. -In this challenge you should build a **fullstack application** (API + UI) for an application that stores and manages investments, it should have the following features: +> 🚧 Work in progress — this README is filled in incrementally as the project is built. +> See [`docs/`](docs/) for the API documentation and the sections below for how to run it. -### Backend (API) +## Quick start -1. __Creation__ of an investment with an owner, a creation date and an amount. - 1. The creation date of an investment can be today or a date in the past. - 2. An investment should not be or become negative. -2. __View__ of an investment with its initial amount and expected balance. - 1. Expected balance should be the sum of the invested amount and the [gains][]. - 2. If an investment was already withdrawn then the balance must reflect the gains of that investment -3. __Withdrawal__ of a investment. - 1. The withdraw will always be the sum of the initial amount and its gains, - partial withdrawn is not supported. - 2. The withdrawal date must be informmed by the user, and it can be a date in the past or today, but can't happen before the investment creation or the future. - 3. [Taxes][taxes] need to be applied to the withdrawals before showing the final value. -4. __List__ of a person's investments - 1. This list should have pagination. +```bash +make up +``` -### Frontend (UI) +Then open: -1. __List__ of investments - - Display all investments with basic information (owner, date, amount, current balance, status) -2. __View__ of a single investment - - Display detailed information including gains and final balance -3. __Create__ investment form - - Allow users to create a new investment -4. __Withdrawal__ action - - Allow users to perform a withdrawal and visualize the final taxed amount +| Service | URL | +|---|---| +| API | http://localhost:8080 | +| API docs (OpenAPI) | http://localhost:8080/docs/api | +| SPA | http://localhost:5173 | +| Mailpit (caught e-mails) | http://localhost:8025 | -### Gain Calculation +## Documentation -The investment will pay 0.52% every month in the same day of the investment creation. - -Given that the gain is paid every month, it should be treated as [compound gain][], which means that every new period (month) the amount gained will become part of the investment balance for the next payment. - -### Taxation - -When money is withdrawn, tax is triggered. Taxes apply only to the gain portion of the money withdrawn. For example, if the initial investment was 1000.00, the current balance is 1200.00, then the taxes will be applied to the 200.00. - -The tax percentage changes according to the age of the investment: -* If it is less than one year old, the percentage will be 22.5% (tax = 45.00). -* If it is between one and two years old, the percentage will be 18.5% (tax = 37.00). -* If older than two years, the percentage will be 15% (tax = 30.00). - -## Design Reference - -Use the following Figma as a visual and structural reference for the frontend interface: - -- Figma: https://www.figma.com/design/jkilpjx9Q6hZnnCBHZcAWG/Coderockr-Fullstack---Test?node-id=0-1&p=f&t=thQWSMxSHxCJTtAs-0 -- Prototype: https://www.figma.com/proto/jkilpjx9Q6hZnnCBHZcAWG/Coderockr-Fullstack---Test?node-id=1-2&p=f&t=thQWSMxSHxCJTtAs-0&scaling=scale-down-width&content-scaling=fixed&page-id=0%3A1 - -__NOTE:__ The layout will be evaluated, but not strictly against the provided design. You can use it as a guideline for structure and organization. Feel free to be creative and enhance the interface with your own ideas, such as visual effects, animations, transitions between screens, and responsive behavior. You may also use UI libraries or create your own components. - -## Requirements -1. Create project using any technology of your preference. It’s perfectly OK to use vanilla code or any framework or libraries; -2. Although you can use as many dependencies as you want, you should manage them wisely; -3. It is not necessary to send the notification emails, however, the code required for that would be welcome; -4. The API must be documented in some way. - -## Deliverables -The project source code and dependencies should be made available in GitHub. Here are the steps you should follow: -1. Fork this repository to your GitHub account (create an account if you don't have one, you will need it working with us). -2. Create a "development" branch and commit the code to it. Do not push the code to the main branch. -3. Include a README file that describes: - - Special build instructions, if any - - List of third-party libraries used and short description of why/how they were used - - A link to the API documentation. -4. Once the work is complete, create a pull request from "development" into "main" and send us the link. -5. Avoid using huge commits hiding your progress. Feel free to work on a branch and use `git rebase` to adjust your commits before submitting the final version. -6. Create a "screenshots" sub-folder and include at least two screenshots of the app. - -## Coding Standards -When working on the project be as clean and consistent as possible. - -## Project Deadline -Ideally you'd finish the test project in 5 days. It shouldn't take you longer than a entire week. - -## Quality Assurance -Use the following checklist to ensure high quality of the project. - -### General -- First of all, the application should run without errors. -- Are all requirements set above met? -- Is coding style consistent? -- The API is well documented? -- The API has unit tests? -- Is the backend and frontend deploy-independent? - -## Submission -1. A link to the Github repository. -2. Briefly describe how you decided on the tools that you used. - -## Have Fun Coding 🤘 -- This challenge description is intentionally vague in some aspects, but if you need assistance feel free to ask for help. -- If any of the seems out of your current level, you may skip it, but remember to tell us about it in the pull request. - -## Credits - -This coding challenge was inspired on [kinvoapp/kinvo-back-end-test](https://github.com/kinvoapp/kinvo-back-end-test/blob/2f17d713de739e309d17a1a74a82c3fd0e66d128/README.md) - -[gains]: #gain-calculation -[taxes]: #taxation -[interest]: #interest-calculation -[compound gain]: https://www.investopedia.com/terms/g/gain.asp +Detailed sections (architecture, third-party libraries, build instructions, tests, +screenshots) are added as each part of the project lands. From 4260b78e8c509bb56fdc968e76e7853602bfb172 Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 15:59:18 -0300 Subject: [PATCH 02/36] chore(api): scaffold Laravel 13 application --- api/.editorconfig | 18 + api/.env.example | 65 + api/.gitattributes | 11 + api/.gitignore | 30 + api/.npmrc | 2 + api/README.md | 58 + api/app/Http/Controllers/Controller.php | 8 + api/app/Models/User.php | 32 + api/app/Providers/AppServiceProvider.php | 24 + api/artisan | 18 + api/bootstrap/app.php | 21 + api/bootstrap/cache/.gitignore | 2 + api/bootstrap/providers.php | 7 + api/composer.json | 86 + api/composer.lock | 8300 +++++++++++++++++ api/config/app.php | 126 + api/config/auth.php | 117 + api/config/cache.php | 136 + api/config/database.php | 184 + api/config/filesystems.php | 80 + api/config/logging.php | 132 + api/config/mail.php | 118 + api/config/queue.php | 129 + api/config/services.php | 38 + api/config/session.php | 233 + api/database/.gitignore | 1 + api/database/factories/UserFactory.php | 45 + .../0001_01_01_000000_create_users_table.php | 49 + .../0001_01_01_000001_create_cache_table.php | 35 + .../0001_01_01_000002_create_jobs_table.php | 59 + api/database/seeders/DatabaseSeeder.php | 25 + api/package.json | 16 + api/phpunit.xml | 36 + api/public/.htaccess | 25 + api/public/favicon.ico | 0 api/public/index.php | 20 + api/public/robots.txt | 2 + api/resources/css/app.css | 9 + api/resources/js/app.js | 1 + api/resources/views/welcome.blade.php | 223 + api/routes/console.php | 8 + api/routes/web.php | 7 + api/storage/app/.gitignore | 4 + api/storage/app/private/.gitignore | 2 + api/storage/app/public/.gitignore | 2 + api/storage/framework/.gitignore | 9 + api/storage/framework/cache/.gitignore | 3 + api/storage/framework/cache/data/.gitignore | 2 + api/storage/framework/sessions/.gitignore | 2 + api/storage/framework/testing/.gitignore | 2 + api/storage/framework/views/.gitignore | 2 + api/storage/logs/.gitignore | 2 + api/tests/Feature/ExampleTest.php | 19 + api/tests/TestCase.php | 10 + api/tests/Unit/ExampleTest.php | 16 + api/vite.config.js | 24 + 56 files changed, 10635 insertions(+) create mode 100644 api/.editorconfig create mode 100644 api/.env.example create mode 100644 api/.gitattributes create mode 100644 api/.gitignore create mode 100644 api/.npmrc create mode 100644 api/README.md create mode 100644 api/app/Http/Controllers/Controller.php create mode 100644 api/app/Models/User.php create mode 100644 api/app/Providers/AppServiceProvider.php create mode 100755 api/artisan create mode 100644 api/bootstrap/app.php create mode 100644 api/bootstrap/cache/.gitignore create mode 100644 api/bootstrap/providers.php create mode 100644 api/composer.json create mode 100644 api/composer.lock create mode 100644 api/config/app.php create mode 100644 api/config/auth.php create mode 100644 api/config/cache.php create mode 100644 api/config/database.php create mode 100644 api/config/filesystems.php create mode 100644 api/config/logging.php create mode 100644 api/config/mail.php create mode 100644 api/config/queue.php create mode 100644 api/config/services.php create mode 100644 api/config/session.php create mode 100644 api/database/.gitignore create mode 100644 api/database/factories/UserFactory.php create mode 100644 api/database/migrations/0001_01_01_000000_create_users_table.php create mode 100644 api/database/migrations/0001_01_01_000001_create_cache_table.php create mode 100644 api/database/migrations/0001_01_01_000002_create_jobs_table.php create mode 100644 api/database/seeders/DatabaseSeeder.php create mode 100644 api/package.json create mode 100644 api/phpunit.xml create mode 100644 api/public/.htaccess create mode 100644 api/public/favicon.ico create mode 100644 api/public/index.php create mode 100644 api/public/robots.txt create mode 100644 api/resources/css/app.css create mode 100644 api/resources/js/app.js create mode 100644 api/resources/views/welcome.blade.php create mode 100644 api/routes/console.php create mode 100644 api/routes/web.php create mode 100644 api/storage/app/.gitignore create mode 100644 api/storage/app/private/.gitignore create mode 100644 api/storage/app/public/.gitignore create mode 100644 api/storage/framework/.gitignore create mode 100644 api/storage/framework/cache/.gitignore create mode 100644 api/storage/framework/cache/data/.gitignore create mode 100644 api/storage/framework/sessions/.gitignore create mode 100644 api/storage/framework/testing/.gitignore create mode 100644 api/storage/framework/views/.gitignore create mode 100644 api/storage/logs/.gitignore create mode 100644 api/tests/Feature/ExampleTest.php create mode 100644 api/tests/TestCase.php create mode 100644 api/tests/Unit/ExampleTest.php create mode 100644 api/vite.config.js diff --git a/api/.editorconfig b/api/.editorconfig new file mode 100644 index 0000000..6df8428 --- /dev/null +++ b/api/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[{compose,docker-compose}.{yml,yaml}] +indent_size = 4 diff --git a/api/.env.example b/api/.env.example new file mode 100644 index 0000000..c0660ea --- /dev/null +++ b/api/.env.example @@ -0,0 +1,65 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +APP_LOCALE=en +APP_FALLBACK_LOCALE=en +APP_FAKER_LOCALE=en_US + +APP_MAINTENANCE_DRIVER=file +# APP_MAINTENANCE_STORE=database + +# PHP_CLI_SERVER_WORKERS=4 + +BCRYPT_ROUNDS=12 + +LOG_CHANNEL=stack +LOG_STACK=single +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=sqlite +# DB_HOST=127.0.0.1 +# DB_PORT=3306 +# DB_DATABASE=laravel +# DB_USERNAME=root +# DB_PASSWORD= + +SESSION_DRIVER=database +SESSION_LIFETIME=120 +SESSION_ENCRYPT=false +SESSION_PATH=/ +SESSION_DOMAIN=null + +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database + +CACHE_STORE=database +# CACHE_PREFIX= + +MEMCACHED_HOST=127.0.0.1 + +REDIS_CLIENT=phpredis +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=log +MAIL_SCHEME=null +MAIL_HOST=127.0.0.1 +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +VITE_APP_NAME="${APP_NAME}" diff --git a/api/.gitattributes b/api/.gitattributes new file mode 100644 index 0000000..fcb21d3 --- /dev/null +++ b/api/.gitattributes @@ -0,0 +1,11 @@ +* text=auto eol=lf + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/api/.gitignore b/api/.gitignore new file mode 100644 index 0000000..9e6ddeb --- /dev/null +++ b/api/.gitignore @@ -0,0 +1,30 @@ +*.log +.DS_Store +.env +.env.backup +.env.production +.phpactor.json +.phpunit.result.cache +/.codex +/.cursor/ +/.idea +/.nova +/.phpunit.cache +/.vscode +/.zed +/auth.json +/node_modules +/public/build +/public/fonts-manifest.dev.json +/public/hot +/public/storage +/storage/*.key +/storage/pail +/vendor +_ide_helper.php +Homestead.json +Homestead.yaml +Thumbs.db + +# Local SQLite (project uses PostgreSQL) +/database/*.sqlite diff --git a/api/.npmrc b/api/.npmrc new file mode 100644 index 0000000..495a6af --- /dev/null +++ b/api/.npmrc @@ -0,0 +1,2 @@ +ignore-scripts=true +audit=true diff --git a/api/README.md b/api/README.md new file mode 100644 index 0000000..5ad1377 --- /dev/null +++ b/api/README.md @@ -0,0 +1,58 @@ +

Laravel Logo

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +In addition, [Laracasts](https://laracasts.com) contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +You can also watch bite-sized lessons with real-world projects on [Laravel Learn](https://laravel.com/learn), where you will be guided through building a Laravel application from scratch while learning PHP fundamentals. + +## Agentic Development + +Laravel's predictable structure and conventions make it ideal for AI coding agents like Claude Code, Cursor, and GitHub Copilot. Install [Laravel Boost](https://laravel.com/docs/ai) to supercharge your AI workflow: + +```bash +composer require laravel/boost --dev + +php artisan boost:install +``` + +Boost provides your agent 15+ tools and skills that help agents build Laravel applications while following best practices. + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/api/app/Http/Controllers/Controller.php b/api/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..8677cd5 --- /dev/null +++ b/api/app/Http/Controllers/Controller.php @@ -0,0 +1,8 @@ + */ + use HasFactory, Notifiable; + + /** + * Get the attributes that should be cast. + * + * @return array + */ + protected function casts(): array + { + return [ + 'email_verified_at' => 'datetime', + 'password' => 'hashed', + ]; + } +} diff --git a/api/app/Providers/AppServiceProvider.php b/api/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..452e6b6 --- /dev/null +++ b/api/app/Providers/AppServiceProvider.php @@ -0,0 +1,24 @@ +handleCommand(new ArgvInput); + +exit($status); diff --git a/api/bootstrap/app.php b/api/bootstrap/app.php new file mode 100644 index 0000000..7a2848f --- /dev/null +++ b/api/bootstrap/app.php @@ -0,0 +1,21 @@ +withRouting( + web: __DIR__.'/../routes/web.php', + commands: __DIR__.'/../routes/console.php', + health: '/up', + ) + ->withMiddleware(function (Middleware $middleware): void { + // + }) + ->withExceptions(function (Exceptions $exceptions): void { + $exceptions->shouldRenderJsonWhen( + fn (Request $request) => $request->is('api/*'), + ); + })->create(); diff --git a/api/bootstrap/cache/.gitignore b/api/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/api/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/api/bootstrap/providers.php b/api/bootstrap/providers.php new file mode 100644 index 0000000..fc94ae6 --- /dev/null +++ b/api/bootstrap/providers.php @@ -0,0 +1,7 @@ +=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2024-02-09T16:56:22+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.1.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2025-08-10T19:31:58+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "shasum": "" + }, + "require": { + "php": "^8.2|^8.3|^8.4|^8.5" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.32|^2.1.31", + "phpunit/phpunit": "^8.5.48|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2025-10-31T18:51:33+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2025-03-06T22:45:56+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "shasum": "" + }, + "require": { + "php": "^8.1", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8" + }, + "require-dev": { + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2025-12-03T09:33:47+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.4", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.5" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:43:20+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.15.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "ae311b8f045ea93ce7b1c9cdb7cec06c53f944bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ae311b8f045ea93ce7b1c9cdb7cec06c53f944bc", + "reference": "ae311b8f045ea93ce7b1c9cdb7cec06c53f944bc", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^2.5.2", + "guzzlehttp/psr7": "^2.13", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.25" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.3", + "guzzlehttp/test-server": "^0.7", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.52 || ^9.6.34", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.15.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2026-08-05T19:48:21+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "2823687acff28b2dbe67b2508a6b300e2c3fa4ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/2823687acff28b2dbe67b2508a6b300e2c3fa4ce", + "reference": "2823687acff28b2dbe67b2508a6b300e2c3fa4ce", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.52 || ^9.6.34" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.5.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2026-08-05T19:30:54+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.13.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "dad89620b7a6edb60c15858442eb2e408b45d8f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/dad89620b7a6edb60c15858442eb2e408b45d8f4", + "reference": "dad89620b7a6edb60c15858442eb2e408b45d8f4", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.25" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "1.1.0", + "jshttp/mime-db": "1.54.0.1", + "phpunit/phpunit": "^8.5.52 || ^9.6.34" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.13.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2026-07-16T22:23:49+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.10", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "f6c24c21f42b990e9a58912b332d0874df6ba839" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/f6c24c21f42b990e9a58912b332d0874df6ba839", + "reference": "f6c24c21f42b990e9a58912b332d0874df6ba839", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.25" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.52 || ^9.6.34", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.10" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2026-07-17T13:53:03+00:00" + }, + { + "name": "laravel/framework", + "version": "v13.24.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "6d481710375d2aa67656922ef760cdd2b18bcfe0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/6d481710375d2aa67656922ef760cdd2b18bcfe0", + "reference": "6d481710375d2aa67656922ef760cdd2b18bcfe0", + "shasum": "" + }, + "require": { + "brick/math": "^0.14.2 || ^0.15 || ^0.16 || ^0.17 || ^0.18", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.4", + "egulias/email-validator": "^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8.2", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.3.11", + "laravel/serializable-closure": "^2.0.10", + "league/commonmark": "^2.8.1", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", + "league/uri": "^7.5.1", + "monolog/monolog": "^3.10", + "nesbot/carbon": "^3.8.4", + "nunomaduro/termwind": "^2.0", + "php": "^8.3", + "psr/container": "^1.1.1 || ^2.0.1", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^7.4.0 || ^8.0.0", + "symfony/error-handler": "^7.4.0 || ^8.0.0", + "symfony/finder": "^7.4.0 || ^8.0.0", + "symfony/http-foundation": "^7.4.0 || ^8.0.0", + "symfony/http-kernel": "^7.4.0 || ^8.0.0", + "symfony/mailer": "^7.4.0 || ^8.0.0", + "symfony/mime": "^7.4.0 || ^8.0.0", + "symfony/polyfill-php84": "^1.36", + "symfony/polyfill-php85": "^1.36", + "symfony/polyfill-php86": "^1.36", + "symfony/process": "^7.4.5 || ^8.0.5", + "symfony/routing": "^7.4.0 || ^8.0.0", + "symfony/uid": "^7.4.0 || ^8.0.0", + "symfony/var-dumper": "^7.4.0 || ^8.0.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1 || 2.0", + "psr/log-implementation": "1.0 || 2.0 || 3.0", + "psr/simple-cache-implementation": "1.0 || 2.0 || 3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/concurrency": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/image": "self.version", + "illuminate/json-schema": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/reflection": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version", + "spatie/once": "*" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.322.9", + "ext-gmp": "*", + "fakerphp/faker": "^1.24", + "guzzlehttp/psr7": "^2.9", + "intervention/image": "^4.0", + "laravel/pint": "^1.18", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", + "mockery/mockery": "^1.6.10", + "opis/json-schema": "^2.4.1", + "orchestra/testbench-core": "^11.0.0", + "pda/pheanstalk": "^7.0.0 || ^8.0.0", + "php-http/discovery": "^1.15", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^11.5.50 || ^12.5.8 || ^13.0.3", + "predis/predis": "^2.3 || ^3.0", + "rector/rector": "^2.3", + "resend/resend-php": "^1.0", + "symfony/cache": "^7.4.0 || ^8.0.0", + "symfony/http-client": "^7.4.0 || ^8.0.0", + "symfony/psr-http-message-bridge": "^7.4.0 || ^8.0.0", + "symfony/translation": "^7.4.0 || ^8.0.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", + "brianium/paratest": "Required to run tests in parallel (^7.0 || ^8.0).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0 || ^5.0 || ^6.0).", + "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "intervention/image": "Required to use the image processing features (^4.0).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", + "mockery/mockery": "Required to use mocking (^1.6).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^7.0 || ^8.0).", + "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", + "phpunit/phpunit": "Required to use assertions and run tests (^11.5.50 || ^12.5.8 || ^13.0.3).", + "predis/predis": "Required to use the predis connector (^2.3 || ^3.0).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0 || ^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0 || ^1.0).", + "spatie/fork": "Required to use the 'fork' concurrency driver (^1.2).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.4 || ^8.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.4 || ^8.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.4 || ^8.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.4 || ^8.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.4 || ^8.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.4 || ^8.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "13.0.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/functions.php", + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Log/functions.php", + "src/Illuminate/Reflection/helpers.php", + "src/Illuminate/Support/functions.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/", + "src/Illuminate/Reflection/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2026-08-04T15:54:59+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.3.22", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "02b89b39e8972a998db4d5d4ad4719239dd4aee4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/02b89b39e8972a998db4d5d4ad4719239dd4aee4", + "reference": "02b89b39e8972a998db4d5d4ad4719239dd4aee4", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "ext-mbstring": "*", + "php": "^8.1", + "symfony/console": "^6.2|^7.0|^8.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "illuminate/collections": "^10.0|^11.0|^12.0|^13.0", + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3|^3.4|^4.0", + "phpstan/phpstan": "^1.12.28", + "phpstan/phpstan-mockery": "^1.1.3" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.3.22" + }, + "time": "2026-08-04T14:50:50+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.0.15", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "dccd8bcb851bb03fcc005df650b708b57cc52661" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/dccd8bcb851bb03fcc005df650b708b57cc52661", + "reference": "dccd8bcb851bb03fcc005df650b708b57cc52661", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0|^11.0|^12.0|^13.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36|^3.0|^4.0", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0|^8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2026-07-21T16:49:22+00:00" + }, + { + "name": "laravel/tinker", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "4faba77764bd33411735936acdf30446d058c78b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/4faba77764bd33411735936acdf30446d058c78b", + "reference": "4faba77764bd33411735936acdf30446d058c78b", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "php": "^8.1", + "psy/psysh": "^0.12.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0|^8.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5|^11.5" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^8.0|^9.0|^10.0|^11.0|^12.0|^13.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v3.0.2" + }, + "time": "2026-03-17T14:54:13+00:00" + }, + { + "name": "league/commonmark", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "5703d83ba3da3b2e356a5fedc848ed6d8ffb6529" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/5703d83ba3da3b2e356a5fedc848ed6d8ffb6529", + "reference": "5703d83ba3da3b2e356a5fedc848ed6d8ffb6529", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^2.0.0", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0 || ^12.0.0 || ^13.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.10-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2026-08-03T13:42:31+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.35.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "b277b5dc3d56650b68904117124e79c851e12376" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/b277b5dc3d56650b68904117124e79c851e12376", + "reference": "b277b5dc3d56650b68904117124e79c851e12376", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-mongodb": "^1.3|^2", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2|^2", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.35.2" + }, + "time": "2026-07-06T14:42:07+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.31.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0" + }, + "time": "2026-01-23T15:30:45+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.17.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/f5f47eff7c48ed1003069a2ca67f316fb4021c76", + "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0 || ^11.0 || ^12.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.17.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2026-07-09T11:49:27+00:00" + }, + { + "name": "league/uri", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.8.1", + "php": "^8.1", + "psr/http-factory": "^1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "ext-uri": "to use the PHP native URI class", + "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", + "league/uri-components": "to provide additional tools to manipulate URI objects components", + "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "URN", + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc2141", + "rfc3986", + "rfc3987", + "rfc6570", + "rfc8141", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-15T20:22:25+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-08T20:05:35+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.10.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8 || ^2.0", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.10.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2026-01-02T08:56:05+00:00" + }, + { + "name": "nesbot/carbon", + "version": "3.13.1", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "2937ad3d1d2c506fd2bc97d571438a95641f44e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/2937ad3d1d2c506fd2bc97d571438a95641f44e2", + "reference": "2937ad3d1d2c506fd2bc97d571438a95641f44e2", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "<100.0", + "ext-json": "*", + "php": "^8.1", + "psr/clock": "^1.0", + "symfony/clock": "^6.3.12 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^v3.87.1", + "kylekatarnls/multi-tester": "^2.5.3", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.1.22", + "phpunit/phpunit": "^10.5.53", + "squizlabs/php_codesniffer": "^3.13.4 || ^4.0.0" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbonphp.github.io/carbon/", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbonphp.github.io/carbon/guide/getting-started/introduction.html", + "issues": "https://github.com/CarbonPHP/carbon/issues", + "source": "https://github.com/CarbonPHP/carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2026-07-09T18:23:49+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.5", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002", + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.5" + }, + "require-dev": { + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.39@stable", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.5" + }, + "time": "2026-02-23T03:47:12+00:00" + }, + { + "name": "nette/utils", + "version": "v4.1.5", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "b043439dbdf954e6c28b5ea7e34b0100f83165e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/b043439dbdf954e6c28b5ea7e34b0100f83165e0", + "reference": "b043439dbdf954e6c28b5ea7e34b0100f83165e0", + "shasum": "" + }, + "require": { + "php": "8.2 - 8.5" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.2", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.5", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::chr(), ord() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.1.5" + }, + "time": "2026-07-17T23:02:45+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.8.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/044a6a392ff8ad0d61f14370a5fbbd0a0107152f", + "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.8.0" + }, + "time": "2026-07-04T14:30:18+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "712a31b768f5daea284c2169a7d227031001b9a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/712a31b768f5daea284c2169a7d227031001b9a8", + "reference": "712a31b768f5daea284c2169a7d227031001b9a8", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.2", + "symfony/console": "^7.4.4 || ^8.0.4" + }, + "require-dev": { + "illuminate/console": "^11.47.0", + "laravel/pint": "^1.27.1", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.3.2", + "phpstan/phpstan": "^1.12.32", + "phpstan/phpstan-strict-rules": "^1.6.2", + "symfony/var-dumper": "^7.3.5 || ^8.0.4", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "It's like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2026-02-16T23:10:27+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.5", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:41:33+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.24", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1", + "reference": "ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "composer/class-map-generator": "^1.6" + }, + "suggest": { + "composer/class-map-generator": "Improved tab completion performance with better class discovery.", + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "https://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.24" + }, + "time": "2026-06-29T15:41:09+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.1.1" + }, + "time": "2025-03-22T05:38:12+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.9.3", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "1df15849d00943a67d677dc9cfd80795f038c9f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/1df15849d00943a67d677dc9cfd80795f038c9f8", + "reference": "1df15849d00943a67d677dc9cfd80795f038c9f8", + "shasum": "" + }, + "require": { + "brick/math": ">=0.8.16 <=0.18", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.25", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "ergebnis/composer-normalize": "^2.47", + "mockery/mockery": "^1.6", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.6", + "php-mock/php-mock-mockery": "^1.5", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.9.3" + }, + "time": "2026-06-18T03:57:49+00:00" + }, + { + "name": "symfony/clock", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "701ef4de9705d6c32292ebee5e8044094a09fbf6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/701ef4de9705d6c32292ebee5e8044094a09fbf6", + "reference": "701ef4de9705d6c32292ebee5e8044094a09fbf6", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "psr/clock": "^1.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v8.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-29T05:06:50+00:00" + }, + { + "name": "symfony/console", + "version": "v8.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "68efa2ebfd9a362951eb5a8b09fd177c66ddec24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/68efa2ebfd9a362951eb5a8b09fd177c66ddec24", + "reference": "68efa2ebfd9a362951eb5a8b09fd177c66ddec24", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php85": "^1.32", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^7.4.6|^8.0.6" + }, + "conflict": { + "symfony/dependency-injection": "<8.1", + "symfony/event-dispatcher": "<8.1" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^8.1", + "symfony/event-dispatcher": "^8.1", + "symfony/filesystem": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v8.1.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-07-31T12:43:13+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "dc0e2be45c9b5588c82414f02ac574b4b986abcd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/dc0e2be45c9b5588c82414f02ac574b4b986abcd", + "reference": "dc0e2be45c9b5588c82414f02ac574b4b986abcd", + "shasum": "" + }, + "require": { + "php": ">=8.4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v8.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-29T05:06:50+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.7.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/f3202fa1b5097b0af062dc978b32ecf63404e31d", + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-05T06:23:12+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v8.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "dc98404be5e8c949815e23fee1928f5de4f3f5d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/dc98404be5e8c949815e23fee1928f5de4f3f5d3", + "reference": "dc98404be5e8c949815e23fee1928f5de4f3f5d3", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "psr/log": "^1|^2|^3", + "symfony/polyfill-php85": "^1.32", + "symfony/var-dumper": "^7.4|^8.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5" + }, + "require-dev": { + "symfony/console": "^7.4|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v8.1.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-07-22T15:42:13+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v8.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "c14c05a9e6da7f5e375e6efc28952c7e7dbddffb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c14c05a9e6da7f5e375e6efc28952c7e7dbddffb", + "reference": "c14c05a9e6da7f5e375e6efc28952c7e7dbddffb", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/security-http": "<7.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v8.1.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-07-22T15:42:13+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.7.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "c7de7a00ffb67842132da02ea92988a39ccd9f4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c7de7a00ffb67842132da02ea92988a39ccd9f4e", + "reference": "c7de7a00ffb67842132da02ea92988a39ccd9f4e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.7.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-05T06:23:12+00:00" + }, + { + "name": "symfony/finder", + "version": "v8.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "e2989e762c70f9490fa3a00a0ac0fae5aa97a531" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/e2989e762c70f9490fa3a00a0ac0fae5aa97a531", + "reference": "e2989e762c70f9490fa3a00a0ac0fae5aa97a531", + "shasum": "" + }, + "require": { + "php": ">=8.4.1" + }, + "require-dev": { + "symfony/filesystem": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v8.1.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-27T09:05:56+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v8.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "57e712b75f2d0bc8844edbdb18a81dab6f9d55c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/57e712b75f2d0bc8844edbdb18a81dab6f9d55c2", + "reference": "57e712b75f2d0bc8844edbdb18a81dab6f9d55c2", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "^1.1" + }, + "conflict": { + "doctrine/dbal": "<4.3" + }, + "require-dev": { + "doctrine/dbal": "^4.3", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v8.1.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-08-07T15:02:39+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v8.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "69d81d8a5dac32a5d94e4eb063b7d97dc42c792a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/69d81d8a5dac32a5d94e4eb063b7d97dc42c792a", + "reference": "69d81d8a5dac32a5d94e4eb063b7d97dc42c792a", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/dependency-injection": "<8.1", + "symfony/flex": "<2.10", + "symfony/http-client-contracts": "<2.5", + "symfony/serializer": "<7.4.15|>=8.0,<8.0.15|>=8.1,<8.1.2", + "symfony/translation-contracts": "<2.5", + "symfony/var-dumper": "<8.1", + "symfony/web-profiler-bundle": "<8.1", + "twig/twig": "<3.21" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/css-selector": "^7.4|^8.0", + "symfony/dependency-injection": "^8.1", + "symfony/dom-crawler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0", + "symfony/routing": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^8.1", + "symfony/var-exporter": "^7.4|^8.0", + "twig/twig": "^3.21|^4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v8.1.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-08-07T18:04:54+00:00" + }, + { + "name": "symfony/mailer", + "version": "v8.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "221c7f326ace1ac2baee8331d829d5b7f04f4d53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/221c7f326ace1ac2baee8331d829d5b7f04f4d53", + "reference": "221c7f326ace1ac2baee8331d829d5b7f04f4d53", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.4.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5" + }, + "require-dev": { + "symfony/console": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/twig-bridge": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v8.1.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-07-28T07:35:25+00:00" + }, + { + "name": "symfony/mime", + "version": "v8.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "8f8ac859d369fe3d18e3837998b1c992bbee92c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/8f8ac859d369fe3d18e3837998b1c992bbee92c9", + "reference": "8f8ac859d369fe3d18e3837998b1c992bbee92c9", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<5.2|>=7", + "phpdocumentor/type-resolver": "<1.5.1" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^5.2|^6.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/property-info": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v8.1.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-08-07T15:02:39+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-10T16:19:22+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", + "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.41.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-07-28T08:25:59+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "dc21118016c039a66235cf93d96b435ffb282412" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/dc21118016c039a66235cf93d96b435ffb282412", + "reference": "dc21118016c039a66235cf93d96b435ffb282412", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-25T15:22:23+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.38.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b", + "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-25T13:48:31+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.38.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-27T06:59:30+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-10T16:19:22+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-26T12:51:13+00:00" + }, + { + "name": "symfony/polyfill-php85", + "version": "v1.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/255fab485aaa1006ed411040c42aecd7b5302d7a", + "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php85\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php85/tree/v1.41.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-07-01T12:47:55+00:00" + }, + { + "name": "symfony/polyfill-php86", + "version": "v1.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php86.git", + "reference": "6bc356ed3d8dbfeea8f0de235e34d670704e880e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/6bc356ed3d8dbfeea8f0de235e34d670704e880e", + "reference": "6bc356ed3d8dbfeea8f0de235e34d670704e880e", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php86\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php86/tree/v1.41.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-07-02T13:42:24+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-10T16:19:22+00:00" + }, + { + "name": "symfony/process", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/c4a9e58f235a6bf7f97ffbfedae2687353ac79e5", + "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5", + "shasum": "" + }, + "require": { + "php": ">=8.4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v8.1.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-29T05:06:50+00:00" + }, + { + "name": "symfony/routing", + "version": "v8.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "1058d4e13bb81dd9a6f7565686df7e13b880cdbd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/1058d4e13bb81dd9a6f7565686df7e13b880cdbd", + "reference": "1058d4e13bb81dd9a6f7565686df7e13b880cdbd", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v8.1.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-07-22T15:42:13+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.7.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/c0a284bab1ed8aa0417e3d69250ab437739563a0", + "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.7.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-16T09:55:08+00:00" + }, + { + "name": "symfony/string", + "version": "v8.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "286a76b7255e5cc4bf0101a0bc5388ecf1c38ccc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/286a76b7255e5cc4bf0101a0bc5388ecf1c38ccc", + "reference": "286a76b7255e5cc4bf0101a0bc5388ecf1c38ccc", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-intl-grapheme": "^1.33", + "symfony/polyfill-intl-normalizer": "^1.0", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v8.1.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-07-28T07:35:25+00:00" + }, + { + "name": "symfony/translation", + "version": "v8.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "c0955eb4aa417a110e65c8162237b8a5c7d910bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/c0955eb4aa417a110e65c8162237b8a5c7d910bf", + "reference": "c0955eb4aa417a110e65c8162237b8a5c7d910bf", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation-contracts": "^3.6.1" + }, + "conflict": { + "nikic/php-parser": "<5.0", + "symfony/http-client-contracts": "<2.5", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^7.4|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v8.1.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-07-30T12:40:56+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.7.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "ccb206b98faccc511ebae8e5fad50f2dc0b30621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/ccb206b98faccc511ebae8e5fad50f2dc0b30621", + "reference": "ccb206b98faccc511ebae8e5fad50f2dc0b30621", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.7.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-06-05T06:23:12+00:00" + }, + { + "name": "symfony/uid", + "version": "v8.1.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "50e98f8bc4c3fcdaf925545a65150fb42cf0caf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/50e98f8bc4c3fcdaf925545a65150fb42cf0caf2", + "reference": "50e98f8bc4c3fcdaf925545a65150fb42cf0caf2", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v8.1.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-08-02T11:29:46+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v8.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "865103cf742a039f34645b971fc3ace308d6c167" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/865103cf742a039f34645b971fc3ace308d6c167", + "reference": "865103cf742a039f34645b971fc3ace308d6c167", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "symfony/console": "<7.4", + "symfony/error-handler": "<7.4" + }, + "require-dev": { + "symfony/console": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", + "twig/twig": "^3.12|^4.0" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v8.1.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-07-22T15:42:13+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0" + }, + "time": "2025-12-02T11:56:42+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.4", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/416df702837983f8d5ff48c9c3fee4f5f57b980b", + "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.4", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.5", + "symfony/polyfill-ctype": "^1.26", + "symfony/polyfill-mbstring": "^1.26", + "symfony/polyfill-php80": "^1.26" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2026-07-06T19:11:50+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "8e1051fe39379367aecf014f41744ce7539a856f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/8e1051fe39379367aecf014f41744ce7539a856f", + "reference": "8e1051fe39379367aecf014f41744ce7539a856f", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpunit/phpunit": "~8.5 || ~9.6 || ~10.5 || ~11.5" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "https://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.1.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2026-04-26T05:33:54+00:00" + } + ], + "packages-dev": [ + { + "name": "fakerphp/faker", + "version": "v1.24.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" + }, + "time": "2024-11-21T13:46:39+00:00" + }, + { + "name": "filp/whoops", + "version": "2.18.4", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.18.4" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2025-08-08T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" + }, + "time": "2025-04-30T06:54:44+00:00" + }, + { + "name": "laravel/agent-detector", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/agent-detector.git", + "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/agent-detector/zipball/90694b9256099591cf9e55d08c18ba7a00bf099f", + "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f", + "shasum": "" + }, + "require": { + "php": "^8.2.0" + }, + "require-dev": { + "laravel/pint": "^1.24.0", + "pestphp/pest": "^3.8.5|^4.1.0", + "pestphp/pest-plugin-type-coverage": "^3.0|^4.0.2", + "phpstan/phpstan": "^2.1.26", + "rector/rector": "^2.1.7", + "symfony/var-dumper": "^7.3.3" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Laravel\\AgentDetector\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Detect if code is running in an AI agent or automated development environment", + "homepage": "https://github.com/laravel/agent-detector", + "keywords": [ + "Agent", + "ai", + "automation", + "claude", + "cursor", + "detection", + "devin", + "php" + ], + "support": { + "issues": "https://github.com/laravel/agent-detector/issues", + "source": "https://github.com/laravel/agent-detector" + }, + "time": "2026-04-29T18:32:34+00:00" + }, + { + "name": "laravel/pail", + "version": "v1.2.7", + "source": { + "type": "git", + "url": "https://github.com/laravel/pail.git", + "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pail/zipball/2f7d27dada8effc48b8c424445a69cca7007daaa", + "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/console": "^10.24|^11.0|^12.0|^13.0", + "illuminate/contracts": "^10.24|^11.0|^12.0|^13.0", + "illuminate/log": "^10.24|^11.0|^12.0|^13.0", + "illuminate/process": "^10.24|^11.0|^12.0|^13.0", + "illuminate/support": "^10.24|^11.0|^12.0|^13.0", + "nunomaduro/termwind": "^1.15|^2.0", + "php": "^8.2", + "symfony/console": "^6.0|^7.0|^8.0" + }, + "require-dev": { + "laravel/framework": "^10.24|^11.0|^12.0|^13.0", + "laravel/pint": "^1.13", + "orchestra/testbench-core": "^8.13|^9.17|^10.8|^11.0", + "pestphp/pest": "^2.20|^3.0|^4.0", + "pestphp/pest-plugin-type-coverage": "^2.3|^3.0|^4.0", + "phpstan/phpstan": "^1.12.27", + "symfony/var-dumper": "^6.3|^7.0|^8.0", + "symfony/yaml": "^6.3|^7.0|^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Pail\\PailServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Pail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Easily delve into your Laravel application's log files directly from the command line.", + "homepage": "https://github.com/laravel/pail", + "keywords": [ + "dev", + "laravel", + "logs", + "php", + "tail" + ], + "support": { + "issues": "https://github.com/laravel/pail/issues", + "source": "https://github.com/laravel/pail" + }, + "time": "2026-05-20T22:24:57+00:00" + }, + { + "name": "laravel/pao", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/pao.git", + "reference": "322f22095f3639551b64db9a13dfd8ab09c8206b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pao/zipball/322f22095f3639551b64db9a13dfd8ab09c8206b", + "reference": "322f22095f3639551b64db9a13dfd8ab09c8206b", + "shasum": "" + }, + "require": { + "laravel/agent-detector": "^2.0.2", + "php": "^8.3" + }, + "conflict": { + "laravel/framework": "<12.0.0", + "nunomaduro/collision": "<8.9.3", + "pestphp/pest": "<4.6.3 || >=6.0.0", + "phpunit/phpunit": "<12.5.23 || >=13.0.0 <13.1.7 || >=14.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.23.0", + "laravel/pint": "^1.30.0", + "orchestra/testbench": "^10.11.0 || ^11.1.0", + "pestphp/pest": "^4.7.2 || ^5.0.1", + "pestphp/pest-plugin-type-coverage": "^4.0.4 || ^5.0.0", + "phpstan/phpstan": "^2.2.7", + "rector/rector": "^2.5.8", + "symfony/process": "^7.4.8 || ^8.1.0", + "symfony/var-dumper": "^7.4.8 || ^8.1.2" + }, + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Laravel\\Pao\\Drivers\\Pest\\Plugin" + ] + }, + "laravel": { + "providers": [ + "Laravel\\Pao\\Laravel\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Laravel\\Pao\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Agent-optimized output for PHP testing tools", + "keywords": [ + "Agent", + "PHPStan", + "ai", + "dev", + "paratest", + "pest", + "php", + "phpunit", + "rector", + "testing" + ], + "support": { + "issues": "https://github.com/laravel/pao/issues", + "source": "https://github.com/laravel/pao" + }, + "time": "2026-07-29T18:38:14+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.30.4", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "a96cb6eee2961905d2fce7207aefb80945bf6b28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/a96cb6eee2961905d2fce7207aefb80945bf6b28", + "reference": "a96cb6eee2961905d2fce7207aefb80945bf6b28", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.2.0" + }, + "require-dev": { + "composer/semver": "^3.4.4", + "friendsofphp/php-cs-fixer": "^3.95.18", + "illuminate/view": "^12.65.0", + "larastan/larastan": "^3.10.0", + "laravel-zero/framework": "^12.1.0", + "laravel/agent-detector": "^2.0.2", + "laravel/prompts": "^0.3.22", + "mockery/mockery": "^1.6.12", + "nunomaduro/termwind": "^2.4.0", + "pestphp/pest": "^3.8.7" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "dev", + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2026-08-05T16:47:22+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-05-16T03:13:13+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.9.5", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "fb53eacd509a1d303858e2d20cfebf2d630254ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/fb53eacd509a1d303858e2d20cfebf2d630254ec", + "reference": "fb53eacd509a1d303858e2d20cfebf2d630254ec", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.18.4", + "nunomaduro/termwind": "^2.4.0", + "php": "^8.2.0", + "symfony/console": "^7.4.14 || ^8.1.1" + }, + "conflict": { + "laravel/framework": "<11.48.0 || >=14.0.0", + "phpunit/phpunit": "<11.5.50 || >=14.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.8.5", + "larastan/larastan": "^3.10.0", + "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.20.0", + "laravel/pint": "^1.29.3", + "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.3.5", + "pestphp/pest": "^3.8.5 || ^4.7.5 || ^5.0.0", + "sebastian/environment": "^7.2.1 || ^8.1.2 || ^9.3.2" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "dev", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2026-07-15T19:09:14+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "12.5.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "186dab580576598076de6818596d12b61801880e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/186dab580576598076de6818596d12b61801880e", + "reference": "186dab580576598076de6818596d12b61801880e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.7.0", + "php": ">=8.3", + "phpunit/php-text-template": "^5.0", + "sebastian/complexity": "^5.0", + "sebastian/environment": "^8.1.2", + "sebastian/lines-of-code": "^4.0.1", + "sebastian/version": "^6.0", + "theseer/tokenizer": "^2.0.1" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.28" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "12.5.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.7" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" + } + ], + "time": "2026-06-01T13:24:19+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", + "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", + "type": "tidelift" + } + ], + "time": "2026-02-02T14:04:18+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^12.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:58:58+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53", + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:59:16+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "8.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:59:38+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "12.5.33", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "b98e028a26c5c5ba7e4a54be96ccf35f2914d184" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b98e028a26c5c5ba7e4a54be96ccf35f2914d184", + "reference": "b98e028a26c5c5ba7e4a54be96ccf35f2914d184", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-filter": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.3", + "phpunit/php-code-coverage": "^12.5.7", + "phpunit/php-file-iterator": "^6.0.1", + "phpunit/php-invoker": "^6.0.0", + "phpunit/php-text-template": "^5.0.0", + "phpunit/php-timer": "^8.0.0", + "sebastian/cli-parser": "^4.2.1", + "sebastian/comparator": "^7.1.8", + "sebastian/diff": "^7.0.0", + "sebastian/environment": "^8.1.2", + "sebastian/exporter": "^7.0.3", + "sebastian/global-state": "^8.0.3", + "sebastian/object-enumerator": "^7.0.0", + "sebastian/recursion-context": "^7.0.1", + "sebastian/type": "^6.0.4", + "sebastian/version": "^6.0.0", + "staabm/side-effects-detector": "^1.0.5" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "12.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.33" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsoring.html", + "type": "other" + } + ], + "time": "2026-07-28T13:58:09+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "4.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "7d05781b13f7dec9043a629a21d086ed74582a15" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/7d05781b13f7dec9043a629a21d086ed74582a15", + "reference": "7d05781b13f7dec9043a629a21d086ed74582a15", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/cli-parser", + "type": "tidelift" + } + ], + "time": "2026-05-17T05:29:34+00:00" + }, + { + "name": "sebastian/comparator", + "version": "7.1.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "7c65c1e79836812819705b473a90c12399542485" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/7c65c1e79836812819705b473a90c12399542485", + "reference": "7c65c1e79836812819705b473a90c12399542485", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.3", + "sebastian/diff": "^7.0", + "sebastian/exporter": "^7.0.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" + } + ], + "time": "2026-05-21T04:45:25+00:00" + }, + { + "name": "sebastian/complexity", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb", + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:55:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "7.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7ab1ea946c012266ca32390913653d844ecd085f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f", + "reference": "7ab1ea946c012266ca32390913653d844ecd085f", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0", + "symfony/process": "^7.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:55:46+00:00" + }, + { + "name": "sebastian/environment", + "version": "8.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/9d32c685773823b1983e256ae4ecd48a10d6e439", + "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.26" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/8.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "type": "tidelift" + } + ], + "time": "2026-05-25T13:40:20+00:00" + }, + { + "name": "sebastian/exporter", + "version": "7.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23", + "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.3", + "sebastian/recursion-context": "^7.0.1" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" + } + ], + "time": "2026-05-20T04:37:17+00:00" + }, + { + "name": "sebastian/global-state", + "version": "8.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b164d3274d6537ab462591c5755f76a8f5b1aae9", + "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9", + "shasum": "" + }, + "require": { + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0.1" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^12.5.28" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state", + "type": "tidelift" + } + ], + "time": "2026-06-01T15:10:33+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d543b8ef219dcd8da262cbb958639a96bedba10e", + "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.7.0", + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/lines-of-code", + "type": "tidelift" + } + ], + "time": "2026-05-19T16:22:07+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "7.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "shasum": "" + }, + "require": { + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:57:48+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "4bfa827c969c98be1e527abd576533293c634f6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a", + "reference": "4bfa827c969c98be1e527abd576533293c634f6a", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:58:17+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "7.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" + } + ], + "time": "2025-08-13T04:44:59+00:00" + }, + { + "name": "sebastian/type", + "version": "6.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "82ff822c2edc46724be9f7411d3163021f602773" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/82ff822c2edc46724be9f7411d3163021f602773", + "reference": "82ff822c2edc46724be9f7411d3163021f602773", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/6.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" + } + ], + "time": "2026-05-20T06:45:45+00:00" + }, + { + "name": "sebastian/version", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c", + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T05:00:38+00:00" + }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/7989e43bf381af0eac72e4f0ca5bcbfa81658be4", + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^8.1" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2025-12-08T11:19:18+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.3" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/api/config/app.php b/api/config/app.php new file mode 100644 index 0000000..423eed5 --- /dev/null +++ b/api/config/app.php @@ -0,0 +1,126 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | the application so that it's available within Artisan commands. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. The timezone + | is set to "UTC" by default as it is suitable for most use cases. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by Laravel's translation / localization methods. This option can be + | set to any locale for which you plan to have translation strings. + | + */ + + 'locale' => env('APP_LOCALE', 'en'), + + 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), + + 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is utilized by Laravel's encryption services and should be set + | to a random, 32 character string to ensure that all encrypted values + | are secure. You should do this prior to deploying the application. + | + */ + + 'cipher' => 'AES-256-CBC', + + 'key' => env('APP_KEY'), + + 'previous_keys' => [ + ...array_filter( + explode(',', (string) env('APP_PREVIOUS_KEYS', '')) + ), + ], + + /* + |-------------------------------------------------------------------------- + | Maintenance Mode Driver + |-------------------------------------------------------------------------- + | + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" + | + */ + + 'maintenance' => [ + 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), + 'store' => env('APP_MAINTENANCE_STORE', 'database'), + ], + +]; diff --git a/api/config/auth.php b/api/config/auth.php new file mode 100644 index 0000000..d7568ff --- /dev/null +++ b/api/config/auth.php @@ -0,0 +1,117 @@ + [ + 'guard' => env('AUTH_GUARD', 'web'), + 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | which utilizes session storage plus the Eloquent user provider. + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | If you have multiple user tables or models you may configure multiple + | providers to represent the model / table. These providers may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => env('AUTH_MODEL', User::class), + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | These configuration options specify the behavior of Laravel's password + | reset functionality, including the table utilized for token storage + | and the user provider that is invoked to actually retrieve users. + | + | The expiry time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + | The throttle setting is the number of seconds a user must wait before + | generating more password reset tokens. This prevents the user from + | quickly generating a very large amount of password reset tokens. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'), + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the number of seconds before a password confirmation + | window expires and users are asked to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), + +]; diff --git a/api/config/cache.php b/api/config/cache.php new file mode 100644 index 0000000..d7eec61 --- /dev/null +++ b/api/config/cache.php @@ -0,0 +1,136 @@ + env('CACHE_STORE', 'database'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "array", "database", "file", "memcached", + | "redis", "dynamodb", "storage", "octane", + | "session", "failover", "null" + | + */ + + 'stores' => [ + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_CACHE_CONNECTION'), + 'table' => env('DB_CACHE_TABLE', 'cache'), + 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), + 'lock_table' => env('DB_CACHE_LOCK_TABLE'), + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + 'lock_path' => storage_path('framework/cache/data'), + ], + + 'storage' => [ + 'driver' => 'storage', + 'disk' => env('CACHE_STORAGE_DISK'), + 'path' => env('CACHE_STORAGE_PATH', 'framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), + 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + 'failover' => [ + 'driver' => 'failover', + 'stores' => [ + 'database', + 'array', + ], + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing the APC, database, memcached, Redis, and DynamoDB cache + | stores, there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'), + + /* + |-------------------------------------------------------------------------- + | Serializable Classes + |-------------------------------------------------------------------------- + | + | This value determines the classes that can be unserialized from cache + | storage. By default, no PHP classes will be unserialized from your + | cache to prevent gadget chain attacks if your APP_KEY is leaked. + | + */ + + 'serializable_classes' => false, + +]; diff --git a/api/config/database.php b/api/config/database.php new file mode 100644 index 0000000..abbb88e --- /dev/null +++ b/api/config/database.php @@ -0,0 +1,184 @@ + env('DB_CONNECTION', 'sqlite'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Below are all of the database connections defined for your application. + | An example configuration is provided for each database system which + | is supported by Laravel. You're free to add / remove connections. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DB_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + 'busy_timeout' => null, + 'journal_mode' => null, + 'synchronous' => null, + 'transaction_mode' => 'DEFERRED', + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + Mysql::ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'mariadb' => [ + 'driver' => 'mariadb', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + Mysql::ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => env('DB_SSLMODE', 'prefer'), + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + // 'encrypt' => env('DB_ENCRYPT', 'yes'), + // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run on the database. + | + */ + + 'migrations' => [ + 'table' => 'migrations', + 'update_date_on_publish' => true, + ], + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as Memcached. You may define your connection settings here. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'), + 'persistent' => env('REDIS_PERSISTENT', false), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), + ], + + ], + +]; diff --git a/api/config/filesystems.php b/api/config/filesystems.php new file mode 100644 index 0000000..37d8fca --- /dev/null +++ b/api/config/filesystems.php @@ -0,0 +1,80 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Below you may configure as many filesystem disks as necessary, and you + | may even configure multiple disks for the same driver. Examples for + | most supported storage drivers are configured here for reference. + | + | Supported drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app/private'), + 'serve' => true, + 'throw' => false, + 'report' => false, + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => rtrim(env('APP_URL', 'http://localhost'), '/').'/storage', + 'visibility' => 'public', + 'throw' => false, + 'report' => false, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, + 'report' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/api/config/logging.php b/api/config/logging.php new file mode 100644 index 0000000..b09cb25 --- /dev/null +++ b/api/config/logging.php @@ -0,0 +1,132 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => env('LOG_DEPRECATIONS_TRACE', false), + ], + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Laravel + | utilizes the Monolog PHP logging library, which includes a variety + | of powerful log handlers and formatters that you're free to use. + | + | Available drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", "custom", "stack" + | + */ + + 'channels' => [ + + 'stack' => [ + 'driver' => 'stack', + 'channels' => explode(',', (string) env('LOG_STACK', 'single')), + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => env('LOG_DAILY_DAYS', 14), + 'replace_placeholders' => true, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => env('LOG_SLACK_USERNAME', env('APP_NAME', 'Laravel')), + 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), + 'level' => env('LOG_LEVEL', 'critical'), + 'replace_placeholders' => true, + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + ], + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'handler_with' => [ + 'stream' => 'php://stderr', + ], + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), + 'replace_placeholders' => true, + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + + ], + +]; diff --git a/api/config/mail.php b/api/config/mail.php new file mode 100644 index 0000000..e32e88d --- /dev/null +++ b/api/config/mail.php @@ -0,0 +1,118 @@ + env('MAIL_MAILER', 'log'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers that can be used + | when delivering an email. You may specify which one you're using for + | your mailers below. You may also add additional mailers if needed. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", + | "postmark", "resend", "log", "array", + | "failover", "roundrobin" + | + */ + + 'mailers' => [ + + 'smtp' => [ + 'transport' => 'smtp', + 'scheme' => env('MAIL_SCHEME'), + 'url' => env('MAIL_URL'), + 'host' => env('MAIL_HOST', '127.0.0.1'), + 'port' => env('MAIL_PORT', 2525), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)), + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'postmark' => [ + 'transport' => 'postmark', + // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'), + // 'client' => [ + // 'timeout' => 5, + // ], + ], + + 'resend' => [ + 'transport' => 'resend', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + 'retry_after' => 60, + ], + + 'roundrobin' => [ + 'transport' => 'roundrobin', + 'mailers' => [ + 'ses', + 'postmark', + ], + 'retry_after' => 60, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all emails sent by your application to be sent from + | the same address. Here you may specify a name and address that is + | used globally for all emails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', env('APP_NAME', 'Laravel')), + ], + +]; diff --git a/api/config/queue.php b/api/config/queue.php new file mode 100644 index 0000000..79c2c0a --- /dev/null +++ b/api/config/queue.php @@ -0,0 +1,129 @@ + env('QUEUE_CONNECTION', 'database'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection options for every queue backend + | used by your application. An example configuration is provided for + | each backend supported by Laravel. You're also free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", + | "deferred", "background", "failover", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_QUEUE_CONNECTION'), + 'table' => env('DB_QUEUE_TABLE', 'jobs'), + 'queue' => env('DB_QUEUE', 'default'), + 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), + 'queue' => env('BEANSTALKD_QUEUE', 'default'), + 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), + 'block_for' => null, + 'after_commit' => false, + ], + + 'deferred' => [ + 'driver' => 'deferred', + ], + + 'background' => [ + 'driver' => 'background', + ], + + 'failover' => [ + 'driver' => 'failover', + 'connections' => [ + 'database', + 'deferred', + ], + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Job Batching + |-------------------------------------------------------------------------- + | + | The following options configure the database and table that store job + | batching information. These options can be updated to any database + | connection and table which has been defined by your application. + | + */ + + 'batching' => [ + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'job_batches', + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control how and where failed jobs are stored. Laravel ships with + | support for storing failed jobs in a simple file or in a database. + | + | Supported drivers: "database-uuids", "dynamodb", "file", "null" + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/api/config/services.php b/api/config/services.php new file mode 100644 index 0000000..6a90eb8 --- /dev/null +++ b/api/config/services.php @@ -0,0 +1,38 @@ + [ + 'key' => env('POSTMARK_API_KEY'), + ], + + 'resend' => [ + 'key' => env('RESEND_API_KEY'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + + 'slack' => [ + 'notifications' => [ + 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), + 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), + ], + ], + +]; diff --git a/api/config/session.php b/api/config/session.php new file mode 100644 index 0000000..f574482 --- /dev/null +++ b/api/config/session.php @@ -0,0 +1,233 @@ + env('SESSION_DRIVER', 'database'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to expire immediately when the browser is closed then you may + | indicate that via the expire_on_close configuration option. + | + */ + + 'lifetime' => (int) env('SESSION_LIFETIME', 120), + + 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it's stored. All encryption is performed + | automatically by Laravel and you may use the session like normal. + | + */ + + 'encrypt' => env('SESSION_ENCRYPT', false), + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When utilizing the "file" session driver, the session files are placed + | on disk. The default storage location is defined here; however, you + | are free to provide another location where they should be stored. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table to + | be used to store sessions. Of course, a sensible default is defined + | for you; however, you're welcome to change this to another table. + | + */ + + 'table' => env('SESSION_TABLE', 'sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | When using one of the framework's cache driven session backends, you may + | define the cache store which should be used to store the session data + | between requests. This must match one of your defined cache stores. + | + | Affects: "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the session cookie that is created by + | the framework. Typically, you should not need to change this value + | since doing so does not grant a meaningful security improvement. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug((string) env('APP_NAME', 'laravel')).'-session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application, but you're free to change this when necessary. + | + */ + + 'path' => env('SESSION_PATH', '/'), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | This value determines the domain and subdomains the session cookie is + | available to. By default, the cookie will be available to the root + | domain without subdomains. Typically, this shouldn't be changed. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. It's unlikely you should disable this option. + | + */ + + 'http_only' => env('SESSION_HTTP_ONLY', true), + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" to permit secure cross-site requests. + | + | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => env('SESSION_SAME_SITE', 'lax'), + + /* + |-------------------------------------------------------------------------- + | Partitioned Cookies + |-------------------------------------------------------------------------- + | + | Setting this value to true will tie the cookie to the top-level site for + | a cross-site context. Partitioned cookies are accepted by the browser + | when flagged "secure" and the Same-Site attribute is set to "none". + | + */ + + 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false), + + /* + |-------------------------------------------------------------------------- + | Session Serialization + |-------------------------------------------------------------------------- + | + | This value controls the serialization strategy for session data, which + | is JSON by default. Setting this to "php" allows the storage of PHP + | objects in the session but can make an application vulnerable to + | "gadget chain" serialization attacks if the APP_KEY is leaked. + | + | Supported: "json", "php" + | + */ + + 'serialization' => 'json', + +]; diff --git a/api/database/.gitignore b/api/database/.gitignore new file mode 100644 index 0000000..9b19b93 --- /dev/null +++ b/api/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/api/database/factories/UserFactory.php b/api/database/factories/UserFactory.php new file mode 100644 index 0000000..c4ceb07 --- /dev/null +++ b/api/database/factories/UserFactory.php @@ -0,0 +1,45 @@ + + */ +class UserFactory extends Factory +{ + /** + * The current password being used by the factory. + */ + protected static ?string $password; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => static::$password ??= Hash::make('password'), + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + */ + public function unverified(): static + { + return $this->state(fn (array $attributes) => [ + 'email_verified_at' => null, + ]); + } +} diff --git a/api/database/migrations/0001_01_01_000000_create_users_table.php b/api/database/migrations/0001_01_01_000000_create_users_table.php new file mode 100644 index 0000000..05fb5d9 --- /dev/null +++ b/api/database/migrations/0001_01_01_000000_create_users_table.php @@ -0,0 +1,49 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + + Schema::create('password_reset_tokens', function (Blueprint $table) { + $table->string('email')->primary(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + + Schema::create('sessions', function (Blueprint $table) { + $table->string('id')->primary(); + $table->foreignId('user_id')->nullable()->index(); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + $table->longText('payload'); + $table->integer('last_activity')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('users'); + Schema::dropIfExists('password_reset_tokens'); + Schema::dropIfExists('sessions'); + } +}; diff --git a/api/database/migrations/0001_01_01_000001_create_cache_table.php b/api/database/migrations/0001_01_01_000001_create_cache_table.php new file mode 100644 index 0000000..06dc7a5 --- /dev/null +++ b/api/database/migrations/0001_01_01_000001_create_cache_table.php @@ -0,0 +1,35 @@ +string('key')->primary(); + $table->mediumText('value'); + $table->bigInteger('expiration')->index(); + }); + + Schema::create('cache_locks', function (Blueprint $table) { + $table->string('key')->primary(); + $table->string('owner'); + $table->bigInteger('expiration')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('cache'); + Schema::dropIfExists('cache_locks'); + } +}; diff --git a/api/database/migrations/0001_01_01_000002_create_jobs_table.php b/api/database/migrations/0001_01_01_000002_create_jobs_table.php new file mode 100644 index 0000000..edac6fe --- /dev/null +++ b/api/database/migrations/0001_01_01_000002_create_jobs_table.php @@ -0,0 +1,59 @@ +id(); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedSmallInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + + Schema::create('job_batches', function (Blueprint $table) { + $table->string('id')->primary(); + $table->string('name'); + $table->integer('total_jobs'); + $table->integer('pending_jobs'); + $table->integer('failed_jobs'); + $table->longText('failed_job_ids'); + $table->mediumText('options')->nullable(); + $table->integer('cancelled_at')->nullable(); + $table->integer('created_at'); + $table->integer('finished_at')->nullable(); + }); + + Schema::create('failed_jobs', function (Blueprint $table) { + $table->id(); + $table->string('uuid')->unique(); + $table->string('connection'); + $table->string('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + + $table->index(['connection', 'queue', 'failed_at']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jobs'); + Schema::dropIfExists('job_batches'); + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/api/database/seeders/DatabaseSeeder.php b/api/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..6b901f8 --- /dev/null +++ b/api/database/seeders/DatabaseSeeder.php @@ -0,0 +1,25 @@ +create(); + + User::factory()->create([ + 'name' => 'Test User', + 'email' => 'test@example.com', + ]); + } +} diff --git a/api/package.json b/api/package.json new file mode 100644 index 0000000..49c869e --- /dev/null +++ b/api/package.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://www.schemastore.org/package.json", + "private": true, + "type": "module", + "scripts": { + "build": "vite build", + "dev": "vite" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.0.0", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^3.1", + "tailwindcss": "^4.0.0", + "vite": "^8.0.0" + } +} diff --git a/api/phpunit.xml b/api/phpunit.xml new file mode 100644 index 0000000..e7f0a48 --- /dev/null +++ b/api/phpunit.xml @@ -0,0 +1,36 @@ + + + + + tests/Unit + + + tests/Feature + + + + + app + + + + + + + + + + + + + + + + + + + diff --git a/api/public/.htaccess b/api/public/.htaccess new file mode 100644 index 0000000..b574a59 --- /dev/null +++ b/api/public/.htaccess @@ -0,0 +1,25 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Handle X-XSRF-Token Header + RewriteCond %{HTTP:x-xsrf-token} . + RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/api/public/favicon.ico b/api/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/api/public/index.php b/api/public/index.php new file mode 100644 index 0000000..ee8f07e --- /dev/null +++ b/api/public/index.php @@ -0,0 +1,20 @@ +handleRequest(Request::capture()); diff --git a/api/public/robots.txt b/api/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/api/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/api/resources/css/app.css b/api/resources/css/app.css new file mode 100644 index 0000000..54b247e --- /dev/null +++ b/api/resources/css/app.css @@ -0,0 +1,9 @@ +@import 'tailwindcss'; + +@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; +@source '../../storage/framework/views/*.php'; + +@theme { + --font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', + 'Segoe UI Symbol', 'Noto Color Emoji'; +} diff --git a/api/resources/js/app.js b/api/resources/js/app.js new file mode 100644 index 0000000..8337712 --- /dev/null +++ b/api/resources/js/app.js @@ -0,0 +1 @@ +// diff --git a/api/resources/views/welcome.blade.php b/api/resources/views/welcome.blade.php new file mode 100644 index 0000000..26e294a --- /dev/null +++ b/api/resources/views/welcome.blade.php @@ -0,0 +1,223 @@ + + + + + + + {{ config('app.name', 'Laravel') }} + + @fonts + + + @if (file_exists(public_path('build/manifest.json')) || file_exists(public_path('hot'))) + @vite(['resources/css/app.css', 'resources/js/app.js']) + @else + + @endif + + +
+ @if (Route::has('login')) + + @endif +
+
+
+
+

Let's get started

+

With so many options available to you,
we suggest you start with the following:

+ + + +

+ v{{ app()->version() }} + + View changelog + + + + +

+
+
+ {{-- Laravel Logo --}} + + + + + + + + + + + {{-- 13 --}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + @if (Route::has('login')) + + @endif + + diff --git a/api/routes/console.php b/api/routes/console.php new file mode 100644 index 0000000..3c9adf1 --- /dev/null +++ b/api/routes/console.php @@ -0,0 +1,8 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); diff --git a/api/routes/web.php b/api/routes/web.php new file mode 100644 index 0000000..86a06c5 --- /dev/null +++ b/api/routes/web.php @@ -0,0 +1,7 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/api/tests/TestCase.php b/api/tests/TestCase.php new file mode 100644 index 0000000..fe1ffc2 --- /dev/null +++ b/api/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +} diff --git a/api/vite.config.js b/api/vite.config.js new file mode 100644 index 0000000..1fd66d5 --- /dev/null +++ b/api/vite.config.js @@ -0,0 +1,24 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; +import { bunny } from 'laravel-vite-plugin/fonts'; +import tailwindcss from '@tailwindcss/vite'; + +export default defineConfig({ + plugins: [ + laravel({ + input: ['resources/css/app.css', 'resources/js/app.js'], + refresh: true, + fonts: [ + bunny('Instrument Sans', { + weights: [400, 500, 600], + }), + ], + }), + tailwindcss(), + ], + server: { + watch: { + ignored: ['**/storage/framework/views/**'], + }, + }, +}); From 6c2174873aa20ebdac7733bb9190845b7ed194a2 Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 16:07:49 -0300 Subject: [PATCH 03/36] chore(web): scaffold Vue 3 + Vite + TypeScript SPA --- web/.gitignore | 24 +++ web/README.md | 5 + web/index.html | 13 ++ web/package.json | 22 +++ web/public/favicon.svg | 1 + web/public/icons.svg | 24 +++ web/src/App.vue | 7 + web/src/assets/hero.png | Bin 0 -> 13057 bytes web/src/assets/vite.svg | 1 + web/src/assets/vue.svg | 1 + web/src/components/HelloWorld.vue | 95 ++++++++++ web/src/main.ts | 5 + web/src/style.css | 296 ++++++++++++++++++++++++++++++ web/tsconfig.app.json | 15 ++ web/tsconfig.json | 7 + web/tsconfig.node.json | 23 +++ web/vite.config.ts | 7 + 17 files changed, 546 insertions(+) create mode 100644 web/.gitignore create mode 100644 web/README.md create mode 100644 web/index.html create mode 100644 web/package.json create mode 100644 web/public/favicon.svg create mode 100644 web/public/icons.svg create mode 100644 web/src/App.vue create mode 100644 web/src/assets/hero.png create mode 100644 web/src/assets/vite.svg create mode 100644 web/src/assets/vue.svg create mode 100644 web/src/components/HelloWorld.vue create mode 100644 web/src/main.ts create mode 100644 web/src/style.css create mode 100644 web/tsconfig.app.json create mode 100644 web/tsconfig.json create mode 100644 web/tsconfig.node.json create mode 100644 web/vite.config.ts diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/web/README.md b/web/README.md new file mode 100644 index 0000000..33895ab --- /dev/null +++ b/web/README.md @@ -0,0 +1,5 @@ +# Vue 3 + TypeScript + Vite + +This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` + + diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..b3b748d --- /dev/null +++ b/web/package.json @@ -0,0 +1,22 @@ +{ + "name": "web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "vue": "^3.5.40" + }, + "devDependencies": { + "@types/node": "^24.13.3", + "@vitejs/plugin-vue": "^6.0.8", + "@vue/tsconfig": "^0.9.1", + "typescript": "~6.0.2", + "vite": "^8.2.0", + "vue-tsc": "^3.3.8" + } +} diff --git a/web/public/favicon.svg b/web/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/web/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/icons.svg b/web/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/web/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/src/App.vue b/web/src/App.vue new file mode 100644 index 0000000..388b05e --- /dev/null +++ b/web/src/App.vue @@ -0,0 +1,7 @@ + + + diff --git a/web/src/assets/hero.png b/web/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..02251f4b956c55af2d76fd0788124d7eee2b45eb GIT binary patch literal 13057 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 P00000NkvXXu0mjft=yBf literal 0 HcmV?d00001 diff --git a/web/src/assets/vite.svg b/web/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/web/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/web/src/assets/vue.svg b/web/src/assets/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/web/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/components/HelloWorld.vue b/web/src/components/HelloWorld.vue new file mode 100644 index 0000000..c232865 --- /dev/null +++ b/web/src/components/HelloWorld.vue @@ -0,0 +1,95 @@ + + + diff --git a/web/src/main.ts b/web/src/main.ts new file mode 100644 index 0000000..2425c0f --- /dev/null +++ b/web/src/main.ts @@ -0,0 +1,5 @@ +import { createApp } from 'vue' +import './style.css' +import App from './App.vue' + +createApp(App).mount('#app') diff --git a/web/src/style.css b/web/src/style.css new file mode 100644 index 0000000..527d4fb --- /dev/null +++ b/web/src/style.css @@ -0,0 +1,296 @@ +:root { + --text: #6b6375; + --text-h: #08060d; + --bg: #fff; + --border: #e5e4e7; + --code-bg: #f4f3ec; + --accent: #aa3bff; + --accent-bg: rgba(170, 59, 255, 0.1); + --accent-border: rgba(170, 59, 255, 0.5); + --social-bg: rgba(244, 243, 236, 0.5); + --shadow: + rgba(0, 0, 0, 0.1) 0 10px 15px -3px, rgba(0, 0, 0, 0.05) 0 4px 6px -2px; + + --sans: system-ui, 'Segoe UI', Roboto, sans-serif; + --heading: system-ui, 'Segoe UI', Roboto, sans-serif; + --mono: ui-monospace, Consolas, monospace; + + font: 18px/145% var(--sans); + letter-spacing: 0.18px; + color-scheme: light dark; + color: var(--text); + background: var(--bg); + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + @media (max-width: 1024px) { + font-size: 16px; + } +} + +@media (prefers-color-scheme: dark) { + :root { + --text: #9ca3af; + --text-h: #f3f4f6; + --bg: #16171d; + --border: #2e303a; + --code-bg: #1f2028; + --accent: #c084fc; + --accent-bg: rgba(192, 132, 252, 0.15); + --accent-border: rgba(192, 132, 252, 0.5); + --social-bg: rgba(47, 48, 58, 0.5); + --shadow: + rgba(0, 0, 0, 0.4) 0 10px 15px -3px, rgba(0, 0, 0, 0.25) 0 4px 6px -2px; + } + + #social .button-icon { + filter: invert(1) brightness(2); + } +} + +body { + margin: 0; +} + +h1, +h2 { + font-family: var(--heading); + font-weight: 500; + color: var(--text-h); +} + +h1 { + font-size: 56px; + letter-spacing: -1.68px; + margin: 32px 0; + @media (max-width: 1024px) { + font-size: 36px; + margin: 20px 0; + } +} +h2 { + font-size: 24px; + line-height: 118%; + letter-spacing: -0.24px; + margin: 0 0 8px; + @media (max-width: 1024px) { + font-size: 20px; + } +} +p { + margin: 0; +} + +code, +.counter { + font-family: var(--mono); + display: inline-flex; + border-radius: 4px; + color: var(--text-h); +} + +code { + font-size: 15px; + line-height: 135%; + padding: 4px 8px; + background: var(--code-bg); +} + +.counter { + font-size: 16px; + padding: 5px 10px; + border-radius: 5px; + color: var(--accent); + background: var(--accent-bg); + border: 2px solid transparent; + transition: border-color 0.3s; + margin-bottom: 24px; + + &:hover { + border-color: var(--accent-border); + } + &:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; + } +} + +.hero { + position: relative; + + .base, + .framework, + .vite { + inset-inline: 0; + margin: 0 auto; + } + + .base { + width: 170px; + position: relative; + z-index: 0; + } + + .framework, + .vite { + position: absolute; + } + + .framework { + z-index: 1; + top: 34px; + height: 28px; + transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) + scale(1.4); + } + + .vite { + z-index: 0; + top: 107px; + height: 26px; + width: auto; + transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) + scale(0.8); + } +} + +#app { + width: 1126px; + max-width: 100%; + margin: 0 auto; + text-align: center; + border-inline: 1px solid var(--border); + min-height: 100svh; + display: flex; + flex-direction: column; + box-sizing: border-box; +} + +#center { + display: flex; + flex-direction: column; + gap: 25px; + place-content: center; + place-items: center; + flex-grow: 1; + + @media (max-width: 1024px) { + padding: 32px 20px 24px; + gap: 18px; + } +} + +#next-steps { + display: flex; + border-top: 1px solid var(--border); + text-align: left; + + & > div { + flex: 1 1 0; + padding: 32px; + @media (max-width: 1024px) { + padding: 24px 20px; + } + } + + .icon { + margin-bottom: 16px; + width: 22px; + height: 22px; + } + + @media (max-width: 1024px) { + flex-direction: column; + text-align: center; + } +} + +#docs { + border-right: 1px solid var(--border); + + @media (max-width: 1024px) { + border-right: none; + border-bottom: 1px solid var(--border); + } +} + +#next-steps ul { + list-style: none; + padding: 0; + display: flex; + gap: 8px; + margin: 32px 0 0; + + .logo { + height: 18px; + } + + a { + color: var(--text-h); + font-size: 16px; + border-radius: 6px; + background: var(--social-bg); + display: flex; + padding: 6px 12px; + align-items: center; + gap: 8px; + text-decoration: none; + transition: box-shadow 0.3s; + + &:hover { + box-shadow: var(--shadow); + } + .button-icon { + height: 18px; + width: 18px; + } + } + + @media (max-width: 1024px) { + margin-top: 20px; + flex-wrap: wrap; + justify-content: center; + + li { + flex: 1 1 calc(50% - 8px); + } + + a { + width: 100%; + justify-content: center; + box-sizing: border-box; + } + } +} + +#spacer { + height: 88px; + border-top: 1px solid var(--border); + @media (max-width: 1024px) { + height: 48px; + } +} + +.ticks { + position: relative; + width: 100%; + + &::before, + &::after { + content: ''; + position: absolute; + top: -4.5px; + border: 5px solid transparent; + } + + &::before { + left: 0; + border-left-color: var(--border); + } + &::after { + right: 0; + border-right-color: var(--border); + } +} diff --git a/web/tsconfig.app.json b/web/tsconfig.app.json new file mode 100644 index 0000000..d72aa75 --- /dev/null +++ b/web/tsconfig.app.json @@ -0,0 +1,15 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "types": ["vite/client"], + "allowArbitraryExtensions": true, + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] +} diff --git a/web/tsconfig.json b/web/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/web/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/web/tsconfig.node.json b/web/tsconfig.node.json new file mode 100644 index 0000000..8455dcb --- /dev/null +++ b/web/tsconfig.node.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023"], + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "module": "nodenext", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/web/vite.config.ts b/web/vite.config.ts new file mode 100644 index 0000000..bbcf80c --- /dev/null +++ b/web/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [vue()], +}) From 21af3fadc92e60ab16b92a7f13c094dc464b8bbd Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 16:40:23 -0300 Subject: [PATCH 04/36] chore(docker): add Compose stack, Dockerfiles, nginx, Makefile and env config - Multi-stage PHP 8.4 image (pdo_pgsql, bcmath, intl, zip, opcache, pcntl) - php-fpm + nginx, Postgres 17, Mailpit, queue worker and Vite dev server - Makefile 'up' brings the whole stack up, migrates and seeds in one command - Configure Laravel env for Postgres, Mailpit and CORS (FRONTEND_URL) --- .env.example | 18 ++++++++ Makefile | 91 ++++++++++++++++++++++++++++++++++++++++ api/.env.example | 65 +++++++++++----------------- docker-compose.prod.yml | 33 +++++++++++++++ docker-compose.yml | 89 +++++++++++++++++++++++++++++++++++++++ docker/nginx/api.conf | 31 ++++++++++++++ docker/php/Dockerfile | 57 +++++++++++++++++++++++++ docker/php/entrypoint.sh | 44 +++++++++++++++++++ docker/php/php.ini | 13 ++++++ web/.env.example | 5 +++ web/Dockerfile | 30 +++++++++++++ web/nginx.conf | 20 +++++++++ 12 files changed, 455 insertions(+), 41 deletions(-) create mode 100644 .env.example create mode 100644 Makefile create mode 100644 docker-compose.prod.yml create mode 100644 docker-compose.yml create mode 100644 docker/nginx/api.conf create mode 100644 docker/php/Dockerfile create mode 100644 docker/php/entrypoint.sh create mode 100644 docker/php/php.ini create mode 100644 web/.env.example create mode 100644 web/Dockerfile create mode 100644 web/nginx.conf diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..c9cf3a8 --- /dev/null +++ b/.env.example @@ -0,0 +1,18 @@ +# Root env — ONLY values that docker-compose interpolates (ports + DB creds). +# The API and SPA keep their own env files (api/.env, web/.env). +# Copy to .env: cp .env.example .env (handled automatically by `make up`) + +COMPOSE_PROJECT_NAME=coderockr + +# Postgres (shared by the `postgres` service and injected into the API container) +DB_DATABASE=investments +DB_USERNAME=investments +DB_PASSWORD=secret +DB_PORT=5432 + +# Host ports +API_HTTP_PORT=8080 +WEB_HTTP_PORT=5173 + +# API base URL the SPA container is built/served with +VITE_API_URL=http://localhost:8080/api diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2ae3ce6 --- /dev/null +++ b/Makefile @@ -0,0 +1,91 @@ + +# ============================================================================ +# Investment Manager — developer entrypoints +# `make up` builds, starts, migrates and seeds the whole stack in one command. +# ============================================================================ + +DC := docker compose +APP := $(DC) exec -T app +WEB := $(DC) exec -T web + +.DEFAULT_GOAL := help +.PHONY: help up down destroy build install migrate seed fresh key test lint fix docs logs shell psql wait-db env + +help: ## Show this help + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \ + awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-10s\033[0m %s\n", $$1, $$2}' + +env: ## Create .env files from examples if missing + @[ -f .env ] || cp .env.example .env + @[ -f api/.env ] || cp api/.env.example api/.env + @[ -f web/.env ] || cp web/.env.example web/.env + @echo "env files ready" + +up: env ## Build + start everything, then migrate & seed (first-run friendly) + $(DC) up -d --build + $(MAKE) wait-db + $(APP) composer install + $(APP) php artisan key:generate --force + $(APP) php artisan migrate --seed --force + @echo "" + @echo " API -> http://localhost:$${API_HTTP_PORT:-8080}" + @echo " Docs -> http://localhost:$${API_HTTP_PORT:-8080}/docs/api" + @echo " SPA -> http://localhost:$${WEB_HTTP_PORT:-5173}" + @echo " Mail -> http://localhost:8025" + +down: ## Stop and remove containers + $(DC) down + +destroy: ## Stop and remove containers + volumes (DB wiped) + $(DC) down -v + +build: ## Rebuild images + $(DC) build + +install: ## Install PHP + JS dependencies + $(APP) composer install + $(WEB) npm ci + +migrate: ## Run database migrations + $(APP) php artisan migrate + +seed: ## Seed the database + $(APP) php artisan db:seed + +fresh: ## Drop, re-migrate and re-seed the database + $(APP) php artisan migrate:fresh --seed + +key: ## Generate the Laravel app key + $(APP) php artisan key:generate --force + +test: ## Run backend + frontend test suites + $(APP) php artisan test + $(WEB) npm run test -- --run + +lint: ## Style + static analysis + type-check + $(APP) ./vendor/bin/pint --test + $(APP) ./vendor/bin/phpstan analyse + $(WEB) npm run lint + $(WEB) npm run type-check + +fix: ## Auto-fix code style + $(APP) ./vendor/bin/pint + $(WEB) npm run lint -- --fix + +docs: ## Export the OpenAPI spec to docs/openapi.json + $(APP) php artisan scramble:export --path=docs/openapi.json + +logs: ## Tail all container logs + $(DC) logs -f + +shell: ## Open a shell in the API container + $(DC) exec app sh + +psql: ## Open a psql session + $(DC) exec postgres psql -U $${DB_USERNAME:-investments} -d $${DB_DATABASE:-investments} + +wait-db: ## Block until Postgres is accepting connections + @until $(DC) exec -T postgres pg_isready -U $${DB_USERNAME:-investments} >/dev/null 2>&1; do \ + echo "waiting for postgres..."; sleep 1; \ + done + @echo "postgres ready" diff --git a/api/.env.example b/api/.env.example index c0660ea..c8f3538 100644 --- a/api/.env.example +++ b/api/.env.example @@ -1,65 +1,48 @@ -APP_NAME=Laravel +APP_NAME="Investment Manager" APP_ENV=local APP_KEY= APP_DEBUG=true -APP_URL=http://localhost +APP_URL=http://localhost:8080 + +# SPA origin — used for CORS allow-list and links in notification e-mails. +FRONTEND_URL=http://localhost:5173 APP_LOCALE=en APP_FALLBACK_LOCALE=en -APP_FAKER_LOCALE=en_US - -APP_MAINTENANCE_DRIVER=file -# APP_MAINTENANCE_STORE=database - -# PHP_CLI_SERVER_WORKERS=4 +APP_FAKER_LOCALE=pt_BR BCRYPT_ROUNDS=12 LOG_CHANNEL=stack LOG_STACK=single -LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug -DB_CONNECTION=sqlite -# DB_HOST=127.0.0.1 -# DB_PORT=3306 -# DB_DATABASE=laravel -# DB_USERNAME=root -# DB_PASSWORD= +# --- Database (PostgreSQL) ------------------------------------------------- +# DB_HOST is the docker-compose service name, not localhost. +DB_CONNECTION=pgsql +DB_HOST=postgres +DB_PORT=5432 +DB_DATABASE=investments +DB_USERNAME=investments +DB_PASSWORD=secret SESSION_DRIVER=database SESSION_LIFETIME=120 -SESSION_ENCRYPT=false -SESSION_PATH=/ -SESSION_DOMAIN=null -BROADCAST_CONNECTION=log -FILESYSTEM_DISK=local QUEUE_CONNECTION=database - CACHE_STORE=database -# CACHE_PREFIX= - -MEMCACHED_HOST=127.0.0.1 - -REDIS_CLIENT=phpredis -REDIS_HOST=127.0.0.1 -REDIS_PASSWORD=null -REDIS_PORT=6379 +FILESYSTEM_DISK=local +BROADCAST_CONNECTION=log -MAIL_MAILER=log -MAIL_SCHEME=null -MAIL_HOST=127.0.0.1 -MAIL_PORT=2525 +# --- Mail (Mailpit in dev — catches everything, never really sends) -------- +MAIL_MAILER=smtp +MAIL_HOST=mailpit +MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null -MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_ADDRESS="no-reply@investments.test" MAIL_FROM_NAME="${APP_NAME}" -AWS_ACCESS_KEY_ID= -AWS_SECRET_ACCESS_KEY= -AWS_DEFAULT_REGION=us-east-1 -AWS_BUCKET= -AWS_USE_PATH_STYLE_ENDPOINT=false - -VITE_APP_NAME="${APP_NAME}" +# --- Investment domain rules (overridable) --------------------------------- +INVESTMENT_MONTHLY_RATE=0.0052 +INVESTMENT_CURRENCY=BRL diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..ea888c5 --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,33 @@ +# Production-ish overlay: baked images, no bind mounts, static SPA behind nginx. +# docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build +# Demonstrates that both apps build & deploy independently from source. + +services: + app: + build: + target: final + env_file: + - ./api/.env + volumes: [] # code is baked into the image, not mounted + + nginx: + volumes: + - ./docker/nginx/api.conf:/etc/nginx/conf.d/default.conf:ro + # NOTE: for a real deploy, copy api/public into the nginx image instead of + # mounting; kept minimal here since app+nginx share the same host in this demo. + + queue: + build: + target: final + volumes: [] + + web: + build: + context: ./web + dockerfile: Dockerfile + target: serve + args: + VITE_API_URL: ${VITE_API_URL:-http://localhost:8080/api} + ports: + - "${WEB_HTTP_PORT:-5173}:80" + volumes: [] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ddc09b0 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,89 @@ +# Dev topology: php-fpm + nginx (API) + Postgres + Mailpit + queue worker + Vite (SPA). +# All images are multi-arch (native arm64 on Apple Silicon) — no `platform:` pins. +# One command brings everything up: `make up`. + +name: ${COMPOSE_PROJECT_NAME:-coderockr} + +services: + postgres: + image: postgres:17-alpine + environment: + POSTGRES_DB: ${DB_DATABASE:-investments} + POSTGRES_USER: ${DB_USERNAME:-investments} + POSTGRES_PASSWORD: ${DB_PASSWORD:-secret} + ports: + - "${DB_PORT:-5432}:5432" + volumes: + - pgdata:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${DB_USERNAME:-investments} -d ${DB_DATABASE:-investments}"] + interval: 5s + timeout: 5s + retries: 10 + + mailpit: + image: axllent/mailpit:latest + environment: + MP_MAX_MESSAGES: 500 + ports: + - "1025:1025" # SMTP + - "8025:8025" # Web UI + + app: + build: + context: . + dockerfile: docker/php/Dockerfile + target: dev + env_file: + - ./api/.env + volumes: + - ./api:/var/www/html + depends_on: + postgres: + condition: service_healthy + mailpit: + condition: service_started + # exposes php-fpm on :9000 to nginx/queue on the internal network only + + nginx: + image: nginx:1.27-alpine + ports: + - "${API_HTTP_PORT:-8080}:80" + volumes: + - ./api:/var/www/html:ro + - ./docker/nginx/api.conf:/etc/nginx/conf.d/default.conf:ro + depends_on: + - app + + queue: + build: + context: . + dockerfile: docker/php/Dockerfile + target: dev + command: php artisan queue:work --tries=3 --timeout=90 --sleep=1 + env_file: + - ./api/.env + volumes: + - ./api:/var/www/html + depends_on: + postgres: + condition: service_healthy + + web: + build: + context: ./web + dockerfile: Dockerfile + target: dev + environment: + VITE_API_URL: ${VITE_API_URL:-http://localhost:8080/api} + ports: + - "${WEB_HTTP_PORT:-5173}:5173" + volumes: + - ./web:/app + - web_node_modules:/app/node_modules + depends_on: + - app + +volumes: + pgdata: + web_node_modules: diff --git a/docker/nginx/api.conf b/docker/nginx/api.conf new file mode 100644 index 0000000..397aadf --- /dev/null +++ b/docker/nginx/api.conf @@ -0,0 +1,31 @@ +server { + listen 80; + server_name _; + root /var/www/html/public; + index index.php; + + charset utf-8; + client_max_body_size 16M; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location = /favicon.ico { access_log off; log_not_found off; } + location = /robots.txt { access_log off; log_not_found off; } + + error_page 404 /index.php; + + location ~ \.php$ { + fastcgi_pass app:9000; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + fastcgi_param DOCUMENT_ROOT $realpath_root; + fastcgi_read_timeout 60s; + } + + location ~ /\.(?!well-known).* { + deny all; + } +} diff --git a/docker/php/Dockerfile b/docker/php/Dockerfile new file mode 100644 index 0000000..1b6204b --- /dev/null +++ b/docker/php/Dockerfile @@ -0,0 +1,57 @@ +# syntax=docker/dockerfile:1 + +# ========================================================================= +# base — PHP 8.4 FPM (Alpine) with all runtime extensions this project needs +# ========================================================================= +FROM php:8.4-fpm-alpine AS base + +# Robust, arm64-safe extension installer (works cleanly on Apple Silicon). +COPY --from=mlocati/php-extension-installer:2 /usr/bin/install-php-extensions /usr/local/bin/ + +# pdo_pgsql/pgsql -> Postgres · bcmath -> exact money math · intl -> locale +# formatting · zip -> composer · opcache -> perf · pcntl -> queue:work signals +RUN install-php-extensions \ + pdo_pgsql pgsql \ + bcmath \ + intl \ + zip \ + opcache \ + pcntl + +# `fcgi` gives us cgi-fcgi for a real php-fpm healthcheck; git/unzip for composer. +RUN apk add --no-cache fcgi git unzip + +COPY docker/php/php.ini /usr/local/etc/php/conf.d/zz-app.ini + +WORKDIR /var/www/html + +# ========================================================================= +# vendor — composer dependencies, cached on the lockfile +# ========================================================================= +FROM base AS vendor +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer +COPY api/composer.json api/composer.lock ./ +RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist --no-interaction + +# ========================================================================= +# dev — full dependencies, bind-mount friendly (used by docker-compose.yml) +# ========================================================================= +FROM base AS dev +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer +COPY docker/php/entrypoint.sh /usr/local/bin/entrypoint +RUN chmod +x /usr/local/bin/entrypoint +ENTRYPOINT ["entrypoint"] +CMD ["php-fpm"] + +# ========================================================================= +# final — production-ish image with code + optimized autoloader baked in +# ========================================================================= +FROM base AS final +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer +COPY --from=vendor /var/www/html/vendor ./vendor +COPY api/ ./ +RUN composer dump-autoload --optimize --no-dev \ + && php artisan config:cache \ + && php artisan route:cache \ + && chown -R www-data:www-data storage bootstrap/cache +CMD ["php-fpm"] diff --git a/docker/php/entrypoint.sh b/docker/php/entrypoint.sh new file mode 100644 index 0000000..9666948 --- /dev/null +++ b/docker/php/entrypoint.sh @@ -0,0 +1,44 @@ +#!/bin/sh +# Dev entrypoint for the php-fpm container. +# Keeps the container self-healing without owning migrations/seeds +# (those are orchestrated once by `make up` to avoid app/queue races). +set -e + +cd /var/www/html + +# 1. Ensure dependencies exist (first run against a fresh bind mount). +if [ ! -f vendor/autoload.php ]; then + echo "[entrypoint] vendor/ missing — running composer install..." + composer install --no-interaction --prefer-dist +fi + +# 2. Ensure an .env exists and has an APP_KEY. +if [ ! -f .env ]; then + echo "[entrypoint] .env missing — copying from .env.example..." + cp .env.example .env +fi +if ! grep -q '^APP_KEY=base64:' .env; then + echo "[entrypoint] generating APP_KEY..." + php artisan key:generate --force +fi + +# 3. Wait for Postgres to accept connections (PDO retry loop). +echo "[entrypoint] waiting for database at ${DB_HOST:-postgres}:${DB_PORT:-5432}..." +until php -r ' + try { + new PDO( + sprintf("pgsql:host=%s;port=%s;dbname=%s", getenv("DB_HOST") ?: "postgres", getenv("DB_PORT") ?: "5432", getenv("DB_DATABASE") ?: "investments"), + getenv("DB_USERNAME") ?: "investments", + getenv("DB_PASSWORD") ?: "secret" + ); + exit(0); + } catch (Throwable $e) { exit(1); } +' 2>/dev/null; do + sleep 1 +done +echo "[entrypoint] database is up." + +# 4. Make sure writable dirs are writable. +chmod -R ug+rw storage bootstrap/cache 2>/dev/null || true + +exec "$@" diff --git a/docker/php/php.ini b/docker/php/php.ini new file mode 100644 index 0000000..c5bd181 --- /dev/null +++ b/docker/php/php.ini @@ -0,0 +1,13 @@ +; Project PHP overrides (loaded as conf.d/zz-app.ini) +memory_limit = 256M +upload_max_filesize = 16M +post_max_size = 16M +max_execution_time = 60 + +; OPcache — enabled; validated on each request in dev so edits are picked up. +opcache.enable = 1 +opcache.enable_cli = 0 +opcache.memory_consumption = 128 +opcache.max_accelerated_files = 10000 +opcache.validate_timestamps = 1 +opcache.revalidate_freq = 0 diff --git a/web/.env.example b/web/.env.example new file mode 100644 index 0000000..3eda4c9 --- /dev/null +++ b/web/.env.example @@ -0,0 +1,5 @@ +# SPA environment — only VITE_-prefixed vars are exposed to the client bundle. +# The single point of coupling to the backend: change this to point the SPA at +# any API deployment, no code changes required. +VITE_API_URL=http://localhost:8080/api +VITE_APP_NAME="Investment Manager" diff --git a/web/Dockerfile b/web/Dockerfile new file mode 100644 index 0000000..0c686a3 --- /dev/null +++ b/web/Dockerfile @@ -0,0 +1,30 @@ +# syntax=docker/dockerfile:1 +# Build context for this Dockerfile is the ./web directory. + +# ---- deps: install node_modules, cached on the lockfile ---- +FROM node:24-alpine AS deps +WORKDIR /app +COPY package.json package-lock.json* ./ +RUN npm ci + +# ---- dev: Vite dev server with HMR (used by docker-compose.yml) ---- +FROM node:24-alpine AS dev +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . +EXPOSE 5173 +CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"] + +# ---- build: compile the static bundle ---- +FROM deps AS build +WORKDIR /app +COPY . . +ARG VITE_API_URL +ENV VITE_API_URL=${VITE_API_URL} +RUN npm run build + +# ---- serve: static assets behind nginx (production) ---- +FROM nginx:1.27-alpine AS serve +COPY nginx.conf /etc/nginx/conf.d/default.conf +COPY --from=build /app/dist /usr/share/nginx/html +EXPOSE 80 diff --git a/web/nginx.conf b/web/nginx.conf new file mode 100644 index 0000000..dbf4d8a --- /dev/null +++ b/web/nginx.conf @@ -0,0 +1,20 @@ +server { + listen 80; + server_name _; + root /usr/share/nginx/html; + index index.html; + + # SPA history fallback: deep links resolve to index.html. + location / { + try_files $uri $uri/ /index.html; + } + + # Long-cache the hashed build assets. + location /assets/ { + expires 1y; + add_header Cache-Control "public, immutable"; + } + + gzip on; + gzip_types text/css application/javascript application/json image/svg+xml; +} From 656c7735728167dd963a5e4fd2190d5aad13d30f Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 17:01:18 -0300 Subject: [PATCH 05/36] chore(api): install Sanctum and domain/dev dependencies Production: laravel/sanctum (Bearer token auth), brick/money (exact money), spatie/laravel-data (typed DTOs). Dev: pestphp/pest, dedoc/scramble (OpenAPI), larastan (static analysis). Publishes API routes and personal_access_tokens. --- api/app/Models/User.php | 2 + api/bootstrap/app.php | 3 + api/composer.json | 9 +- api/composer.lock | 2624 ++++++++++++++--- api/config/sanctum.php | 89 + ...26_create_personal_access_tokens_table.php | 35 + api/routes/api.php | 10 + api/tests/Feature/ExampleTest.php | 19 - api/tests/Pest.php | 52 + api/tests/Unit/ExampleTest.php | 16 - 10 files changed, 2429 insertions(+), 430 deletions(-) create mode 100644 api/config/sanctum.php create mode 100644 api/database/migrations/2026_08_07_203426_create_personal_access_tokens_table.php create mode 100644 api/routes/api.php delete mode 100644 api/tests/Feature/ExampleTest.php create mode 100644 api/tests/Pest.php delete mode 100644 api/tests/Unit/ExampleTest.php diff --git a/api/app/Models/User.php b/api/app/Models/User.php index f6ba1d2..916755d 100644 --- a/api/app/Models/User.php +++ b/api/app/Models/User.php @@ -1,5 +1,7 @@ withRouting( web: __DIR__.'/../routes/web.php', + api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) diff --git a/api/composer.json b/api/composer.json index a437091..4b4f229 100644 --- a/api/composer.json +++ b/api/composer.json @@ -7,16 +7,23 @@ "license": "MIT", "require": { "php": "^8.3", + "brick/money": "^0.14.1", "laravel/framework": "^13.8", - "laravel/tinker": "^3.0" + "laravel/sanctum": "^4.0", + "laravel/tinker": "^3.0", + "spatie/laravel-data": "^4.23" }, "require-dev": { + "dedoc/scramble": "^0.13.39", "fakerphp/faker": "^1.23", + "larastan/larastan": "^3.10", "laravel/pail": "^1.2.5", "laravel/pao": "^1.0.6", "laravel/pint": "^1.27", "mockery/mockery": "^1.6", "nunomaduro/collision": "^8.6", + "pestphp/pest": "^4.7", + "pestphp/pest-plugin-laravel": "^4.1", "phpunit/phpunit": "^12.5.12" }, "autoload": { diff --git a/api/composer.lock b/api/composer.lock index 44ac78e..f7a903e 100644 --- a/api/composer.lock +++ b/api/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "36793882908b6cbdd344b5a4840231db", + "content-hash": "4cf7d5e3e76cffdce44ad2d578c2b105", "packages": [ { "name": "brick/math", @@ -65,6 +65,63 @@ ], "time": "2026-06-14T18:21:03+00:00" }, + { + "name": "brick/money", + "version": "0.14.1", + "source": { + "type": "git", + "url": "https://github.com/brick/money.git", + "reference": "5381a1a6b896d8d57205cbeb8ee01560094a0ca5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/money/zipball/5381a1a6b896d8d57205cbeb8ee01560094a0ca5", + "reference": "5381a1a6b896d8d57205cbeb8ee01560094a0ca5", + "shasum": "" + }, + "require": { + "brick/math": "~0.15.0 || ~0.16.0 || ~0.17.0 || ~0.18.0 || ~0.19.0", + "php": "^8.2", + "psr/simple-cache": "^2.0 || ^3.0" + }, + "require-dev": { + "brick/varexporter": "0.7.0", + "ext-dom": "*", + "ext-pdo": "*", + "phpstan/phpstan": "2.1.40", + "phpunit/phpunit": "^11.0" + }, + "suggest": { + "ext-intl": "Required to format Money objects" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Money\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Money and currency library", + "keywords": [ + "brick", + "currency", + "money" + ], + "support": { + "issues": "https://github.com/brick/money/issues", + "source": "https://github.com/brick/money/tree/0.14.1" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2026-07-30T22:32:40+00:00" + }, { "name": "carbonphp/carbon-doctrine-types", "version": "3.2.0", @@ -209,6 +266,54 @@ }, "time": "2024-07-08T12:26:09+00:00" }, + { + "name": "doctrine/deprecations", + "version": "1.1.6", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=14" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^12 || ^14", + "phpstan/phpstan": "1.4.10 || 2.1.30", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", + "psr/log": "^1 || ^2 || ^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.6" + }, + "time": "2026-02-07T07:09:04+00:00" + }, { "name": "doctrine/inflector", "version": "2.1.0", @@ -1343,6 +1448,69 @@ }, "time": "2026-08-04T14:50:50+00:00" }, + { + "name": "laravel/sanctum", + "version": "v4.3.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "fee27a573d1a013af3721d86153a65e0b11927e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/fee27a573d1a013af3721d86153a65e0b11927e6", + "reference": "fee27a573d1a013af3721d86153a65e0b11927e6", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^11.0|^12.0|^13.0", + "illuminate/contracts": "^11.0|^12.0|^13.0", + "illuminate/database": "^11.0|^12.0|^13.0", + "illuminate/support": "^11.0|^12.0|^13.0", + "php": "^8.2", + "symfony/console": "^7.0|^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.6", + "orchestra/testbench": "^9.15|^10.8|^11.0", + "phpstan/phpstan": "^1.10" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sanctum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", + "keywords": [ + "auth", + "laravel", + "sanctum" + ], + "support": { + "issues": "https://github.com/laravel/sanctum/issues", + "source": "https://github.com/laravel/sanctum" + }, + "time": "2026-06-23T18:26:55+00:00" + }, { "name": "laravel/serializable-closure", "version": "v2.0.15", @@ -2542,6 +2710,182 @@ ], "time": "2026-02-16T23:10:27+00:00" }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "6.0.3", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/7bae67520aa9f5ecc506d646810bd40d9da54582", + "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^2.0", + "phpstan/phpdoc-parser": "^2.0", + "webmozart/assert": "^1.9.1 || ^2" + }, + "require-dev": { + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26", + "shipmonk/dead-code-detector": "^0.5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/6.0.3" + }, + "time": "2026-03-18T20:49:53+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/327a05bbee54120d4786a0dc67aad30226ad4cf9", + "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev", + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/2.0.0" + }, + "time": "2026-01-06T21:53:42+00:00" + }, { "name": "phpoption/phpoption", "version": "1.9.5", @@ -2617,6 +2961,53 @@ ], "time": "2025-12-27T19:41:33+00:00" }, + { + "name": "phpstan/phpdoc-parser", + "version": "2.3.3", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fb19eedd2bb67ff8cf7a5502ad329e701d6398a3", + "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.3" + }, + "time": "2026-07-08T07:01:06+00:00" + }, { "name": "psr/clock", "version": "1.0.0", @@ -3307,22 +3698,246 @@ "time": "2026-06-18T03:57:49+00:00" }, { - "name": "symfony/clock", - "version": "v8.1.0", + "name": "spatie/laravel-data", + "version": "4.23.0", "source": { "type": "git", - "url": "https://github.com/symfony/clock.git", - "reference": "701ef4de9705d6c32292ebee5e8044094a09fbf6" + "url": "https://github.com/spatie/laravel-data.git", + "reference": "230543769c996e407fec2873930626aed7dd0d3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/701ef4de9705d6c32292ebee5e8044094a09fbf6", - "reference": "701ef4de9705d6c32292ebee5e8044094a09fbf6", + "url": "https://api.github.com/repos/spatie/laravel-data/zipball/230543769c996e407fec2873930626aed7dd0d3b", + "reference": "230543769c996e407fec2873930626aed7dd0d3b", "shasum": "" }, "require": { - "php": ">=8.4.1", - "psr/clock": "^1.0" + "illuminate/contracts": "^10.0|^11.0|^12.0|^13.0", + "php": "^8.1", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/reflection-docblock": "^5.3 || ^6.0", + "phpdocumentor/type-resolver": "^1.7 || ^2.0", + "spatie/laravel-package-tools": "^1.9.0", + "spatie/php-structure-discoverer": "^2.0" + }, + "require-dev": { + "fakerphp/faker": "^1.14", + "friendsofphp/php-cs-fixer": "^3.0", + "inertiajs/inertia-laravel": "^2.0|^3.0", + "livewire/livewire": "^3.0|^4.0", + "mockery/mockery": "^1.6", + "nesbot/carbon": "^2.63|^3.0", + "orchestra/testbench": "^8.37.0|^9.16|^10.9|^11.0", + "pestphp/pest": "^2.36|^3.8|^4.3", + "pestphp/pest-plugin-laravel": "^2.4|^3.0|^4.0", + "pestphp/pest-plugin-livewire": "^2.1|^3.0|^4.0", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "spatie/invade": "^1.0", + "spatie/laravel-typescript-transformer": "^2.5", + "spatie/pest-plugin-snapshots": "^2.1", + "spatie/test-time": "^1.2" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\LaravelData\\LaravelDataServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Spatie\\LaravelData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ruben Van Assche", + "email": "ruben@spatie.be", + "role": "Developer" + } + ], + "description": "Create unified resources and data transfer objects", + "homepage": "https://github.com/spatie/laravel-data", + "keywords": [ + "laravel", + "laravel-data", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-data/issues", + "source": "https://github.com/spatie/laravel-data/tree/4.23.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2026-05-08T14:41:13+00:00" + }, + { + "name": "spatie/laravel-package-tools", + "version": "1.93.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-package-tools.git", + "reference": "d5552849801f2642aea710557463234b59ef65eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/d5552849801f2642aea710557463234b59ef65eb", + "reference": "d5552849801f2642aea710557463234b59ef65eb", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^10.0|^11.0|^12.0|^13.0", + "php": "^8.1" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "orchestra/testbench": "^8.0|^9.2|^10.0|^11.0", + "pestphp/pest": "^2.1|^3.1|^4.0", + "phpunit/php-code-coverage": "^10.0|^11.0|^12.0", + "phpunit/phpunit": "^10.5|^11.5|^12.5", + "spatie/pest-plugin-test-time": "^2.2|^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\LaravelPackageTools\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" + } + ], + "description": "Tools for creating Laravel packages", + "homepage": "https://github.com/spatie/laravel-package-tools", + "keywords": [ + "laravel-package-tools", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-package-tools/issues", + "source": "https://github.com/spatie/laravel-package-tools/tree/1.93.1" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2026-05-19T14:06:37+00:00" + }, + { + "name": "spatie/php-structure-discoverer", + "version": "2.4.4", + "source": { + "type": "git", + "url": "https://github.com/spatie/php-structure-discoverer.git", + "reference": "fa2b7dae8e8a22c0306154c4b052420e054f7e2b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/php-structure-discoverer/zipball/fa2b7dae8e8a22c0306154c4b052420e054f7e2b", + "reference": "fa2b7dae8e8a22c0306154c4b052420e054f7e2b", + "shasum": "" + }, + "require": { + "illuminate/collections": "^11.0|^12.0|^13.0", + "php": "^8.3", + "spatie/laravel-package-tools": "^1.92.7", + "symfony/finder": "^6.0|^7.3.5|^8.0" + }, + "require-dev": { + "amphp/parallel": "^2.3.2", + "illuminate/console": "^11.0|^12.0|^13.0", + "nunomaduro/collision": "^7.0|^8.8.3", + "orchestra/testbench": "^9.5|^10.8|^11.0", + "pestphp/pest": "^3.8|^4.0", + "pestphp/pest-plugin-laravel": "^3.2|^4.0", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan-deprecation-rules": "^1.2.1", + "phpstan/phpstan-phpunit": "^1.4.2", + "spatie/laravel-ray": "^1.43.1" + }, + "suggest": { + "amphp/parallel": "When you want to use the Parallel discover worker" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\StructureDiscoverer\\StructureDiscovererServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Spatie\\StructureDiscoverer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ruben Van Assche", + "email": "ruben@spatie.be", + "role": "Developer" + } + ], + "description": "Automatically discover structures within your PHP application", + "homepage": "https://github.com/spatie/php-structure-discoverer", + "keywords": [ + "discover", + "laravel", + "php", + "php-structure-discoverer" + ], + "support": { + "issues": "https://github.com/spatie/php-structure-discoverer/issues", + "source": "https://github.com/spatie/php-structure-discoverer/tree/2.4.4" + }, + "funding": [ + { + "url": "https://github.com/LaravelAutoDiscoverer", + "type": "github" + } + ], + "time": "2026-06-15T07:14:32+00:00" + }, + { + "name": "symfony/clock", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "701ef4de9705d6c32292ebee5e8044094a09fbf6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/701ef4de9705d6c32292ebee5e8044094a09fbf6", + "reference": "701ef4de9705d6c32292ebee5e8044094a09fbf6", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "psr/clock": "^1.0" }, "provide": { "psr/clock-implementation": "1.0" @@ -5998,49 +6613,45 @@ } ], "time": "2026-04-26T05:33:54+00:00" - } - ], - "packages-dev": [ + }, { - "name": "fakerphp/faker", - "version": "v1.24.1", + "name": "webmozart/assert", + "version": "2.4.1", "source": { "type": "git", - "url": "https://github.com/FakerPHP/Faker.git", - "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" + "url": "https://github.com/webmozarts/assert.git", + "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", - "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/2ccb7c2e821038c03a3e6e1700c570c158c55f70", + "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0", - "psr/container": "^1.0 || ^2.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "conflict": { - "fzaninotto/faker": "*" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "doctrine/persistence": "^1.3 || ^2.0", - "ext-intl": "*", - "phpunit/phpunit": "^9.5.26", - "symfony/phpunit-bridge": "^5.4.16" + "ext-ctype": "*", + "ext-date": "*", + "ext-filter": "*", + "php": "^8.2" }, "suggest": { - "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", - "ext-curl": "Required by Faker\\Provider\\Image to download images.", - "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", - "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", - "ext-mbstring": "Required for multibyte Unicode string functionality." + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" }, "type": "library", + "extra": { + "psalm": { + "pluginClass": "Webmozart\\Assert\\PsalmPlugin" + }, + "branch-alias": { + "dev-master": "2.0-dev", + "dev-feature/2-0": "2.0-dev" + } + }, "autoload": { "psr-4": { - "Faker\\": "src/Faker/" + "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -6049,57 +6660,79 @@ ], "authors": [ { - "name": "François Zaninotto" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com" } ], - "description": "Faker is a PHP library that generates fake data for you.", + "description": "Assertions to validate method input/output with nice error messages.", "keywords": [ - "data", - "faker", - "fixtures" + "assert", + "check", + "validate" ], "support": { - "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/2.4.1" }, - "time": "2024-11-21T13:46:39+00:00" - }, + "time": "2026-06-15T15:31:57+00:00" + } + ], + "packages-dev": [ { - "name": "filp/whoops", - "version": "2.18.4", + "name": "brianium/paratest", + "version": "v7.20.0", "source": { "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" + "url": "https://github.com/paratestphp/paratest.git", + "reference": "81c80677c9ec0ed4ef16b246167f11dec81a6e3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", - "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/81c80677c9ec0ed4ef16b246167f11dec81a6e3d", + "reference": "81c80677c9ec0ed4ef16b246167f11dec81a6e3d", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" + "ext-dom": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-simplexml": "*", + "fidry/cpu-core-counter": "^1.3.0", + "jean85/pretty-package-versions": "^2.1.1", + "php": "~8.3.0 || ~8.4.0 || ~8.5.0", + "phpunit/php-code-coverage": "^12.5.3 || ^13.0.1", + "phpunit/php-file-iterator": "^6.0.1 || ^7", + "phpunit/php-timer": "^8 || ^9", + "phpunit/phpunit": "^12.5.14 || ^13.0.5", + "sebastian/environment": "^8.0.3 || ^9", + "symfony/console": "^7.4.7 || ^8.0.7", + "symfony/process": "^7.4.5 || ^8.0.5" }, "require-dev": { - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^4.0 || ^5.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" + "doctrine/coding-standard": "^14.0.0", + "ext-pcntl": "*", + "ext-pcov": "*", + "ext-posix": "*", + "phpstan/phpstan": "^2.1.44", + "phpstan/phpstan-deprecation-rules": "^2.0.4", + "phpstan/phpstan-phpunit": "^2.0.16", + "phpstan/phpstan-strict-rules": "^2.0.10", + "symfony/filesystem": "^7.4.6 || ^8.0.6" }, + "bin": [ + "bin/paratest", + "bin/paratest_for_phpstorm" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, "autoload": { "psr-4": { - "Whoops\\": "src/Whoops/" + "ParaTest\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -6108,116 +6741,144 @@ ], "authors": [ { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", + "name": "Brian Scaturro", + "email": "scaturrob@gmail.com", + "role": "Developer" + }, + { + "name": "Filippo Tessarotto", + "email": "zoeslam@gmail.com", "role": "Developer" } ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", + "description": "Parallel testing for PHP", + "homepage": "https://github.com/paratestphp/paratest", "keywords": [ - "error", - "exception", - "handling", - "library", - "throwable", - "whoops" + "concurrent", + "parallel", + "phpunit", + "testing" ], "support": { - "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.18.4" + "issues": "https://github.com/paratestphp/paratest/issues", + "source": "https://github.com/paratestphp/paratest/tree/v7.20.0" }, "funding": [ { - "url": "https://github.com/denis-sokolov", + "url": "https://github.com/sponsors/Slamdunk", "type": "github" + }, + { + "url": "https://paypal.me/filippotessarotto", + "type": "paypal" } ], - "time": "2025-08-08T12:00:00+00:00" + "time": "2026-03-29T15:46:14+00:00" }, { - "name": "hamcrest/hamcrest-php", - "version": "v2.1.1", + "name": "composer/pcre", + "version": "3.4.0", "source": { "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" + "url": "https://github.com/composer/pcre.git", + "reference": "d5a341b3fb61f3001970940afb1d332968a183ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", - "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "url": "https://api.github.com/repos/composer/pcre/zipball/d5a341b3fb61f3001970940afb1d332968a183ed", + "reference": "d5a341b3fb61f3001970940afb1d332968a183ed", "shasum": "" }, "require": { - "php": "^7.4|^8.0" + "php": "^7.4 || ^8.0" }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" + "conflict": { + "phpstan/phpstan": "<2.2.2" }, "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "type": "library", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^9" + }, + "type": "library", "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, "branch-alias": { - "dev-master": "2.1-dev" + "dev-main": "3.x-dev" } }, "autoload": { - "classmap": [ - "hamcrest" - ] + "psr-4": { + "Composer\\Pcre\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "This is the PHP port of Hamcrest Matchers", + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", "keywords": [ - "test" + "PCRE", + "preg", + "regex", + "regular expression" ], "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.4.0" }, - "time": "2025-04-30T06:54:44+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + } + ], + "time": "2026-06-07T11:47:49+00:00" }, { - "name": "laravel/agent-detector", - "version": "v2.0.2", + "name": "composer/xdebug-handler", + "version": "3.0.5", "source": { "type": "git", - "url": "https://github.com/laravel/agent-detector.git", - "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f" + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/agent-detector/zipball/90694b9256099591cf9e55d08c18ba7a00bf099f", - "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { - "php": "^8.2.0" + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { - "laravel/pint": "^1.24.0", - "pestphp/pest": "^3.8.5|^4.1.0", - "pestphp/pest-plugin-type-coverage": "^3.0|^4.0.2", - "phpstan/phpstan": "^2.1.26", - "rector/rector": "^2.1.7", - "symfony/var-dumper": "^7.3.3" + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { - "files": [ - "src/functions.php" - ], "psr-4": { - "Laravel\\AgentDetector\\": "src/" + "Composer\\XdebugHandler\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -6226,77 +6887,85 @@ ], "authors": [ { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" } ], - "description": "Detect if code is running in an AI agent or automated development environment", - "homepage": "https://github.com/laravel/agent-detector", + "description": "Restarts a process without Xdebug.", "keywords": [ - "Agent", - "ai", - "automation", - "claude", - "cursor", - "detection", - "devin", - "php" + "Xdebug", + "performance" ], "support": { - "issues": "https://github.com/laravel/agent-detector/issues", - "source": "https://github.com/laravel/agent-detector" + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" }, - "time": "2026-04-29T18:32:34+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-05-06T16:37:16+00:00" }, { - "name": "laravel/pail", - "version": "v1.2.7", + "name": "dedoc/scramble", + "version": "v0.13.39", "source": { "type": "git", - "url": "https://github.com/laravel/pail.git", - "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa" + "url": "https://github.com/dedoc/scramble.git", + "reference": "7fcc4758d62f22d326637a578168bd5eb67a8625" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pail/zipball/2f7d27dada8effc48b8c424445a69cca7007daaa", - "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa", + "url": "https://api.github.com/repos/dedoc/scramble/zipball/7fcc4758d62f22d326637a578168bd5eb67a8625", + "reference": "7fcc4758d62f22d326637a578168bd5eb67a8625", "shasum": "" }, "require": { - "ext-mbstring": "*", - "illuminate/console": "^10.24|^11.0|^12.0|^13.0", - "illuminate/contracts": "^10.24|^11.0|^12.0|^13.0", - "illuminate/log": "^10.24|^11.0|^12.0|^13.0", - "illuminate/process": "^10.24|^11.0|^12.0|^13.0", - "illuminate/support": "^10.24|^11.0|^12.0|^13.0", - "nunomaduro/termwind": "^1.15|^2.0", - "php": "^8.2", - "symfony/console": "^6.0|^7.0|^8.0" + "illuminate/contracts": "^10.0|^11.0|^12.0|^13.0", + "myclabs/deep-copy": "^1.12", + "nikic/php-parser": "^5.0", + "php": "^8.1", + "phpstan/phpdoc-parser": "^1.0|^2.0", + "spatie/laravel-package-tools": "^1.9.2" }, "require-dev": { - "laravel/framework": "^10.24|^11.0|^12.0|^13.0", - "laravel/pint": "^1.13", - "orchestra/testbench-core": "^8.13|^9.17|^10.8|^11.0", - "pestphp/pest": "^2.20|^3.0|^4.0", - "pestphp/pest-plugin-type-coverage": "^2.3|^3.0|^4.0", - "phpstan/phpstan": "^1.12.27", - "symfony/var-dumper": "^6.3|^7.0|^8.0", - "symfony/yaml": "^6.3|^7.0|^8.0" + "larastan/larastan": "^3.3", + "laravel/pint": "^v1.1.0", + "laravel/scout": "^10.0|^11.0", + "nunomaduro/collision": "^7.0|^8.0", + "orchestra/testbench": "^8.0|^9.0|^10.0|^11.0", + "pestphp/pest": "^2.34|^3.7|^4.4", + "pestphp/pest-plugin-laravel": "^2.3|^3.1|^4.1", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan-deprecation-rules": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5|^11.5.3|^12.5.12", + "spatie/laravel-permission": "^6.10|^7.2", + "spatie/pest-plugin-snapshots": "^2.1" }, "type": "library", "extra": { "laravel": { "providers": [ - "Laravel\\Pail\\PailServiceProvider" + "Dedoc\\Scramble\\ScrambleServiceProvider" ] - }, - "branch-alias": { - "dev-main": "1.x-dev" } }, "autoload": { "psr-4": { - "Laravel\\Pail\\": "src/" + "Dedoc\\Scramble\\": "src", + "Dedoc\\Scramble\\Database\\Factories\\": "database/factories" } }, "notification-url": "https://packagist.org/downloads/", @@ -6305,83 +6974,70 @@ ], "authors": [ { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" + "name": "Roman Lytvynenko", + "email": "litvinenko95@gmail.com", + "role": "Developer" } ], - "description": "Easily delve into your Laravel application's log files directly from the command line.", - "homepage": "https://github.com/laravel/pail", + "description": "Automatic generation of API documentation for Laravel applications.", + "homepage": "https://github.com/dedoc/scramble", "keywords": [ - "dev", + "documentation", "laravel", - "logs", - "php", - "tail" + "openapi" ], "support": { - "issues": "https://github.com/laravel/pail/issues", - "source": "https://github.com/laravel/pail" + "issues": "https://github.com/dedoc/scramble/issues", + "source": "https://github.com/dedoc/scramble/tree/v0.13.39" }, - "time": "2026-05-20T22:24:57+00:00" + "funding": [ + { + "url": "https://github.com/romalytvynenko", + "type": "github" + } + ], + "time": "2026-08-06T06:42:48+00:00" }, { - "name": "laravel/pao", - "version": "v1.1.3", + "name": "fakerphp/faker", + "version": "v1.24.1", "source": { "type": "git", - "url": "https://github.com/laravel/pao.git", - "reference": "322f22095f3639551b64db9a13dfd8ab09c8206b" + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pao/zipball/322f22095f3639551b64db9a13dfd8ab09c8206b", - "reference": "322f22095f3639551b64db9a13dfd8ab09c8206b", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", "shasum": "" }, "require": { - "laravel/agent-detector": "^2.0.2", - "php": "^8.3" + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" }, "conflict": { - "laravel/framework": "<12.0.0", - "nunomaduro/collision": "<8.9.3", - "pestphp/pest": "<4.6.3 || >=6.0.0", - "phpunit/phpunit": "<12.5.23 || >=13.0.0 <13.1.7 || >=14.0.0" + "fzaninotto/faker": "*" }, "require-dev": { - "brianium/paratest": "^7.23.0", - "laravel/pint": "^1.30.0", - "orchestra/testbench": "^10.11.0 || ^11.1.0", - "pestphp/pest": "^4.7.2 || ^5.0.1", - "pestphp/pest-plugin-type-coverage": "^4.0.4 || ^5.0.0", - "phpstan/phpstan": "^2.2.7", - "rector/rector": "^2.5.8", - "symfony/process": "^7.4.8 || ^8.1.0", - "symfony/var-dumper": "^7.4.8 || ^8.1.2" + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" }, - "type": "library", - "extra": { - "pest": { - "plugins": [ - "Laravel\\Pao\\Drivers\\Pest\\Plugin" - ] - }, - "laravel": { - "providers": [ - "Laravel\\Pao\\Laravel\\ServiceProvider" - ] - } + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." }, + "type": "library", "autoload": { - "files": [ - "src/Autoload.php" - ], "psr-4": { - "Laravel\\Pao\\": "src/" + "Faker\\": "src/Faker/" } }, "notification-url": "https://packagist.org/downloads/", @@ -6390,71 +7046,53 @@ ], "authors": [ { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" + "name": "François Zaninotto" } ], - "description": "Agent-optimized output for PHP testing tools", + "description": "Faker is a PHP library that generates fake data for you.", "keywords": [ - "Agent", - "PHPStan", - "ai", - "dev", - "paratest", - "pest", - "php", - "phpunit", - "rector", - "testing" + "data", + "faker", + "fixtures" ], "support": { - "issues": "https://github.com/laravel/pao/issues", - "source": "https://github.com/laravel/pao" + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" }, - "time": "2026-07-29T18:38:14+00:00" + "time": "2024-11-21T13:46:39+00:00" }, { - "name": "laravel/pint", - "version": "v1.30.4", + "name": "fidry/cpu-core-counter", + "version": "1.3.0", "source": { "type": "git", - "url": "https://github.com/laravel/pint.git", - "reference": "a96cb6eee2961905d2fce7207aefb80945bf6b28" + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/a96cb6eee2961905d2fce7207aefb80945bf6b28", - "reference": "a96cb6eee2961905d2fce7207aefb80945bf6b28", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", "shasum": "" }, "require": { - "ext-json": "*", - "ext-mbstring": "*", - "ext-tokenizer": "*", - "ext-xml": "*", - "php": "^8.2.0" + "php": "^7.2 || ^8.0" }, "require-dev": { - "composer/semver": "^3.4.4", - "friendsofphp/php-cs-fixer": "^3.95.18", - "illuminate/view": "^12.65.0", - "larastan/larastan": "^3.10.0", - "laravel-zero/framework": "^12.1.0", - "laravel/agent-detector": "^2.0.2", - "laravel/prompts": "^0.3.22", - "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^2.4.0", - "pestphp/pest": "^3.8.7" + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" }, - "bin": [ - "builds/pint" - ], - "type": "project", + "type": "library", "autoload": { "psr-4": { - "App\\": "app/", - "Database\\Seeders\\": "database/seeders/", - "Database\\Factories\\": "database/factories/" + "Fidry\\CpuCoreCounter\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -6463,12 +7101,623 @@ ], "authors": [ { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" } ], - "description": "An opinionated code formatter for PHP.", - "homepage": "https://laravel.com", + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2025-08-14T07:29:31+00:00" + }, + { + "name": "filp/whoops", + "version": "2.18.4", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.18.4" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2025-08-08T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" + }, + "time": "2025-04-30T06:54:44+00:00" + }, + { + "name": "iamcal/sql-parser", + "version": "v0.7", + "source": { + "type": "git", + "url": "https://github.com/iamcal/SQLParser.git", + "reference": "610392f38de49a44dab08dc1659960a29874c4b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/iamcal/SQLParser/zipball/610392f38de49a44dab08dc1659960a29874c4b8", + "reference": "610392f38de49a44dab08dc1659960a29874c4b8", + "shasum": "" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^1.0", + "phpunit/phpunit": "^5|^6|^7|^8|^9" + }, + "type": "library", + "autoload": { + "psr-4": { + "iamcal\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Cal Henderson", + "email": "cal@iamcal.com" + } + ], + "description": "MySQL schema parser", + "support": { + "issues": "https://github.com/iamcal/SQLParser/issues", + "source": "https://github.com/iamcal/SQLParser/tree/v0.7" + }, + "time": "2026-01-28T22:20:33+00:00" + }, + { + "name": "jean85/pretty-package-versions", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a", + "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.1.0", + "php": "^7.4|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^7.5|^8.5|^9.6", + "rector/rector": "^2.0", + "vimeo/psalm": "^4.3 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jean85\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" + } + ], + "description": "A library to get pretty versions strings of installed dependencies", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], + "support": { + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1" + }, + "time": "2025-03-19T14:43:43+00:00" + }, + { + "name": "larastan/larastan", + "version": "v3.10.0", + "source": { + "type": "git", + "url": "https://github.com/larastan/larastan.git", + "reference": "2970f83398154178a739609c244577267c7ee8eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/larastan/larastan/zipball/2970f83398154178a739609c244577267c7ee8eb", + "reference": "2970f83398154178a739609c244577267c7ee8eb", + "shasum": "" + }, + "require": { + "ext-json": "*", + "iamcal/sql-parser": "^0.7.0", + "illuminate/console": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/container": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/contracts": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/database": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/http": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/pipeline": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/support": "^11.44.2 || ^12.4.1 || ^13", + "php": "^8.2", + "phpstan/phpstan": "^2.2.0" + }, + "require-dev": { + "doctrine/coding-standard": "^14", + "laravel/framework": "^11.44.2 || ^12.7.2 || ^13", + "mockery/mockery": "^1.6.12", + "nikic/php-parser": "^5.4", + "orchestra/canvas": "^v9.2.2 || ^10.0.1 || ^11", + "orchestra/testbench-core": "^9.12.0 || ^10.1 || ^11", + "phpstan/phpstan-deprecation-rules": "^2.0.1", + "phpunit/phpunit": "^10.5.35 || ^11.5.15 || ^12.5.8 || ^13.1.8" + }, + "suggest": { + "orchestra/testbench": "Using Larastan for analysing a package needs Testbench", + "phpmyadmin/sql-parser": "Install to enable Larastan's optional phpMyAdmin-based SQL parser automatically" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Larastan\\Larastan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Can Vural", + "email": "can9119@gmail.com" + } + ], + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel", + "keywords": [ + "PHPStan", + "code analyse", + "code analysis", + "larastan", + "laravel", + "package", + "php", + "static analysis" + ], + "support": { + "issues": "https://github.com/larastan/larastan/issues", + "source": "https://github.com/larastan/larastan/tree/v3.10.0" + }, + "funding": [ + { + "url": "https://github.com/canvural", + "type": "github" + } + ], + "time": "2026-05-28T08:00:58+00:00" + }, + { + "name": "laravel/agent-detector", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/agent-detector.git", + "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/agent-detector/zipball/90694b9256099591cf9e55d08c18ba7a00bf099f", + "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f", + "shasum": "" + }, + "require": { + "php": "^8.2.0" + }, + "require-dev": { + "laravel/pint": "^1.24.0", + "pestphp/pest": "^3.8.5|^4.1.0", + "pestphp/pest-plugin-type-coverage": "^3.0|^4.0.2", + "phpstan/phpstan": "^2.1.26", + "rector/rector": "^2.1.7", + "symfony/var-dumper": "^7.3.3" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Laravel\\AgentDetector\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Detect if code is running in an AI agent or automated development environment", + "homepage": "https://github.com/laravel/agent-detector", + "keywords": [ + "Agent", + "ai", + "automation", + "claude", + "cursor", + "detection", + "devin", + "php" + ], + "support": { + "issues": "https://github.com/laravel/agent-detector/issues", + "source": "https://github.com/laravel/agent-detector" + }, + "time": "2026-04-29T18:32:34+00:00" + }, + { + "name": "laravel/pail", + "version": "v1.2.7", + "source": { + "type": "git", + "url": "https://github.com/laravel/pail.git", + "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pail/zipball/2f7d27dada8effc48b8c424445a69cca7007daaa", + "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/console": "^10.24|^11.0|^12.0|^13.0", + "illuminate/contracts": "^10.24|^11.0|^12.0|^13.0", + "illuminate/log": "^10.24|^11.0|^12.0|^13.0", + "illuminate/process": "^10.24|^11.0|^12.0|^13.0", + "illuminate/support": "^10.24|^11.0|^12.0|^13.0", + "nunomaduro/termwind": "^1.15|^2.0", + "php": "^8.2", + "symfony/console": "^6.0|^7.0|^8.0" + }, + "require-dev": { + "laravel/framework": "^10.24|^11.0|^12.0|^13.0", + "laravel/pint": "^1.13", + "orchestra/testbench-core": "^8.13|^9.17|^10.8|^11.0", + "pestphp/pest": "^2.20|^3.0|^4.0", + "pestphp/pest-plugin-type-coverage": "^2.3|^3.0|^4.0", + "phpstan/phpstan": "^1.12.27", + "symfony/var-dumper": "^6.3|^7.0|^8.0", + "symfony/yaml": "^6.3|^7.0|^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Pail\\PailServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Pail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Easily delve into your Laravel application's log files directly from the command line.", + "homepage": "https://github.com/laravel/pail", + "keywords": [ + "dev", + "laravel", + "logs", + "php", + "tail" + ], + "support": { + "issues": "https://github.com/laravel/pail/issues", + "source": "https://github.com/laravel/pail" + }, + "time": "2026-05-20T22:24:57+00:00" + }, + { + "name": "laravel/pao", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/pao.git", + "reference": "322f22095f3639551b64db9a13dfd8ab09c8206b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pao/zipball/322f22095f3639551b64db9a13dfd8ab09c8206b", + "reference": "322f22095f3639551b64db9a13dfd8ab09c8206b", + "shasum": "" + }, + "require": { + "laravel/agent-detector": "^2.0.2", + "php": "^8.3" + }, + "conflict": { + "laravel/framework": "<12.0.0", + "nunomaduro/collision": "<8.9.3", + "pestphp/pest": "<4.6.3 || >=6.0.0", + "phpunit/phpunit": "<12.5.23 || >=13.0.0 <13.1.7 || >=14.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.23.0", + "laravel/pint": "^1.30.0", + "orchestra/testbench": "^10.11.0 || ^11.1.0", + "pestphp/pest": "^4.7.2 || ^5.0.1", + "pestphp/pest-plugin-type-coverage": "^4.0.4 || ^5.0.0", + "phpstan/phpstan": "^2.2.7", + "rector/rector": "^2.5.8", + "symfony/process": "^7.4.8 || ^8.1.0", + "symfony/var-dumper": "^7.4.8 || ^8.1.2" + }, + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Laravel\\Pao\\Drivers\\Pest\\Plugin" + ] + }, + "laravel": { + "providers": [ + "Laravel\\Pao\\Laravel\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Laravel\\Pao\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Agent-optimized output for PHP testing tools", + "keywords": [ + "Agent", + "PHPStan", + "ai", + "dev", + "paratest", + "pest", + "php", + "phpunit", + "rector", + "testing" + ], + "support": { + "issues": "https://github.com/laravel/pao/issues", + "source": "https://github.com/laravel/pao" + }, + "time": "2026-07-29T18:38:14+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.30.4", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "a96cb6eee2961905d2fce7207aefb80945bf6b28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/a96cb6eee2961905d2fce7207aefb80945bf6b28", + "reference": "a96cb6eee2961905d2fce7207aefb80945bf6b28", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.2.0" + }, + "require-dev": { + "composer/semver": "^3.4.4", + "friendsofphp/php-cs-fixer": "^3.95.18", + "illuminate/view": "^12.65.0", + "larastan/larastan": "^3.10.0", + "laravel-zero/framework": "^12.1.0", + "laravel/agent-detector": "^2.0.2", + "laravel/prompts": "^0.3.22", + "mockery/mockery": "^1.6.12", + "nunomaduro/termwind": "^2.4.0", + "pestphp/pest": "^3.8.7" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", "keywords": [ "dev", "format", @@ -6478,204 +7727,611 @@ "php" ], "support": { - "issues": "https://github.com/laravel/pint/issues", - "source": "https://github.com/laravel/pint" + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2026-08-05T16:47:22+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-05-16T03:13:13+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" }, - "time": "2026-08-05T16:47:22+00:00" + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" }, { - "name": "mockery/mockery", - "version": "1.6.12", + "name": "nunomaduro/collision", + "version": "v8.9.5", "source": { "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + "url": "https://github.com/nunomaduro/collision.git", + "reference": "fb53eacd509a1d303858e2d20cfebf2d630254ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", - "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/fb53eacd509a1d303858e2d20cfebf2d630254ec", + "reference": "fb53eacd509a1d303858e2d20cfebf2d630254ec", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": ">=7.3" + "filp/whoops": "^2.18.4", + "nunomaduro/termwind": "^2.4.0", + "php": "^8.2.0", + "symfony/console": "^7.4.14 || ^8.1.1" }, "conflict": { - "phpunit/phpunit": "<8.0" + "laravel/framework": "<11.48.0 || >=14.0.0", + "phpunit/phpunit": "<11.5.50 || >=14.0.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.17", - "symplify/easy-coding-standard": "^12.1.14" + "brianium/paratest": "^7.8.5", + "larastan/larastan": "^3.10.0", + "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.20.0", + "laravel/pint": "^1.29.3", + "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.3.5", + "pestphp/pest": "^3.8.5 || ^4.7.5 || ^5.0.0", + "sebastian/environment": "^7.2.1 || ^8.1.2 || ^9.3.2" }, "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, "autoload": { "files": [ - "library/helpers.php", - "library/Mockery.php" + "./src/Adapters/Phpunit/Autoload.php" ], "psr-4": { - "Mockery\\": "library/Mockery" + "NunoMaduro\\Collision\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "https://github.com/padraic", - "role": "Author" + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "dev", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" }, { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "https://davedevelopment.co.uk", - "role": "Developer" + "url": "https://github.com/nunomaduro", + "type": "github" }, { - "name": "Nathanael Esayeas", - "email": "nathanael.esayeas@protonmail.com", - "homepage": "https://github.com/ghostwriter", - "role": "Lead Developer" + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" } ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", + "time": "2026-07-15T19:09:14+00:00" + }, + { + "name": "pestphp/pest", + "version": "v4.7.8", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest.git", + "reference": "5b2293f67adcf1b2320b33f521b94a692d18f360" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest/zipball/5b2293f67adcf1b2320b33f521b94a692d18f360", + "reference": "5b2293f67adcf1b2320b33f521b94a692d18f360", + "shasum": "" + }, + "require": { + "brianium/paratest": "^7.20.0", + "composer/xdebug-handler": "^3.0.5", + "nunomaduro/collision": "^8.9.5", + "nunomaduro/termwind": "^2.4.0", + "pestphp/pest-plugin": "^4.0.0", + "pestphp/pest-plugin-arch": "^4.0.2", + "pestphp/pest-plugin-mutate": "^4.0.1", + "pestphp/pest-plugin-profanity": "^4.2.1", + "php": "^8.3.0", + "phpunit/phpunit": "^12.5.33", + "symfony/process": "^7.4.13|^8.1.0" + }, + "conflict": { + "filp/whoops": "<2.18.3", + "phpunit/phpunit": ">12.5.33", + "sebastian/exporter": "<7.0.0", + "webmozart/assert": "<1.11.0" + }, + "require-dev": { + "mrpunyapal/peststan": "^0.2.12", + "pestphp/pest-dev-tools": "^4.1.0", + "pestphp/pest-plugin-browser": "^4.3.1", + "pestphp/pest-plugin-type-coverage": "^4.0.4", + "psy/psysh": "^0.12.24" + }, + "bin": [ + "bin/pest" + ], + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Mutate\\Plugins\\Mutate", + "Pest\\Plugins\\Configuration", + "Pest\\Plugins\\Bail", + "Pest\\Plugins\\Cache", + "Pest\\Plugins\\Coverage", + "Pest\\Plugins\\Init", + "Pest\\Plugins\\Environment", + "Pest\\Plugins\\Help", + "Pest\\Plugins\\Memory", + "Pest\\Plugins\\Only", + "Pest\\Plugins\\Printer", + "Pest\\Plugins\\ProcessIsolation", + "Pest\\Plugins\\Profile", + "Pest\\Plugins\\Retry", + "Pest\\Plugins\\Snapshot", + "Pest\\Plugins\\Verbose", + "Pest\\Plugins\\Version", + "Pest\\Plugins\\Shard", + "Pest\\Plugins\\Parallel" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php", + "src/Pest.php" + ], + "psr-4": { + "Pest\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "The elegant PHP Testing Framework.", "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", + "framework", + "pest", + "php", + "test", + "testing", + "unit" + ], + "support": { + "issues": "https://github.com/pestphp/pest/issues", + "source": "https://github.com/pestphp/pest/tree/v4.7.8" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2026-08-03T20:49:44+00:00" + }, + { + "name": "pestphp/pest-plugin", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin.git", + "reference": "9d4b93d7f73d3f9c3189bb22c220fef271cdf568" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/9d4b93d7f73d3f9c3189bb22c220fef271cdf568", + "reference": "9d4b93d7f73d3f9c3189bb22c220fef271cdf568", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0.0", + "composer-runtime-api": "^2.2.2", + "php": "^8.3" + }, + "conflict": { + "pestphp/pest": "<4.0.0" + }, + "require-dev": { + "composer/composer": "^2.8.10", + "pestphp/pest": "^4.0.0", + "pestphp/pest-dev-tools": "^4.0.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Pest\\Plugin\\Manager" + }, + "autoload": { + "psr-4": { + "Pest\\Plugin\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Pest plugin manager", + "keywords": [ + "framework", + "manager", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin/tree/v4.0.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2025-08-20T12:35:58+00:00" + }, + { + "name": "pestphp/pest-plugin-arch", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-arch.git", + "reference": "3fb0d02a91b9da504b139dc7ab2a31efb7c3215c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/3fb0d02a91b9da504b139dc7ab2a31efb7c3215c", + "reference": "3fb0d02a91b9da504b139dc7ab2a31efb7c3215c", + "shasum": "" + }, + "require": { + "pestphp/pest-plugin": "^4.0.0", + "php": "^8.3", + "ta-tikoma/phpunit-architecture-test": "^0.8.7" + }, + "require-dev": { + "pestphp/pest": "^4.4.6", + "pestphp/pest-dev-tools": "^4.1.0" + }, + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Arch\\Plugin" + ] + } + }, + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Pest\\Arch\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Arch plugin for Pest PHP.", + "keywords": [ + "arch", + "architecture", + "framework", + "pest", + "php", + "plugin", "test", - "test double", - "testing" + "testing", + "unit" ], "support": { - "docs": "https://docs.mockery.io/", - "issues": "https://github.com/mockery/mockery/issues", - "rss": "https://github.com/mockery/mockery/releases.atom", - "security": "https://github.com/mockery/mockery/security/advisories", - "source": "https://github.com/mockery/mockery" + "source": "https://github.com/pestphp/pest-plugin-arch/tree/v4.0.2" }, - "time": "2024-05-16T03:13:13+00:00" + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2026-04-10T17:20:19+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.13.4", + "name": "pestphp/pest-plugin-laravel", + "version": "v4.1.0", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + "url": "https://github.com/pestphp/pest-plugin-laravel.git", + "reference": "3057a36669ff11416cc0dc2b521b3aec58c488d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/3057a36669ff11416cc0dc2b521b3aec58c488d0", + "reference": "3057a36669ff11416cc0dc2b521b3aec58c488d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" + "laravel/framework": "^11.45.2|^12.52.0|^13.0", + "pestphp/pest": "^4.4.1", + "php": "^8.3.0" }, "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + "laravel/dusk": "^8.3.6", + "orchestra/testbench": "^9.13.0|^10.9.0|^11.0", + "pestphp/pest-dev-tools": "^4.1.0" }, "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Laravel\\Plugin" + ] + }, + "laravel": { + "providers": [ + "Pest\\Laravel\\PestServiceProvider" + ] + } + }, "autoload": { "files": [ - "src/DeepCopy/deep_copy.php" + "src/Autoload.php" ], "psr-4": { - "DeepCopy\\": "src/DeepCopy/" + "Pest\\Laravel\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Create deep copies (clones) of your objects", + "description": "The Pest Laravel Plugin", "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "framework", + "laravel", + "pest", + "php", + "test", + "testing", + "unit" ], "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v4.1.0" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" } ], - "time": "2025-08-01T08:46:24+00:00" + "time": "2026-02-21T00:29:45+00:00" }, { - "name": "nunomaduro/collision", - "version": "v8.9.5", + "name": "pestphp/pest-plugin-mutate", + "version": "v4.0.1", "source": { "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "fb53eacd509a1d303858e2d20cfebf2d630254ec" + "url": "https://github.com/pestphp/pest-plugin-mutate.git", + "reference": "d9b32b60b2385e1688a68cc227594738ec26d96c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/fb53eacd509a1d303858e2d20cfebf2d630254ec", - "reference": "fb53eacd509a1d303858e2d20cfebf2d630254ec", + "url": "https://api.github.com/repos/pestphp/pest-plugin-mutate/zipball/d9b32b60b2385e1688a68cc227594738ec26d96c", + "reference": "d9b32b60b2385e1688a68cc227594738ec26d96c", "shasum": "" }, "require": { - "filp/whoops": "^2.18.4", - "nunomaduro/termwind": "^2.4.0", - "php": "^8.2.0", - "symfony/console": "^7.4.14 || ^8.1.1" - }, - "conflict": { - "laravel/framework": "<11.48.0 || >=14.0.0", - "phpunit/phpunit": "<11.5.50 || >=14.0.0" + "nikic/php-parser": "^5.6.1", + "pestphp/pest-plugin": "^4.0.0", + "php": "^8.3", + "psr/simple-cache": "^3.0.0" }, "require-dev": { - "brianium/paratest": "^7.8.5", - "larastan/larastan": "^3.10.0", - "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.20.0", - "laravel/pint": "^1.29.3", - "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.3.5", - "pestphp/pest": "^3.8.5 || ^4.7.5 || ^5.0.0", - "sebastian/environment": "^7.2.1 || ^8.1.2 || ^9.3.2" + "pestphp/pest": "^4.0.0", + "pestphp/pest-dev-tools": "^4.0.0", + "pestphp/pest-plugin-type-coverage": "^4.0.0" }, "type": "library", - "extra": { - "laravel": { - "providers": [ - "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" - ] - }, - "branch-alias": { - "dev-8.x": "8.x-dev" - } - }, "autoload": { - "files": [ - "./src/Adapters/Phpunit/Autoload.php" - ], "psr-4": { - "NunoMaduro\\Collision\\": "src/" + "Pest\\Mutate\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -6686,25 +8342,26 @@ { "name": "Nuno Maduro", "email": "enunomaduro@gmail.com" + }, + { + "name": "Sandro Gehri", + "email": "sandrogehri@gmail.com" } ], - "description": "Cli error handling for console/command-line PHP applications.", + "description": "Mutates your code to find untested cases", "keywords": [ - "artisan", - "cli", - "command-line", - "console", - "dev", - "error", - "handling", - "laravel", - "laravel-zero", + "framework", + "mutate", + "mutation", + "pest", "php", - "symfony" + "plugin", + "test", + "testing", + "unit" ], "support": { - "issues": "https://github.com/nunomaduro/collision/issues", - "source": "https://github.com/nunomaduro/collision" + "source": "https://github.com/pestphp/pest-plugin-mutate/tree/v4.0.1" }, "funding": [ { @@ -6712,15 +8369,71 @@ "type": "custom" }, { - "url": "https://github.com/nunomaduro", + "url": "https://github.com/gehrisandro", "type": "github" }, { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" + "url": "https://github.com/nunomaduro", + "type": "github" } ], - "time": "2026-07-15T19:09:14+00:00" + "time": "2025-08-21T20:19:25+00:00" + }, + { + "name": "pestphp/pest-plugin-profanity", + "version": "v4.2.1", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-profanity.git", + "reference": "343cfa6f3564b7e35df0ebb77b7fa97039f72b27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-profanity/zipball/343cfa6f3564b7e35df0ebb77b7fa97039f72b27", + "reference": "343cfa6f3564b7e35df0ebb77b7fa97039f72b27", + "shasum": "" + }, + "require": { + "pestphp/pest-plugin": "^4.0.0", + "php": "^8.3" + }, + "require-dev": { + "faissaloux/pest-plugin-inside": "^1.9", + "pestphp/pest": "^4.0.0", + "pestphp/pest-dev-tools": "^4.0.0" + }, + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Profanity\\Plugin" + ] + } + }, + "autoload": { + "psr-4": { + "Pest\\Profanity\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Pest Profanity Plugin", + "keywords": [ + "framework", + "pest", + "php", + "plugin", + "profanity", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-profanity/tree/v4.2.1" + }, + "time": "2025-12-08T00:13:17+00:00" }, { "name": "phar-io/manifest", @@ -6840,6 +8553,70 @@ }, "time": "2022-02-21T01:04:05+00:00" }, + { + "name": "phpstan/phpstan", + "version": "2.2.8", + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e285254e60f33c21902efef4a926ca0987c06804", + "reference": "e285254e60f33c21902efef4a926ca0987c06804", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ondřej Mirtes" + }, + { + "name": "Markus Staab" + }, + { + "name": "Vincent Langlet" + } + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2026-08-04T22:21:45+00:00" + }, { "name": "phpunit/php-code-coverage", "version": "12.5.7", @@ -8236,6 +10013,65 @@ ], "time": "2024-10-20T05:08:20+00:00" }, + { + "name": "ta-tikoma/phpunit-architecture-test", + "version": "0.8.7", + "source": { + "type": "git", + "url": "https://github.com/ta-tikoma/phpunit-architecture-test.git", + "reference": "1248f3f506ca9641d4f68cebcd538fa489754db8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/1248f3f506ca9641d4f68cebcd538fa489754db8", + "reference": "1248f3f506ca9641d4f68cebcd538fa489754db8", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18.0 || ^5.0.0", + "php": "^8.1.0", + "phpdocumentor/reflection-docblock": "^5.3.0 || ^6.0.0", + "phpunit/phpunit": "^10.5.5 || ^11.0.0 || ^12.0.0 || ^13.0.0", + "symfony/finder": "^6.4.0 || ^7.0.0 || ^8.0.0" + }, + "require-dev": { + "laravel/pint": "^1.13.7", + "phpstan/phpstan": "^1.10.52" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPUnit\\Architecture\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ni Shi", + "email": "futik0ma011@gmail.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Methods for testing application architecture", + "keywords": [ + "architecture", + "phpunit", + "stucture", + "test", + "testing" + ], + "support": { + "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues", + "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.7" + }, + "time": "2026-02-17T17:25:14+00:00" + }, { "name": "theseer/tokenizer", "version": "2.0.1", diff --git a/api/config/sanctum.php b/api/config/sanctum.php new file mode 100644 index 0000000..1523cba --- /dev/null +++ b/api/config/sanctum.php @@ -0,0 +1,89 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + Sanctum::currentApplicationUrlWithPort(), + // Sanctum::currentRequestHost(), + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. This will override any values set in the token's + | "expires_at" attribute, but first-party sessions are not affected. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Token Prefix + |-------------------------------------------------------------------------- + | + | Sanctum can prefix new tokens in order to take advantage of numerous + | security scanning initiatives maintained by open source platforms + | that notify developers if they commit tokens into repositories. + | + | See: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning + | + */ + + 'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''), + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'authenticate_session' => AuthenticateSession::class, + 'encrypt_cookies' => EncryptCookies::class, + 'validate_csrf_token' => ValidateCsrfToken::class, + ], + +]; diff --git a/api/database/migrations/2026_08_07_203426_create_personal_access_tokens_table.php b/api/database/migrations/2026_08_07_203426_create_personal_access_tokens_table.php new file mode 100644 index 0000000..5cd09a6 --- /dev/null +++ b/api/database/migrations/2026_08_07_203426_create_personal_access_tokens_table.php @@ -0,0 +1,35 @@ +id(); + $table->morphs('tokenable'); + $table->text('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamp('expires_at')->nullable()->index(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('personal_access_tokens'); + } +}; diff --git a/api/routes/api.php b/api/routes/api.php new file mode 100644 index 0000000..2fd4ae7 --- /dev/null +++ b/api/routes/api.php @@ -0,0 +1,10 @@ +user(); +})->middleware('auth:sanctum'); diff --git a/api/tests/Feature/ExampleTest.php b/api/tests/Feature/ExampleTest.php deleted file mode 100644 index 8364a84..0000000 --- a/api/tests/Feature/ExampleTest.php +++ /dev/null @@ -1,19 +0,0 @@ -get('/'); - - $response->assertStatus(200); - } -} diff --git a/api/tests/Pest.php b/api/tests/Pest.php new file mode 100644 index 0000000..cff290a --- /dev/null +++ b/api/tests/Pest.php @@ -0,0 +1,52 @@ +extend(TestCase::class) + // ->use(RefreshDatabase::class) + ->in('Feature'); + +/* +|-------------------------------------------------------------------------- +| Expectations +|-------------------------------------------------------------------------- +| +| When you're writing tests, you often need to check that values meet certain conditions. The +| "expect()" function gives you access to a set of "expectations" methods that you can use +| to assert different things. Of course, you may extend the Expectation API at any time. +| +*/ + +expect()->extend('toBeOne', function () { + return $this->toBe(1); +}); + +/* +|-------------------------------------------------------------------------- +| Functions +|-------------------------------------------------------------------------- +| +| While Pest is very powerful out-of-the-box, you may have some testing code specific to your +| project that you don't want to repeat in every file. Here you can also expose helpers as +| global functions to help you to reduce the number of lines of code in your test files. +| +*/ + +function something() +{ + // .. +} diff --git a/api/tests/Unit/ExampleTest.php b/api/tests/Unit/ExampleTest.php deleted file mode 100644 index 5773b0c..0000000 --- a/api/tests/Unit/ExampleTest.php +++ /dev/null @@ -1,16 +0,0 @@ -assertTrue(true); - } -} From d6ba4b6c67d5823c1d8c9327ffef4191ca8064a9 Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 17:19:08 -0300 Subject: [PATCH 06/36] chore(api): configure CORS, domain rules, code style and static analysis - config/cors.php: allow only the SPA origin (FRONTEND_URL), token mode - config/investments.php: monthly gain rate + tax brackets as exact strings - pint.json (strict_types baseline applied repo-wide) and phpstan.neon (Larastan lvl 6) - Dockerfile: add pdo_sqlite for the in-memory test suite - gitignore local planning notes --- .gitignore | 3 +++ api/app/Http/Controllers/Controller.php | 2 ++ api/app/Providers/AppServiceProvider.php | 2 ++ api/bootstrap/providers.php | 2 ++ api/config/app.php | 2 ++ api/config/auth.php | 2 ++ api/config/cache.php | 2 ++ api/config/cors.php | 25 +++++++++++++++++++ api/config/database.php | 2 ++ api/config/filesystems.php | 2 ++ api/config/investments.php | 21 ++++++++++++++++ api/config/logging.php | 2 ++ api/config/mail.php | 2 ++ api/config/queue.php | 2 ++ api/config/services.php | 2 ++ api/config/session.php | 2 ++ api/database/factories/UserFactory.php | 2 ++ .../0001_01_01_000000_create_users_table.php | 2 ++ .../0001_01_01_000001_create_cache_table.php | 2 ++ .../0001_01_01_000002_create_jobs_table.php | 2 ++ api/database/seeders/DatabaseSeeder.php | 2 ++ api/phpstan.neon | 15 +++++++++++ api/pint.json | 9 +++++++ api/public/index.php | 2 ++ api/routes/console.php | 2 ++ api/routes/web.php | 2 ++ api/tests/TestCase.php | 2 ++ docker/php/Dockerfile | 1 + 28 files changed, 118 insertions(+) create mode 100644 api/config/cors.php create mode 100644 api/config/investments.php create mode 100644 api/phpstan.neon create mode 100644 api/pint.json diff --git a/.gitignore b/.gitignore index 3d18767..d6a927b 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,6 @@ Thumbs.db # Local docker volumes / dumps /data/ *.sql.gz + +# Internal planning artifact (dropped by plan mode) +/plan.md diff --git a/api/app/Http/Controllers/Controller.php b/api/app/Http/Controllers/Controller.php index 8677cd5..e2af3d2 100644 --- a/api/app/Http/Controllers/Controller.php +++ b/api/app/Http/Controllers/Controller.php @@ -1,5 +1,7 @@ ['api/*', 'docs/*', 'sanctum/csrf-cookie'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => [ + env('FRONTEND_URL', 'http://localhost:5173'), + ], + + 'allowed_origins_patterns' => [], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => false, +]; diff --git a/api/config/database.php b/api/config/database.php index abbb88e..ef266d5 100644 --- a/api/config/database.php +++ b/api/config/database.php @@ -1,5 +1,7 @@ env('INVESTMENT_CURRENCY', 'BRL'), + + // Compound monthly gain rate: 0.52% per month, paid on the anniversary day. + 'monthly_rate' => env('INVESTMENT_MONTHLY_RATE', '0.0052'), + + // Withdrawal tax on the GAIN portion, by the age of the investment. + // Boundaries: < 12 months, [12, 24) months, >= 24 months. + 'tax' => [ + 'under_one_year' => '0.225', // 22.5% + 'one_to_two_years' => '0.185', // 18.5% + 'over_two_years' => '0.15', // 15% + ], +]; diff --git a/api/config/logging.php b/api/config/logging.php index b09cb25..f689f3a 100644 --- a/api/config/logging.php +++ b/api/config/logging.php @@ -1,5 +1,7 @@ composer · opcache -> perf · pcntl -> queue:work signals RUN install-php-extensions \ pdo_pgsql pgsql \ + pdo_sqlite \ bcmath \ intl \ zip \ From ca922a4033487ea147cb9d6e5166c363ed99fd27 Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 18:17:17 -0300 Subject: [PATCH 07/36] feat(domain): investment gain and tax calculation (TDD) Pure, framework-free domain: GainRate/TaxBracket/InvestmentStatus, ElapsedMonths (complete-month counting with last-day rule), GainCalculator (month-by-month compounding, HALF_UP each step) and TaxCalculator (tax on gains by age bracket), all backed by brick/money for exact cents. 37 unit tests cover the challenge vectors (1000@6mo -> 1031.61/31.61; gains 200 -> tax 45.00) and edge cases. --- Makefile | 2 +- .../Investment/Enums/InvestmentStatus.php | 24 +++++++++ .../Domain/Investment/Enums/TaxBracket.php | 28 ++++++++++ .../Investment/Results/BalanceBreakdown.php | 20 ++++++++ .../Results/WithdrawalBreakdown.php | 27 ++++++++++ .../Investment/Services/ElapsedMonths.php | 35 +++++++++++++ .../Investment/Services/GainCalculator.php | 48 +++++++++++++++++ .../Investment/Services/TaxCalculator.php | 44 ++++++++++++++++ .../Investment/ValueObjects/GainRate.php | 41 +++++++++++++++ api/tests/Unit/Domain/ElapsedMonthsTest.php | 29 +++++++++++ api/tests/Unit/Domain/GainCalculatorTest.php | 51 +++++++++++++++++++ api/tests/Unit/Domain/GainRateTest.php | 22 ++++++++ api/tests/Unit/Domain/TaxBracketTest.php | 17 +++++++ api/tests/Unit/Domain/TaxCalculatorTest.php | 47 +++++++++++++++++ 14 files changed, 434 insertions(+), 1 deletion(-) create mode 100644 api/app/Domain/Investment/Enums/InvestmentStatus.php create mode 100644 api/app/Domain/Investment/Enums/TaxBracket.php create mode 100644 api/app/Domain/Investment/Results/BalanceBreakdown.php create mode 100644 api/app/Domain/Investment/Results/WithdrawalBreakdown.php create mode 100644 api/app/Domain/Investment/Services/ElapsedMonths.php create mode 100644 api/app/Domain/Investment/Services/GainCalculator.php create mode 100644 api/app/Domain/Investment/Services/TaxCalculator.php create mode 100644 api/app/Domain/Investment/ValueObjects/GainRate.php create mode 100644 api/tests/Unit/Domain/ElapsedMonthsTest.php create mode 100644 api/tests/Unit/Domain/GainCalculatorTest.php create mode 100644 api/tests/Unit/Domain/GainRateTest.php create mode 100644 api/tests/Unit/Domain/TaxBracketTest.php create mode 100644 api/tests/Unit/Domain/TaxCalculatorTest.php diff --git a/Makefile b/Makefile index 2ae3ce6..f0561c2 100644 --- a/Makefile +++ b/Makefile @@ -64,7 +64,7 @@ test: ## Run backend + frontend test suites lint: ## Style + static analysis + type-check $(APP) ./vendor/bin/pint --test - $(APP) ./vendor/bin/phpstan analyse + $(APP) ./vendor/bin/phpstan analyse --memory-limit=1G $(WEB) npm run lint $(WEB) npm run type-check diff --git a/api/app/Domain/Investment/Enums/InvestmentStatus.php b/api/app/Domain/Investment/Enums/InvestmentStatus.php new file mode 100644 index 0000000..7a16356 --- /dev/null +++ b/api/app/Domain/Investment/Enums/InvestmentStatus.php @@ -0,0 +1,24 @@ + under one year + * [12, 24) months -> between one and two years (exactly one year lands here) + * >= 24 months -> older than two years (exactly two years lands here) + */ +enum TaxBracket: string +{ + case UnderOneYear = 'under_one_year'; + case OneToTwoYears = 'one_to_two_years'; + case OverTwoYears = 'over_two_years'; + + public static function fromMonths(int $months): self + { + return match (true) { + $months < 12 => self::UnderOneYear, + $months < 24 => self::OneToTwoYears, + default => self::OverTwoYears, + }; + } +} diff --git a/api/app/Domain/Investment/Results/BalanceBreakdown.php b/api/app/Domain/Investment/Results/BalanceBreakdown.php new file mode 100644 index 0000000..e27a43b --- /dev/null +++ b/api/app/Domain/Investment/Results/BalanceBreakdown.php @@ -0,0 +1,20 @@ +year - $start->year) * 12 + ($end->month - $start->month); + + // Cap the anniversary day to the reference month's length (last-day rule). + $anniversaryDay = min($start->day, $end->daysInMonth); + + if ($end->day < $anniversaryDay) { + $months--; + } + + return max(0, $months); + } +} diff --git a/api/app/Domain/Investment/Services/GainCalculator.php b/api/app/Domain/Investment/Services/GainCalculator.php new file mode 100644 index 0000000..46b8894 --- /dev/null +++ b/api/app/Domain/Investment/Services/GainCalculator.php @@ -0,0 +1,48 @@ +forMonths($principal, $this->elapsedMonths->between($start, $reference)); + } + + public function forMonths(Money $principal, int $months): BalanceBreakdown + { + $factor = $this->rate->factor(); + $balance = $principal; + + for ($m = 0; $m < $months; $m++) { + $balance = $balance->multipliedBy($factor, RoundingMode::HalfUp); + } + + return new BalanceBreakdown( + principal: $principal, + balance: $balance, + gains: $balance->minus($principal), + months: $months, + ); + } +} diff --git a/api/app/Domain/Investment/Services/TaxCalculator.php b/api/app/Domain/Investment/Services/TaxCalculator.php new file mode 100644 index 0000000..c5bd39c --- /dev/null +++ b/api/app/Domain/Investment/Services/TaxCalculator.php @@ -0,0 +1,44 @@ +value. + */ +final class TaxCalculator +{ + /** + * @param array $rates bracket value => decimal rate string + */ + public function __construct(private readonly array $rates) {} + + public function on(Money $principal, Money $balance, int $months): WithdrawalBreakdown + { + $gains = $balance->minus($principal); + $bracket = TaxBracket::fromMonths($months); + $rate = BigDecimal::of($this->rates[$bracket->value]); + + $tax = $gains->multipliedBy($rate, RoundingMode::HalfUp); + $net = $balance->minus($tax); + + return new WithdrawalBreakdown( + principal: $principal, + balance: $balance, + gains: $gains, + months: $months, + bracket: $bracket, + taxRate: $rate, + tax: $tax, + net: $net, + ); + } +} diff --git a/api/app/Domain/Investment/ValueObjects/GainRate.php b/api/app/Domain/Investment/ValueObjects/GainRate.php new file mode 100644 index 0000000..9019aec --- /dev/null +++ b/api/app/Domain/Investment/ValueObjects/GainRate.php @@ -0,0 +1,41 @@ + "0.0052"), stored as an exact + * decimal so it can drive brick/money arithmetic without floating-point drift. + */ +final class GainRate +{ + private function __construct(private readonly BigDecimal $monthly) {} + + public static function ofMonthly(string $rate): self + { + $decimal = BigDecimal::of($rate); + + if ($decimal->isNegative()) { + throw new InvalidArgumentException('Gain rate cannot be negative.'); + } + + return new self($decimal); + } + + public function monthly(): BigDecimal + { + return $this->monthly; + } + + /** + * The per-month multiplier applied to a balance, i.e. (1 + rate). + */ + public function factor(): BigDecimal + { + return BigDecimal::one()->plus($this->monthly); + } +} diff --git a/api/tests/Unit/Domain/ElapsedMonthsTest.php b/api/tests/Unit/Domain/ElapsedMonthsTest.php new file mode 100644 index 0000000..44643cc --- /dev/null +++ b/api/tests/Unit/Domain/ElapsedMonthsTest.php @@ -0,0 +1,29 @@ +elapsed = new ElapsedMonths; +}); + +it('counts complete months between two dates', function (string $start, string $end, int $expected) { + $months = $this->elapsed->between(CarbonImmutable::parse($start), CarbonImmutable::parse($end)); + + expect($months)->toBe($expected); +})->with([ + 'same day is zero' => ['2025-01-15', '2025-01-15', 0], + 'one day before anniversary is zero' => ['2025-01-15', '2025-02-14', 0], + 'exactly on the anniversary is one' => ['2025-01-15', '2025-02-15', 1], + 'six full months' => ['2025-01-15', '2025-07-15', 6], + 'jan 31 to feb 28 caps to last day (one month)' => ['2025-01-31', '2025-02-28', 1], + 'jan 31 to feb 10 has not reached anniversary (zero)' => ['2025-01-31', '2025-02-10', 0], + 'jan 31 to mar 30 is one (mar 31 not reached)' => ['2025-01-31', '2025-03-30', 1], + 'jan 31 to mar 31 is two' => ['2025-01-31', '2025-03-31', 2], + 'leap year jan 31 to feb 29 is one' => ['2024-01-31', '2024-02-29', 1], + 'leap year jan 31 to feb 28 is zero' => ['2024-01-31', '2024-02-28', 0], + 'end before start is zero' => ['2025-06-15', '2025-01-15', 0], + 'exactly two years is twenty-four' => ['2023-01-15', '2025-01-15', 24], +]); diff --git a/api/tests/Unit/Domain/GainCalculatorTest.php b/api/tests/Unit/Domain/GainCalculatorTest.php new file mode 100644 index 0000000..d2e1785 --- /dev/null +++ b/api/tests/Unit/Domain/GainCalculatorTest.php @@ -0,0 +1,51 @@ +forMonths(Money::of('1000.00', 'BRL'), 0); + + expect((string) $breakdown->balance->getAmount())->toBe('1000.00') + ->and((string) $breakdown->gains->getAmount())->toBe('0.00') + ->and($breakdown->months)->toBe(0); +}); + +it('compounds 0.52% monthly, re-rounding to cents each month (vector A)', function () { + // R$1000.00 created 2025-01-15, referenced 2025-07-15 => 6 complete months. + $breakdown = calculator()->forPeriod( + Money::of('1000.00', 'BRL'), + CarbonImmutable::parse('2025-01-15'), + CarbonImmutable::parse('2025-07-15'), + ); + + expect($breakdown->months)->toBe(6) + ->and((string) $breakdown->balance->getAmount())->toBe('1031.61') + ->and((string) $breakdown->gains->getAmount())->toBe('31.61'); +}); + +it('walks the exact monthly cent progression of vector A', function () { + $expected = ['1005.20', '1010.43', '1015.68', '1020.96', '1026.27', '1031.61']; + $principal = Money::of('1000.00', 'BRL'); + + foreach ($expected as $month => $value) { + expect((string) calculator()->forMonths($principal, $month + 1)->balance->getAmount()) + ->toBe($value); + } +}); + +it('never produces a balance below the principal', function (int $months) { + $breakdown = calculator()->forMonths(Money::of('2500.00', 'BRL'), $months); + + expect($breakdown->balance->isGreaterThanOrEqualTo(Money::of('2500.00', 'BRL')))->toBeTrue(); +})->with([0, 1, 5, 12, 24, 60]); diff --git a/api/tests/Unit/Domain/GainRateTest.php b/api/tests/Unit/Domain/GainRateTest.php new file mode 100644 index 0000000..1140c8a --- /dev/null +++ b/api/tests/Unit/Domain/GainRateTest.php @@ -0,0 +1,22 @@ +monthly())->toBe('0.0052') + ->and((string) $rate->factor())->toBe('1.0052'); +}); + +it('rejects a negative rate', function () { + GainRate::ofMonthly('-0.01'); +})->throws(InvalidArgumentException::class); + +it('accepts a zero rate (no gains)', function () { + $rate = GainRate::ofMonthly('0'); + + expect((string) $rate->factor())->toBe('1'); +}); diff --git a/api/tests/Unit/Domain/TaxBracketTest.php b/api/tests/Unit/Domain/TaxBracketTest.php new file mode 100644 index 0000000..d1bc389 --- /dev/null +++ b/api/tests/Unit/Domain/TaxBracketTest.php @@ -0,0 +1,17 @@ +toBe($expected); +})->with([ + 'zero months' => [0, TaxBracket::UnderOneYear], + 'eleven months' => [11, TaxBracket::UnderOneYear], + 'exactly one year' => [12, TaxBracket::OneToTwoYears], + 'eighteen months' => [18, TaxBracket::OneToTwoYears], + 'just under two years' => [23, TaxBracket::OneToTwoYears], + 'exactly two years' => [24, TaxBracket::OverTwoYears], + 'well over two years' => [40, TaxBracket::OverTwoYears], +]); diff --git a/api/tests/Unit/Domain/TaxCalculatorTest.php b/api/tests/Unit/Domain/TaxCalculatorTest.php new file mode 100644 index 0000000..64cb20f --- /dev/null +++ b/api/tests/Unit/Domain/TaxCalculatorTest.php @@ -0,0 +1,47 @@ + '0.225', + 'one_to_two_years' => '0.185', + 'over_two_years' => '0.15', + ]); +} + +it('taxes only the gain portion (challenge example)', function () { + // principal 1000, balance 1200 => gains 200, under one year => tax 45.00. + $result = taxer()->on(Money::of('1000.00', 'BRL'), Money::of('1200.00', 'BRL'), 6); + + expect((string) $result->gains->getAmount())->toBe('200.00') + ->and($result->bracket)->toBe(TaxBracket::UnderOneYear) + ->and((string) $result->tax->getAmount())->toBe('45.00') + ->and((string) $result->net->getAmount())->toBe('1155.00'); +}); + +it('applies the age-based rate', function (int $months, TaxBracket $bracket, string $tax, string $net) { + $result = taxer()->on(Money::of('1000.00', 'BRL'), Money::of('1200.00', 'BRL'), $months); + + expect($result->bracket)->toBe($bracket) + ->and((string) $result->tax->getAmount())->toBe($tax) + ->and((string) $result->net->getAmount())->toBe($net); +})->with([ + 'under one year (22.5%)' => [6, TaxBracket::UnderOneYear, '45.00', '1155.00'], + 'exactly one year (18.5%)' => [12, TaxBracket::OneToTwoYears, '37.00', '1163.00'], + 'just under two years (18.5%)' => [23, TaxBracket::OneToTwoYears, '37.00', '1163.00'], + 'exactly two years (15%)' => [24, TaxBracket::OverTwoYears, '30.00', '1170.00'], +]); + +it('charges no tax when there are no gains', function () { + $result = taxer()->on(Money::of('1000.00', 'BRL'), Money::of('1000.00', 'BRL'), 36); + + expect((string) $result->gains->getAmount())->toBe('0.00') + ->and((string) $result->tax->getAmount())->toBe('0.00') + ->and((string) $result->net->getAmount())->toBe('1000.00'); +}); From 547331c91430f3fed867cfde644e11c275d157dd Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 18:28:08 -0300 Subject: [PATCH 08/36] chore(api): drop unused spatie/laravel-data and buggy laravel/pao FormRequests + API Resources cover validation/serialization idiomatically, so laravel-data was redundant. laravel/pao corrupts stdout via its stream filter here, so tests run on Pest's standard reporter. --- api/composer.json | 4 +- api/composer.lock | 1530 ++++++++++++++++++--------------------------- 2 files changed, 611 insertions(+), 923 deletions(-) diff --git a/api/composer.json b/api/composer.json index 4b4f229..10313d2 100644 --- a/api/composer.json +++ b/api/composer.json @@ -10,15 +10,13 @@ "brick/money": "^0.14.1", "laravel/framework": "^13.8", "laravel/sanctum": "^4.0", - "laravel/tinker": "^3.0", - "spatie/laravel-data": "^4.23" + "laravel/tinker": "^3.0" }, "require-dev": { "dedoc/scramble": "^0.13.39", "fakerphp/faker": "^1.23", "larastan/larastan": "^3.10", "laravel/pail": "^1.2.5", - "laravel/pao": "^1.0.6", "laravel/pint": "^1.27", "mockery/mockery": "^1.6", "nunomaduro/collision": "^8.6", diff --git a/api/composer.lock b/api/composer.lock index f7a903e..a4f652e 100644 --- a/api/composer.lock +++ b/api/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4cf7d5e3e76cffdce44ad2d578c2b105", + "content-hash": "d1b4a11362e0e8efc534913cf9ab45c9", "packages": [ { "name": "brick/math", @@ -266,54 +266,6 @@ }, "time": "2024-07-08T12:26:09+00:00" }, - { - "name": "doctrine/deprecations", - "version": "1.1.6", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", - "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "phpunit/phpunit": "<=7.5 || >=14" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^12 || ^14", - "phpstan/phpstan": "1.4.10 || 2.1.30", - "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", - "psr/log": "^1 || ^2 || ^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.6" - }, - "time": "2026-02-07T07:09:04+00:00" - }, { "name": "doctrine/inflector", "version": "2.1.0", @@ -2711,100 +2663,101 @@ "time": "2026-02-16T23:10:27+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "name": "phpoption/phpoption", + "version": "1.9.5", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-2.x": "2.x-dev" + "dev-master": "1.9-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src/" + "PhpOption\\": "src/PhpOption/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache-2.0" ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "Option Type for PHP", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" + "language", + "option", + "php", + "type" ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" }, - "time": "2020-06-27T09:03:43+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:41:33+00:00" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "6.0.3", + "name": "psr/clock", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582" + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/7bae67520aa9f5ecc506d646810bd40d9da54582", - "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.1", - "ext-filter": "*", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^2.0", - "phpstan/phpdoc-parser": "^2.0", - "webmozart/assert": "^1.9.1 || ^2" - }, - "require-dev": { - "mockery/mockery": "~1.3.5 || ~1.6.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-webmozart-assert": "^1.2", - "phpunit/phpunit": "^9.5", - "psalm/phar": "^5.26", - "shipmonk/dead-code-detector": "^0.5.1" + "php": "^7.0 || ^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "Psr\\Clock\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2813,60 +2766,51 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/6.0.3" + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" }, - "time": "2026-03-18T20:49:53+00:00" + "time": "2022-11-25T14:36:26+00:00" }, { - "name": "phpdocumentor/type-resolver", - "version": "2.0.0", + "name": "psr/container", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9" + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/327a05bbee54120d4786a0dc67aad30226ad4cf9", - "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "psalm/phar": "^4" + "php": ">=7.4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev", - "dev-2.x": "2.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2875,271 +2819,56 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/2.0.0" + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2026-01-06T21:53:42+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { - "name": "phpoption/phpoption", - "version": "1.9.5", + "name": "psr/event-dispatcher", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", - "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" + "php": ">=7.2.0" }, "type": "library", "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "PhpOption\\": "src/PhpOption/" + "Psr\\EventDispatcher\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh" - }, - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2025-12-27T19:41:33+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "2.3.3", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fb19eedd2bb67ff8cf7a5502ad329e701d6398a3", - "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^5.3.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^9.6", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.3" - }, - "time": "2026-07-08T07:01:06+00:00" - }, - { - "name": "psr/clock", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/clock.git", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Clock\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for reading the clock.", - "homepage": "https://github.com/php-fig/clock", - "keywords": [ - "clock", - "now", - "psr", - "psr-20", - "time" - ], - "support": { - "issues": "https://github.com/php-fig/clock/issues", - "source": "https://github.com/php-fig/clock/tree/1.0.0" - }, - "time": "2022-11-25T14:36:26+00:00" - }, - { - "name": "psr/container", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "time": "2021-11-05T16:47:00+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" + "MIT" ], "authors": [ { @@ -3650,276 +3379,52 @@ "paragonie/random-lib": "^2", "php-mock/php-mock": "^2.6", "php-mock/php-mock-mockery": "^1.5", - "php-parallel-lint/php-parallel-lint": "^1.4.0", - "phpbench/phpbench": "^1.2.14", - "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-mockery": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^9.6", - "slevomat/coding-standard": "^8.18", - "squizlabs/php_codesniffer": "^3.13" - }, - "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." - }, - "type": "library", - "extra": { - "captainhook": { - "force-install": true - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Ramsey\\Uuid\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "keywords": [ - "guid", - "identifier", - "uuid" - ], - "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.9.3" - }, - "time": "2026-06-18T03:57:49+00:00" - }, - { - "name": "spatie/laravel-data", - "version": "4.23.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-data.git", - "reference": "230543769c996e407fec2873930626aed7dd0d3b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-data/zipball/230543769c996e407fec2873930626aed7dd0d3b", - "reference": "230543769c996e407fec2873930626aed7dd0d3b", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^10.0|^11.0|^12.0|^13.0", - "php": "^8.1", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/reflection-docblock": "^5.3 || ^6.0", - "phpdocumentor/type-resolver": "^1.7 || ^2.0", - "spatie/laravel-package-tools": "^1.9.0", - "spatie/php-structure-discoverer": "^2.0" - }, - "require-dev": { - "fakerphp/faker": "^1.14", - "friendsofphp/php-cs-fixer": "^3.0", - "inertiajs/inertia-laravel": "^2.0|^3.0", - "livewire/livewire": "^3.0|^4.0", - "mockery/mockery": "^1.6", - "nesbot/carbon": "^2.63|^3.0", - "orchestra/testbench": "^8.37.0|^9.16|^10.9|^11.0", - "pestphp/pest": "^2.36|^3.8|^4.3", - "pestphp/pest-plugin-laravel": "^2.4|^3.0|^4.0", - "pestphp/pest-plugin-livewire": "^2.1|^3.0|^4.0", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "spatie/invade": "^1.0", - "spatie/laravel-typescript-transformer": "^2.5", - "spatie/pest-plugin-snapshots": "^2.1", - "spatie/test-time": "^1.2" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Spatie\\LaravelData\\LaravelDataServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Spatie\\LaravelData\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ruben Van Assche", - "email": "ruben@spatie.be", - "role": "Developer" - } - ], - "description": "Create unified resources and data transfer objects", - "homepage": "https://github.com/spatie/laravel-data", - "keywords": [ - "laravel", - "laravel-data", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/laravel-data/issues", - "source": "https://github.com/spatie/laravel-data/tree/4.23.0" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2026-05-08T14:41:13+00:00" - }, - { - "name": "spatie/laravel-package-tools", - "version": "1.93.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "d5552849801f2642aea710557463234b59ef65eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/d5552849801f2642aea710557463234b59ef65eb", - "reference": "d5552849801f2642aea710557463234b59ef65eb", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^10.0|^11.0|^12.0|^13.0", - "php": "^8.1" - }, - "require-dev": { - "mockery/mockery": "^1.5", - "orchestra/testbench": "^8.0|^9.2|^10.0|^11.0", - "pestphp/pest": "^2.1|^3.1|^4.0", - "phpunit/php-code-coverage": "^10.0|^11.0|^12.0", - "phpunit/phpunit": "^10.5|^11.5|^12.5", - "spatie/pest-plugin-test-time": "^2.2|^3.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\LaravelPackageTools\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "role": "Developer" - } - ], - "description": "Tools for creating Laravel packages", - "homepage": "https://github.com/spatie/laravel-package-tools", - "keywords": [ - "laravel-package-tools", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.93.1" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2026-05-19T14:06:37+00:00" - }, - { - "name": "spatie/php-structure-discoverer", - "version": "2.4.4", - "source": { - "type": "git", - "url": "https://github.com/spatie/php-structure-discoverer.git", - "reference": "fa2b7dae8e8a22c0306154c4b052420e054f7e2b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/php-structure-discoverer/zipball/fa2b7dae8e8a22c0306154c4b052420e054f7e2b", - "reference": "fa2b7dae8e8a22c0306154c4b052420e054f7e2b", - "shasum": "" - }, - "require": { - "illuminate/collections": "^11.0|^12.0|^13.0", - "php": "^8.3", - "spatie/laravel-package-tools": "^1.92.7", - "symfony/finder": "^6.0|^7.3.5|^8.0" - }, - "require-dev": { - "amphp/parallel": "^2.3.2", - "illuminate/console": "^11.0|^12.0|^13.0", - "nunomaduro/collision": "^7.0|^8.8.3", - "orchestra/testbench": "^9.5|^10.8|^11.0", - "pestphp/pest": "^3.8|^4.0", - "pestphp/pest-plugin-laravel": "^3.2|^4.0", - "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan-deprecation-rules": "^1.2.1", - "phpstan/phpstan-phpunit": "^1.4.2", - "spatie/laravel-ray": "^1.43.1" + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" }, "suggest": { - "amphp/parallel": "When you want to use the Parallel discover worker" + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." }, "type": "library", "extra": { - "laravel": { - "providers": [ - "Spatie\\StructureDiscoverer\\StructureDiscovererServiceProvider" - ] + "captainhook": { + "force-install": true } }, "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { - "Spatie\\StructureDiscoverer\\": "src" + "Ramsey\\Uuid\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Ruben Van Assche", - "email": "ruben@spatie.be", - "role": "Developer" - } - ], - "description": "Automatically discover structures within your PHP application", - "homepage": "https://github.com/spatie/php-structure-discoverer", + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", "keywords": [ - "discover", - "laravel", - "php", - "php-structure-discoverer" + "guid", + "identifier", + "uuid" ], "support": { - "issues": "https://github.com/spatie/php-structure-discoverer/issues", - "source": "https://github.com/spatie/php-structure-discoverer/tree/2.4.4" + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.9.3" }, - "funding": [ - { - "url": "https://github.com/LaravelAutoDiscoverer", - "type": "github" - } - ], - "time": "2026-06-15T07:14:32+00:00" + "time": "2026-06-18T03:57:49+00:00" }, { "name": "symfony/clock", @@ -6613,72 +6118,6 @@ } ], "time": "2026-04-26T05:33:54+00:00" - }, - { - "name": "webmozart/assert", - "version": "2.4.1", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/2ccb7c2e821038c03a3e6e1700c570c158c55f70", - "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-date": "*", - "ext-filter": "*", - "php": "^8.2" - }, - "suggest": { - "ext-intl": "", - "ext-simplexml": "", - "ext-spl": "" - }, - "type": "library", - "extra": { - "psalm": { - "pluginClass": "Webmozart\\Assert\\PsalmPlugin" - }, - "branch-alias": { - "dev-master": "2.0-dev", - "dev-feature/2-0": "2.0-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - }, - { - "name": "Woody Gilk", - "email": "woody.gilk@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/2.4.1" - }, - "time": "2026-06-15T15:31:57+00:00" } ], "packages-dev": [ @@ -6998,6 +6437,54 @@ ], "time": "2026-08-06T06:42:48+00:00" }, + { + "name": "doctrine/deprecations", + "version": "1.1.6", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=14" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^12 || ^14", + "phpstan/phpstan": "1.4.10 || 2.1.30", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", + "psr/log": "^1 || ^2 || ^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.6" + }, + "time": "2026-02-07T07:09:04+00:00" + }, { "name": "fakerphp/faker", "version": "v1.24.1", @@ -7435,68 +6922,6 @@ ], "time": "2026-05-28T08:00:58+00:00" }, - { - "name": "laravel/agent-detector", - "version": "v2.0.2", - "source": { - "type": "git", - "url": "https://github.com/laravel/agent-detector.git", - "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/agent-detector/zipball/90694b9256099591cf9e55d08c18ba7a00bf099f", - "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f", - "shasum": "" - }, - "require": { - "php": "^8.2.0" - }, - "require-dev": { - "laravel/pint": "^1.24.0", - "pestphp/pest": "^3.8.5|^4.1.0", - "pestphp/pest-plugin-type-coverage": "^3.0|^4.0.2", - "phpstan/phpstan": "^2.1.26", - "rector/rector": "^2.1.7", - "symfony/var-dumper": "^7.3.3" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Laravel\\AgentDetector\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Detect if code is running in an AI agent or automated development environment", - "homepage": "https://github.com/laravel/agent-detector", - "keywords": [ - "Agent", - "ai", - "automation", - "claude", - "cursor", - "detection", - "devin", - "php" - ], - "support": { - "issues": "https://github.com/laravel/agent-detector/issues", - "source": "https://github.com/laravel/agent-detector" - }, - "time": "2026-04-29T18:32:34+00:00" - }, { "name": "laravel/pail", "version": "v1.2.7", @@ -7539,98 +6964,13 @@ "Laravel\\Pail\\PailServiceProvider" ] }, - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\Pail\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Easily delve into your Laravel application's log files directly from the command line.", - "homepage": "https://github.com/laravel/pail", - "keywords": [ - "dev", - "laravel", - "logs", - "php", - "tail" - ], - "support": { - "issues": "https://github.com/laravel/pail/issues", - "source": "https://github.com/laravel/pail" - }, - "time": "2026-05-20T22:24:57+00:00" - }, - { - "name": "laravel/pao", - "version": "v1.1.3", - "source": { - "type": "git", - "url": "https://github.com/laravel/pao.git", - "reference": "322f22095f3639551b64db9a13dfd8ab09c8206b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/pao/zipball/322f22095f3639551b64db9a13dfd8ab09c8206b", - "reference": "322f22095f3639551b64db9a13dfd8ab09c8206b", - "shasum": "" - }, - "require": { - "laravel/agent-detector": "^2.0.2", - "php": "^8.3" - }, - "conflict": { - "laravel/framework": "<12.0.0", - "nunomaduro/collision": "<8.9.3", - "pestphp/pest": "<4.6.3 || >=6.0.0", - "phpunit/phpunit": "<12.5.23 || >=13.0.0 <13.1.7 || >=14.0.0" - }, - "require-dev": { - "brianium/paratest": "^7.23.0", - "laravel/pint": "^1.30.0", - "orchestra/testbench": "^10.11.0 || ^11.1.0", - "pestphp/pest": "^4.7.2 || ^5.0.1", - "pestphp/pest-plugin-type-coverage": "^4.0.4 || ^5.0.0", - "phpstan/phpstan": "^2.2.7", - "rector/rector": "^2.5.8", - "symfony/process": "^7.4.8 || ^8.1.0", - "symfony/var-dumper": "^7.4.8 || ^8.1.2" - }, - "type": "library", - "extra": { - "pest": { - "plugins": [ - "Laravel\\Pao\\Drivers\\Pest\\Plugin" - ] - }, - "laravel": { - "providers": [ - "Laravel\\Pao\\Laravel\\ServiceProvider" - ] + "branch-alias": { + "dev-main": "1.x-dev" } }, "autoload": { - "files": [ - "src/Autoload.php" - ], "psr-4": { - "Laravel\\Pao\\": "src/" + "Laravel\\Pail\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -7641,26 +6981,26 @@ { "name": "Taylor Otwell", "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" } ], - "description": "Agent-optimized output for PHP testing tools", + "description": "Easily delve into your Laravel application's log files directly from the command line.", + "homepage": "https://github.com/laravel/pail", "keywords": [ - "Agent", - "PHPStan", - "ai", "dev", - "paratest", - "pest", + "laravel", + "logs", "php", - "phpunit", - "rector", - "testing" + "tail" ], "support": { - "issues": "https://github.com/laravel/pao/issues", - "source": "https://github.com/laravel/pao" + "issues": "https://github.com/laravel/pail/issues", + "source": "https://github.com/laravel/pail" }, - "time": "2026-07-29T18:38:14+00:00" + "time": "2026-05-20T22:24:57+00:00" }, { "name": "laravel/pint", @@ -8440,118 +7780,341 @@ "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "6.0.3", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/7bae67520aa9f5ecc506d646810bd40d9da54582", + "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^2.0", + "phpstan/phpdoc-parser": "^2.0", + "webmozart/assert": "^1.9.1 || ^2" + }, + "require-dev": { + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26", + "shipmonk/dead-code-detector": "^0.5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/6.0.3" + }, + "time": "2026-03-18T20:49:53+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/327a05bbee54120d4786a0dc67aad30226ad4cf9", + "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "doctrine/deprecations": "^1.0", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-1.x": "1.x-dev", + "dev-2.x": "2.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/2.0.0" }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" + "time": "2026-01-06T21:53:42+00:00" }, { - "name": "phar-io/version", - "version": "3.2.1", + "name": "phpstan/phpdoc-parser", + "version": "2.3.3", "source": { "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fb19eedd2bb67ff8cf7a5502ad329e701d6398a3", + "reference": "fb19eedd2bb67ff8cf7a5502ad329e701d6398a3", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } + "MIT" ], - "description": "Library for handling version information and constraints", + "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.3" }, - "time": "2022-02-21T01:04:05+00:00" + "time": "2026-07-08T07:01:06+00:00" }, { "name": "phpstan/phpstan", @@ -9961,6 +9524,67 @@ ], "time": "2025-02-07T05:00:38+00:00" }, + { + "name": "spatie/laravel-package-tools", + "version": "1.93.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-package-tools.git", + "reference": "d5552849801f2642aea710557463234b59ef65eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/d5552849801f2642aea710557463234b59ef65eb", + "reference": "d5552849801f2642aea710557463234b59ef65eb", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^10.0|^11.0|^12.0|^13.0", + "php": "^8.1" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "orchestra/testbench": "^8.0|^9.2|^10.0|^11.0", + "pestphp/pest": "^2.1|^3.1|^4.0", + "phpunit/php-code-coverage": "^10.0|^11.0|^12.0", + "phpunit/phpunit": "^10.5|^11.5|^12.5", + "spatie/pest-plugin-test-time": "^2.2|^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\LaravelPackageTools\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" + } + ], + "description": "Tools for creating Laravel packages", + "homepage": "https://github.com/spatie/laravel-package-tools", + "keywords": [ + "laravel-package-tools", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-package-tools/issues", + "source": "https://github.com/spatie/laravel-package-tools/tree/1.93.1" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2026-05-19T14:06:37+00:00" + }, { "name": "staabm/side-effects-detector", "version": "1.0.5", @@ -10121,6 +9745,72 @@ } ], "time": "2025-12-08T11:19:18+00:00" + }, + { + "name": "webmozart/assert", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/2ccb7c2e821038c03a3e6e1700c570c158c55f70", + "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-date": "*", + "ext-filter": "*", + "php": "^8.2" + }, + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" + }, + "type": "library", + "extra": { + "psalm": { + "pluginClass": "Webmozart\\Assert\\PsalmPlugin" + }, + "branch-alias": { + "dev-master": "2.0-dev", + "dev-feature/2-0": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/2.4.1" + }, + "time": "2026-06-15T15:31:57+00:00" } ], "aliases": [], From 2ba32584fbfa3dfd73e4d867e38027c89e53532d Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 19:07:40 -0300 Subject: [PATCH 09/36] feat(api): investments persistence layer Migration + Investment model (money stored as integer cents via a MoneyCast adapter, status enum, withdrawal snapshot columns), owner relationship + Sanctum HasApiTokens on User, an InvestmentRepository contract with an Eloquent implementation, and a factory with active/withdrawn states. --- .../Contracts/InvestmentRepository.php | 19 +++++ .../Persistence/Eloquent/Casts/MoneyCast.php | 52 ++++++++++++++ .../Eloquent/EloquentInvestmentRepository.php | 28 ++++++++ api/app/Models/Investment.php | 72 +++++++++++++++++++ api/app/Models/User.php | 12 +++- api/database/factories/InvestmentFactory.php | 67 +++++++++++++++++ api/database/factories/UserFactory.php | 2 - ..._08_07_210000_create_investments_table.php | 44 ++++++++++++ 8 files changed, 293 insertions(+), 3 deletions(-) create mode 100644 api/app/Domain/Investment/Contracts/InvestmentRepository.php create mode 100644 api/app/Infrastructure/Persistence/Eloquent/Casts/MoneyCast.php create mode 100644 api/app/Infrastructure/Persistence/Eloquent/EloquentInvestmentRepository.php create mode 100644 api/app/Models/Investment.php create mode 100644 api/database/factories/InvestmentFactory.php create mode 100644 api/database/migrations/2026_08_07_210000_create_investments_table.php diff --git a/api/app/Domain/Investment/Contracts/InvestmentRepository.php b/api/app/Domain/Investment/Contracts/InvestmentRepository.php new file mode 100644 index 0000000..db8250b --- /dev/null +++ b/api/app/Domain/Investment/Contracts/InvestmentRepository.php @@ -0,0 +1,19 @@ + + */ + public function paginateForOwner(User $owner, int $perPage): LengthAwarePaginator; + + public function save(Investment $investment): Investment; +} diff --git a/api/app/Infrastructure/Persistence/Eloquent/Casts/MoneyCast.php b/api/app/Infrastructure/Persistence/Eloquent/Casts/MoneyCast.php new file mode 100644 index 0000000..e31e586 --- /dev/null +++ b/api/app/Infrastructure/Persistence/Eloquent/Casts/MoneyCast.php @@ -0,0 +1,52 @@ + + */ +final class MoneyCast implements CastsAttributes +{ + /** + * @param array $attributes + */ + public function get(Model $model, string $key, mixed $value, array $attributes): ?Money + { + if ($value === null) { + return null; + } + + $currency = $attributes['currency'] ?? config('investments.currency'); + + return Money::ofMinor((int) $value, $currency); + } + + /** + * @param array $attributes + * @return array + */ + public function set(Model $model, string $key, mixed $value, array $attributes): array + { + if ($value === null) { + return [$key => null]; + } + + if (! $value instanceof Money) { + throw new InvalidArgumentException(sprintf('%s must be set to a %s instance.', $key, Money::class)); + } + + return [$key => $value->getMinorAmount()->toInt()]; + } +} diff --git a/api/app/Infrastructure/Persistence/Eloquent/EloquentInvestmentRepository.php b/api/app/Infrastructure/Persistence/Eloquent/EloquentInvestmentRepository.php new file mode 100644 index 0000000..c9970c1 --- /dev/null +++ b/api/app/Infrastructure/Persistence/Eloquent/EloquentInvestmentRepository.php @@ -0,0 +1,28 @@ +investments() + ->latest('invested_at') + ->latest('id') + ->paginate($perPage); + } + + public function save(Investment $investment): Investment + { + $investment->save(); + + return $investment; + } +} diff --git a/api/app/Models/Investment.php b/api/app/Models/Investment.php new file mode 100644 index 0000000..d5187ba --- /dev/null +++ b/api/app/Models/Investment.php @@ -0,0 +1,72 @@ + */ + use HasFactory; + + protected $fillable = [ + 'owner_id', + 'amount', + 'currency', + 'invested_at', + 'status', + ]; + + /** + * @return array + */ + protected function casts(): array + { + return [ + 'amount' => MoneyCast::class, + 'invested_at' => 'immutable_date', + 'withdrawn_at' => 'immutable_date', + 'status' => InvestmentStatus::class, + 'withdrawal_tax_rate' => 'string', + 'withdrawal_gross' => MoneyCast::class, + 'withdrawal_gains' => MoneyCast::class, + 'withdrawal_tax' => MoneyCast::class, + 'withdrawal_net' => MoneyCast::class, + ]; + } + + /** + * @return BelongsTo + */ + public function owner(): BelongsTo + { + return $this->belongsTo(User::class, 'owner_id'); + } + + public function isWithdrawn(): bool + { + return $this->status === InvestmentStatus::Withdrawn; + } +} diff --git a/api/app/Models/User.php b/api/app/Models/User.php index 916755d..1c7d504 100644 --- a/api/app/Models/User.php +++ b/api/app/Models/User.php @@ -9,15 +9,17 @@ use Illuminate\Database\Eloquent\Attributes\Fillable; use Illuminate\Database\Eloquent\Attributes\Hidden; use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; +use Laravel\Sanctum\HasApiTokens; #[Fillable(['name', 'email', 'password'])] #[Hidden(['password', 'remember_token'])] class User extends Authenticatable { /** @use HasFactory */ - use HasFactory, Notifiable; + use HasApiTokens, HasFactory, Notifiable; /** * Get the attributes that should be cast. @@ -31,4 +33,12 @@ protected function casts(): array 'password' => 'hashed', ]; } + + /** + * @return HasMany + */ + public function investments(): HasMany + { + return $this->hasMany(Investment::class, 'owner_id'); + } } diff --git a/api/database/factories/InvestmentFactory.php b/api/database/factories/InvestmentFactory.php new file mode 100644 index 0000000..f851cdd --- /dev/null +++ b/api/database/factories/InvestmentFactory.php @@ -0,0 +1,67 @@ + + */ +class InvestmentFactory extends Factory +{ + protected $model = Investment::class; + + public function definition(): array + { + return [ + 'owner_id' => User::factory(), + 'amount' => Money::of((string) $this->faker->numberBetween(100, 100000), 'BRL'), + 'currency' => 'BRL', + 'invested_at' => CarbonImmutable::today()->subMonths($this->faker->numberBetween(0, 30)), + 'status' => InvestmentStatus::Active, + ]; + } + + public function investedMonthsAgo(int $months): static + { + return $this->state(fn (): array => [ + 'invested_at' => CarbonImmutable::today()->subMonths($months)->startOfDay(), + ]); + } + + public function amount(string $major): static + { + return $this->state(fn (): array => [ + 'amount' => Money::of($major, 'BRL'), + ]); + } + + /** + * Freeze a withdrawal snapshot as of the given date (defaults to today). + */ + public function withdrawn(?CarbonImmutable $date = null): static + { + return $this->afterCreating(function (Investment $investment) use ($date): void { + $when = $date ?? CarbonImmutable::today(); + $breakdown = app(InvestmentCalculator::class)->withdrawalAsOf($investment, $when); + + $investment->status = InvestmentStatus::Withdrawn; + $investment->withdrawn_at = $when; + $investment->withdrawal_bracket = $breakdown->bracket->value; + $investment->withdrawal_tax_rate = (string) $breakdown->taxRate; + $investment->withdrawal_gross = $breakdown->balance; + $investment->withdrawal_gains = $breakdown->gains; + $investment->withdrawal_tax = $breakdown->tax; + $investment->withdrawal_net = $breakdown->net; + $investment->save(); + }); + } +} diff --git a/api/database/factories/UserFactory.php b/api/database/factories/UserFactory.php index e85bec6..3c874c3 100644 --- a/api/database/factories/UserFactory.php +++ b/api/database/factories/UserFactory.php @@ -21,8 +21,6 @@ class UserFactory extends Factory /** * Define the model's default state. - * - * @return array */ public function definition(): array { diff --git a/api/database/migrations/2026_08_07_210000_create_investments_table.php b/api/database/migrations/2026_08_07_210000_create_investments_table.php new file mode 100644 index 0000000..a4a2d74 --- /dev/null +++ b/api/database/migrations/2026_08_07_210000_create_investments_table.php @@ -0,0 +1,44 @@ +id(); + $table->foreignId('owner_id')->constrained('users')->cascadeOnDelete(); + + // Monetary values are stored as integer minor units (centavos). + $table->unsignedBigInteger('amount')->comment('principal, in cents'); + $table->char('currency', 3)->default('BRL'); + + // Business creation date (backdatable) — distinct from created_at. + $table->date('invested_at'); + $table->string('status')->default('active')->index(); + + // Withdrawal snapshot — frozen figures, all nullable until withdrawn. + $table->date('withdrawn_at')->nullable(); + $table->string('withdrawal_bracket')->nullable(); + $table->decimal('withdrawal_tax_rate', 6, 4)->nullable(); + $table->unsignedBigInteger('withdrawal_gross')->nullable()->comment('cents'); + $table->unsignedBigInteger('withdrawal_gains')->nullable()->comment('cents'); + $table->unsignedBigInteger('withdrawal_tax')->nullable()->comment('cents'); + $table->unsignedBigInteger('withdrawal_net')->nullable()->comment('cents'); + + $table->timestamps(); + + $table->index(['owner_id', 'invested_at']); + }); + } + + public function down(): void + { + Schema::dropIfExists('investments'); + } +}; From 22c2abc84b24b8f7e94b25304089e4e86c9bd2b9 Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 19:58:03 -0300 Subject: [PATCH 10/36] feat(api): REST endpoints for investments and auth Actions (Create/Withdraw/List) behind thin controllers; InvestmentCalculator facade over the domain; FormRequests enforce the date/amount rules; API Resource computes expected balance/gains (or the frozen withdrawal); Sanctum token auth; owner-only Policy; domain exceptions mapped to 409/422. Withdrawal-preview keeps tax math server-side. 21 feature tests cover create/view/withdraw/list/pagination. --- .../Investment/Actions/CreateInvestment.php | 42 +++++++++ .../Investment/Actions/ListInvestments.php | 26 +++++ .../Investment/Actions/WithdrawInvestment.php | 55 +++++++++++ .../Investment/Data/NewInvestmentData.php | 19 ++++ .../Investment/Data/WithdrawalData.php | 17 ++++ .../Investment/InvestmentCalculator.php | 36 +++++++ .../Exceptions/AmountNotPositive.php | 15 +++ .../Exceptions/InvestmentAlreadyWithdrawn.php | 15 +++ api/app/Events/InvestmentCreated.php | 15 +++ api/app/Events/InvestmentWithdrawn.php | 15 +++ .../Controllers/Api/Auth/AuthController.php | 66 +++++++++++++ .../Controllers/Api/InvestmentController.php | 91 ++++++++++++++++++ api/app/Http/Controllers/Controller.php | 4 +- api/app/Http/Requests/Auth/LoginRequest.php | 22 +++++ .../Http/Requests/Auth/RegisterRequest.php | 23 +++++ .../Http/Requests/StoreInvestmentRequest.php | 34 +++++++ .../Requests/WithdrawInvestmentRequest.php | 50 ++++++++++ .../Requests/WithdrawalPreviewRequest.php | 43 +++++++++ api/app/Http/Resources/InvestmentResource.php | 70 ++++++++++++++ api/app/Http/Resources/UserResource.php | 27 ++++++ api/app/Policies/InvestmentPolicy.php | 21 +++++ api/app/Providers/DomainServiceProvider.php | 30 ++++++ api/bootstrap/app.php | 14 +++ api/bootstrap/providers.php | 2 + api/routes/api.php | 21 ++++- api/tests/Feature/Auth/AuthTest.php | 58 ++++++++++++ .../Investments/CreateInvestmentTest.php | 59 ++++++++++++ .../Investments/ListInvestmentsTest.php | 41 ++++++++ .../Investments/ViewInvestmentTest.php | 38 ++++++++ .../Investments/WithdrawInvestmentTest.php | 94 +++++++++++++++++++ api/tests/Pest.php | 38 +------- 31 files changed, 1061 insertions(+), 40 deletions(-) create mode 100644 api/app/Application/Investment/Actions/CreateInvestment.php create mode 100644 api/app/Application/Investment/Actions/ListInvestments.php create mode 100644 api/app/Application/Investment/Actions/WithdrawInvestment.php create mode 100644 api/app/Application/Investment/Data/NewInvestmentData.php create mode 100644 api/app/Application/Investment/Data/WithdrawalData.php create mode 100644 api/app/Application/Investment/InvestmentCalculator.php create mode 100644 api/app/Domain/Investment/Exceptions/AmountNotPositive.php create mode 100644 api/app/Domain/Investment/Exceptions/InvestmentAlreadyWithdrawn.php create mode 100644 api/app/Events/InvestmentCreated.php create mode 100644 api/app/Events/InvestmentWithdrawn.php create mode 100644 api/app/Http/Controllers/Api/Auth/AuthController.php create mode 100644 api/app/Http/Controllers/Api/InvestmentController.php create mode 100644 api/app/Http/Requests/Auth/LoginRequest.php create mode 100644 api/app/Http/Requests/Auth/RegisterRequest.php create mode 100644 api/app/Http/Requests/StoreInvestmentRequest.php create mode 100644 api/app/Http/Requests/WithdrawInvestmentRequest.php create mode 100644 api/app/Http/Requests/WithdrawalPreviewRequest.php create mode 100644 api/app/Http/Resources/InvestmentResource.php create mode 100644 api/app/Http/Resources/UserResource.php create mode 100644 api/app/Policies/InvestmentPolicy.php create mode 100644 api/app/Providers/DomainServiceProvider.php create mode 100644 api/tests/Feature/Auth/AuthTest.php create mode 100644 api/tests/Feature/Investments/CreateInvestmentTest.php create mode 100644 api/tests/Feature/Investments/ListInvestmentsTest.php create mode 100644 api/tests/Feature/Investments/ViewInvestmentTest.php create mode 100644 api/tests/Feature/Investments/WithdrawInvestmentTest.php diff --git a/api/app/Application/Investment/Actions/CreateInvestment.php b/api/app/Application/Investment/Actions/CreateInvestment.php new file mode 100644 index 0000000..a96ce11 --- /dev/null +++ b/api/app/Application/Investment/Actions/CreateInvestment.php @@ -0,0 +1,42 @@ +amount->isPositive()) { + throw new AmountNotPositive; + } + + $investment = new Investment([ + 'owner_id' => $owner->getKey(), + 'amount' => $data->amount, + 'currency' => $data->amount->getCurrency()->getCurrencyCode(), + 'invested_at' => $data->investedAt, + 'status' => InvestmentStatus::Active, + ]); + + $this->repository->save($investment); + + InvestmentCreated::dispatch($investment); + + return $investment; + } +} diff --git a/api/app/Application/Investment/Actions/ListInvestments.php b/api/app/Application/Investment/Actions/ListInvestments.php new file mode 100644 index 0000000..66d10e7 --- /dev/null +++ b/api/app/Application/Investment/Actions/ListInvestments.php @@ -0,0 +1,26 @@ + + */ + public function handle(User $owner, int $perPage): LengthAwarePaginator + { + return $this->repository->paginateForOwner($owner, $perPage); + } +} diff --git a/api/app/Application/Investment/Actions/WithdrawInvestment.php b/api/app/Application/Investment/Actions/WithdrawInvestment.php new file mode 100644 index 0000000..7b87b43 --- /dev/null +++ b/api/app/Application/Investment/Actions/WithdrawInvestment.php @@ -0,0 +1,55 @@ +whereKey($investment->getKey()) + ->lockForUpdate() + ->firstOrFail(); + + if ($locked->isWithdrawn()) { + throw new InvestmentAlreadyWithdrawn; + } + + $breakdown = $this->calculator->withdrawalAsOf($locked, $data->date); + + $locked->status = InvestmentStatus::Withdrawn; + $locked->withdrawn_at = $data->date; + $locked->withdrawal_bracket = $breakdown->bracket->value; + $locked->withdrawal_tax_rate = (string) $breakdown->taxRate; + $locked->withdrawal_gross = $breakdown->balance; + $locked->withdrawal_gains = $breakdown->gains; + $locked->withdrawal_tax = $breakdown->tax; + $locked->withdrawal_net = $breakdown->net; + $locked->save(); + + InvestmentWithdrawn::dispatch($locked); + + return $locked; + }); + } +} diff --git a/api/app/Application/Investment/Data/NewInvestmentData.php b/api/app/Application/Investment/Data/NewInvestmentData.php new file mode 100644 index 0000000..2eaae84 --- /dev/null +++ b/api/app/Application/Investment/Data/NewInvestmentData.php @@ -0,0 +1,19 @@ +gains->forPeriod($investment->amount, $investment->invested_at, $reference); + } + + public function withdrawalAsOf(Investment $investment, CarbonInterface $reference): WithdrawalBreakdown + { + $balance = $this->balanceAsOf($investment, $reference); + + return $this->tax->on($balance->principal, $balance->balance, $balance->months); + } +} diff --git a/api/app/Domain/Investment/Exceptions/AmountNotPositive.php b/api/app/Domain/Investment/Exceptions/AmountNotPositive.php new file mode 100644 index 0000000..8d4e9b3 --- /dev/null +++ b/api/app/Domain/Investment/Exceptions/AmountNotPositive.php @@ -0,0 +1,15 @@ + $request->validated('name'), + 'email' => $request->validated('email'), + 'password' => $request->validated('password'), + ]); + + return response()->json([ + 'user' => UserResource::make($user), + 'token' => $user->createToken($this->deviceName($request))->plainTextToken, + ], 201); + } + + public function login(LoginRequest $request): JsonResponse + { + $user = User::query()->where('email', $request->validated('email'))->first(); + + if (! $user || ! Hash::check((string) $request->validated('password'), $user->password)) { + throw ValidationException::withMessages([ + 'email' => ['The provided credentials are incorrect.'], + ])->status(401); + } + + return response()->json([ + 'user' => UserResource::make($user), + 'token' => $user->createToken($this->deviceName($request))->plainTextToken, + ]); + } + + public function logout(Request $request): Response + { + $request->user()?->currentAccessToken()?->delete(); + + return response()->noContent(); + } + + public function user(Request $request): UserResource + { + return UserResource::make($request->user()); + } + + private function deviceName(Request $request): string + { + return (string) ($request->input('device_name') ?? $request->userAgent() ?? 'spa'); + } +} diff --git a/api/app/Http/Controllers/Api/InvestmentController.php b/api/app/Http/Controllers/Api/InvestmentController.php new file mode 100644 index 0000000..48b28d4 --- /dev/null +++ b/api/app/Http/Controllers/Api/InvestmentController.php @@ -0,0 +1,91 @@ +integer('per_page', 15), 100)); + + return InvestmentResource::collection( + $action->handle($request->user(), $perPage) + ); + } + + /** + * Create an investment owned by the authenticated user. + */ + public function store(StoreInvestmentRequest $request, CreateInvestment $action): JsonResponse + { + $investment = $action->handle($request->user(), $request->toData()); + + return InvestmentResource::make($investment->load('owner')) + ->response() + ->setStatusCode(201); + } + + /** + * Show a single investment with its expected balance and gains. + */ + public function show(Investment $investment): InvestmentResource + { + $this->authorize('view', $investment); + + return InvestmentResource::make($investment->load('owner')); + } + + /** + * Preview the taxed net amount for a hypothetical withdrawal date. + */ + public function withdrawalPreview( + WithdrawalPreviewRequest $request, + Investment $investment, + InvestmentCalculator $calculator + ): JsonResponse { + $breakdown = $calculator->withdrawalAsOf($investment, $request->referenceDate()); + + return response()->json([ + 'data' => [ + 'date' => $request->referenceDate()->toDateString(), + 'gross' => (string) $breakdown->balance->getAmount(), + 'gains' => (string) $breakdown->gains->getAmount(), + 'tax_rate' => (string) $breakdown->taxRate, + 'tax' => (string) $breakdown->tax->getAmount(), + 'net' => (string) $breakdown->net->getAmount(), + ], + ]); + } + + /** + * Fully withdraw an investment and return the settled figures. + */ + public function withdraw( + WithdrawInvestmentRequest $request, + Investment $investment, + WithdrawInvestment $action + ): InvestmentResource { + $withdrawn = $action->handle($investment, $request->toData()); + + return InvestmentResource::make($withdrawn->load('owner')); + } +} diff --git a/api/app/Http/Controllers/Controller.php b/api/app/Http/Controllers/Controller.php index e2af3d2..ded7c1f 100644 --- a/api/app/Http/Controllers/Controller.php +++ b/api/app/Http/Controllers/Controller.php @@ -4,7 +4,9 @@ namespace App\Http\Controllers; +use Illuminate\Foundation\Auth\Access\AuthorizesRequests; + abstract class Controller { - // + use AuthorizesRequests; } diff --git a/api/app/Http/Requests/Auth/LoginRequest.php b/api/app/Http/Requests/Auth/LoginRequest.php new file mode 100644 index 0000000..34faa6a --- /dev/null +++ b/api/app/Http/Requests/Auth/LoginRequest.php @@ -0,0 +1,22 @@ +> + */ + public function rules(): array + { + return [ + 'email' => ['required', 'string', 'email'], + 'password' => ['required', 'string'], + 'device_name' => ['sometimes', 'string', 'max:255'], + ]; + } +} diff --git a/api/app/Http/Requests/Auth/RegisterRequest.php b/api/app/Http/Requests/Auth/RegisterRequest.php new file mode 100644 index 0000000..0d84460 --- /dev/null +++ b/api/app/Http/Requests/Auth/RegisterRequest.php @@ -0,0 +1,23 @@ +> + */ + public function rules(): array + { + return [ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email'], + 'password' => ['required', 'confirmed', Password::defaults()], + ]; + } +} diff --git a/api/app/Http/Requests/StoreInvestmentRequest.php b/api/app/Http/Requests/StoreInvestmentRequest.php new file mode 100644 index 0000000..4e0137a --- /dev/null +++ b/api/app/Http/Requests/StoreInvestmentRequest.php @@ -0,0 +1,34 @@ +> + */ + public function rules(): array + { + return [ + // Amount in the major unit (e.g. "1000.00"); positive, up to 2 decimals. + 'amount' => ['required', 'numeric', 'gt:0', 'decimal:0,2'], + // Creation date can be today or in the past, never the future. + 'invested_at' => ['required', 'date', 'before_or_equal:today'], + ]; + } + + public function toData(): NewInvestmentData + { + return new NewInvestmentData( + amount: Money::of((string) $this->validated('amount'), (string) config('investments.currency')), + investedAt: CarbonImmutable::parse((string) $this->validated('invested_at'))->startOfDay(), + ); + } +} diff --git a/api/app/Http/Requests/WithdrawInvestmentRequest.php b/api/app/Http/Requests/WithdrawInvestmentRequest.php new file mode 100644 index 0000000..69419eb --- /dev/null +++ b/api/app/Http/Requests/WithdrawInvestmentRequest.php @@ -0,0 +1,50 @@ +user()?->can('withdraw', $this->investment()) ?? false; + } + + /** + * @return array> + */ + public function rules(): array + { + return [ + // Withdrawal date: today or past, never before the investment's creation. + 'withdrawal_date' => [ + 'required', + 'date', + 'before_or_equal:today', + 'after_or_equal:'.$this->investment()->invested_at->toDateString(), + ], + ]; + } + + public function toData(): WithdrawalData + { + return new WithdrawalData( + date: CarbonImmutable::parse((string) $this->validated('withdrawal_date'))->startOfDay(), + ); + } + + private function investment(): Investment + { + /** @var Investment */ + return $this->route('investment'); + } +} diff --git a/api/app/Http/Requests/WithdrawalPreviewRequest.php b/api/app/Http/Requests/WithdrawalPreviewRequest.php new file mode 100644 index 0000000..2dffac6 --- /dev/null +++ b/api/app/Http/Requests/WithdrawalPreviewRequest.php @@ -0,0 +1,43 @@ +user()?->can('view', $this->investment()) ?? false; + } + + /** + * @return array> + */ + public function rules(): array + { + return [ + 'date' => [ + 'required', + 'date', + 'before_or_equal:today', + 'after_or_equal:'.$this->investment()->invested_at->toDateString(), + ], + ]; + } + + public function referenceDate(): CarbonImmutable + { + return CarbonImmutable::parse((string) $this->validated('date'))->startOfDay(); + } + + private function investment(): Investment + { + /** @var Investment */ + return $this->route('investment'); + } +} diff --git a/api/app/Http/Resources/InvestmentResource.php b/api/app/Http/Resources/InvestmentResource.php new file mode 100644 index 0000000..a304570 --- /dev/null +++ b/api/app/Http/Resources/InvestmentResource.php @@ -0,0 +1,70 @@ + + */ + public function toArray(Request $request): array + { + /** @var Investment $investment */ + $investment = $this->resource; + + if ($investment->isWithdrawn()) { + $reference = $investment->withdrawn_at ?? CarbonImmutable::today(); + $balance = $investment->withdrawal_gross; + $gains = $investment->withdrawal_gains; + $withdrawal = [ + 'date' => $reference->toDateString(), + 'tax_rate' => $investment->withdrawal_tax_rate, + 'tax' => $this->money($investment->withdrawal_tax), + 'net_amount' => $this->money($investment->withdrawal_net), + ]; + } else { + $reference = CarbonImmutable::today(); + $statement = app(InvestmentCalculator::class)->balanceAsOf($investment, $reference); + $balance = $statement->balance; + $gains = $statement->gains; + $withdrawal = null; + } + + $months = app(ElapsedMonths::class)->between($investment->invested_at, $reference); + + return [ + 'id' => $investment->id, + 'owner' => [ + 'id' => $investment->owner_id, + 'name' => $investment->owner?->name, + ], + 'amount' => $this->money($investment->amount), + 'currency' => $investment->currency, + 'status' => $investment->status->value, + 'invested_at' => $investment->invested_at->toDateString(), + 'reference_date' => $reference->toDateString(), + 'elapsed_months' => $months, + 'expected_balance' => $this->money($balance), + 'gains' => $this->money($gains), + 'withdrawal' => $withdrawal, + ]; + } + + private function money(?Money $money): ?string + { + return $money?->getAmount()->__toString(); + } +} diff --git a/api/app/Http/Resources/UserResource.php b/api/app/Http/Resources/UserResource.php new file mode 100644 index 0000000..23c265f --- /dev/null +++ b/api/app/Http/Resources/UserResource.php @@ -0,0 +1,27 @@ + + */ + public function toArray(Request $request): array + { + return [ + 'id' => $this->id, + 'name' => $this->name, + 'email' => $this->email, + ]; + } +} diff --git a/api/app/Policies/InvestmentPolicy.php b/api/app/Policies/InvestmentPolicy.php new file mode 100644 index 0000000..645caa0 --- /dev/null +++ b/api/app/Policies/InvestmentPolicy.php @@ -0,0 +1,21 @@ +owner_id === $user->getKey(); + } + + public function withdraw(User $user, Investment $investment): bool + { + return $investment->owner_id === $user->getKey(); + } +} diff --git a/api/app/Providers/DomainServiceProvider.php b/api/app/Providers/DomainServiceProvider.php new file mode 100644 index 0000000..0c2281e --- /dev/null +++ b/api/app/Providers/DomainServiceProvider.php @@ -0,0 +1,30 @@ +app->singleton(GainCalculator::class, fn () => new GainCalculator( + GainRate::ofMonthly((string) config('investments.monthly_rate')), + new ElapsedMonths, + )); + + $this->app->singleton(TaxCalculator::class, fn () => new TaxCalculator( + config('investments.tax'), + )); + + $this->app->bind(InvestmentRepository::class, EloquentInvestmentRepository::class); + } +} diff --git a/api/bootstrap/app.php b/api/bootstrap/app.php index 0acc407..baa0c6e 100644 --- a/api/bootstrap/app.php +++ b/api/bootstrap/app.php @@ -2,6 +2,8 @@ declare(strict_types=1); +use App\Domain\Investment\Exceptions\AmountNotPositive; +use App\Domain\Investment\Exceptions\InvestmentAlreadyWithdrawn; use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware; @@ -21,4 +23,16 @@ $exceptions->shouldRenderJsonWhen( fn (Request $request) => $request->is('api/*'), ); + + // Domain rule conflicts map to explicit HTTP semantics. + $exceptions->render( + fn (InvestmentAlreadyWithdrawn $e) => response()->json(['message' => $e->getMessage()], 409), + ); + + $exceptions->render( + fn (AmountNotPositive $e) => response()->json([ + 'message' => $e->getMessage(), + 'errors' => ['amount' => [$e->getMessage()]], + ], 422), + ); })->create(); diff --git a/api/bootstrap/providers.php b/api/bootstrap/providers.php index 888aae0..3d1091a 100644 --- a/api/bootstrap/providers.php +++ b/api/bootstrap/providers.php @@ -3,7 +3,9 @@ declare(strict_types=1); use App\Providers\AppServiceProvider; +use App\Providers\DomainServiceProvider; return [ AppServiceProvider::class, + DomainServiceProvider::class, ]; diff --git a/api/routes/api.php b/api/routes/api.php index 2fd4ae7..6101926 100644 --- a/api/routes/api.php +++ b/api/routes/api.php @@ -2,9 +2,22 @@ declare(strict_types=1); -use Illuminate\Http\Request; +use App\Http\Controllers\Api\Auth\AuthController; +use App\Http\Controllers\Api\InvestmentController; use Illuminate\Support\Facades\Route; -Route::get('/user', function (Request $request) { - return $request->user(); -})->middleware('auth:sanctum'); +// --- Public auth endpoints ------------------------------------------------- +Route::post('/register', [AuthController::class, 'register']); +Route::post('/login', [AuthController::class, 'login']); + +// --- Authenticated endpoints (Bearer token) -------------------------------- +Route::middleware('auth:sanctum')->group(function () { + Route::get('/user', [AuthController::class, 'user']); + Route::post('/logout', [AuthController::class, 'logout']); + + Route::get('/investments', [InvestmentController::class, 'index']); + Route::post('/investments', [InvestmentController::class, 'store']); + Route::get('/investments/{investment}', [InvestmentController::class, 'show']); + Route::get('/investments/{investment}/withdrawal-preview', [InvestmentController::class, 'withdrawalPreview']); + Route::post('/investments/{investment}/withdraw', [InvestmentController::class, 'withdraw']); +}); diff --git a/api/tests/Feature/Auth/AuthTest.php b/api/tests/Feature/Auth/AuthTest.php new file mode 100644 index 0000000..9d46601 --- /dev/null +++ b/api/tests/Feature/Auth/AuthTest.php @@ -0,0 +1,58 @@ +postJson('/api/register', [ + 'name' => 'Ada Lovelace', + 'email' => 'ada@example.com', + 'password' => 'password123', + 'password_confirmation' => 'password123', + ]) + ->assertCreated() + ->assertJsonStructure(['user' => ['id', 'name', 'email'], 'token']) + ->assertJsonPath('user.email', 'ada@example.com'); + + expect(User::query()->where('email', 'ada@example.com')->exists())->toBeTrue(); +}); + +it('rejects registration with a duplicate email', function () { + User::factory()->create(['email' => 'taken@example.com']); + + $this->postJson('/api/register', [ + 'name' => 'Someone', + 'email' => 'taken@example.com', + 'password' => 'password123', + 'password_confirmation' => 'password123', + ])->assertStatus(422)->assertJsonValidationErrors('email'); +}); + +it('logs in with valid credentials and returns a token', function () { + User::factory()->create([ + 'email' => 'grace@example.com', + 'password' => 'password123', + ]); + + $this->postJson('/api/login', [ + 'email' => 'grace@example.com', + 'password' => 'password123', + ])->assertOk()->assertJsonStructure(['user' => ['id'], 'token']); +}); + +it('rejects login with wrong credentials (401)', function () { + User::factory()->create([ + 'email' => 'grace@example.com', + 'password' => 'password123', + ]); + + $this->postJson('/api/login', [ + 'email' => 'grace@example.com', + 'password' => 'wrong-password', + ])->assertStatus(401); +}); + +it('blocks protected routes without a token (401)', function () { + $this->getJson('/api/investments')->assertUnauthorized(); +}); diff --git a/api/tests/Feature/Investments/CreateInvestmentTest.php b/api/tests/Feature/Investments/CreateInvestmentTest.php new file mode 100644 index 0000000..2749f2a --- /dev/null +++ b/api/tests/Feature/Investments/CreateInvestmentTest.php @@ -0,0 +1,59 @@ +user = User::factory()->create(); + Sanctum::actingAs($this->user); +}); + +it('creates an investment for the authenticated owner', function () { + $this->postJson('/api/investments', [ + 'amount' => '1000.00', + 'invested_at' => CarbonImmutable::today()->subMonths(6)->toDateString(), + ]) + ->assertCreated() + ->assertJsonPath('data.amount', '1000.00') + ->assertJsonPath('data.status', 'active') + ->assertJsonPath('data.owner.id', $this->user->id) + ->assertJsonPath('data.expected_balance', '1031.61') + ->assertJsonPath('data.gains', '31.61'); + + $this->assertDatabaseHas('investments', [ + 'owner_id' => $this->user->id, + 'amount' => 100000, + 'status' => 'active', + ]); +}); + +it('rejects a creation date in the future (422)', function () { + $this->postJson('/api/investments', [ + 'amount' => '1000.00', + 'invested_at' => CarbonImmutable::tomorrow()->toDateString(), + ])->assertStatus(422)->assertJsonValidationErrors('invested_at'); +}); + +it('rejects a non-positive amount (422)', function () { + $this->postJson('/api/investments', [ + 'amount' => '0', + 'invested_at' => CarbonImmutable::today()->toDateString(), + ])->assertStatus(422)->assertJsonValidationErrors('amount'); +}); + +it('always assigns the authenticated user as owner, ignoring owner_id in the body', function () { + $intruder = User::factory()->create(); + + $this->postJson('/api/investments', [ + 'amount' => '500.00', + 'invested_at' => CarbonImmutable::today()->toDateString(), + 'owner_id' => $intruder->id, + ]) + ->assertCreated() + ->assertJsonPath('data.owner.id', $this->user->id); + + $this->assertDatabaseMissing('investments', ['owner_id' => $intruder->id]); +}); diff --git a/api/tests/Feature/Investments/ListInvestmentsTest.php b/api/tests/Feature/Investments/ListInvestmentsTest.php new file mode 100644 index 0000000..b71c3d3 --- /dev/null +++ b/api/tests/Feature/Investments/ListInvestmentsTest.php @@ -0,0 +1,41 @@ +user = User::factory()->create(); + Sanctum::actingAs($this->user); +}); + +it('lists only the authenticated user\'s investments', function () { + Investment::factory()->count(3)->for($this->user, 'owner')->create(); + Investment::factory()->count(2)->create(); // other owners + + $this->getJson('/api/investments') + ->assertOk() + ->assertJsonCount(3, 'data') + ->assertJsonPath('meta.total', 3); +}); + +it('paginates with meta and links', function () { + Investment::factory()->count(20)->for($this->user, 'owner')->create(); + + $this->getJson('/api/investments?per_page=5') + ->assertOk() + ->assertJsonCount(5, 'data') + ->assertJsonPath('meta.per_page', 5) + ->assertJsonPath('meta.last_page', 4) + ->assertJsonStructure(['data', 'links' => ['first', 'last', 'prev', 'next'], 'meta']); +}); + +it('caps per_page at 100', function () { + Investment::factory()->count(3)->for($this->user, 'owner')->create(); + + $this->getJson('/api/investments?per_page=1000') + ->assertOk() + ->assertJsonPath('meta.per_page', 100); +}); diff --git a/api/tests/Feature/Investments/ViewInvestmentTest.php b/api/tests/Feature/Investments/ViewInvestmentTest.php new file mode 100644 index 0000000..3149ab6 --- /dev/null +++ b/api/tests/Feature/Investments/ViewInvestmentTest.php @@ -0,0 +1,38 @@ +user = User::factory()->create(); + Sanctum::actingAs($this->user); +}); + +it('shows expected balance and gains as of today', function () { + $investment = Investment::factory() + ->for($this->user, 'owner') + ->amount('1000.00') + ->investedMonthsAgo(6) + ->create(); + + $this->getJson("/api/investments/{$investment->id}") + ->assertOk() + ->assertJsonPath('data.amount', '1000.00') + ->assertJsonPath('data.elapsed_months', 6) + ->assertJsonPath('data.expected_balance', '1031.61') + ->assertJsonPath('data.gains', '31.61') + ->assertJsonPath('data.withdrawal', null); +}); + +it('forbids viewing another user\'s investment (403)', function () { + $investment = Investment::factory()->create(); // owned by a fresh user + + $this->getJson("/api/investments/{$investment->id}")->assertForbidden(); +}); + +it('returns 404 for a missing investment', function () { + $this->getJson('/api/investments/999999')->assertNotFound(); +}); diff --git a/api/tests/Feature/Investments/WithdrawInvestmentTest.php b/api/tests/Feature/Investments/WithdrawInvestmentTest.php new file mode 100644 index 0000000..094d201 --- /dev/null +++ b/api/tests/Feature/Investments/WithdrawInvestmentTest.php @@ -0,0 +1,94 @@ +user = User::factory()->create(); + Sanctum::actingAs($this->user); +}); + +it('withdraws fully and returns the net amount after tax', function () { + $investment = Investment::factory() + ->for($this->user, 'owner') + ->amount('1000.00') + ->investedMonthsAgo(6) + ->create(); + + $this->postJson("/api/investments/{$investment->id}/withdraw", [ + 'withdrawal_date' => CarbonImmutable::today()->toDateString(), + ]) + ->assertOk() + ->assertJsonPath('data.status', 'withdrawn') + ->assertJsonPath('data.gains', '31.61') + ->assertJsonPath('data.withdrawal.tax', '7.11') + ->assertJsonPath('data.withdrawal.net_amount', '1024.50'); + + $this->assertDatabaseHas('investments', [ + 'id' => $investment->id, + 'status' => 'withdrawn', + 'withdrawal_net' => 102450, + ]); +}); + +it('previews the taxed net amount without committing', function () { + $investment = Investment::factory() + ->for($this->user, 'owner') + ->amount('1000.00') + ->investedMonthsAgo(6) + ->create(); + + $date = CarbonImmutable::today()->toDateString(); + + $this->getJson("/api/investments/{$investment->id}/withdrawal-preview?date={$date}") + ->assertOk() + ->assertJsonPath('data.gross', '1031.61') + ->assertJsonPath('data.gains', '31.61') + ->assertJsonPath('data.tax', '7.11') + ->assertJsonPath('data.net', '1024.50'); + + expect($investment->fresh()->status->value)->toBe('active'); +}); + +it('rejects a withdrawal date before the creation date (422)', function () { + $investment = Investment::factory() + ->for($this->user, 'owner') + ->investedMonthsAgo(2) + ->create(); + + $this->postJson("/api/investments/{$investment->id}/withdraw", [ + 'withdrawal_date' => $investment->invested_at->subDay()->toDateString(), + ])->assertStatus(422)->assertJsonValidationErrors('withdrawal_date'); +}); + +it('rejects a future withdrawal date (422)', function () { + $investment = Investment::factory()->for($this->user, 'owner')->create(); + + $this->postJson("/api/investments/{$investment->id}/withdraw", [ + 'withdrawal_date' => CarbonImmutable::tomorrow()->toDateString(), + ])->assertStatus(422)->assertJsonValidationErrors('withdrawal_date'); +}); + +it('rejects withdrawing an already-withdrawn investment (409)', function () { + $investment = Investment::factory() + ->for($this->user, 'owner') + ->investedMonthsAgo(6) + ->withdrawn() + ->create(); + + $this->postJson("/api/investments/{$investment->id}/withdraw", [ + 'withdrawal_date' => CarbonImmutable::today()->toDateString(), + ])->assertStatus(409); +}); + +it('forbids withdrawing another user\'s investment (403)', function () { + $investment = Investment::factory()->create(); // different owner + + $this->postJson("/api/investments/{$investment->id}/withdraw", [ + 'withdrawal_date' => CarbonImmutable::today()->toDateString(), + ])->assertForbidden(); +}); diff --git a/api/tests/Pest.php b/api/tests/Pest.php index cff290a..b8f9841 100644 --- a/api/tests/Pest.php +++ b/api/tests/Pest.php @@ -10,43 +10,11 @@ | Test Case |-------------------------------------------------------------------------- | -| The closure you provide to your test functions is always bound to a specific PHPUnit test -| case class. By default, that class is "PHPUnit\Framework\TestCase". Of course, you may -| need to change it using the "pest()" function to bind different classes or traits. +| Feature tests hit the HTTP layer against a migrated database, refreshed +| between tests. Unit tests stay pure (no framework, no database). | */ pest()->extend(TestCase::class) - // ->use(RefreshDatabase::class) + ->use(RefreshDatabase::class) ->in('Feature'); - -/* -|-------------------------------------------------------------------------- -| Expectations -|-------------------------------------------------------------------------- -| -| When you're writing tests, you often need to check that values meet certain conditions. The -| "expect()" function gives you access to a set of "expectations" methods that you can use -| to assert different things. Of course, you may extend the Expectation API at any time. -| -*/ - -expect()->extend('toBeOne', function () { - return $this->toBe(1); -}); - -/* -|-------------------------------------------------------------------------- -| Functions -|-------------------------------------------------------------------------- -| -| While Pest is very powerful out-of-the-box, you may have some testing code specific to your -| project that you don't want to repeat in every file. Here you can also expose helpers as -| global functions to help you to reduce the number of lines of code in your test files. -| -*/ - -function something() -{ - // .. -} From 911ed3daee0c16ab49a1a29a13dfb2a9837c4559 Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 20:21:18 -0300 Subject: [PATCH 11/36] feat(mail): queued Blade notification e-mails (Mailpit) Markdown Blade templates for investment created/withdrawn, sent to the owner via queued Mailables and dispatched from domain events. The withdrawal e-mail renders the full taxed breakdown. Blade is used here for templating without coupling the UI; Mailpit catches everything in dev. Tests assert queueing and rendering. --- .../SendInvestmentCreatedNotification.php | 19 ++++++ .../SendInvestmentWithdrawnNotification.php | 19 ++++++ api/app/Mail/InvestmentCreatedMail.php | 31 +++++++++ api/app/Mail/InvestmentWithdrawnMail.php | 31 +++++++++ api/app/Providers/AppServiceProvider.php | 8 ++- api/config/app.php | 3 + .../views/emails/investment-created.blade.php | 25 ++++++++ .../emails/investment-withdrawn.blade.php | 31 +++++++++ .../InvestmentNotificationTest.php | 63 +++++++++++++++++++ 9 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 api/app/Listeners/SendInvestmentCreatedNotification.php create mode 100644 api/app/Listeners/SendInvestmentWithdrawnNotification.php create mode 100644 api/app/Mail/InvestmentCreatedMail.php create mode 100644 api/app/Mail/InvestmentWithdrawnMail.php create mode 100644 api/resources/views/emails/investment-created.blade.php create mode 100644 api/resources/views/emails/investment-withdrawn.blade.php create mode 100644 api/tests/Feature/Investments/InvestmentNotificationTest.php diff --git a/api/app/Listeners/SendInvestmentCreatedNotification.php b/api/app/Listeners/SendInvestmentCreatedNotification.php new file mode 100644 index 0000000..d906023 --- /dev/null +++ b/api/app/Listeners/SendInvestmentCreatedNotification.php @@ -0,0 +1,19 @@ +investment->loadMissing('owner'); + + Mail::to($investment->owner->email)->send(new InvestmentCreatedMail($investment)); + } +} diff --git a/api/app/Listeners/SendInvestmentWithdrawnNotification.php b/api/app/Listeners/SendInvestmentWithdrawnNotification.php new file mode 100644 index 0000000..4e51540 --- /dev/null +++ b/api/app/Listeners/SendInvestmentWithdrawnNotification.php @@ -0,0 +1,19 @@ +investment->loadMissing('owner'); + + Mail::to($investment->owner->email)->send(new InvestmentWithdrawnMail($investment)); + } +} diff --git a/api/app/Mail/InvestmentCreatedMail.php b/api/app/Mail/InvestmentCreatedMail.php new file mode 100644 index 0000000..5e6c5db --- /dev/null +++ b/api/app/Mail/InvestmentCreatedMail.php @@ -0,0 +1,31 @@ + env('APP_URL', 'http://localhost'), + // SPA origin — used in notification e-mail links (kept separate from the API URL). + 'frontend_url' => env('FRONTEND_URL', 'http://localhost:5173'), + /* |-------------------------------------------------------------------------- | Application Timezone diff --git a/api/resources/views/emails/investment-created.blade.php b/api/resources/views/emails/investment-created.blade.php new file mode 100644 index 0000000..ec7f5c2 --- /dev/null +++ b/api/resources/views/emails/investment-created.blade.php @@ -0,0 +1,25 @@ + +# Investment created 🎉 + +Hi {{ $investment->owner->name }}, + +Your investment has been registered successfully. + + +| Detail | Value | +|:--------------|-------------------------------------------------:| +| Amount | {{ $investment->amount->formatToLocale('pt_BR') }} | +| Creation date | {{ $investment->invested_at->format('d/m/Y') }} | +| Monthly gain | 0.52% (compound) | + + +You'll earn **0.52% compound interest** every month, credited on the anniversary +day of the creation date. + + +View my investments + + +Thanks,
+{{ config('app.name') }} +
diff --git a/api/resources/views/emails/investment-withdrawn.blade.php b/api/resources/views/emails/investment-withdrawn.blade.php new file mode 100644 index 0000000..d4239ba --- /dev/null +++ b/api/resources/views/emails/investment-withdrawn.blade.php @@ -0,0 +1,31 @@ + +# Investment withdrawn ✅ + +Hi {{ $investment->owner->name }}, + +Your investment has been withdrawn. Here is the settlement summary. + +@php + $ratePercent = rtrim(rtrim(number_format((float) $investment->withdrawal_tax_rate * 100, 2), '0'), '.'); +@endphp + + +| Detail | Value | +|:-----------------------------|----------------------------------------------------:| +| Principal | {{ $investment->amount->formatToLocale('pt_BR') }} | +| Gross balance | {{ $investment->withdrawal_gross->formatToLocale('pt_BR') }} | +| Gains | {{ $investment->withdrawal_gains->formatToLocale('pt_BR') }} | +| Tax ({{ $ratePercent }}%) | {{ $investment->withdrawal_tax->formatToLocale('pt_BR') }} | +| **Net received** | **{{ $investment->withdrawal_net->formatToLocale('pt_BR') }}** | +| Withdrawal date | {{ $investment->withdrawn_at->format('d/m/Y') }} | + + +Taxes are applied only to the gain portion, at the rate for the investment's age. + + +Back to my investments + + +Thanks,
+{{ config('app.name') }} +
diff --git a/api/tests/Feature/Investments/InvestmentNotificationTest.php b/api/tests/Feature/Investments/InvestmentNotificationTest.php new file mode 100644 index 0000000..0bce871 --- /dev/null +++ b/api/tests/Feature/Investments/InvestmentNotificationTest.php @@ -0,0 +1,63 @@ +user = User::factory()->create(); + Sanctum::actingAs($this->user); + Mail::fake(); +}); + +it('queues a creation e-mail to the owner', function () { + $this->postJson('/api/investments', [ + 'amount' => '1000.00', + 'invested_at' => CarbonImmutable::today()->toDateString(), + ])->assertCreated(); + + Mail::assertQueued( + InvestmentCreatedMail::class, + fn (InvestmentCreatedMail $mail) => $mail->hasTo($this->user->email), + ); +}); + +it('queues a withdrawal e-mail to the owner', function () { + $investment = Investment::factory()->for($this->user, 'owner')->investedMonthsAgo(6)->create(); + + $this->postJson("/api/investments/{$investment->id}/withdraw", [ + 'withdrawal_date' => CarbonImmutable::today()->toDateString(), + ])->assertOk(); + + Mail::assertQueued( + InvestmentWithdrawnMail::class, + fn (InvestmentWithdrawnMail $mail) => $mail->hasTo($this->user->email), + ); +}); + +it('renders the creation e-mail template', function () { + $investment = Investment::factory()->for($this->user, 'owner')->amount('1000.00')->create(); + + expect((new InvestmentCreatedMail($investment))->render()) + ->toContain('Investment created') + ->toContain('R$'); +}); + +it('renders the withdrawal e-mail template with the taxed breakdown', function () { + $investment = Investment::factory() + ->for($this->user, 'owner') + ->amount('1000.00') + ->investedMonthsAgo(6) + ->withdrawn() + ->create(); + + expect((new InvestmentWithdrawnMail($investment))->render()) + ->toContain('Investment withdrawn') + ->toContain('22.5%'); +}); From f2fd392109561607f9ca423dc37300a7f3770990 Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 20:36:48 -0300 Subject: [PATCH 12/36] feat(seed): demo data across all tax brackets DatabaseSeeder creates a demo user (demo@coderockr.test) with active investments in each tax bracket, one already-withdrawn investment, and a second owner to make per-owner scoping visible. Covered by a feature test. --- api/database/seeders/DatabaseSeeder.php | 35 ++++++++++++++++++++---- api/tests/Feature/DatabaseSeederTest.php | 20 ++++++++++++++ 2 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 api/tests/Feature/DatabaseSeederTest.php diff --git a/api/database/seeders/DatabaseSeeder.php b/api/database/seeders/DatabaseSeeder.php index fda4692..698fad6 100644 --- a/api/database/seeders/DatabaseSeeder.php +++ b/api/database/seeders/DatabaseSeeder.php @@ -4,7 +4,9 @@ namespace Database\Seeders; +use App\Models\Investment; use App\Models\User; +use Carbon\CarbonImmutable; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; @@ -13,15 +15,38 @@ class DatabaseSeeder extends Seeder use WithoutModelEvents; /** - * Seed the application's database. + * Seed a demo user with investments spanning every tax bracket, plus a + * second user to demonstrate per-owner scoping. */ public function run(): void { - // User::factory(10)->create(); + $demo = User::factory()->create([ + 'name' => 'Demo User', + 'email' => 'demo@coderockr.test', + 'password' => 'password', + ]); + + // Active investments across the three tax brackets. + Investment::factory()->for($demo, 'owner')->amount('1000.00')->investedMonthsAgo(6)->create(); // < 1 year (22.5%) + Investment::factory()->for($demo, 'owner')->amount('2500.00')->investedMonthsAgo(15)->create(); // 1-2 years (18.5%) + Investment::factory()->for($demo, 'owner')->amount('5000.00')->investedMonthsAgo(30)->create(); // > 2 years (15%) + Investment::factory()->for($demo, 'owner')->amount('750.00')->investedMonthsAgo(0)->create(); // brand new - User::factory()->create([ - 'name' => 'Test User', - 'email' => 'test@example.com', + // One already-withdrawn investment (settled two months ago). + Investment::factory() + ->for($demo, 'owner') + ->amount('3200.00') + ->investedMonthsAgo(20) + ->withdrawn(CarbonImmutable::today()->subMonths(2)) + ->create(); + + // A second owner with their own investments (never visible to the demo user). + $grace = User::factory()->create([ + 'name' => 'Grace Hopper', + 'email' => 'grace@coderockr.test', + 'password' => 'password', ]); + + Investment::factory()->count(3)->for($grace, 'owner')->create(); } } diff --git a/api/tests/Feature/DatabaseSeederTest.php b/api/tests/Feature/DatabaseSeederTest.php new file mode 100644 index 0000000..9c1756e --- /dev/null +++ b/api/tests/Feature/DatabaseSeederTest.php @@ -0,0 +1,20 @@ +seed(); + + $demo = User::query()->where('email', 'demo@coderockr.test')->first(); + expect($demo)->not->toBeNull(); + + $demoInvestments = Investment::query()->where('owner_id', $demo->id); + expect($demoInvestments->count())->toBe(5) + ->and($demoInvestments->clone()->where('status', 'withdrawn')->count())->toBe(1); + + $grace = User::query()->where('email', 'grace@coderockr.test')->first(); + expect(Investment::query()->where('owner_id', $grace->id)->count())->toBe(3); +}); From 15950663fe5a8dcae5bb929e5ad9c956ed1593bd Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 20:58:31 -0300 Subject: [PATCH 13/36] docs(api): OpenAPI docs via Scramble + exported spec Scramble serves interactive docs at /docs/api and the raw spec at /docs/api.json; configured title/version/description and Bearer-auth documentation. The generated OpenAPI 3.1 spec is committed to api/docs/openapi.json (regenerate with 'make docs'). --- api/config/scramble.php | 178 ++++++++++ api/docs/openapi.json | 711 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 889 insertions(+) create mode 100644 api/config/scramble.php create mode 100644 api/docs/openapi.json diff --git a/api/config/scramble.php b/api/config/scramble.php new file mode 100644 index 0000000..c167c76 --- /dev/null +++ b/api/config/scramble.php @@ -0,0 +1,178 @@ + [ + * 'include' => 'api', + * 'exclude' => ['api/internal'], + * ], + * + * Without *, patterns match path segments (api matches api and api/users, not apiary). + * With *, Str::is is used (e.g. api/v*). + * + * One static include → default server is /{include} and paths are stripped (/users). + * Multiple includes or wildcards → server defaults to / and paths stay full (/api/users). + * Override with `servers`, or use Scramble::registerApi() for separate bases. + */ + 'api_path' => 'api', + + /* + * Your API domain. By default, app domain is used. This is also a part of the default API routes + * matcher, so when implementing your own, make sure you use this config if needed. + */ + 'api_domain' => null, + + /* + * The path where your OpenAPI specification will be exported. + */ + 'export_path' => 'api.json', + + /* + * Cache configuration for the generated OpenAPI document. + * + * Use `scramble:cache` to warm the cache and `scramble:clear` to invalidate it. + */ + 'cache' => [ + 'key' => 'scramble.openapi', + 'store' => 'file', + ], + + 'info' => [ + /* + * API version. + */ + 'version' => env('API_VERSION', '1.0.0'), + + /* + * Description rendered on the home page of the API documentation (`/docs/api`). + */ + 'description' => 'REST API for managing investments: creation, compound-gain ' + .'valuation, age-based taxed withdrawals and per-owner listing. ' + .'Authenticate with a Bearer token from POST /api/login.', + ], + + 'ui' => [ + 'title' => 'Investment Manager API', + ], + + 'renderer' => 'elements', + + 'renderers' => [ + /* + * Stoplight Elements config options: https://docs.stoplight.io/docs/elements/b074dc47b2826-elements-configuration-options + */ + 'elements' => [ + 'view' => 'scramble::docs', + 'theme' => 'light', + 'hideTryIt' => false, + 'hideSchemas' => false, + 'logo' => '', + 'tryItCredentialsPolicy' => 'include', + 'layout' => 'responsive', + 'router' => 'hash', + ], + /* + * Scalar API reference config options: https://scalar.com/products/api-references/configuration + */ + 'scalar' => [ + 'view' => 'scramble::scalar', + 'cdn' => 'https://cdn.jsdelivr.net/npm/@scalar/api-reference', + 'theme' => 'laravel', + 'proxyUrl' => 'https://proxy.scalar.com', + 'darkMode' => false, + 'showDeveloperTools' => 'never', + 'agent' => ['disabled' => true], + 'credentials' => 'include', + ], + ], + + /* + * The list of servers of the API. By default, when `null`, server URL will be created from + * `scramble.api_path` and `scramble.api_domain` config variables. When providing an array, you + * will need to specify the local server URL manually (if needed). + * + * Example of non-default config (final URLs are generated using Laravel `url` helper): + * + * ```php + * 'servers' => [ + * 'Live' => 'api', + * 'Prod' => 'https://scramble.dedoc.co/api', + * ], + * ``` + */ + 'servers' => null, + + /** + * Determines how Scramble stores the descriptions of enum cases. + * Available options: + * - 'description' – Case descriptions are stored as the enum schema's description using table formatting. + * - 'extension' – Case descriptions are stored in the `x-enumDescriptions` enum schema extension. + * + * @see https://redocly.com/docs-legacy/api-reference-docs/specification-extensions/x-enum-descriptions + * - false - Case descriptions are ignored. + */ + 'enum_cases_description_strategy' => 'description', + + /** + * Determines how Scramble stores the names of enum cases. + * Available options: + * - 'names' – Case names are stored in the `x-enumNames` enum schema extension. + * - 'varnames' - Case names are stored in the `x-enum-varnames` enum schema extension. + * - false - Case names are not stored. + */ + 'enum_cases_names_strategy' => false, + + /** + * When Scramble encounters deep objects in query parameters, it flattens the parameters so the generated + * OpenAPI document correctly describes the API. Flattening deep query parameters is relevant until + * OpenAPI 3.2 is released and query string structure can be described properly. + * + * For example, this nested validation rule describes the object with `bar` property: + * `['foo.bar' => ['required', 'int']]`. + * + * When `flatten_deep_query_parameters` is `true`, Scramble will document the parameter like so: + * `{"name":"foo[bar]", "schema":{"type":"int"}, "required":true}`. + * + * When `flatten_deep_query_parameters` is `false`, Scramble will document the parameter like so: + * `{"name":"foo", "schema": {"type":"object", "properties":{"bar":{"type": "int"}}, "required": ["bar"]}, "required":true}`. + */ + 'flatten_deep_query_parameters' => true, + + 'middleware' => [ + 'web', + RestrictedDocsAccess::class, + ], + + 'extensions' => [], + + /* + * Automatically document API security (OpenAPI `security` / `securitySchemes`) based on route + * middleware. + * + * Disabled by default. Uncomment the line below to enable `MiddlewareAuthSecurityStrategy`. + * When at least one documented route uses middleware matching the configured patterns (by default + * `auth` and `auth:*`), bearer auth is applied globally. Routes without matching middleware are + * marked as public (`security: []`). + * + * Set to `null` explicitly to disable. If you already configure security manually via + * `afterOpenApiGenerated` / `extendOpenApi`, keep this disabled to avoid duplicate schemes. + * + * Customize with a class-string or [class, options]: + * + * 'security_strategy' => [ + * \Dedoc\Scramble\SecurityDocumentation\MiddlewareAuthSecurityStrategy::class, + * [ + * 'middleware' => ['auth', 'auth:*'], + * 'scheme' => \Dedoc\Scramble\Support\Generator\SecurityScheme::http('bearer'), + * ], + * ], + */ + 'security_strategy' => MiddlewareAuthSecurityStrategy::class, +]; diff --git a/api/docs/openapi.json b/api/docs/openapi.json new file mode 100644 index 0000000..4135efb --- /dev/null +++ b/api/docs/openapi.json @@ -0,0 +1,711 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Investment Manager API", + "version": "1.0.0", + "description": "REST API for managing investments: creation, compound-gain valuation, age-based taxed withdrawals and per-owner listing. Authenticate with a Bearer token from POST /api/login." + }, + "servers": [ + { + "url": "http://localhost:8080/api" + } + ], + "security": [ + { + "http": [] + } + ], + "paths": { + "/register": { + "post": { + "operationId": "auth.register", + "tags": [ + "Auth" + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RegisterRequest" + } + } + } + }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "user": { + "$ref": "#/components/schemas/UserResource" + }, + "token": { + "type": "string" + } + }, + "required": [ + "user", + "token" + ] + } + } + } + }, + "422": { + "$ref": "#/components/responses/ValidationException" + } + }, + "security": [] + } + }, + "/login": { + "post": { + "operationId": "auth.login", + "tags": [ + "Auth" + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginRequest" + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "user": { + "$ref": "#/components/schemas/UserResource" + }, + "token": { + "type": "string" + } + }, + "required": [ + "user", + "token" + ] + } + } + } + }, + "422": { + "$ref": "#/components/responses/ValidationException" + } + }, + "security": [] + } + }, + "/user": { + "get": { + "operationId": "auth.user", + "tags": [ + "Auth" + ], + "responses": { + "200": { + "description": "`UserResource`", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/UserResource" + } + }, + "required": [ + "data" + ] + } + } + } + }, + "401": { + "$ref": "#/components/responses/AuthenticationException" + } + } + } + }, + "/logout": { + "post": { + "operationId": "auth.logout", + "tags": [ + "Auth" + ], + "responses": { + "204": { + "description": "No content" + }, + "401": { + "$ref": "#/components/responses/AuthenticationException" + } + } + } + }, + "/investments": { + "get": { + "operationId": "investment.index", + "summary": "List the authenticated user's investments (paginated)", + "tags": [ + "Investment" + ], + "parameters": [ + { + "name": "per_page", + "in": "query", + "schema": { + "type": "integer", + "default": 15 + } + } + ], + "responses": { + "200": { + "description": "Array of `InvestmentResource`", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/InvestmentResource" + } + } + }, + "required": [ + "data" + ] + } + } + } + }, + "401": { + "$ref": "#/components/responses/AuthenticationException" + } + } + }, + "post": { + "operationId": "investment.store", + "summary": "Create an investment owned by the authenticated user", + "tags": [ + "Investment" + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StoreInvestmentRequest" + } + } + } + }, + "responses": { + "201": { + "description": "`InvestmentResource`", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/InvestmentResource" + } + }, + "required": [ + "data" + ] + } + } + } + }, + "401": { + "$ref": "#/components/responses/AuthenticationException" + }, + "422": { + "$ref": "#/components/responses/ValidationException" + } + } + } + }, + "/investments/{investment}": { + "get": { + "operationId": "investment.show", + "summary": "Show a single investment with its expected balance and gains", + "tags": [ + "Investment" + ], + "parameters": [ + { + "name": "investment", + "in": "path", + "required": true, + "description": "The investment ID", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "description": "`InvestmentResource`", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/InvestmentResource" + } + }, + "required": [ + "data" + ] + } + } + } + }, + "403": { + "$ref": "#/components/responses/AuthorizationException" + }, + "404": { + "$ref": "#/components/responses/ModelNotFoundException" + }, + "401": { + "$ref": "#/components/responses/AuthenticationException" + } + } + } + }, + "/investments/{investment}/withdrawal-preview": { + "get": { + "operationId": "investment.withdrawalPreview", + "summary": "Preview the taxed net amount for a hypothetical withdrawal date", + "tags": [ + "Investment" + ], + "parameters": [ + { + "name": "investment", + "in": "path", + "required": true, + "description": "The investment ID", + "schema": { + "type": "integer" + } + }, + { + "name": "date", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "date": { + "type": "string" + }, + "gross": { + "type": "string" + }, + "gains": { + "type": "string" + }, + "tax_rate": { + "type": "string" + }, + "tax": { + "type": "string" + }, + "net": { + "type": "string" + } + }, + "required": [ + "date", + "gross", + "gains", + "tax_rate", + "tax", + "net" + ] + } + }, + "required": [ + "data" + ] + } + } + } + }, + "404": { + "$ref": "#/components/responses/ModelNotFoundException" + }, + "401": { + "$ref": "#/components/responses/AuthenticationException" + }, + "422": { + "$ref": "#/components/responses/ValidationException" + }, + "403": { + "$ref": "#/components/responses/AuthorizationException" + } + } + } + }, + "/investments/{investment}/withdraw": { + "post": { + "operationId": "investment.withdraw", + "summary": "Fully withdraw an investment and return the settled figures", + "tags": [ + "Investment" + ], + "parameters": [ + { + "name": "investment", + "in": "path", + "required": true, + "description": "The investment ID", + "schema": { + "type": "integer" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WithdrawInvestmentRequest" + } + } + } + }, + "responses": { + "200": { + "description": "`InvestmentResource`", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/InvestmentResource" + } + }, + "required": [ + "data" + ] + } + } + } + }, + "404": { + "$ref": "#/components/responses/ModelNotFoundException" + }, + "401": { + "$ref": "#/components/responses/AuthenticationException" + }, + "422": { + "$ref": "#/components/responses/ValidationException" + }, + "403": { + "$ref": "#/components/responses/AuthorizationException" + } + } + } + } + }, + "components": { + "securitySchemes": { + "http": { + "type": "http", + "scheme": "bearer" + } + }, + "schemas": { + "InvestmentResource": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "owner": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ] + }, + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "status": { + "type": "string" + }, + "invested_at": { + "type": "string" + }, + "reference_date": { + "type": "string" + }, + "elapsed_months": { + "type": "string" + }, + "expected_balance": { + "type": "string" + }, + "gains": { + "type": "string" + }, + "withdrawal": { + "type": "null" + } + }, + "required": [ + "id", + "owner", + "amount", + "currency", + "status", + "invested_at", + "reference_date", + "elapsed_months", + "expected_balance", + "gains", + "withdrawal" + ], + "title": "InvestmentResource" + }, + "LoginRequest": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email" + }, + "password": { + "type": "string" + }, + "device_name": { + "type": "string", + "maxLength": 255 + } + }, + "required": [ + "email", + "password" + ], + "title": "LoginRequest" + }, + "RegisterRequest": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255 + }, + "email": { + "type": "string", + "format": "email", + "maxLength": 255 + }, + "password": { + "type": "string" + }, + "password_confirmation": { + "type": "string" + } + }, + "required": [ + "name", + "email", + "password", + "password_confirmation" + ], + "title": "RegisterRequest" + }, + "StoreInvestmentRequest": { + "type": "object", + "properties": { + "amount": { + "type": "number", + "description": "Amount in the major unit (e.g. \"1000.00\"); positive, up to 2 decimals." + }, + "invested_at": { + "type": "string", + "format": "date-time", + "description": "Creation date can be today or in the past, never the future." + } + }, + "required": [ + "amount", + "invested_at" + ], + "title": "StoreInvestmentRequest" + }, + "UserResource": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "email" + ], + "title": "UserResource" + }, + "WithdrawInvestmentRequest": { + "type": "object", + "properties": { + "withdrawal_date": { + "type": "string", + "format": "date-time", + "description": "Withdrawal date: today or past, never before the investment's creation." + } + }, + "required": [ + "withdrawal_date" + ], + "title": "WithdrawInvestmentRequest" + } + }, + "responses": { + "ValidationException": { + "description": "Validation error", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "Errors overview." + }, + "errors": { + "type": "object", + "description": "A detailed description of each field that failed validation.", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "required": [ + "message", + "errors" + ] + } + } + } + }, + "AuthenticationException": { + "description": "Unauthenticated", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "Error overview." + } + }, + "required": [ + "message" + ] + } + } + } + }, + "AuthorizationException": { + "description": "Authorization error", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "Error overview." + } + }, + "required": [ + "message" + ] + } + } + } + }, + "ModelNotFoundException": { + "description": "Not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "message": { + "type": "string", + "description": "Error overview." + } + }, + "required": [ + "message" + ] + } + } + } + } + } + } +} \ No newline at end of file From 22deb0501a58dffaed77d5b217de6e465d76c57c Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 21:19:27 -0300 Subject: [PATCH 14/36] chore(web): configure Tailwind, aliases, ESLint, Prettier and Vitest Tailwind v4 (Vite plugin) with light/dark tokens, '@' path alias, ESLint (vue-ts) + Prettier, Vitest, and the supporting npm scripts. Removes the Vite starter cruft. --- web/.prettierrc.json | 6 + web/eslint.config.ts | 17 + web/package-lock.json | 4114 +++++++++++++++++++++++++++++ web/package.json | 23 +- web/src/assets/hero.png | Bin 13057 -> 0 bytes web/src/assets/styles/main.css | 53 + web/src/assets/vite.svg | 1 - web/src/assets/vue.svg | 1 - web/src/components/HelloWorld.vue | 95 - web/src/style.css | 296 --- web/tsconfig.app.json | 3 + web/vite.config.ts | 19 +- 12 files changed, 4231 insertions(+), 397 deletions(-) create mode 100644 web/.prettierrc.json create mode 100644 web/eslint.config.ts create mode 100644 web/package-lock.json delete mode 100644 web/src/assets/hero.png create mode 100644 web/src/assets/styles/main.css delete mode 100644 web/src/assets/vite.svg delete mode 100644 web/src/assets/vue.svg delete mode 100644 web/src/components/HelloWorld.vue delete mode 100644 web/src/style.css diff --git a/web/.prettierrc.json b/web/.prettierrc.json new file mode 100644 index 0000000..3ee2d11 --- /dev/null +++ b/web/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "semi": false, + "singleQuote": true, + "printWidth": 100, + "trailingComma": "all" +} diff --git a/web/eslint.config.ts b/web/eslint.config.ts new file mode 100644 index 0000000..e5e94cc --- /dev/null +++ b/web/eslint.config.ts @@ -0,0 +1,17 @@ +import pluginVue from 'eslint-plugin-vue' +import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript' +import skipFormatting from '@vue/eslint-config-prettier/skip-formatting' + +export default defineConfigWithVueTs( + { + name: 'app/files-to-lint', + files: ['**/*.{ts,mts,tsx,vue}'], + }, + { + name: 'app/files-to-ignore', + ignores: ['**/dist/**', '**/node_modules/**'], + }, + pluginVue.configs['flat/essential'], + vueTsConfigs.recommended, + skipFormatting, +) diff --git a/web/package-lock.json b/web/package-lock.json new file mode 100644 index 0000000..9ac65e2 --- /dev/null +++ b/web/package-lock.json @@ -0,0 +1,4114 @@ +{ + "name": "web", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "web", + "version": "0.0.0", + "dependencies": { + "@tanstack/vue-query": "^5.101.4", + "@vueuse/core": "^14.4.0", + "dayjs": "^1.11.21", + "lucide-vue-next": "^1.0.0", + "pinia": "^4.0.2", + "vue": "^3.5.40", + "vue-router": "^4.6.4", + "vue-sonner": "^2.0.9" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.3.3", + "@types/node": "^24.13.3", + "@vitejs/plugin-vue": "^6.0.8", + "@vue/eslint-config-prettier": "^10.2.0", + "@vue/eslint-config-typescript": "^14.9.0", + "@vue/tsconfig": "^0.9.1", + "eslint": "^10.8.1", + "eslint-plugin-vue": "^10.10.0", + "prettier": "^3.9.6", + "tailwindcss": "^4.3.3", + "typescript": "~6.0.2", + "vite": "^8.2.0", + "vitest": "^4.1.10", + "vue-tsc": "^3.3.8" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.7.0.tgz", + "integrity": "sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.143.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.143.0.tgz", + "integrity": "sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@pkgr/core": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz", + "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.3.tgz", + "integrity": "sha512-zrJtHDcaZJ1Fp7xf4hNl+7seH9Cn/N5TwLYkhgXREtBwAd/jaqW3uqeHxpDugJLVICWg4eW44kOQEGJ1r6jCGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.3.tgz", + "integrity": "sha512-ieIiibVCp0tX7TLu2cafoNPv8wJyYi01ekXpbf8q2j7F4rGAhhXb/eQh7ge9DRBY78GwmRQtvjZDux7EDbA8kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.3.tgz", + "integrity": "sha512-Zh9tCon19eDXJoihx0rqKhMUlMYqzwj3aPsSuHmI4RWZh62dWUL+DJN4C5YQya5TcQBJU/Fe8+rY0jhXTQITqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.3.tgz", + "integrity": "sha512-nGbJWewA1wrXXZiQhjAT5rhibGfns5ZNkDVqxsO6zJ3f3YvpoDNNmGMSbbhLuXKjNScaBJVOAboztAWVespQMg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.3.tgz", + "integrity": "sha512-QNniJr5Kml0kDEB98jiDOJjXNroxIIi0IXIbdYzY26Xt1pVbeP62+KnoIZLwirOymX/0jDk/2gI/bNUv7A7OIw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.3.tgz", + "integrity": "sha512-TkqEAcmmvH3I/q4114NB4RVt6241Dao48pF45uLcFGrwAaIn0iITgTAKP/dLjbN0R4buJjGb91+UHSoFmpgIWw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.3.tgz", + "integrity": "sha512-NHqjnxpsndf4MPymxteFAWHHfkTL8HjWh1KB7z23ofZ6QO2euONuxDXjat69dKZRALnGypg8k8SsK8vZJoXv1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.3.tgz", + "integrity": "sha512-6tbrbwfz5GB9DQ4Jwo6hy9v+vR31xZlvzZ6n5Xut6Hhx5PvrA9q/HsK8KMaYQp063iqZGXwNvZtYNLD7EM/x0w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.3.tgz", + "integrity": "sha512-oyuXxXmoZHjXC917IAPFAAv4wWAa0cM9afk8nx1+9/jNNOX1uPf8yDA6p7G0RypOfw/X0PQt5IfoquY1um+zSg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.3.tgz", + "integrity": "sha512-TytMwF2KVGqP2tgd0I1OY0PAv78dZRAYcF5ssDzjM34SUXCED3uXvSd5+lHoC0bTD6eEdFz7LdQNCO1y0oVk9w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.3.tgz", + "integrity": "sha512-/E9m3qstrJFVPoULV25mVQblSNExY2+kBsYe4sy0Tn0yOOgJ8wZbZt3KnRbF/XeU2Gl1STKUQnDNTqhIE5MD4A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.3.tgz", + "integrity": "sha512-Kr0OcsoQI816i6HOl3vFHpd1K0eZyh76zgfj4c1nTyaTsd5r2Mj1lwM4R90y/qaCfmTn9eHy0SKwi98eitRxug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.3.tgz", + "integrity": "sha512-hOtMwTqnME+/gJcH/PCZ0wn0zPUjiWOgkHpxbSJpfGKMezHltx1S7/k1SitzVa7Ww2cqrDDaFbZEhcJZO8o+Jw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.3.tgz", + "integrity": "sha512-ekcqMMkI2PlhYnfzQnB/cEdYUVVJViWvoUyLrbzgDoi3Snfc1mVBwdnc306ufA5ejy8JSPjT2RlW1nQSjW7efg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", + "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.24.1", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tailwindcss/node/node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "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/@tailwindcss/node/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" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@tailwindcss/node/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" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@tailwindcss/node/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" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@tailwindcss/node/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" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@tailwindcss/node/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" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@tailwindcss/node/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" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@tailwindcss/node/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" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@tailwindcss/node/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" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@tailwindcss/node/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" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@tailwindcss/node/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" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@tailwindcss/node/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" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz", + "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-x64": "4.3.3", + "@tailwindcss/oxide-freebsd-x64": "4.3.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-x64-musl": "4.3.3", + "@tailwindcss/oxide-wasm32-wasi": "4.3.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz", + "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz", + "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz", + "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz", + "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz", + "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz", + "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz", + "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz", + "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz", + "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz", + "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", + "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz", + "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.3.tgz", + "integrity": "sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.3.3", + "@tailwindcss/oxide": "4.3.3", + "tailwindcss": "4.3.3" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tanstack/match-sorter-utils": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.19.4.tgz", + "integrity": "sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==", + "license": "MIT", + "dependencies": { + "remove-accents": "0.5.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.101.4", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.101.4.tgz", + "integrity": "sha512-gNwcvOJcRbLWPOLG/2OBm+zM+Yv+MKsXKEOWC57USuZDEsI71hEErQsiEGx5wX9rzWWkfwM0fVSPoiIFSsxfiw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/vue-query": { + "version": "5.101.4", + "resolved": "https://registry.npmjs.org/@tanstack/vue-query/-/vue-query-5.101.4.tgz", + "integrity": "sha512-UYjkUZhnWQIFGNb7SdgjCitAftNyYQfOIVUh6vBUQAG4SQKNMSBKeQERFDubpxLAMpIBJTaOrE8fM4c1kZcIGQ==", + "license": "MIT", + "dependencies": { + "@tanstack/match-sorter-utils": "^8.19.4", + "@tanstack/query-core": "5.101.4", + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@vue/composition-api": "^1.1.2", + "vue": "^2.6.0 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@tanstack/vue-query/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@tanstack/vue-query/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", + "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.66.0.tgz", + "integrity": "sha512-p088eaGrzYz1s+7cov0aMOCkNGTJlVxF4jgubf28c8L0Cv9Rloj8YBHnv4hXLq6IIEE1AsjNWavO+k+8kP2Y0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.66.0", + "@typescript-eslint/type-utils": "8.66.0", + "@typescript-eslint/utils": "8.66.0", + "@typescript-eslint/visitor-keys": "8.66.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.66.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.66.0.tgz", + "integrity": "sha512-X6ypGChaWYk6PBtUg2BwuTZEFFcHJAtGTVJ9/lCTOufhZ4i9fNolQNnktq+kkMCwMj7V8Svsq7+TxSDslmhE0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.66.0", + "@typescript-eslint/types": "8.66.0", + "@typescript-eslint/typescript-estree": "8.66.0", + "@typescript-eslint/visitor-keys": "8.66.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.66.0.tgz", + "integrity": "sha512-7MthGPTt4BP69lSryqpqq8HQqxuzynssckL/jyDyk3+TNMQ3y2jFWkptCrktWvBrP+EH787Nl5N5Qpw7WZg+5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.66.0", + "@typescript-eslint/types": "^8.66.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.66.0.tgz", + "integrity": "sha512-8TGcH25j9zqJ/IULB/ppyhRvxA8QYfFEZ7nfbg6/BN9spDgb8fPWQXlE5l8TWBL50EtUx007uZ1o9VOwrq2/9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.66.0", + "@typescript-eslint/visitor-keys": "8.66.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.66.0.tgz", + "integrity": "sha512-9D5gLYZG4rOjcoag8MQ/fWI8WqA9wcPDyOGyWtWFhvM1lHRbliqUSPIY5J3zqCU1tvSwzXxnnjhQhz5Ne7mJ4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.66.0.tgz", + "integrity": "sha512-LG2dWfjZQQp0ADtAu/EWJVayefGL2UEZ3CDeI44D9v3rXB/WYUqE/jpO28KrEKul5AySrmI+Zh1v6v+xW2U9+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.66.0", + "@typescript-eslint/typescript-estree": "8.66.0", + "@typescript-eslint/utils": "8.66.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.66.0.tgz", + "integrity": "sha512-H6gcYaSDOyvL3AD/jHUtUFo2jqGgn/F6nuyuZSu0QTesxL+cP4dQoIMrODRofuJC09g64+WgZ6tE19Y1N2YIFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.66.0.tgz", + "integrity": "sha512-8/x4INiiQb10jGgXYD7116/zQ+OL84ZIFn0za68wwFHCanT/VLbBEroWht8RV8fn0/ZCAoazHLQgwUC0UQcDfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.66.0", + "@typescript-eslint/tsconfig-utils": "8.66.0", + "@typescript-eslint/types": "8.66.0", + "@typescript-eslint/visitor-keys": "8.66.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.66.0.tgz", + "integrity": "sha512-jasearZPolBw5NJNYGMwxzHMF83niVWmMU1VdHzG1CyfI2VS7f7nZltnKtHcg20hW+7Uo5GfK4MeDPoU3qI8EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.66.0", + "@typescript-eslint/types": "8.66.0", + "@typescript-eslint/typescript-estree": "8.66.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.66.0.tgz", + "integrity": "sha512-dkKR8q+lKciskj1Y3vthHktl+3cMLWGyVUP23bRiPZ5O9BRT++4EqDDV+TVeIKBL1VXVEqrJlz8MYbcnvJcAlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.66.0", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.8.tgz", + "integrity": "sha512-0ZjgOg7oO6farnNGup7yvoM/YXZV84OZxHAwtflItNa/6zzQyVb5LNxyea3FEKEX2XlagIKzrlH7wwxkKgtiew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitest/expect": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.10.tgz", + "integrity": "sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.10", + "@vitest/utils": "4.1.10", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.10.tgz", + "integrity": "sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.10", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.10.tgz", + "integrity": "sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.10.tgz", + "integrity": "sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.10", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.10.tgz", + "integrity": "sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.10", + "@vitest/utils": "4.1.10", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.10.tgz", + "integrity": "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.10.tgz", + "integrity": "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.10", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz", + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.41.tgz", + "integrity": "sha512-q0Xtv/F9w2YO/7htQhtiL+Ev2WCJbe5N2hc+XfgyKkEKqWpSxknmT8QOuGdEKNdjPq0c3F7rNpFkTo3Kfrm7pg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@vue/shared": "3.5.41", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.41.tgz", + "integrity": "sha512-oKacVfNglLvGjnS6BXOlGL7EyG2h8X03pqXCjzotRZUaXGjbrTJUnVAQjrCqUnS+lyu31nwQjZY/d817GmCnfw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.41", + "@vue/shared": "3.5.41" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.41.tgz", + "integrity": "sha512-XJhip7R2wy6vX3knCxdZN4KracFaZUef58s1KYewqluedHIJaPIVfXoYT7MF1F8nCvv6k8bWWxDC8opMkg1VTQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@vue/compiler-core": "3.5.41", + "@vue/compiler-dom": "3.5.41", + "@vue/compiler-ssr": "3.5.41", + "@vue/shared": "3.5.41", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.19", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.41.tgz", + "integrity": "sha512-U3v5OejKEGqOI0Wy0+Sz7hGuIFZHA4LSXzrNM3IMIeDyJEBBfTpX26n3SDgToRpP2bLc9FfI2j/kSgcJ8Emq5A==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.41", + "@vue/shared": "3.5.41" + } + }, + "node_modules/@vue/devtools-api": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-8.2.1.tgz", + "integrity": "sha512-6u4vXBlIBAC1wMplIZgpyPn7uh/s4Bf6F5bMzvLv+EdJ0aHs/+4B7Ygv864EStQSjRbsRzTko/kUG1A1IejQ3A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/devtools-kit": "^8.2.1" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.2.1.tgz", + "integrity": "sha512-FIGIuq3AWReEpbAHY/cRGeHDfI0qOb8OCQ3YjbEAX04uaxIDbGc9rhkbVcG7rnfHPXE3RsU5KrWOu9V/okd8AQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/devtools-shared": "^8.2.1", + "birpc": "^2.6.1", + "hookable": "^5.5.3", + "perfect-debounce": "^2.0.0" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.2.1.tgz", + "integrity": "sha512-Fkac7lUdGReh6pVOi3AYPRGe82LQqRmAfThW7RRligOAP0ZA/Z1z9XLHDM9dv34pV2HRc79DK8uKPeG2fLnA/g==", + "license": "MIT", + "peer": true + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-10.2.0.tgz", + "integrity": "sha512-GL3YBLwv/+b86yHcNNfPJxOTtVFJ4Mbc9UU3zR+KVoG7SwGTjPT+32fXamscNumElhcpXW3mT0DgzS9w32S7Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-prettier": "^5.2.2" + }, + "peerDependencies": { + "eslint": ">= 8.21.0", + "prettier": ">= 3.0.0" + } + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "14.9.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-14.9.0.tgz", + "integrity": "sha512-E3j9hDlfVf10F30MRcLTPY2IIhWIx1nsvkVukk14kTcuA+oBVot9zsP1hzsO+PAMDxV3Fd9FimBJtUBNBL5KFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.60.0", + "fast-glob": "^3.3.3", + "typescript-eslint": "^8.60.0", + "vue-eslint-parser": "^10.4.0" + }, + "bin": { + "vue-eslint-config-typescript": "dist/bin.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.10.0 || ^10.0.0", + "eslint-plugin-vue": "^9.28.0 || ^10.0.0", + "typescript": ">=4.8.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.3.9.tgz", + "integrity": "sha512-in/68oAa4BCtVY6n/nkuhLIkV8DHYd2UivedJ6cMZ6UYtlq9jaoaSNUBHYCVO44z3nKg7MdE5OBoHKt5SxeBKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.2.1", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.4" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.41.tgz", + "integrity": "sha512-rznsqKM0np0x18EjzF8x88MpEhdNsffbvFbckLL5+oUKz1BxAImEmO7J1ArRYSyo6aQaVoBDp7jEkT91OOxydA==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.41" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.41.tgz", + "integrity": "sha512-Vcry58hiAKwGen9Z1jUZE0feFsNArPCMOImYI8el48A9Idf6DuQYD0U05zZIF2Iad1hGhPSvcbBbAOhNr55fhg==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.41", + "@vue/shared": "3.5.41" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.41.tgz", + "integrity": "sha512-3vVBahVBS9+U6cmXBLyb8nE6/yYo4J/CGI9eVFs3KiMc0YHuudwKyShTD65jtJy/L9PUUxNAFu4cj4LiJ0UFbw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.41", + "@vue/runtime-core": "3.5.41", + "@vue/shared": "3.5.41", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.41.tgz", + "integrity": "sha512-n6hx/pNFfbD6SuyeuMVkvqox8bwf/ET9JlA/kAz/imw8sw++wkqKe2mHX5KutjPpbKE4Z56yTHszoOjGMI9igQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.41", + "@vue/runtime-dom": "3.5.41", + "@vue/shared": "3.5.41" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.41.tgz", + "integrity": "sha512-IOnwSCma8j+9xJT6b8H0dEYidC80NsYmNMlZxRsukYcSoGaDBohog5hDxzeUXdFeGWFA++vWvxqOmrr96VlqMA==", + "license": "MIT" + }, + "node_modules/@vue/tsconfig": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.9.1.tgz", + "integrity": "sha512-buvjm+9NzLCJL29KY1j1991YYJ5e6275OiK+G4jtmfIb+z4POywbdm0wXusT9adVWqe0xqg70TbI7+mRx4uU9w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">= 5.8", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vueuse/core": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.4.0.tgz", + "integrity": "sha512-X4WHz1HlCzCBoYXesUkifzzWBAcZgXG8Fi5iNPQg/epdzOB3gu8Fawj3hvuwYR1nGcXGnvxwYYcUC/71++svtQ==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.4.0", + "@vueuse/shared": "14.4.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.4.0.tgz", + "integrity": "sha512-swx/255R6JyHZFJhx845iz5CRWDZdCfvkZOpACWc5+c5WHcG24mv8gUT1WIdFQaHt6dq79rvILd9QnCWiyVm9g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.4.0.tgz", + "integrity": "sha512-JRgY90Sz8DDtPMsaDflvPMp9xYk69JZAmbuDvAquUVXKr2gEjqtzGNTTthLfckH0BzBqvnu31gb4a8TGLRe79g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/acorn": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/alien-signals": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.2.1.tgz", + "integrity": "sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==", + "dev": true, + "license": "MIT" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "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==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.21", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz", + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.24.5", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", + "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", + "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.8.1.tgz", + "integrity": "sha512-wqA7W2jbsC/BnV9Iv1UZpKVFkO1AdNoSmYW8NWG4HNOBbkAMvIqDZ27pI2f07dqn583NcIC44ckjAcOXDL1QbQ==", + "dev": true, + "license": "MIT", + "workspaces": [ + "packages/*" + ], + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.7.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.2", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.6.tgz", + "integrity": "sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.13" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "10.10.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.10.0.tgz", + "integrity": "sha512-dL9x9rBHqqNcByWiLOHK6L0SB97V82/NC0cZRn9cXPjM7pCuWlpQQP9bFH4vjBv80ej1ZpzAkuD8zWH1o9bZbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^7.1.4", + "semver": "^7.8.5", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "@stylistic/eslint-plugin": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@typescript-eslint/parser": "^7.0.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "vue-eslint-parser": "^10.3.0" + }, + "peerDependenciesMeta": { + "@stylistic/eslint-plugin": { + "optional": true + }, + "@typescript-eslint/parser": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "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==", + "dev": true, + "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-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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==", + "dev": true, + "license": "ISC" + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT", + "peer": true + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "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.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "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.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "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.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "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.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "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.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lucide-vue-next": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lucide-vue-next/-/lucide-vue-next-1.0.0.tgz", + "integrity": "sha512-V6SPvx1IHTj/UY+FrIYWV5faISsPSb8BnWSFDxAtezWKvWc9ZZ40PDrdu1/Qb5vg4lHWr1hs1BAMGVGm6V1Xdg==", + "deprecated": "Package deprecated. Please use @lucide/vue instead.", + "license": "ISC", + "peerDependencies": { + "vue": ">=3.0.1" + } + }, + "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/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nostics": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/nostics/-/nostics-1.2.0.tgz", + "integrity": "sha512-FGqEfhQjrvo1lL8KFifdTQiNwwQHJxC1jtYE1Rc54qF/jxONUNL+kC9gS1krX8Q65PgrQ5fCqH/I4NhWBvdSqg==", + "license": "MIT" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/obug": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", + "license": "MIT", + "peer": true + }, + "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.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-4.0.2.tgz", + "integrity": "sha512-yKVVA7bSj5oRZFp/Ab9wLlmyb5gPUYEiIm4ryiWTe/xe7PtkRdMVOp1X1ggvq0c6Uj7Q0Du1HnV2mtAwM0Ks1g==", + "license": "MIT", + "dependencies": { + "nostics": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/devtools-api": "^8.1.5", + "typescript": ">=5.6.0", + "vue": "^3.5.11" + }, + "peerDependenciesMeta": { + "@vue/devtools-api": { + "optional": false + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.5.tgz", + "integrity": "sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", + "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/remove-accents": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", + "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==", + "license": "MIT" + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rolldown": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.3.tgz", + "integrity": "sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.143.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.2.3", + "@rolldown/binding-darwin-arm64": "1.2.3", + "@rolldown/binding-darwin-x64": "1.2.3", + "@rolldown/binding-freebsd-x64": "1.2.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.3", + "@rolldown/binding-linux-arm64-gnu": "1.2.3", + "@rolldown/binding-linux-arm64-musl": "1.2.3", + "@rolldown/binding-linux-ppc64-gnu": "1.2.3", + "@rolldown/binding-linux-s390x-gnu": "1.2.3", + "@rolldown/binding-linux-x64-gnu": "1.2.3", + "@rolldown/binding-linux-x64-musl": "1.2.3", + "@rolldown/binding-openharmony-arm64": "1.2.3", + "@rolldown/binding-win32-arm64-msvc": "1.2.3", + "@rolldown/binding-win32-x64-msvc": "1.2.3" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "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/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz", + "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==", + "dev": true, + "license": "MIT" + }, + "node_modules/synckit": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz", + "integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.3.6" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", + "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", + "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "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/tinyrainbow": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.1.tgz", + "integrity": "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.66.0.tgz", + "integrity": "sha512-QlEbBPz/RuJ1XUHj29nm3t0F/O/cSlEnntozqPOYHnnTGAXFamnMBu5i9Vn6vhUPHGAjR+Vl+5J8vPN/BMUrJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.66.0", + "@typescript-eslint/parser": "8.66.0", + "@typescript-eslint/typescript-estree": "8.66.0", + "@typescript-eslint/utils": "8.66.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.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==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.1.tgz", + "integrity": "sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.25", + "rolldown": "~1.2.1", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.4.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "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/vitest": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.10.tgz", + "integrity": "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.10", + "@vitest/mocker": "4.1.10", + "@vitest/pretty-format": "4.1.10", + "@vitest/runner": "4.1.10", + "@vitest/snapshot": "4.1.10", + "@vitest/spy": "4.1.10", + "@vitest/utils": "4.1.10", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.10", + "@vitest/browser-preview": "4.1.10", + "@vitest/browser-webdriverio": "4.1.10", + "@vitest/coverage-istanbul": "4.1.10", + "@vitest/coverage-v8": "4.1.10", + "@vitest/ui": "4.1.10", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.41.tgz", + "integrity": "sha512-2laE0p+aK+/AOPG/XL/WepOs/GlK755LJ1XECi9kDUrz1FKNw8rb2Xzlw9JS1rqEV55nb0ttsKxVlTCcd+R5cg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.41", + "@vue/compiler-sfc": "3.5.41", + "@vue/runtime-dom": "3.5.41", + "@vue/server-renderer": "3.5.41", + "@vue/shared": "3.5.41" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.4.1.tgz", + "integrity": "sha512-Gk6gRDj0n/fkRa3C3l0bBheoBckUq/Rs0F/TvMWIS6nzzx67amAViMe9CkNgsP2tXyQONvGiHQESHwFtZ3aYDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "eslint-scope": "^8.2.0 || ^9.0.0", + "eslint-visitor-keys": "^4.2.0 || ^5.0.0", + "espree": "^10.3.0 || ^11.0.0", + "esquery": "^1.6.0", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-router": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", + "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/vue-sonner": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/vue-sonner/-/vue-sonner-2.0.9.tgz", + "integrity": "sha512-i6BokNlNDL93fpzNxN/LZSn6D6MzlO+i3qXt6iVZne3x1k7R46d5HlFB4P8tYydhgqOrRbIZEsnRd3kG7qGXyw==", + "license": "MIT", + "peerDependencies": { + "@nuxt/kit": "^4.0.3", + "@nuxt/schema": "^4.0.3", + "nuxt": "^4.0.3" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "@nuxt/schema": { + "optional": true + }, + "nuxt": { + "optional": true + } + } + }, + "node_modules/vue-tsc": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.3.9.tgz", + "integrity": "sha512-TS3Y1ux/IRoE8OCP2PpACAeOseuIs0UvWrcr7u+w3PmfY+SlCfEf8zjrBgnQksHUgLpthi5vHlffcQTQTdPBZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.28", + "@vue/language-core": "3.3.9" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/web/package.json b/web/package.json index b3b748d..b619d26 100644 --- a/web/package.json +++ b/web/package.json @@ -6,17 +6,36 @@ "scripts": { "dev": "vite", "build": "vue-tsc -b && vite build", - "preview": "vite preview" + "preview": "vite preview", + "type-check": "vue-tsc --noEmit -p tsconfig.app.json", + "lint": "eslint .", + "format": "prettier --write src/", + "test": "vitest" }, "dependencies": { - "vue": "^3.5.40" + "@tanstack/vue-query": "^5.101.4", + "@vueuse/core": "^14.4.0", + "dayjs": "^1.11.21", + "lucide-vue-next": "^1.0.0", + "pinia": "^4.0.2", + "vue": "^3.5.40", + "vue-router": "^4.6.4", + "vue-sonner": "^2.0.9" }, "devDependencies": { + "@tailwindcss/vite": "^4.3.3", "@types/node": "^24.13.3", "@vitejs/plugin-vue": "^6.0.8", + "@vue/eslint-config-prettier": "^10.2.0", + "@vue/eslint-config-typescript": "^14.9.0", "@vue/tsconfig": "^0.9.1", + "eslint": "^10.8.1", + "eslint-plugin-vue": "^10.10.0", + "prettier": "^3.9.6", + "tailwindcss": "^4.3.3", "typescript": "~6.0.2", "vite": "^8.2.0", + "vitest": "^4.1.10", "vue-tsc": "^3.3.8" } } diff --git a/web/src/assets/hero.png b/web/src/assets/hero.png deleted file mode 100644 index 02251f4b956c55af2d76fd0788124d7eee2b45eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13057 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 P00000NkvXXu0mjft=yBf diff --git a/web/src/assets/styles/main.css b/web/src/assets/styles/main.css new file mode 100644 index 0000000..e732cbf --- /dev/null +++ b/web/src/assets/styles/main.css @@ -0,0 +1,53 @@ +@import 'tailwindcss'; + +/* Class-based dark mode: `dark:` variants apply under a `.dark` ancestor. */ +@custom-variant dark (&:where(.dark, .dark *)); + +@theme { + --font-sans: 'Inter', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif; +} + +html { + color-scheme: light dark; +} + +body { + @apply min-h-screen bg-slate-50 font-sans text-slate-800 antialiased dark:bg-slate-950 dark:text-slate-100; +} + +@layer components { + .btn-primary { + @apply inline-flex items-center justify-center gap-2 rounded-lg bg-indigo-600 px-4 py-2 text-sm font-medium text-white transition hover:bg-indigo-700 focus:ring-2 focus:ring-indigo-500/40 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50; + } + .btn-ghost { + @apply inline-flex items-center justify-center gap-2 rounded-lg border border-slate-200 px-4 py-2 text-sm font-medium transition hover:bg-slate-100 disabled:opacity-50 dark:border-slate-700 dark:hover:bg-slate-800; + } + .field-input { + @apply w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm outline-none transition focus:border-indigo-500 focus:ring-2 focus:ring-indigo-500/30 dark:border-slate-700 dark:bg-slate-900; + } + .field-label { + @apply mb-1 block text-sm font-medium text-slate-700 dark:text-slate-300; + } + .field-error { + @apply mt-1 text-xs text-red-600 dark:text-red-400; + } + .card { + @apply rounded-xl border border-slate-200 bg-white p-6 dark:border-slate-800 dark:bg-slate-900; + } +} + +/* Route transition */ +.fade-enter-active, +.fade-leave-active { + transition: + opacity 0.18s ease, + transform 0.18s ease; +} +.fade-enter-from { + opacity: 0; + transform: translateY(6px); +} +.fade-leave-to { + opacity: 0; + transform: translateY(-6px); +} diff --git a/web/src/assets/vite.svg b/web/src/assets/vite.svg deleted file mode 100644 index 5101b67..0000000 --- a/web/src/assets/vite.svg +++ /dev/null @@ -1 +0,0 @@ -Vite diff --git a/web/src/assets/vue.svg b/web/src/assets/vue.svg deleted file mode 100644 index 770e9d3..0000000 --- a/web/src/assets/vue.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/web/src/components/HelloWorld.vue b/web/src/components/HelloWorld.vue deleted file mode 100644 index c232865..0000000 --- a/web/src/components/HelloWorld.vue +++ /dev/null @@ -1,95 +0,0 @@ - - - diff --git a/web/src/style.css b/web/src/style.css deleted file mode 100644 index 527d4fb..0000000 --- a/web/src/style.css +++ /dev/null @@ -1,296 +0,0 @@ -:root { - --text: #6b6375; - --text-h: #08060d; - --bg: #fff; - --border: #e5e4e7; - --code-bg: #f4f3ec; - --accent: #aa3bff; - --accent-bg: rgba(170, 59, 255, 0.1); - --accent-border: rgba(170, 59, 255, 0.5); - --social-bg: rgba(244, 243, 236, 0.5); - --shadow: - rgba(0, 0, 0, 0.1) 0 10px 15px -3px, rgba(0, 0, 0, 0.05) 0 4px 6px -2px; - - --sans: system-ui, 'Segoe UI', Roboto, sans-serif; - --heading: system-ui, 'Segoe UI', Roboto, sans-serif; - --mono: ui-monospace, Consolas, monospace; - - font: 18px/145% var(--sans); - letter-spacing: 0.18px; - color-scheme: light dark; - color: var(--text); - background: var(--bg); - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - - @media (max-width: 1024px) { - font-size: 16px; - } -} - -@media (prefers-color-scheme: dark) { - :root { - --text: #9ca3af; - --text-h: #f3f4f6; - --bg: #16171d; - --border: #2e303a; - --code-bg: #1f2028; - --accent: #c084fc; - --accent-bg: rgba(192, 132, 252, 0.15); - --accent-border: rgba(192, 132, 252, 0.5); - --social-bg: rgba(47, 48, 58, 0.5); - --shadow: - rgba(0, 0, 0, 0.4) 0 10px 15px -3px, rgba(0, 0, 0, 0.25) 0 4px 6px -2px; - } - - #social .button-icon { - filter: invert(1) brightness(2); - } -} - -body { - margin: 0; -} - -h1, -h2 { - font-family: var(--heading); - font-weight: 500; - color: var(--text-h); -} - -h1 { - font-size: 56px; - letter-spacing: -1.68px; - margin: 32px 0; - @media (max-width: 1024px) { - font-size: 36px; - margin: 20px 0; - } -} -h2 { - font-size: 24px; - line-height: 118%; - letter-spacing: -0.24px; - margin: 0 0 8px; - @media (max-width: 1024px) { - font-size: 20px; - } -} -p { - margin: 0; -} - -code, -.counter { - font-family: var(--mono); - display: inline-flex; - border-radius: 4px; - color: var(--text-h); -} - -code { - font-size: 15px; - line-height: 135%; - padding: 4px 8px; - background: var(--code-bg); -} - -.counter { - font-size: 16px; - padding: 5px 10px; - border-radius: 5px; - color: var(--accent); - background: var(--accent-bg); - border: 2px solid transparent; - transition: border-color 0.3s; - margin-bottom: 24px; - - &:hover { - border-color: var(--accent-border); - } - &:focus-visible { - outline: 2px solid var(--accent); - outline-offset: 2px; - } -} - -.hero { - position: relative; - - .base, - .framework, - .vite { - inset-inline: 0; - margin: 0 auto; - } - - .base { - width: 170px; - position: relative; - z-index: 0; - } - - .framework, - .vite { - position: absolute; - } - - .framework { - z-index: 1; - top: 34px; - height: 28px; - transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) - scale(1.4); - } - - .vite { - z-index: 0; - top: 107px; - height: 26px; - width: auto; - transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) - scale(0.8); - } -} - -#app { - width: 1126px; - max-width: 100%; - margin: 0 auto; - text-align: center; - border-inline: 1px solid var(--border); - min-height: 100svh; - display: flex; - flex-direction: column; - box-sizing: border-box; -} - -#center { - display: flex; - flex-direction: column; - gap: 25px; - place-content: center; - place-items: center; - flex-grow: 1; - - @media (max-width: 1024px) { - padding: 32px 20px 24px; - gap: 18px; - } -} - -#next-steps { - display: flex; - border-top: 1px solid var(--border); - text-align: left; - - & > div { - flex: 1 1 0; - padding: 32px; - @media (max-width: 1024px) { - padding: 24px 20px; - } - } - - .icon { - margin-bottom: 16px; - width: 22px; - height: 22px; - } - - @media (max-width: 1024px) { - flex-direction: column; - text-align: center; - } -} - -#docs { - border-right: 1px solid var(--border); - - @media (max-width: 1024px) { - border-right: none; - border-bottom: 1px solid var(--border); - } -} - -#next-steps ul { - list-style: none; - padding: 0; - display: flex; - gap: 8px; - margin: 32px 0 0; - - .logo { - height: 18px; - } - - a { - color: var(--text-h); - font-size: 16px; - border-radius: 6px; - background: var(--social-bg); - display: flex; - padding: 6px 12px; - align-items: center; - gap: 8px; - text-decoration: none; - transition: box-shadow 0.3s; - - &:hover { - box-shadow: var(--shadow); - } - .button-icon { - height: 18px; - width: 18px; - } - } - - @media (max-width: 1024px) { - margin-top: 20px; - flex-wrap: wrap; - justify-content: center; - - li { - flex: 1 1 calc(50% - 8px); - } - - a { - width: 100%; - justify-content: center; - box-sizing: border-box; - } - } -} - -#spacer { - height: 88px; - border-top: 1px solid var(--border); - @media (max-width: 1024px) { - height: 48px; - } -} - -.ticks { - position: relative; - width: 100%; - - &::before, - &::after { - content: ''; - position: absolute; - top: -4.5px; - border: 5px solid transparent; - } - - &::before { - left: 0; - border-left-color: var(--border); - } - &::after { - right: 0; - border-right-color: var(--border); - } -} diff --git a/web/tsconfig.app.json b/web/tsconfig.app.json index d72aa75..60ab997 100644 --- a/web/tsconfig.app.json +++ b/web/tsconfig.app.json @@ -4,6 +4,9 @@ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", "types": ["vite/client"], "allowArbitraryExtensions": true, + "paths": { + "@/*": ["./src/*"] + }, /* Linting */ "noUnusedLocals": true, diff --git a/web/vite.config.ts b/web/vite.config.ts index bbcf80c..d353a2f 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -1,7 +1,22 @@ -import { defineConfig } from 'vite' +import { fileURLToPath, URL } from 'node:url' +import { defineConfig } from 'vitest/config' import vue from '@vitejs/plugin-vue' +import tailwindcss from '@tailwindcss/vite' // https://vite.dev/config/ export default defineConfig({ - plugins: [vue()], + plugins: [vue(), tailwindcss()], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + }, + }, + server: { + host: true, + port: 5173, + }, + test: { + environment: 'node', + include: ['src/**/*.spec.ts'], + }, }) From a81a57770151c09c062c43d88046c7788282205a Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 21:58:12 -0300 Subject: [PATCH 15/36] feat(web): app shell, routing, auth and typed API client Fetch-based API client with Bearer injection and 401 handling, Pinia auth/ui stores (token persisted, class-based dark mode), Vue Router with auth guards, the app shell/header, currency & date composables, and login/register pages. --- web/src/App.vue | 23 ++++++- web/src/components/layout/AppHeader.vue | 56 ++++++++++++++++ web/src/composables/useCurrency.ts | 9 +++ web/src/composables/useDate.ts | 21 ++++++ web/src/composables/useToast.ts | 9 +++ web/src/main.ts | 24 ++++++- web/src/pages/auth/LoginPage.vue | 80 +++++++++++++++++++++++ web/src/pages/auth/RegisterPage.vue | 86 +++++++++++++++++++++++++ web/src/router/index.ts | 64 ++++++++++++++++++ web/src/services/apiClient.ts | 60 +++++++++++++++++ web/src/services/auth.api.ts | 14 ++++ web/src/stores/auth.store.ts | 60 +++++++++++++++++ web/src/stores/ui.store.ts | 27 ++++++++ web/src/types/api.ts | 20 ++++++ web/src/types/auth.ts | 22 +++++++ web/src/types/investment.ts | 41 ++++++++++++ web/src/types/pagination.ts | 22 +++++++ 17 files changed, 634 insertions(+), 4 deletions(-) create mode 100644 web/src/components/layout/AppHeader.vue create mode 100644 web/src/composables/useCurrency.ts create mode 100644 web/src/composables/useDate.ts create mode 100644 web/src/composables/useToast.ts create mode 100644 web/src/pages/auth/LoginPage.vue create mode 100644 web/src/pages/auth/RegisterPage.vue create mode 100644 web/src/router/index.ts create mode 100644 web/src/services/apiClient.ts create mode 100644 web/src/services/auth.api.ts create mode 100644 web/src/stores/auth.store.ts create mode 100644 web/src/stores/ui.store.ts create mode 100644 web/src/types/api.ts create mode 100644 web/src/types/auth.ts create mode 100644 web/src/types/investment.ts create mode 100644 web/src/types/pagination.ts diff --git a/web/src/App.vue b/web/src/App.vue index 388b05e..d5c12f4 100644 --- a/web/src/App.vue +++ b/web/src/App.vue @@ -1,7 +1,26 @@ diff --git a/web/src/components/layout/AppHeader.vue b/web/src/components/layout/AppHeader.vue new file mode 100644 index 0000000..ada33bc --- /dev/null +++ b/web/src/components/layout/AppHeader.vue @@ -0,0 +1,56 @@ + + + diff --git a/web/src/composables/useCurrency.ts b/web/src/composables/useCurrency.ts new file mode 100644 index 0000000..90174c2 --- /dev/null +++ b/web/src/composables/useCurrency.ts @@ -0,0 +1,9 @@ +const brl = new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }) + +export function useCurrency() { + function formatBRL(value: string | number): string { + return brl.format(typeof value === 'string' ? Number(value) : value) + } + + return { formatBRL } +} diff --git a/web/src/composables/useDate.ts b/web/src/composables/useDate.ts new file mode 100644 index 0000000..1c89a0c --- /dev/null +++ b/web/src/composables/useDate.ts @@ -0,0 +1,21 @@ +import dayjs from 'dayjs' + +export function useDate() { + function formatDate(value: string | Date, format = 'DD/MM/YYYY'): string { + return dayjs(value).format(format) + } + + function today(): string { + return dayjs().format('YYYY-MM-DD') + } + + function isFuture(value: string): boolean { + return dayjs(value).isAfter(dayjs(), 'day') + } + + function isBefore(value: string, other: string): boolean { + return dayjs(value).isBefore(dayjs(other), 'day') + } + + return { formatDate, today, isFuture, isBefore } +} diff --git a/web/src/composables/useToast.ts b/web/src/composables/useToast.ts new file mode 100644 index 0000000..1a4b517 --- /dev/null +++ b/web/src/composables/useToast.ts @@ -0,0 +1,9 @@ +import { toast } from 'vue-sonner' + +export function useToast() { + return { + success: (message: string) => toast.success(message), + error: (message: string) => toast.error(message), + info: (message: string) => toast(message), + } +} diff --git a/web/src/main.ts b/web/src/main.ts index 2425c0f..e505cb6 100644 --- a/web/src/main.ts +++ b/web/src/main.ts @@ -1,5 +1,25 @@ import { createApp } from 'vue' -import './style.css' +import { createPinia, setActivePinia } from 'pinia' +import { VueQueryPlugin } from '@tanstack/vue-query' import App from './App.vue' +import router from './router' +import { onUnauthorized } from './services/apiClient' +import { useAuthStore } from './stores/auth.store' +import 'vue-sonner/style.css' +import './assets/styles/main.css' -createApp(App).mount('#app') +const pinia = createPinia() +setActivePinia(pinia) + +// Instantiating the store wires the token provider into the API client and +// hydrates the session from localStorage. +const auth = useAuthStore() + +onUnauthorized(() => { + auth.clear() + if (router.currentRoute.value.name !== 'login') { + router.push({ name: 'login', query: { redirect: router.currentRoute.value.fullPath } }) + } +}) + +createApp(App).use(pinia).use(router).use(VueQueryPlugin).mount('#app') diff --git a/web/src/pages/auth/LoginPage.vue b/web/src/pages/auth/LoginPage.vue new file mode 100644 index 0000000..de23da1 --- /dev/null +++ b/web/src/pages/auth/LoginPage.vue @@ -0,0 +1,80 @@ + + + diff --git a/web/src/pages/auth/RegisterPage.vue b/web/src/pages/auth/RegisterPage.vue new file mode 100644 index 0000000..d55c828 --- /dev/null +++ b/web/src/pages/auth/RegisterPage.vue @@ -0,0 +1,86 @@ + + + diff --git a/web/src/router/index.ts b/web/src/router/index.ts new file mode 100644 index 0000000..ceab6b8 --- /dev/null +++ b/web/src/router/index.ts @@ -0,0 +1,64 @@ +import { createRouter, createWebHistory, type RouteRecordRaw } from 'vue-router' +import { useAuthStore } from '@/stores/auth.store' + +const routes: RouteRecordRaw[] = [ + { + path: '/login', + name: 'login', + component: () => import('@/pages/auth/LoginPage.vue'), + meta: { guestOnly: true }, + }, + { + path: '/register', + name: 'register', + component: () => import('@/pages/auth/RegisterPage.vue'), + meta: { guestOnly: true }, + }, + { path: '/', redirect: { name: 'investments' } }, + { + path: '/investments', + name: 'investments', + component: () => import('@/pages/InvestmentListPage.vue'), + meta: { requiresAuth: true }, + }, + { + path: '/investments/new', + name: 'investments.new', + component: () => import('@/pages/CreateInvestmentPage.vue'), + meta: { requiresAuth: true }, + }, + { + path: '/investments/:id', + name: 'investments.show', + component: () => import('@/pages/InvestmentDetailPage.vue'), + meta: { requiresAuth: true }, + props: true, + }, + { + path: '/:pathMatch(.*)*', + name: 'notfound', + component: () => import('@/pages/NotFoundPage.vue'), + }, +] + +const router = createRouter({ + history: createWebHistory(), + routes, + scrollBehavior: () => ({ top: 0 }), +}) + +router.beforeEach((to) => { + const auth = useAuthStore() + + if (to.meta.requiresAuth && !auth.isAuthenticated) { + return { name: 'login', query: { redirect: to.fullPath } } + } + + if (to.meta.guestOnly && auth.isAuthenticated) { + return { name: 'investments' } + } + + return true +}) + +export default router diff --git a/web/src/services/apiClient.ts b/web/src/services/apiClient.ts new file mode 100644 index 0000000..d7ed2fb --- /dev/null +++ b/web/src/services/apiClient.ts @@ -0,0 +1,60 @@ +import { ApiError, type ApiErrorBody } from '@/types/api' + +const BASE_URL = (import.meta.env.VITE_API_URL ?? 'http://localhost:8080/api').replace(/\/$/, '') + +interface RequestOptions { + method?: string + body?: unknown + params?: Record +} + +// The token provider and 401 handler are injected by the auth layer, so this +// module stays free of store/router imports (no circular dependencies). +let tokenProvider: () => string | null = () => null +let unauthorizedHandler: (() => void) | null = null + +export function setTokenProvider(fn: () => string | null): void { + tokenProvider = fn +} + +export function onUnauthorized(handler: () => void): void { + unauthorizedHandler = handler +} + +function buildQuery(params?: RequestOptions['params']): string { + if (!params) return '' + const entries = Object.entries(params).filter(([, v]) => v !== undefined && v !== null) + if (entries.length === 0) return '' + return '?' + new URLSearchParams(entries.map(([k, v]) => [k, String(v)])).toString() +} + +export async function apiFetch(path: string, options: RequestOptions = {}): Promise { + const { method = 'GET', body, params } = options + + const headers: Record = { Accept: 'application/json' } + const token = tokenProvider() + if (token) headers.Authorization = `Bearer ${token}` + if (body !== undefined) headers['Content-Type'] = 'application/json' + + const response = await fetch(BASE_URL + path + buildQuery(params), { + method, + headers, + body: body !== undefined ? JSON.stringify(body) : undefined, + }) + + if (response.status === 401) { + unauthorizedHandler?.() + } + + if (response.status === 204) { + return undefined as T + } + + const data = (await response.json().catch(() => ({}))) as unknown + + if (!response.ok) { + throw new ApiError(response.status, data as ApiErrorBody) + } + + return data as T +} diff --git a/web/src/services/auth.api.ts b/web/src/services/auth.api.ts new file mode 100644 index 0000000..3a6dba4 --- /dev/null +++ b/web/src/services/auth.api.ts @@ -0,0 +1,14 @@ +import type { AuthResponse, LoginInput, RegisterInput, User } from '@/types/auth' +import { apiFetch } from './apiClient' + +export const authApi = { + register: (payload: RegisterInput) => + apiFetch('/register', { method: 'POST', body: payload }), + + login: (payload: LoginInput) => + apiFetch('/login', { method: 'POST', body: payload }), + + logout: () => apiFetch('/logout', { method: 'POST' }), + + me: () => apiFetch<{ data: User }>('/user'), +} diff --git a/web/src/stores/auth.store.ts b/web/src/stores/auth.store.ts new file mode 100644 index 0000000..4f6be10 --- /dev/null +++ b/web/src/stores/auth.store.ts @@ -0,0 +1,60 @@ +import { computed, ref } from 'vue' +import { defineStore } from 'pinia' +import type { LoginInput, RegisterInput, User } from '@/types/auth' +import { authApi } from '@/services/auth.api' +import { setTokenProvider } from '@/services/apiClient' + +const TOKEN_KEY = 'investments.token' +const USER_KEY = 'investments.user' + +function readUser(): User | null { + try { + return JSON.parse(localStorage.getItem(USER_KEY) ?? 'null') as User | null + } catch { + return null + } +} + +export const useAuthStore = defineStore('auth', () => { + const token = ref(localStorage.getItem(TOKEN_KEY)) + const user = ref(readUser()) + const isAuthenticated = computed(() => token.value !== null) + + // The API client reads the current token through this provider. + setTokenProvider(() => token.value) + + function setSession(newToken: string, newUser: User): void { + token.value = newToken + user.value = newUser + localStorage.setItem(TOKEN_KEY, newToken) + localStorage.setItem(USER_KEY, JSON.stringify(newUser)) + } + + function clear(): void { + token.value = null + user.value = null + localStorage.removeItem(TOKEN_KEY) + localStorage.removeItem(USER_KEY) + } + + async function login(payload: LoginInput): Promise { + const { token: t, user: u } = await authApi.login(payload) + setSession(t, u) + } + + async function register(payload: RegisterInput): Promise { + const { token: t, user: u } = await authApi.register(payload) + setSession(t, u) + } + + async function logout(): Promise { + try { + await authApi.logout() + } catch { + // Ignore network/401 errors — clear the local session regardless. + } + clear() + } + + return { token, user, isAuthenticated, setSession, clear, login, register, logout } +}) diff --git a/web/src/stores/ui.store.ts b/web/src/stores/ui.store.ts new file mode 100644 index 0000000..1f92020 --- /dev/null +++ b/web/src/stores/ui.store.ts @@ -0,0 +1,27 @@ +import { ref, watchEffect } from 'vue' +import { defineStore } from 'pinia' + +type Theme = 'light' | 'dark' + +const THEME_KEY = 'investments.theme' + +function initialTheme(): Theme { + const stored = localStorage.getItem(THEME_KEY) + if (stored === 'light' || stored === 'dark') return stored + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' +} + +export const useUiStore = defineStore('ui', () => { + const theme = ref(initialTheme()) + + watchEffect(() => { + document.documentElement.classList.toggle('dark', theme.value === 'dark') + localStorage.setItem(THEME_KEY, theme.value) + }) + + function toggleTheme(): void { + theme.value = theme.value === 'dark' ? 'light' : 'dark' + } + + return { theme, toggleTheme } +}) diff --git a/web/src/types/api.ts b/web/src/types/api.ts new file mode 100644 index 0000000..53addf6 --- /dev/null +++ b/web/src/types/api.ts @@ -0,0 +1,20 @@ +export interface ApiErrorBody { + message: string + errors?: Record +} + +export class ApiError extends Error { + readonly status: number + readonly body: ApiErrorBody + + constructor(status: number, body: ApiErrorBody) { + super(body?.message ?? 'Request failed') + this.name = 'ApiError' + this.status = status + this.body = body + } + + get validationErrors(): Record { + return this.body?.errors ?? {} + } +} diff --git a/web/src/types/auth.ts b/web/src/types/auth.ts new file mode 100644 index 0000000..efd1f1b --- /dev/null +++ b/web/src/types/auth.ts @@ -0,0 +1,22 @@ +export interface User { + id: number + name: string + email: string +} + +export interface AuthResponse { + user: User + token: string +} + +export interface LoginInput { + email: string + password: string +} + +export interface RegisterInput { + name: string + email: string + password: string + password_confirmation: string +} diff --git a/web/src/types/investment.ts b/web/src/types/investment.ts new file mode 100644 index 0000000..38e8a84 --- /dev/null +++ b/web/src/types/investment.ts @@ -0,0 +1,41 @@ +export type InvestmentStatus = 'active' | 'withdrawn' + +export interface InvestmentOwner { + id: number + name: string | null +} + +export interface Withdrawal { + date: string + tax_rate: string + tax: string + net_amount: string +} + +export interface Investment { + id: number + owner: InvestmentOwner + amount: string + currency: string + status: InvestmentStatus + invested_at: string + reference_date: string + elapsed_months: number + expected_balance: string + gains: string + withdrawal: Withdrawal | null +} + +export interface WithdrawalPreview { + date: string + gross: string + gains: string + tax_rate: string + tax: string + net: string +} + +export interface NewInvestmentInput { + amount: string + invested_at: string +} diff --git a/web/src/types/pagination.ts b/web/src/types/pagination.ts new file mode 100644 index 0000000..38234d1 --- /dev/null +++ b/web/src/types/pagination.ts @@ -0,0 +1,22 @@ +export interface PaginationLinks { + first: string | null + last: string | null + prev: string | null + next: string | null +} + +export interface PaginationMeta { + current_page: number + from: number | null + last_page: number + path: string + per_page: number + to: number | null + total: number +} + +export interface Paginated { + data: T[] + links: PaginationLinks + meta: PaginationMeta +} From 8f75275a3142182dff3c579702cd9588ae860406 Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 22:34:38 -0300 Subject: [PATCH 16/36] feat(web): investment list, detail, create and withdrawal TanStack Query hooks (paginated list with keepPreviousData, detail, debounced withdrawal preview, create/withdraw mutations); investment cards, status badges, paginator and a withdraw dialog with a live taxed-net preview; list/detail/create pages with loading, empty and error states. --- web/src/components/common/AppPaginator.vue | 42 ++++++ web/src/components/common/StatusBadge.vue | 22 ++++ .../components/investments/InvestmentCard.vue | 48 +++++++ .../components/investments/WithdrawDialog.vue | 124 ++++++++++++++++++ web/src/pages/CreateInvestmentPage.vue | 103 +++++++++++++++ web/src/pages/InvestmentDetailPage.vue | 121 +++++++++++++++++ web/src/pages/InvestmentListPage.vue | 80 +++++++++++ web/src/pages/NotFoundPage.vue | 13 ++ web/src/queries/useCreateInvestment.ts | 12 ++ web/src/queries/useInvestmentQuery.ts | 10 ++ web/src/queries/useInvestmentsQuery.ts | 11 ++ web/src/queries/useWithdrawInvestment.ts | 14 ++ web/src/queries/useWithdrawalPreview.ts | 12 ++ web/src/services/investments.api.ts | 26 ++++ 14 files changed, 638 insertions(+) create mode 100644 web/src/components/common/AppPaginator.vue create mode 100644 web/src/components/common/StatusBadge.vue create mode 100644 web/src/components/investments/InvestmentCard.vue create mode 100644 web/src/components/investments/WithdrawDialog.vue create mode 100644 web/src/pages/CreateInvestmentPage.vue create mode 100644 web/src/pages/InvestmentDetailPage.vue create mode 100644 web/src/pages/InvestmentListPage.vue create mode 100644 web/src/pages/NotFoundPage.vue create mode 100644 web/src/queries/useCreateInvestment.ts create mode 100644 web/src/queries/useInvestmentQuery.ts create mode 100644 web/src/queries/useInvestmentsQuery.ts create mode 100644 web/src/queries/useWithdrawInvestment.ts create mode 100644 web/src/queries/useWithdrawalPreview.ts create mode 100644 web/src/services/investments.api.ts diff --git a/web/src/components/common/AppPaginator.vue b/web/src/components/common/AppPaginator.vue new file mode 100644 index 0000000..7f1ea14 --- /dev/null +++ b/web/src/components/common/AppPaginator.vue @@ -0,0 +1,42 @@ + + + diff --git a/web/src/components/common/StatusBadge.vue b/web/src/components/common/StatusBadge.vue new file mode 100644 index 0000000..b3c2472 --- /dev/null +++ b/web/src/components/common/StatusBadge.vue @@ -0,0 +1,22 @@ + + + diff --git a/web/src/components/investments/InvestmentCard.vue b/web/src/components/investments/InvestmentCard.vue new file mode 100644 index 0000000..0a4f018 --- /dev/null +++ b/web/src/components/investments/InvestmentCard.vue @@ -0,0 +1,48 @@ + + + diff --git a/web/src/components/investments/WithdrawDialog.vue b/web/src/components/investments/WithdrawDialog.vue new file mode 100644 index 0000000..80df5ac --- /dev/null +++ b/web/src/components/investments/WithdrawDialog.vue @@ -0,0 +1,124 @@ + + + diff --git a/web/src/pages/CreateInvestmentPage.vue b/web/src/pages/CreateInvestmentPage.vue new file mode 100644 index 0000000..66a6236 --- /dev/null +++ b/web/src/pages/CreateInvestmentPage.vue @@ -0,0 +1,103 @@ + + + diff --git a/web/src/pages/InvestmentDetailPage.vue b/web/src/pages/InvestmentDetailPage.vue new file mode 100644 index 0000000..25c0cac --- /dev/null +++ b/web/src/pages/InvestmentDetailPage.vue @@ -0,0 +1,121 @@ + + + diff --git a/web/src/pages/InvestmentListPage.vue b/web/src/pages/InvestmentListPage.vue new file mode 100644 index 0000000..8d936d1 --- /dev/null +++ b/web/src/pages/InvestmentListPage.vue @@ -0,0 +1,80 @@ + + + diff --git a/web/src/pages/NotFoundPage.vue b/web/src/pages/NotFoundPage.vue new file mode 100644 index 0000000..1dbf262 --- /dev/null +++ b/web/src/pages/NotFoundPage.vue @@ -0,0 +1,13 @@ + + + diff --git a/web/src/queries/useCreateInvestment.ts b/web/src/queries/useCreateInvestment.ts new file mode 100644 index 0000000..82eb928 --- /dev/null +++ b/web/src/queries/useCreateInvestment.ts @@ -0,0 +1,12 @@ +import { useMutation, useQueryClient } from '@tanstack/vue-query' +import { investmentsApi } from '@/services/investments.api' +import type { NewInvestmentInput } from '@/types/investment' + +export function useCreateInvestment() { + const queryClient = useQueryClient() + + return useMutation({ + mutationFn: (payload: NewInvestmentInput) => investmentsApi.create(payload), + onSuccess: () => queryClient.invalidateQueries({ queryKey: ['investments'] }), + }) +} diff --git a/web/src/queries/useInvestmentQuery.ts b/web/src/queries/useInvestmentQuery.ts new file mode 100644 index 0000000..0d443e2 --- /dev/null +++ b/web/src/queries/useInvestmentQuery.ts @@ -0,0 +1,10 @@ +import type { Ref } from 'vue' +import { useQuery } from '@tanstack/vue-query' +import { investmentsApi } from '@/services/investments.api' + +export function useInvestmentQuery(id: Ref) { + return useQuery({ + queryKey: ['investment', id], + queryFn: () => investmentsApi.get(id.value), + }) +} diff --git a/web/src/queries/useInvestmentsQuery.ts b/web/src/queries/useInvestmentsQuery.ts new file mode 100644 index 0000000..aa1ede5 --- /dev/null +++ b/web/src/queries/useInvestmentsQuery.ts @@ -0,0 +1,11 @@ +import type { Ref } from 'vue' +import { keepPreviousData, useQuery } from '@tanstack/vue-query' +import { investmentsApi } from '@/services/investments.api' + +export function useInvestmentsQuery(page: Ref, perPage = 10) { + return useQuery({ + queryKey: ['investments', page], + queryFn: () => investmentsApi.list(page.value, perPage), + placeholderData: keepPreviousData, + }) +} diff --git a/web/src/queries/useWithdrawInvestment.ts b/web/src/queries/useWithdrawInvestment.ts new file mode 100644 index 0000000..61e6fb1 --- /dev/null +++ b/web/src/queries/useWithdrawInvestment.ts @@ -0,0 +1,14 @@ +import { useMutation, useQueryClient } from '@tanstack/vue-query' +import { investmentsApi } from '@/services/investments.api' + +export function useWithdrawInvestment(id: number) { + const queryClient = useQueryClient() + + return useMutation({ + mutationFn: (date: string) => investmentsApi.withdraw(id, date), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['investments'] }) + queryClient.invalidateQueries({ queryKey: ['investment'] }) + }, + }) +} diff --git a/web/src/queries/useWithdrawalPreview.ts b/web/src/queries/useWithdrawalPreview.ts new file mode 100644 index 0000000..587be8d --- /dev/null +++ b/web/src/queries/useWithdrawalPreview.ts @@ -0,0 +1,12 @@ +import type { Ref } from 'vue' +import { useQuery } from '@tanstack/vue-query' +import { investmentsApi } from '@/services/investments.api' + +export function useWithdrawalPreview(id: number, date: Ref, enabled: Ref) { + return useQuery({ + queryKey: ['withdrawal-preview', id, date], + queryFn: () => investmentsApi.withdrawalPreview(id, date.value), + enabled, + staleTime: 0, + }) +} diff --git a/web/src/services/investments.api.ts b/web/src/services/investments.api.ts new file mode 100644 index 0000000..d4c000d --- /dev/null +++ b/web/src/services/investments.api.ts @@ -0,0 +1,26 @@ +import type { Investment, NewInvestmentInput, WithdrawalPreview } from '@/types/investment' +import type { Paginated } from '@/types/pagination' +import { apiFetch } from './apiClient' + +export const investmentsApi = { + list: (page = 1, perPage = 10) => + apiFetch>('/investments', { params: { page, per_page: perPage } }), + + get: (id: number) => apiFetch<{ data: Investment }>(`/investments/${id}`).then((r) => r.data), + + create: (payload: NewInvestmentInput) => + apiFetch<{ data: Investment }>('/investments', { method: 'POST', body: payload }).then( + (r) => r.data, + ), + + withdrawalPreview: (id: number, date: string) => + apiFetch<{ data: WithdrawalPreview }>(`/investments/${id}/withdrawal-preview`, { + params: { date }, + }).then((r) => r.data), + + withdraw: (id: number, date: string) => + apiFetch<{ data: Investment }>(`/investments/${id}/withdraw`, { + method: 'POST', + body: { withdrawal_date: date }, + }).then((r) => r.data), +} From baa1c69c81d79b9a092772653624b75e3d74da76 Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 22:52:28 -0300 Subject: [PATCH 17/36] test(web): unit tests for currency and date composables --- web/src/composables/useCurrency.spec.ts | 15 +++++++++++++++ web/src/composables/useDate.spec.ts | 20 ++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 web/src/composables/useCurrency.spec.ts create mode 100644 web/src/composables/useDate.spec.ts diff --git a/web/src/composables/useCurrency.spec.ts b/web/src/composables/useCurrency.spec.ts new file mode 100644 index 0000000..1b56c66 --- /dev/null +++ b/web/src/composables/useCurrency.spec.ts @@ -0,0 +1,15 @@ +import { describe, expect, it } from 'vitest' +import { useCurrency } from './useCurrency' + +describe('useCurrency', () => { + const { formatBRL } = useCurrency() + + it('formats a decimal string as BRL currency', () => { + expect(formatBRL('1031.61')).toContain('1.031,61') + expect(formatBRL('1031.61')).toContain('R$') + }) + + it('formats a number the same way', () => { + expect(formatBRL(31.61)).toContain('31,61') + }) +}) diff --git a/web/src/composables/useDate.spec.ts b/web/src/composables/useDate.spec.ts new file mode 100644 index 0000000..ffb8407 --- /dev/null +++ b/web/src/composables/useDate.spec.ts @@ -0,0 +1,20 @@ +import { describe, expect, it } from 'vitest' +import { useDate } from './useDate' + +describe('useDate', () => { + const { formatDate, isFuture, isBefore } = useDate() + + it('formats an ISO date as DD/MM/YYYY', () => { + expect(formatDate('2025-01-15')).toBe('15/01/2025') + }) + + it('detects future dates', () => { + expect(isFuture('2999-01-01')).toBe(true) + expect(isFuture('2000-01-01')).toBe(false) + }) + + it('compares dates', () => { + expect(isBefore('2025-01-01', '2025-06-01')).toBe(true) + expect(isBefore('2025-06-01', '2025-01-01')).toBe(false) + }) +}) From 6764b6e75ce3409c6d61dca9d5ffe155f9e5b235 Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 23:05:39 -0300 Subject: [PATCH 18/36] fix(docker): auto-restart the queue worker on first run The worker can start before migrations create the jobs table; a restart policy lets it recover and drain queued notification e-mails to Mailpit. --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index ddc09b0..4e4a3ba 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -61,6 +61,8 @@ services: dockerfile: docker/php/Dockerfile target: dev command: php artisan queue:work --tries=3 --timeout=90 --sleep=1 + # Restarts until migrations have created the jobs table (first-run race). + restart: unless-stopped env_file: - ./api/.env volumes: From d850557a05e2c874e7963656769716bd1736d42b Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 23:10:18 -0300 Subject: [PATCH 19/36] chore(web): set the SPA page title --- web/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/index.html b/web/index.html index 929c7a3..08def49 100644 --- a/web/index.html +++ b/web/index.html @@ -4,7 +4,7 @@ - web + Investment Manager
From dcd1e7695a1884c093bafe42f6d673c1785f7f5a Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 23:23:28 -0300 Subject: [PATCH 20/36] docs: add application screenshots Dashboard (light + dark), investment detail, the live taxed withdrawal preview, the Scramble API docs and a caught notification e-mail in Mailpit. --- screenshots/01-dashboard.png | Bin 0 -> 170889 bytes screenshots/02-investment-detail.png | Bin 0 -> 91948 bytes screenshots/03-withdraw-dialog.png | Bin 0 -> 179523 bytes screenshots/04-dark-mode.png | Bin 0 -> 171288 bytes screenshots/05-api-docs.png | Bin 0 -> 165075 bytes screenshots/06-mailpit.png | Bin 0 -> 115631 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 screenshots/01-dashboard.png create mode 100644 screenshots/02-investment-detail.png create mode 100644 screenshots/03-withdraw-dialog.png create mode 100644 screenshots/04-dark-mode.png create mode 100644 screenshots/05-api-docs.png create mode 100644 screenshots/06-mailpit.png diff --git a/screenshots/01-dashboard.png b/screenshots/01-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..7f5d652f2e907e4603e252f3f65271cd09041a0c GIT binary patch literal 170889 zcmeFZXIN89*fts)Yz1U*kuIPDB3(d0x>!Iu(tDBKLhpp22&gorN=J}hLhlfe-dpG; z^w2v55|W&y?sC5GI_KB9uJ6xz*B@B3l9|cOJneq&XMI#vmL z{lSda0!mw_i31XXHg5_Z27)W;MCLitKmI&H zzb}EOAW}qyE|QApd|7}$6$sYl46Dj`EBjP|T8(u*g==>VPc1>2rYdX|i2mJLRsFv}R|N0fuULug z1g{@!v(oPSBBzIL{=3`haU%~w`N(7R4e-UWc9%>~HphQsqyS^s3UAH)pm&`$jy6}f z2&DY?A>!H9=BFp0{?LrO(Cj_bm@=8N|L>XT&u4l2wU&^V(@`i{`!lX%9$> zj=h{d{XQlCe{ZL_^hh;)pgrzkrPlxQ`Csk)0=CYcS^p#})pIOh;ON7no>=z(in)7S@1${Cg^uN!{z(D4>g< zvN$XLuMDPBB}qWrfv;((-m9@lzx?&D%4k=}McXCNF|aGYzx>qUWNBuUj1I3%E2Ve~ z`MgtQOU<;5?x-dxB$a&uulV;hknS-N8)YD#G*r|VZgCrEO!Du+6 zudB;pxw$r_{_7WjoiIxGSjn+xCu}_h-pk~mi`BtUd3jQjlsh|yhIb(1TW;2KFS03J zZ_`HCn6zspd=<}zSLf(^j~$ZSfa4tU6iK(IBx@|5uUcl&qpOt)vL`rq4dL#{X{CBD zZf>Oa`Mql(u*uctfb$xAjJ{sy=Bro3UvTX=ic^SF{a6JA6jCHB%n}Mh%im;!Qzfqb zoYaEMgALgHS<{0NV?&K>L~z`fP8C^7%6M$W=3x7lSOwUpvj{S0aEJ0JDka+USmV9o z%8Dk!B(tVQr)WG?rZ}s3*^zFEA_~nQ>Z~sK>1(-{gPx3KZ#Eg$%`pd*D*^2A(Y?}L ziz_BSM+1Qn9(BjsH0U6Gg~}VGf7q{hE*i?|S$eq0V@gN=dik>5_hzc7x6s-*xz;4% z1NDG>RVX)~#YIVd2OrI8tWKk;tfJpi$y=b?x6?r&nnz5o{ya}^shO+lBv`im9wC?e zSRXB4=src%qz2a_jhxPq3tYS+N_*SVa8Zg4w&FqURh31O1-8JXzhERhSSjt{}h zmX*7@933KT=;`U%WQmvC*Qjr=V_2&yDjx5~KjD^GZp$lK|9W;St8K6veAFzn>uwO+ z`$aSD34_O){dY%07*#)=w|5=A_QM&WMpIig_0dnCD)<^ID=W*@bvs|626L$6V^R`D z!NpWmRQz9}lj>d3(jpJIlZ3$|UB=vqk6{rK?ho#Ba@Lz+(=jK0F})u@ig^lg$>ZJJ zoc0T}t2K`vcz9HGjLFN(s}1Jljbb`Em<8<6O|4~o{fR>MBe`$GD^Fr~^6;O`?IKd1 zBqb%yWav`pX79TF61so_=k+t2IXCaOaV$*^ftSam-w_N-G8~2|$tztJTQhr>zJ&G4s0qzl#wrvPEH z3=--8Ei`oW{fw;m`H&%zvzLaO!JhuEMoyp}5ndR&h7asSV)pH>FN{6b#%(9@N(p)# z|2db#0nfS5$G#d{ErqPIgY(2{%SU?mT81P2Po{1<=>Ik`3moehXexhG#=`TP$k z@VW)=V0y15`~7T&5ap2e+F|JMzw?V99HVEVt%4rTU2N8zO)C^5`z1 z9$Y%9tFoJ~^A0%BlIzFG4uEHTHEgr3EPH(*jdQ+k_G5Vt=~>yqiRRxe%!_6`9^JUa1K&9+V;T3pw2}G209|V@C;$gTQH^vziMO8d`+hzU5GqrqKhWKU~vg|PWHDjbzdmRIP_1@8O z?$M9TXqXqJBlOf&%VXe!bYmFS^(I+l0-x^}#fFPEgeaKj;Ci?5#aVSjY{5(XY$IV^ zVb715!o5)<6|$~;t(gokAi3A{Jcn`}yaDb11ciFnEM3p`!_>O2?RHEgqmuKr5L)`{nEAdu#wLKEO zUJlE#GN(htXW_8Ox=Q*g=*h6%bD~p3T5M7h8iO_NH!LyWi;D8WqmcNiTCtV-!FhWc zRpVN<^J~}0B~NU-TFfv(#5Wo09Y!*@;`@~q25I>4m!?Q@wbws(^ETp3&2yJ!$OUz# zBjJ7L3r9@y$8>A?BclRV1Bvw>xT-WbF5SkAa47UZR0xmnG*(s?aonG>BA|_Q%n?T_ zit72+sMJ7}hW$AE66xAIN3EU8;q_ak)Tw?8i#8NwiDJKXhWyALL8QjQvDtsyHY?xP{GGTqf?F?3q82x=+4>y~TJ*8azmzpm8J3suzn_rH&M z+|AFL9sW_}{37RCEj1nK9SO>Na{Cox!Ez%P8)4UO2^6eOiFjX^LwSZIdzp;vE4KvC zSreL^aN~2bq~n~SqE1}L-@034H$6qUPD7;PbF!>999zFFo7R&jds!cTz%<3Xl~c!m zKEw;Vy7Gv-_4M*~b@f~i|1jgZek_1STH1K?l@9a_#Abev$?i2K)Uoi@77En9`*APtaZR#s(Ytp7?vV&dtPFx>BK z?TCM8ZEXam9bZXb&6(AB!*Q}f0dA51dH=9^ae1?%I$k!i*h0!k%vB&3dF3%h`6H}s(y2@d^2}jTE8VR~St8=_-yc}32A~CTUX`By6IM?%HCBe}5 zraXjQ+~?xh73N=KQgw<3kB^Vr3io2@VOw5P9UXdns|f^O6(#7-&W?+Vi~H&=4fsU| z8=o@@k=5-&`euRJ7@Mn&j*y&Bt&0*NiGvfS&~?==G-6eDDKW`DYxeK;ZZXnA(9d}b zb@_W+TIRhJZbhr@`k%cN#JRh;b@la(r(s(Mp(-^FU!gdkSmfx3+^^keseeyHRX`Fd0UhuXpd-SyZ>OZtGh&kSf#tSe{3V-3nXTf<$M+;KuvY~ zHU{ghLNk?P3fVgj+ot$7te~~`xey%>)oR2ezK7N)CmaE;Br7f!w=3~i@z&1j zJX|{`!a?uVP}APf$MBg``9kcptd!sRfB+`kjWrR1%Vf%Gy0h~ZQs+hr*6r*USsCi? z7kl1xaj=(86%O;KjMat}ccL7nm?@b21UdOcrvBur_y-H9)bAXpkg=nm?>f@F_S6B0 z3TB6nM~%lU1QztZ;BUx5wBM>-B*vtO2F~#iBP(yTy3(ls*aYm(QP{=~srs zUc?UK_5x!`pj!0bQ>D_H){$eIvMecvr-LeWRpnDtBFqoOy{aC!&(;%4SPGTsi5pI! zDqRZl@9J(&xO+DEwq9PA{&3i z@*8$b;CA-f>yAB_YV@W2jzkOH*lD6`MpY3n3_>DP^7=rz z7_v~#fmm23k-t&YKq|bVWvd#_%gwULUS3R%lOeOPa! zQtHLLpP_VdIiEJ<=PS|1ipj=G6nt5IHMza9Soa2(Dwu@E`gk92(0$iPdfwT}f~!PW zr#2FVx=FIy2F5#PMwN_^eHdX$z7zYE+77%$(aW4cjIfB{Tz~sUyKF~ynyu+f92suQ zn}8Y2-|>wU1TWalHoEHhjFXUuljlNN4@}9TNuKoQQa`!5qBXDoo4{APQ$qI_z z_%Ge^mFyfm{;Pp|(dr{B*HN-C2_qO-H#1_Kn~t1m5?2~8^`%Ceqwj1RI<93g=rV5cQURY|S66p4uG|PlK+S-;dxJgq#0q<(^dH+@^yfI{>XtcqxcCuHP#I=R zh|^9$V0OtwMrs33nQE+<-?%L=che$<$G zh3QjV8XN-eOuzn-T1NWRQFSkVPckN4LtbA>B}sHw!}=`wTw$yhOU^KQt=V;rcfz7{ zxr5Yq_WWBMiG+Wrn9_oC+nRzAU#WcTzq4JFNFSYE{uf!;(C`?rH-sn(G_GTQ5 z4mAc}YZ6o(vC`uZ2p$^9FqCK7d!?9UteP9FHiKq}e>^ciaQdY_c+2w**Dj;jep|vT zxet*k5s&`}Xs=mpeC*SDjPa=lT;Ps2Hn}L<&w*87#=8n}pfh`o1|HCSjrt62<%?bl znPVZH!=2~8sgm@r55zr|2Li|FK(cKQ9!^_nRoP++MlezPO}ymlUANMw+VOlNOfIl0Qn z%W@9hNKsx%$&*+#JTzQo+IQgvTDd58r1Kkbq_tz~$7-_SEI3E^8>G)hi*Kr*m=t`$ zR_oG2w%T*E;VZcufybT$gF#VioAdHLoVu_US=-kbPNI{&ECr}0U`i$GswNu4KXB1I zyo~C-7ubX8>+b5CE+>=}E1Q}wt~vN3HiGddfq{v6qYB!^6JxcGJzj>Gf~bqL)b3?B z$M~Y@TxG;j;~DStb6FLc&WeWmIPHN8&AOAT(& z>B&h`jdy`CU0(_iKlvQ*Ch=?ihPJd<_Dcmc^N~Wi8=WwzJmZXx=I47}YWxBxz%Ps) z8OSj9^R07vK2rH6=80Cy6Ss>(HM+KGdfdLD+DrgunvL=cABxmcM08Sa$xd}$S9WGF zp=JHYri=Kdb-m<3)1yamEJK@jTZ-h%O#?B9h#dE$;H)jBA*K{`qMe3ueI9Ls2$WFI z&L#|hmq@G-8D(!f8vH=U(cxA)1A$X~Gx?w}PKo}ZWs!40nwo=0&>hW+iNKdR9^B!m zD#uYp22F>-w`R6-UK)NzO{e0CchV;^BkU+Li;6ZmK(iXwmq=$ngpC?kHp0y7R>O%6 z>PL)UV&P2v;Uu^V9=yO~3EZ1%?&@%w2B&U$cb~cJow@oLvg3MR0YHM=_-f#4b3Y3STOKZ-SuHB7wq($_mKVuNq zcK=`u@jux#GO)*3_zdt3WkL35&wCLYOqTds2W;wJ&xzgkMkI4B)a~r>b-y-mfzEm~ zKhNJtpEl|eED?LMea?w6O6M%Uu^Jqsg}L3;G2Js?Y=3*CE#~q0(FYNl1i8p9 z4ya5U3r$S@6Oowe8__C{xCGFvgz*8kQtv*&i z%qASjrW&@KRLcV_!!Pt6+brx^OQ{xh8>t%8Du);)F}Fr4z*8~Qw(9%vw$7$<%WUij=9jMV3Vv7*lfX7d z!*b_T6)MD`2RFQJs>iE$oBiix$(d&JAfNrQbDRq%j>atpoC>Wli|B$;q$S^*S)6>( zt*EGQlC2HF$*~#n(VTRCnVVbi6}VuX&=g?lqvF-3m6SrNq;C;LHe|uR58U{rVQbV{ zrZ1IOkaOnKT|o+hzxtg5Ky2OXx9)(Gpv)+?eM5A($W*R-`mVav_rAWK*K9(&Pju#U zmMGLeg@y_y+Kp3ZgR|TlH@_AxEU#uOn;YcnGO!%^uHk2>if5ZRSKix?yv_V}s3u=u zzB^TWvS761RunD3&kK!tVel+p8e|Zv@t`L~0vg1FOX2s|@m@AH=Cr+Q2v7C&rrgAO z$%z*976Eu#>`2;Oo!HTcA2kWSn%aQ+13>0k9gbH}%?{cUzwhqYP{Mm|*ba;f1;CqR z^ISFJadC0gH|h7cw$J$)=%{G_qNEslI)nQ7zQs1E%0W+vG#6Ho<|A2jNTQ-JIHZK$ z8$AI$R4;7nhSh+~`oza@F=6ap`=RY@NlTyOyd!|D)fNw=4d$xh!syODQ&WoiRYsA} z)s(?_d^Hd6-kXW%{EcRw9~$N_77B>>QqD$3$$w`X7V;UyeX`}1XtK(Rn?yk+E&7@^ z9e%Cdybr})GiFx#k3ktYQ=Fh8l+xj*_Bj5`PcK^y z`Qp?=Qer0E(%X$JLVeKc>RGJVG}u;eDv*IbNg)-bK;(zYZ2}CJqznI2+tj-Hx7UC1 zU3b3DeiZL0=`OVSg`F9(Ix`(7NDi^ze7GF66%myd8S{%?3J<- zFYKLY@8YvU`bnLcMGt>}X${3^twfR?Cxh$ZWS$lUASd;EAR_SHcqOPN5v`NOi18e8 zte#!pev2)r(AxLyyf-qY^wt#xn!>m+M#)!j7Y5;pnzOQ9h>_3QJv%#!#`G?!9E9nk zID9`nkEdE_QRI%F4=-c%=I8 zW1cIDYeNrS1ta`03=KB0KO z|8U2~9i~36Z!{`%0!$r1WtEd}3f~MMAqiDZ3$N?ZTwhsD@>)w)es0>_03>;YKgnmq zIRZ&_+?OM;QdB`Yr}sk}Nwzdba6 zd2@Sn>1$l7`;wx@wXuk_VWGF5)2s2TbQ?gNJ12DzM~x(iaEhVbUWCzss;v#6y~V9+ zQD2kSR-H%52HXutjEA!=Mpx~s)=<>RWRbBXVCSaATspO~nDSjkTLXUkl*W z$~xB0vTUxaUQ5B}%S3Y7t<}4#yz=lE2=2GQNqGV;wbY-KEk*k4+2l+TSq9h6t0$V9 z=KS%efz)aKs@gTajz)t;$o9^5qM*ZfWh-;bmoM5m1dF45r-zVx8?t*waC?sw z5-A}r4vuMh7mdH&AM?Y>(Ccyj6aCtXxA^Cd$tDR$c_owNO*l3-ZS38p)PukxE^hbo zx~fs4WB^cIgH2lQ=SAIG&4Ft*oVPO(xR4nJc7`+6F;e7=499Ueq;6AiQyF6)oh$gjATk_dd;Lb6E~xzmPaJQ9K%`XN$SG2 zm%hMB*iKP~(OCKFq z`KE`XO^pY>mV1oykb6!P7{82`nU2UtGd{6&Vl_vt@aQ{WluN58JRU=q+-feTYkj-+ z$mw}5;DtuDc`8QUxgHs-H{a;WIw$F}uZ`@F`uOhM4@$eL?McW}ZYBYj66yZoR^kD? z?-xH5Z^e>X3WO6pC*@m3mQ!$?9D2|>{$=#-eBq<(&G(R+ulMjus$VcHnY zJd!oO&^cWjfktk1*!?x*85BnAEeA!6t&E#qkxasui{j?lko{*E!$6s41#SB?G`w>2 zxFU~&)C1L{QIcb`LCfT4;L!S-z_7;j*<(y9q$1uN0MM>aefCVE;Xy zB6=)#a%QS)8MeRvzEM^gHghY(nyF}VUa~L;PYh|8Loz1jUvqDu_=r(cfe5sf5$89Y|e;Y;)8cEi8hGdgLSlIxmTCdWAkl2r1`4G-HvOFCT zSyvMID78)tWuJfv( z;V5p+9PPsSiiJqWBq1Jb+NbU9AF}Stc)3gMOp#i5TQ$xS*#} zwI#J@YbCE7OCBe<6AMjhI{lGZN2)Wj#4UE3KN@wPxUz21U+GsK|0(xH{8nQ!pw0sY0g_65?Tc%T!5MSYPNBOGO&74A+n{ zBUK;t`eco1VEN)SpY}jb7J0)-aYy)tSOu9VRC1^J3x%8mx~OpWiMPT*_B-ynQ!1(~g=#l@q_ z)nb;GaulqlEJi^xmn6!rCUCab#ihd2)wys>Gso5G=u|qK6~P5tGpr`xcXFMoI9fPA z<`P68tRGAFUj{QEib|n|Sw54~I#PlTeNlp9p1Wc^-bso0X&rs{ogp=Tn@R~V>-l*N z{Jbxwy}%R5ZGK6JRaXN9JsyWQqMH2XJ~|U}f>3eQ1TwrA>+e^$PPZpLx%gPQMS0}d z!#@F#XlLX)#RAGg6>gOiS5`qukABg?a{Kmesu;_a6NrQ?>H0MLll>9@Rj2;ry{VR- z5tsRqO18ll>mBNLBf0pRFIR|&>!05Y2^BXNuj@ASo8&^v$xJ*dtxn_1(Pa7H6Twc6WQUp**V)VpL0aN8Dw z(;ZH*fOP;AG{Fi^t2dT*94}3;RJDPDs*xFXm(Igf_G^%sL_%qoR|r z9av*ZsyJMs;DgiTjO0zs0~-f2+`OoBB94S>;G zx}}!Fup_=%qfrt!;BaM?Ro7kKHoHS@d1vvB%VJRyao@$6&1y$xeZ%UAgj+*ii`SUo zsPFmrnUJmmd8UoIqN0WoetwGR0fpeLosG54CATRRIfg*ntU+8%c2?k-Q9nmvQDLgL z>P!tQpNQr&V<{#T_q(P9OizBTani+ytKEkj96SSEeI9Nl>c5hGAX^F`qn$b@y8h-R zwN=g~NPV1ktvYs`(4TgGw0%zCy5MC!X(*l@87VWXPe-NJAiZ>EgYo_(me3>IplckL zv8#}{JawVG%Tz@vA)pCJS#KNRoSifQniD~P|40RnE4STQbGO8MN*k9Q=so4s_ZvtW)E$(z76(fMl^63Bh@mUUGsh% zUNSJIYHvRlCeetW@mb@joXT*pJoM%1c4p38URt7XJvyYvOpsWss$8Cv_sf4M&M$hO zzsjhw?rk`Z^XM;48JW2EZ61QRKwIWks24JwogHcAm8CYfRgn{&y%`v+S)P}Qy4t96 zh|CI#y25(AD^xP=mm{CcNMuv2=I?40s0HVcL*ygeXlk0mc)e2SML@-2hSXLQWkgcwWl;Qc5UB?9Ws_ez6Qogn zc%SdOr~4>TEo@VU9!;J5Jy3R#Cgy8PB#r#-Rje)v-mtdTz6Lp>j7Kn@y^vsnRU7#Y zAz^jFl|&|%KPieY{-)vu(A}ji0l!-4Nnhl3G81*%?n@)ll6ldYld2M5?NKEZe)%F% z@cLJNaBgUH=4DXq|1uB6S76vXqW*OaH(fMez@HXVnTj=$-=xj`)JtXtPW3)xw( zK^jSQC;xZyA@KVb)_}QdWXkm09&l^@LrVPJ-h4$Pb9~3{e{XN20j9AzTTW$_Tj}#3 zeG;sERs5--i<27BoE|6C@?H`*J^AnT1%U#7vdVIem^&wWKs9k-p?}(&l_Gw&Us8%0 zj<(hP%0bWdA5}9z4gb+34Am^8e`-lGf{CV@c$}k_5dE4J*t1m`exE4HW&FQH+OL-YTOs-Z;Ggz$8q^iza$yw{yQV!a7pR?!>t8c z|If1CeWMGm{(}YlA0PaG2DJR2Du#ar;eQH4{;R0?|DXgouYqin0L;zUl2C4@{UIo5 zq}(^h_d#T3+0x8E^ncLP(yo494N&^&Lk^C*qxqa?HyOub-8Lpq(Ftk#w(BGRZp!So zwE(e3CeR<2(VK78FHzciBErF#0B7T@{Y+UP>@Q$e<$TVz*EE~|GTr6q+;?6LcdWfV z@98uQFX#xT&Hmlf!dhHP*7l5+-}Y0vvyCWMXI5QW)*AtdOY8QpCnhpX(_a>NP%-%0 z-nl~wnz;6}7^1MKh=^?cWLI{StOo$tlAN#~sQQx(Jgx@?1*Q4p)Xg;trM(BiDc}KM zI4Q5T7mIJ1e-<HuJ#4(##OZ*=cA` z|K`HtGDWtek%2)WXK7iP-q{2i;GAnZg~!CiJhl^VP9JK`92htup)^R5LrYXzA@2qL z&90hQ*wg98i4P>h?7zvbUeOBWcxwpl4^hO&F#5T2>tTm zU=u!Xi5$;oRqBkfv$Dc&Q;fzW>C6amBcaRQzP@57MVWztZHxanJHp>6LgeTD%03@c z*R*siaa8BemfQ%SlcpYes&s}tii}7(%vE#gHg>E>Gt8DjRQ4ECl>Au)II*2+1b!Yk zVOOl7Q9LGTW|FTJbF$&Tzt0CCQywivn>Do@zg7@b)BPfq`}_ zJG>M#Nhcb*Op|*Z!2ZK%rja!lgZ4VI6XdVEy~#J;?dDy;kJEX;#(#9@OlTYb34_WjFL@+<}YWiADvORSf8Cb!Irm{ zchn~e>;MKsqM#N>OiGID$|QT>Gjh-B2jN$Guw8iqrl>*ss@FHcqdx}5wa{8|>&Ll!144yu;VA-sSF!HA`#45 z-rejdVaFNBcH2fw%n^GYDpWy!#lDC2p4}cYr#?QXzFQ?oR)&qmIwVDC>QQ5Qx)XXn zu&z3l(Vb5CP&6-Ls|7#qXRIRbh$FtEFzTd)SP93)L+?<$7z15#Os0Fm8U>iie567zsA@%ILWa}K?qPH z+M*YbK*z@3n!}D**9*Tbj#aONN^)vkeNXy+E!!T{YuY^U*+*q7LgPA;Fiyu7k?+&w z&NeIgX5{_r*y~-MJ0kn%!cu!uUK;EcVmnr!MZqKfksL5lVlH#Gw^q3bOLy zzsnKRJpsx;wush4xass5tPoCP&q>`oY44vwlo?SkKb+4FmB zcr&Q`Seu>fN2j8nYLpG`*~f}NJwbtD;G8pN`OSE23-a9Y?ga%#!STBHb(aCEV6Ou7 zrTuIzFC1rqcn=gJhfV2>tIJql>^$xWz_iPOoQ;s!t1=#3&MPSQdNa``@A!F&L4K?Ml?Nd>8=6{uuR0poRm>n;WVB|Z6r?5 z2vZP)w|sUJn=8in748+J_L5CGg+X|AI9%T&arV^|lDFynJR&c$vxD{F1R@fCA?VhJ zAZR({-o;V=^_maZiUfO8H~WTPadJRH&w$!1=vzG{@ZvTXpq>HZgDqm^dgkS0x~_ac z;Z%OpX1{J7{+u1K7x8JnZC*A69%HfH;!c*s*Bq#}ydgeM$qLgW<<+_yB#{_!hyAM0 znd|Nnl9$XgT(0?aw-ZV8qNt;#XtEAiYMsNg_b*z*L~7haG5$?;)i2xIVGXz``aKAH z-Z!=DQP%U`d(olsMM5Il8MCsf{_gFY;qqDBx=m{zQOLrTX;>e*6yd};C@Cf`?qDEf zT2YuycrPIy86FB(1dI9(WYm(x#R_}QXApMl2nj1B5O!@vB87tS*K8%g z=IMGr3uSwHdNzTB|ComWUSqlyz@DXK7CzG+!2k(8xZ4yGk@{0Oj}8xG^1J%_d^X#w ze=ujpZsoiK!SveO+MtpU%dGskm{&xF#*f}uL%SErY#or5#?K6*Nha&&UI^KLzCU=j zx(ChodMGc@s}ffKfJy+GRBwT0%=#o`KY!p*8FcVbj$Od2ztO%jvr`483wOtmmjguD z82QiY(Q&D!22Fsv)Skyw9J1$a0ySUwujMsSu~JF+BMWBRv25=8szlq%{?|@}@8H)u zk+B?~K1KLqvZ{Yq?e-0qUWvu=2?x+q3G=HK0l-2Mw6gdMt z`nB^WaVaS~0+A{L5BmlNyic<{l{~&}uP+QW+J*2jhq&z^20A)AYMv=8?~d{|su%4@ za-O0avU*PTk(=QOx>I%4r>7p28aG9}+{UK+>#Cb1=TpK4^kih#zO{BL`OiMNC@(3Y z;bA|#)~S+uj=}17FjbV6?v7{SNK_=wj?K{SyEOI|78a_~%CqIX@OWRFeO~Oz(H?<@ zSE=~DBize(ED9-Hc;-7EnKsW~19J|;0W2xhV0^g3&dU1w;%iw5Ew7S?w6M0(fO3R< z5EZXsO01zrb5T*z<3txihc_y71AZZ?f*v0k8S(0LcX2(!>sPjG^djCGb^*&urJz$}%+&qJ|(rSf6B%qzk);0g|3cRl7orI>-3>z5Ua}M-P+n z%X<%e{hQ3TUv=L!G)x(*2I`^qAQ$1zObxP;DVQBt&}g=@YH`TYh*mjJ>gDUPhmd^o zFxSFFT6%G6zYD0pls}1nh@NL(_Ho;qEVNJWU< zO#Hdb(vH|FX`&!NbpuZ5XbZ{gczyE}x&^N-F%$h_zKyhzA*g={9@{o;y>FtI(z zh)DoysN@5ZU~sko@!XVWDUN$QZDNxdOpZCm5p)e+`2m#?8&gHgVa9m;N&ziqj3v_$ z?%lbQ8QgOWxR7^wU(Q^u`>re2Y6P2`oAW4!D-ut4U`}^^Cfa7|+-$Yg4DPtBPaXqS zoZ4kFJ)&6G0q~c06Znf2I!(f})`k`-;CMbLU~W2k4a)tuQkG>m;$J0#X9Ff%=Ntwc zN9m2$-Eg~d)zp;K@QZ0#qB(2S>S`mpyBhEszNm?0%96%CYy=Ex#Lb&PdYr&z0A!v; zI;M^`1WfZ#qlf~Zr%1-S=fWFJIV_2Sx#H;Rjd1#NdYD2KKE?MY&25082R9!e1>D_} zA_HxgzizIN;!;D>glX=bAt|?3cz%~pKjK9#b%h7$MbgveY5~Yrap1x@x6HaAk!Dto z6%8shHFcMKR$w??^;zLd1#MbhkCFGodrkOc9vo%V9q7UE*0e{O3>8iIV}t0#$2WBN z(K(Ux{x(ZBUmV^gdRkLI2KPPsxD{i&wzPDyg=RwfPMod14QHiw_i%~vvOh?seXB%A zr+qWB=6mM0>2r*po*o^7Z))qX>58n2D_Q;8_#WYWWurW*gjgB9dXJ_;A+B7+ z41?WuCyfk~es5Efmp>zmd}E53N5A!DlfMd9^*YqZRg~+!en3TkQ{Drm2xkg>JqT+^VK| zJRxw}XNIO_lbG?`RZvzId>C_loMpwxZ}iSw0|viX>EIS4yWc(fZ4uC1Hd76GYRea! z=NI@s<(5H#&#)uP08401FwiAXXgul%P_Qtc?uZHui3B)Pv~I!n;-C_i zP7L2g8D%hFS$L)V=lc8GYZ{u;_O=M0*?kVfVsi1aPCmMMb>lp&i4+rqhV)gH0F3&XDU`4i3B<8oH9$w&&`r z?}T#`K7amB@aQbY0f7YBrZ~2(0&u`@GYbigBmGXbBBhs)1ILz@mR1XdW(B+p)$U!_ zMV=wmJ66qPZsOff#cRKj_N?CG2j4Yf)z!@&uzyq5-J>Gm0c(Ltm|OkxLWpLiU=Xm7 zn-fO~qBh%ox~?3#6q6OhKtvkW8&3RGQ@%b+FyfP@QR*(RX?j&}Ql!s62__XQfW-Z* zrIwY8>;j@QpQCvg6bCjZ>XTS9i5ky3+EO_=I7S>##9Sty27+|nweHlPk~2)|!<}Z7 zTi2g?$Nq{qFL7ZLq>n%vC{c z+ZW~8;Rc4u;k`3eU>k#n@$b_d4VMq8Tt4dQ&{VwZ?;V_g+WCpUjE``Lb?IUlZXRUg zz(nz63fs>+Pl3El;Hh!hGW>C&ImT(=j!Pv~xZN>6Z%b-?eZEa}u=-xZ++BlsM@nzt z6%xO$fF$}$kDTVjT?i}ZK-iHMXJix0r%0dj{NLGc0=q(0- zA9C-|I(#Luw6IbD<;7&SX*fPC^_jb?P*OB(jcAE=Um2+*l*VtJkH_}!P8Pd6ZN;7V zHOA5*s=_xYc97|*&a*~FT->FNk;8d>e^UKrVL-z`VO2&}AwL2MjGC-*?ODA_T=~#Z z>xz`|@{idD@zu>U#EI?5!@G~Up21a>k3-TRgq^UdE7;TZ@mfQtq&T&l20MTd_v>;h z2OQ2~dLZrF$<&0Mi_A_+o+;PQk(8+anjHJtuVKucy%bB1?Lud+PgoOtfEMb&eX zZpUjE<;zh0NnK`fdu1}mY67Sl-lV3hxISOynkH?+xp8RH`2GpINM)Nw1{R3a9%_Dr zVgLk0W_AR+0o@8KkSiA1iaZDCq9HNhnL1!YcYHkdep39shGRErg{p(Bklki^F1mE*o*&ZySwvA=^M|Sq~+2+;6n*q@= zTi=u!v{!u|t@EOLW<~AOrRCfd4ZO@Nc6X{6g0GCrf95rX@9tFg%#kT0^hk7IN zF)?M}n|Sf1la}uy*JJ7042vjMN3Odoo&w2V7^?x6L@b! z(#0!NQ`6$t)>d|QTiYwSF@wE`uk`?|aU(w$irnom<93|$Fa2wOoWYlLEn;Ykp!+?? z>fyvYX%9~7=66y}fKJz6l`PtMbph;lWTF$Hlp-f~T5;ytqmGkuV#2`f+`sJAh#hnN-ZB)RW() zqLRO5^N6uz9obpZUQ!*ObHLw;6uM{>PSwuOXgE#hP82?euSGVUZMW)I?@g835n7np zBJPMK==;x%A0LOo;Atn_z64;t?v3IC0=zZ@yU6tU=`83&O^vz0`^K!bEldrb84VGP zQjMlZ5m!PY835Wm>xo}2(?fP|bfzOf1ugn}r$OKcKD&FE$IjXomMcSg&Ry3Vf{q1P7OzTwYfG{3hepEZ4nY0`@y9kD<)UoOJZ$Y}RlywT#9VQ1Yb z5x{%?Byz)+_93sksOSSQ;cX^;)wV$+Si#@FNxHx0?EU)W8StKu-&xiG`oQSWmzF-j zE0c1S-7b+KB)O9W`FOxD|v`AP%`{q#C_#M6K)$dioy>OR8*8! zDQQJIRT`w54G;y%4M93ZL_`E+lr+*gx<(9Xm~?KGNN;r4;Jy7l&-1>2!uy#o8@uoO zy3V=IbxuJv>zHeh)4$m1mvy61CagW(Gi{cn z4{Qc?b;RKBTf7Z@6P7dWd9v|DCh;-RckW85)6%OsnrM>(E3oUXz|P(gKDJ&O#*+ss za_)`5MnDOToS&^P;$J~6`Wof_E65i)kcIIHT#niK{cg1Uy!_<&8bm3F0mUgolDh`> zqK0KygQ-rf_N4-w*)d}>Tbok=2DR^LCP~!U65uU5l%Y4|P6*SU@$`Zs_aA#=_NBot zw@Av~-a$FrYhAd3^OZB>8YtQlQzb2pa_j7>&4jEzBYI}_=C9Bd#bx2ptmFhx1cT*;mad<**QI)UU0G=JRhrhdPYK*Ve^>jbaI20Xq*~l@j zEA)!EOEUQjfK*(Ly4KF83wu;vFMIp?{AXjXz41Hvkz7>d=jo-m2q+XA#!WHy4qZKjClFK*Y`Jl zS^r%PJ(d}=1UJ))0^4ca;&AEYyVC55Hy$34+>r;*Lt_|T93LTaH(#mvFXWAH$%#%b zng;k)8;Lj;N#h9TJQBWzv>TC8p>6ZzmA2Z)o(miCm#@6XMewHunAmQA9B2=!+h?xX zNy(|&z?nk}i3jH3Qh(}^^e*3q~rThkhh4)(MV+yhvPKM7ag#TOZ@{kckUE> z?8c9=+w${^1pB9(J`QVtdQesv&eXV{3Wtl=2SJdaMFV#9>qF+a+qlB&#$cfVpITH;?Y(E;BqD!R5h^Dt84eM zi}a)?0-Z_~D#R};Q~n3ANx)0UTI((|9bbI4lhxc=`@f@|r$uiz(xgtZ!?N9EaQ;U> z>WgPE{tmC;FEYhl`0q{*IFGLxY;W%rPf43#6tdPo%j2$)ls~0>nP!jxx?TJp7LdF;MmDI#I0)GRlkM5f>+%2N0*1w0m(yettJg%3Nx<}EPQXuy zKdw@5rleA|5dvNeVsX%Iy}N?B5v^YqdVCM|mOe!^jNN+?BS!>mvXO~N6@26u`dP!1 zA2+OfKP5_aM#zfkpRWN~eryrcu|L!3&v~O9XE>dBjYSI?^}d_-fD<6SplI8=t-)SCdT1>j&#w0i zBe@oVB1H*GKr1HUJ8Ef-asSF>QFdn+e~;lc^zKat+0}h-2D0IUx9;!WmZTo_1lt`g z-w4b;e}uW$600k2Ic&-br@KB}7Vph821sNY=5t^K^Ov4)b6XqMK(ha*)_#v$EE1mE zC`~v~Tk{r*OU^1Z*XZjb(OLsffQiZ9?9bJ6;J9fdZp_&gj%4J*|*nEZf zSsquM0~#RekxJgj0HT*N&PGtZUZsK(zF^p=H4_2 zxe@atVm>3Dr$6#qg7=36BELB{!&<05u^Xt~w3?eur#d|LP$O}GPM7*7wqXny;+7T{ znPfc`2dE_o8Ixe8Gof#KZ2AW1zS`flG-u4~Pg~ak#ETD&;1SO9eajQ3_uJq<1#ooqPACIs5tjO!qhJD)?~Q7y@ZH{Po|8@<{3CdL=bh-v_^Zdw+0g z-a#7*ec-f8rB?Nbryz6Qz+{ER}Si^caWQ0Ml4;AvHtQ_#Ox z^gZ3TTbuEs4k@*g)v8;TQHu$WqY5S5#>B*Iy#q1byx7WGk1g|{NNa&NA=Q&_gq=U^ zYj@QfUrsbI9W*(}I)Kp&4em=52hO+CoB7|w&_w&~7bFKMs(j}0JHdWQaUsqGi}+o@ zvDa_gn3>pNX{JvHN6V3J-YIB-vC8na@jQc~3CO7Z%lm!5(wo1Wrx@3`L$Gg*AUrI6 z6_r&324^#@o-`lmdHq|(3M^h%GNAoDXPafO6jaPf_?^+ttyjSZC!dSxXH4ZGKKK9e zU!rBk`j>9!pvQ4oNR4-NL&M2q`=ifiUXll8(a+<@H_c~1V1qI?D)6IYWyaqWxwLyz zxX%^{7hP}7OEA;AOFK;E<+Qi;Jg>sf&;GI63Ekg#G@y)YH=vWi*>&3Rph+mP`RNbV zej3--*z}--6yiiKr|zb?Mx5bNlB|6a{Qtb&Vj3z8l(e1yM_I+^MOQ*rklGpda8L*7 zC&;v4T;)3UdrozmsQ*OXkh28R;*cus(_^wnTA`OKuR;ag6=gF9EHSLu*$=X4QSnQ8 z`I>$FEDbwlVW&|=KA_PVlJy-L$_RHJDo6|4DEUd`<#|kl0c619naEVJSysZJs?iDd zq}XSB`aC{~=f)!7f3}tb-9dN59rMIRi^aHZKAU67PKcJJk%&+#k{Cd^cQXwXshxD| zxxFp%-;VU24+lOGdUmn$hp>r?LLXm>ud?TxBdF<=m_mV>tKg)k`=@sMJ^8nYzBjRK zx4um7WaF8CbdpCJ3GC$;A-3QU#d5ZrXJ0O;E)GInQfs(8Tx4kQaAkwRe4LujiXAv% zB=D#?9N{@d=GOT!oRn9h$2(~%%RXkeV>Uz!9VjC{-ZFIU(3d7R@;eSSJ-3KG3llDj zq@~665C$it>(UZ>Mdwxx=!hVSF9NzRM3o5n=v^ zo`eoFk$N(G4e&*n9{95&>d-!Ib$eVV(GsHuv;2M4#~JJu70{D%9`=jBeA-fanKS2hJy4g+DQVnF#Q#w$ zJ4YttKykI4FS&3^$@K5xdZ!Of_u11p8}lERs57~W8gbrm!z3s2%jP5JJ;AZv~M-(WWa6Jcf_){Q8G7YBD{{&7R$RUAog5 zW3o0N=~v>he{fl&m$q7cAX_1Rg+26)*Iw&|{{U#(fcEo*>kc$kM|NpC~PMCXGW{8$a2f;cRh~y{6)L( zrM9*c=q%6jSJrsD9cE;u5}x;5@qP5|v%{jpI> zLgp23aD{sR+> z_%!~^x*`beYgnROOm2&?M>4^YXQgGYo}p60^$R{!6q_0 zir9={e?PwA%M~Cj(pjVPu#{b9MLcrl;cOs4=uBcaP)^EU9~8UD#zL>{Olm{ z3$;LGjRc|jMr_GxR4S}N)w|E{Ajrp53F~~J(<)8Ff9Kg5F3W0x#zB^d3Um0L9)=H{ z_FDWCu6%kr^c>dLxAaPlnLe&yIJ!2`19w&L4p1d8%9W)8o_bpcd08_;g7kP_ODk~x zyLpR9o?oNuLKc*g=5B#3$8y>wuFBxRzy`Lw+rfEbrog$xQ-7t()zxWzDx>^A`ggll zq9&x^^&f+$VFBtU`j!qs{g_mmTdPdm7+3L8pu@eFF7yfNW(KHk(GbaWU%rAfcqh?A{SZ-|}31(l;L8m+R z0rVte_D!2<@8jn<$p5`1BqV9EM@I!8YHVPPQNC!E>KCVdGspfDp=n#BUc3xuWay2b@!Q>}Tdo@yaYpd)?W4pamNOfB+q@UPzmEH-|8zbYlH2q;j?VH$*zYsg z**+4@^~E;UddKQVkqCoVpJpZ&hIv!DR+#)*3X+7-qbV!T_57A?3ijQfRFs=kHi(dt zgx<|~|Kv%A!}E;l5t<=Yby@#V4Qb)B4ZHNbWd1P8-MUvue7GaTT*&!D3@^52;;*~7 zrB$r5GB3qCl1~9e9bce2CRtrt&)8xdq{!-)FD=EB#mZO^=1Y}J`b1L9cpS&&8Rs_b z;3LJ(*W1PI7hna-n?3-$~Q3)t#H z^Y5|NWeEik?8k^sU zzxLlxi-gWa*NmzV&8kK`;#MvnL#_%-mODIu@WPa{MFOQ*v9wFpC|y$L(JBTb4D$SH zc>F&u03crSgIfjCSJk)+qeYrxY7CplM3{snMQ`U_C>hS{s&SgjPnTpVsVeDTY@{Jk zJDd8EC_*w_o$>Gq@sAnwXLt@roX@6nV`!p6#D&;rYeGdIgqgD%*hOuTo=2pK#WOu) zjuueTU2-CEHOy!33aX(~xi0_0_Y2?YF24NVNwZ@QF-7}Go?~X#R+*v)+)WgM6O}LM z^6x(9y}ukQ9MdguZ3E2V^mvP+V}Hil=6$)8e&pF*O4^2}zqZc5F5X`T4%N!*w&_MZ zNs}-RCv;z9Li}ApRRXes4~%8*)s$x?H&jjDOK$kUWSEsIU|d`BcH#M&OCohbsczAP z>wq$&j8lRu6?qeiIrBBET7Cs33EbIbm-@dS@F~odzY6s4Rxmk&XvHJsTMu(%iHUSq ztD6Cnj0>$6YdI!l_G~B7A*}Zmj_%N><*Ns97A9!s~SRIeU9 zOMUW0bst`5`2_j0BMfvrr&|R_;#iz5i!3EkCf;?Gi8mU5gGoF6O;aNkFWV=>{P=_n z(nqBK@4ODbVlcP`gBZdu)xCbLZH9DvHEvX(AA^b-~(HLhr(tlBeses2WQW$QcuUGYR18W2^7c}hc zH7{7Ryfb}YAv3u`~Ej=1w)9*W45T>2f78)?~Y@;7CCM z_jTvU-C^B(5T&b$Q4C0!4&;+fu$X8_%_>T!xnbhtan3#^7972gcd#zLR8=oVQo=1> z$|m?ivf7or#aLLe*|4%Cbz~$a z#$AN7n?7tdu;cd1E9d6OUw!YsVs$hL5dm0J1m?8%Bu>_!S4;;L^lVMoQL~!q@pQh^ z6ZN;8J<-91GsO1MpIy!E2FBa&Kb&u~jl{mr(m)?J_8fW_9#dCVSYFaj6Pcs_5BCh- ze>cpphez9MJ{14(z1X{1@9sU|&ax=G^(E{QDucr$EWx8|@_Q%Z!0eakVJ9}KZDmPq z7#MR2r3#%QOUiuIYUQS#U;Jh$>xx$eE#Dl9_}maos9&j3^ta>$<& z@ubr`TqwAR66Z$=Cxp;8{qJh(8LO1ew(hxl z_&Z(Zdp5==aJ;*B+8-6?Ksbs<%%FKZ)~BJSq*}?qE~RO`th*iN$xKm8&G)`- znn{7q)+({VNncw=zoOzJ+-vsTA*u{9an#5 zIlWJ%AowHpmSJDaw`Ak((I-a*w09O4p}f(qUB(`>XHs27F$Gnd5zVQM55LLR=ek&w zov;f}6^OpK?|LAbn)>#CAKflk@_3O)^y^9LXjM$okyU_>cTFwCW2Ca*Cc5T3Vs}SW zyW8+Dou!W_w_&>!c13`{uyv)fQkS=gcUS2jB=zX%m$+gDrfZ?Y^N4q)Ru*fORu(_R zBp~yP(YFlF6{Ovx!Y-zH{lA10yD$cB60)~#fG)(#-Rb||=O7{Z{}75&c#EXc+{R;d zJ&;qFme&0%KIeCKWO7toe9W9#2Nu|P%1Q=uO`x7reRjS}uDw)iLd{53l=i%szi6TwZdY$+yt1$%8C`*nb111QLs>UpmxM4}Ui@5~ zmniQsEG|CaDoxOXkU$?`;zF7f{r-Jao74-C#cjsmYs5w|7+=tWfuGMVE(yWEQv8BZ z_NMJ4`@VpvZEN7Wu9Oq*{LWS9J*KNq;Bb3MVOD#~YJ;!BN!dmo*aJm*X;GCc4s8&!KsJuvnPlTrBbL>3VNB z_^AKSD%a(wMI54KAc+K=MPa3FzNw0jZc9Ug8p&ZHA(~&p)sC0zY6YYOe@^unU*O)w zOzI=fRL{7L9ns7%(s}NvUO25D z0d~tVoE*S7vWwR5a4jkI+-$3t^5AZ<{Z!R;75_w$ZHE4gWuTiZ#A@=ST-2G0$I{=|@A+4Jxuy72;?9#N+u2|9Y; zX|IXQKNlC$JJ3=o8_^D-Ig>x=_~YBM+S6*?Trcu$*lUJ?ie=u8DJ!R>R0 z)HRz0L9cTjxCE6hAr>@=)TyMZIU~-=Krv;!V{qpd?UYP?HNVt<3Q+F%zzo5cAG0o| zjUpi9Kg#+zETlEaBJIMCxFVYXMjTIGT zSy}lvXm_zYOuVz)_@V0xP0k5tU}Q+Ge|Nq$H2ZjoMpt^u^dkObQX)4ov^;RDSxr@y znpu)3HB3#p>sRmIo?G1463-~IHHfHi?c*B*OQVjG*O{68W%!1=1{%#wBV?vNKtvra z%NDHVUo<0$9Sgw!w+r}C(nOI9JB~NVsbvj<)~iTaJryv%5!5M?V@Qm-nb%vvny?oZ3)y=#tC zvaKA(-8RQp{-HoG@OpdJxWZ=AA;Gc7uW1Azbx(vIj1En~wqc}Sd~;ncLNf6PYV6x-h>etioK?)zOiyPCowUt zCwheH$Po2EDz#zOJb^u&hMAeKdGRckfva6BqbIy?!~# zT$V~tV8`=?2XP6`&$^LE9<}ZpBRVqAwSMb zhPhiGgAo`n-55^^#3fdglyuJYVP=YvKCJPK{w5z4+JH~67%#U*Z&^`MWpJWe@b4yO zra;D3*j~YH+S|U8_8~f6+zjN0@JXl5)|H1x(a`zrm$ALQhK8)*fwJP5f{L2CpzMT}QsrT~IuHJ!=yGT@2-K z+9yFq85wGA*y(hKv%`Diu3f!KK-g*3s?38sC8uo`c>{+YW090{{A^JZtej43vBZu( z`RtUwZ^g^+k6o=OwyWRkGa!pZYP<{1-Hh?BfFo4M};Y&d8yN8Oe6BXGh*$pNi@tmZw#rY{flw z)WEsO?$7r#gV?xJns)~QH_OkAi@XyPV!4Vlavs1}W;};~ual|82A`etPC)ha_BReE zTYW-A4p?M-e|N^`&5;vyCawT`4j=J%&-5J9j}4lC?|yX%>0xW3gbygY8C(gy5-I@q zdGSHsemccf#6ecf5zA4jB^wf%ad7nY@_0(@LN@x3gM5;_dv_L}{hmrKBfBsg^1Zw+qEPvx zgW#~}N}g?XoG1@E?GdM_Cdd4rf!q0|QH%v5eDrzj1Enfi3viT#vz>v%I1C84tX7{c zsHzC=u3S6s?9!i6Jp^shOJl6kEew?X#pWu7{ThuMxqC#Lfr^|Wl zLM1XzBCcdktkQMfO-N=Pk+cq>kf8!_0wIb z8P_|)>l#KT8m8S<;ckfCWtb#5B76vNoRgL)!N)5b`cg^b(~P7=?oa1=%C#29rRB5i zZ{=J9wHw)!GRj;^>>CEjm(O7_H*>tbMFcg>BoA1ky8o3zJ^bQ-GZeB>0+oondN+$LKMHG*cS6UE)E6d9(B!jM65}alT%Z~5xl0WN%i7tBK5n=OvhB3?Ap3R z<`hRCAR_SbG-Re&a73!Kn}p6_Z?~bUECv|YG1U)5^B{%YsDn1DDBd1bd6ZZy&>YSK-tX7hIcs|4O4`K z4i1(>_fY1sG2N+rq(mNOQp4u^uFX?DSj)=?gIY?j?guU~bUuWo5aw-)2W;55A?UTV zstd2o8og~H?d!=V`W)tCkx>toAY4pej0}y6ks|G(pBulosOV(z+(97DL>wy_rzP9> zT?-!VBj2yCxTA?Yo`|?$`vdAC6Cv2WS=79KqPuMe+u6GTRNfp}f$+p-;mS(vy?`O` ze3I=tSeJn2NCT4!%BzWv!HV+;?AKS>ShX+3A|f%b3);_tRVTE{ZRy9HwN=~*ZK;HX zwiBYhTfVxx(!Q^|o9MS+mQ6+2TfW6s$H?po@4~M+_w^FpGaQU;a;_T%enoD(WoKOQ#XovHf8x3KG(mNZs zSK_hNQ-iwHpD($Voo3m)ss5^e+h!mR$G3^tDMvhOknHTK12HF_C;icpy&C)7LFS~( zx9-Gs#(iZ>-C{ivf-M{BL4E$b$ebK@#`x@E(t$o=V)WrjAzN+Io6}k-zb&xY>s>SH zY=d_67(d67D)p)U@Cj78Oe{3rH<89rF&u)Zy9&>!W8A${mrToZ(66D-VJo^r@NyBm zct!(c-G#5j33z(xJ z)X6`c-BxA!8SZuHYJ5E9QWJB2;IlESE4X#?p^}V94#j30=-Wc(=RsK&v4_q~jTkq& z#v!M;FmX)7XY7O9ugFOdkNsu6^D@yQSu?@UdgxKL5=^qUOAq?<(6q(Z9_>-abk7uV zQ`CQ$LY*x&$o{pHmVp_uA zeYwosT;+?(QxlVur#mag!J0`iADend-*m5$jzqrKN94kAuF5GzSzH%vnoLmKFya z7+o7uTHRr5k9}bS3Ospu5C>cG0Y7XjJ|T8%js-LSPp8~@$2xOS)o%Ucj^`pHf z1g!a^>o>=0dCa|B(hHx%ttZtVNQ?mMl-{T=c}>MFmnV)YitWu@cwnE57_$B=_I;~3 z<@p5nO(xtWe2xr_PInMnohLAVq$mI_{>?D>loNa^Z{e@@dOz z79bfAEV4UIMy6jTvlUoto&8eLZoBy;03s~ptw zy=wC<$s45bGHwSCRYvzP3%X_H&S~MPA;Xoy23;|{{>P(x{f?f{fM2Ugif1x3h52`K zCgEYEJ~K!7YsNK~nw$sl^mE-8rSUaB=O;QLQVYE?x@oZ+(jImSwo$rW&pIMj3uwE; zT{ij$ho-DX+8bzUkG$#*Rv9fz@X^Cxty$=o-u;NI<~6781khfsoma`#2Cbo!+Z*#F zeKhjc;H0I6$?k=71J7ZF|8^S}Obz~Y`}oTc;FPH*>gsQJHne6$~cB5*hL zdE3nNrk;rjNOAj3jS_w9E*B_i4z|+y6FFxBoTp??nv8@K^^-*m2<2!za%CHe zxe_t;M3tx?mZXk-L!q>AsY@SqKP`p7pz)7-QGV`ttL;t4NN;0bU{WwG_~>_~reBPM zStAcv=@37Me+?T8Uy^oRy=UqxKI~gpP28M7kHjt?&mi?t5CxxCc=OPThCe4Ko|v&n zS1iA`D=#sn_OM7l{qH4h$~d<^T8sitAg3%BwIl&i)(I;h$@Oz7ryfqy^#7jY?fb;O zi-mGbRf`=#U#sg-yghK{)g|8WaaC3M~Xkx ztBVYZ5o2Cg+MhecFOM}8@e}n`KKPwy&hEQaT@F$}nOTfHG(_{fp>Wjrq=;#DWEoZC z>H*)cmpw~$oqb8|)$6S1#^Sh?Say*o%MggtSdqPf2K+Kcn|wKDuh$f%T~-ZVc`3g> z8}SI|8{JqH@znc~RjujW3!NH0rv!AxS6)!BOF!Qd=^`9W zXG#!;Mc8`t4}+3Q=8Tb|Pk5F#Lms(KaLdus7~oj98r-i6+sI88$zedZVfkmd>n-v5 zT8?Um=14K4^X}JHWl(dT-MM&}Z-$h(sdON!4AMWMXvVb|XjSub%=sgYlx;C{@U?>L z0TH!XIcIHLAsO-wg7<&CF6NJOxqt6xCTiI3u zzsod@`2|tne6WWyO7_HsQUrP4KOfo78f~}-kGW^wsJ-BQ_Opw%P+)4IQ4#pTwEk@59fkzDxT`1i)qJyOO6t=55a7E*W6c?nb~)JPt%$RS{gXC?~AxZ zH2VwNmH6)4c`qptMnao=f`yKbIc{Nz&OesslO|7}WQB1ACWs3C!}d|C*xwRgBp@Z# zI2N=B4c4$3x)_qYTbDjkG%%yd(4p84UFA1ongdZ18@_8d+ z1x?NwqfLr?RD9V-e{Kn!jNr7peAC3U` zup|g>k8pD4S<9l+HV-`Q*{(%B(qDT}QN9v;`?kpxP8*x?wj`k|D8_-LQfxSD;*; z@u=6w(x}{w8GMt5A{c<|HzNokKm0-hlUs4o4WB~+2>Y6Jpz z`9o`Ukiw^G%a?MpbB&`5VijUS(h z<2AyOhlghk{Vjt%xPGunoT&)*_Om(z^?!F$`iCBj|LG|%q8FZfCi+$`Dp3!vUu$uj zMEC=c($hcaYn%bp7m=px5(3f3BIW0HgfgvruAxl7dnlbjwXK(T^LFBOW><{|@kx_X zA#Yuz3k`H)V(*1SI;9oZOt{*TSMs5*^Qe~O?Kc?DjOpfmoF5j-5>iaol_)C?2<)i9 zzCRl}_mjp2F;c}OZASzVXp3hcST(&@#dfXn?Uq44*HA)NAMRPreP z0sqwXDzePe*7)4$imOx4*)B&uB)l+sVLVqgNZUnI0%nMpMYbjVBm^HUCehzXMncc~ zRBc;xqusQ4SMq}LW2p*0R9;J zZgYM{P2}#?f9!b073#{tiqTFi46MKI=ljY?KaqX{5s@2Ev{xOY<})mu;R`9YoVF9L z<$BIqF|~t_Xoien^cPm=UuyT>?PbCV5v^Ag1I^M#e%C5Qk;SlFG~V9cRtyora!mgj zOch*)Pi*tQo}paWHnr@3K9+V=tlCH$jUnQizAL_-g$>u3*S_@xYQ@j)(E^ji-&!sDARfB#?1-z7y4E8)~D$w~6p|t5GS-x*gwmZlc)CE;w*8xoJ zYXB|0O%sX0P{ExqtCjTY;qMs5-#Mn=+b?{F?JkS`Rakah7Pz1v)dXfq@-SZ>agf** zPITW32jO&r<<6FO=Gh12$`$uc+$cqs`6s?3`6`RT!n&@YB5in7s(!fGjxJCY7BB|` z!?M#4&xOBGUb*^>5{o#B!ywF3l6Fdwt~VhRQS~1 zbHiWol9zmV{g5K-Qj_2f+S}%4B=r_27gThtULC&YCzHb)tXkUaW+#(d&2dheh>#Sm zVgUc2Io~J=k1Q83cJ^?oPg=JiN_xkCp>P#c)%>C}tB@5)QpCSIj}*gE%3+lN1Un2>+~hPL-N zVq4nnP80h#@8sHo;M2XaipbQQI(r>eT>R!;VGW*#yvMKFPXVEo6>0R^U)E97(3)J5 z!CMj%qS<(8`_n4Ub5AYzJ#JfbfFpe6!a{YnzDo8z?SPMEWmE_}o#D5Say?ADQTIcx zGk+J7;^92l+$sU{D$ZW{?4-VLU!i8z)axREkiIhdFdmhaWu>jH?E+1gD9pPsx0ral zoM-Kdm;m}7r|3)#d*P%~gF(FVXwU_&XfGKZ8ha!KXZD3P7VIeovyknF@6x zaqzat#0O`8eUwsAm%BTm-hB}?Dk))KDaC1UXh3gZ%@dmOqUQ}|n7uMor6bpc5*%ek zOboEDuZQ-PrMo>-k4Z>BnF`$hm4Je|O3O|dZrz~~y}0+KyHB9AySKr?5$}v&b#R#H zO%<>%v=>*$e?z&sjkrGShEyVg_$lrgN0qFZurFLO zbUzsXHr?uK&$EF`Q9a=?#&_aN1k*zbSyN|zBpc71bJ0T*sAPCAt*b8|J(&rZs120n zw9j^@>Rznj1}A~)XJ3b0ihBoVcD|!#u!5Q!&&?=DmSIzYWSSK^EMC5CYiLB^$3^%Z zdcU?-PSYxBZrFGW?+g8SiAE&ui!$bm4xIe$qMIpeAROx zSPOI9m;wesY;On?eB(7AsQH5ded8@O@Re2fMm)pOPl z*!J|ujr3KOH1@XN#+0*eRY{P%4b47_u~nlV@6=5Gtf~CCmd*}S-+rO7owXhx1+CA` zHTuIYF3|pN;YFT$?wWvQ#W8j2KZy-5i&n!K$3ZX6qyN|+;C*RtSKFeQNn@(_q}-VN&mt-?-{qH%hFPJiNOtj)zY((}M(~gQn?_)R=Fydn+vdpIHUoMS zBjuM&>;(ExuGt4#*Sf!On}VwIo3(Fs{p3@>8qM&|;?(p`9PZ%SyQ%3eL;3RdJsw^2 zUgyvq(dkTG)l#;8Fo5U&+`=&FZjCAz#7S`oa?E}iv$3$aUy4nB zeO%z!C*NuSMO)Zzbc0Ni=%&G!qv5_CUnzNL$NP(2R@K;fyXBpEE$s9Pt5lrI74N*} zr1+5-m#qaj!|)VtCXyOYxv9y~9tPD+UoclPKJN>N+c-Dol1`MFUjI@>weB=m8^UFa zx3C>(MgLh)4nG@ke|HY8=$(glDUC>Vd88SLPdzy|1Di&Z8M^%+Atzk=_d9&RP#FX} zTz&OgTuarKN6|Dy0+v_%EA5^gW6EEuAyUVdDUg)igfi^2x?0~A@%**(TKzOMGGduh ztr3SA`3`L|#o2GjyDponq{XN~n8!#cszw?;Thjli8)#t&H4>hqPWng_3+*tsYIbXN z;_VfPteBDZWn^ zf8=2&l)y8gcOb!Ux3jxr%VE-=-@s!YhB8~n+jMaFt3)M7<($zdnCovCRPG!tkF!P5 zRY|}_{}x~{yuSjb^s{8xeb^EOoF z*c(FxyISEZphfr@h3+#4vAsno8E47rk?_DoXPMVscod%%fRZ}&mYIs4uS0>l~j zS^tU~1JLOzHz7gI%NzRUYA475@IuvfH~S~o*#YrHS01i0l0DX_&g$GebS!aIw)P^J z#M&j)`K%$uG8An=?3o51l?e)p`=%$I==?c6H9UIgNBCiZPRnmFj_&ua`>k&6VvL| zS1ZdktsDO5hR9U@HIo;Ou%|Hz5!MUys?)qnJl|hO>#}oKY7SfOLOF?9Gi4Dm`Ra^EU4_1m3+T4UyEec#}4a~*{A&US% zIUifj0+~xdSUwMwHv%_m-0ZQIhKsu*?yT4_m)Se=b+AAZje1%3Mobc0V7S^H=G_uT zv+juz5in|8K)co@Ghv#~db7}9yMA>ad2e|Ic87E=-N8)h9ZS*(9N2#gN@O!vQX5-+ z^ib-pkPA?Y2o8*&zrx`1;rU4y_ZW2eMFNk3ZbHNC@IwFXD75bI3^$*7HRiWuW~Thn zUaEfkGgojzTo0aS@|F1nG!=lYXrA} z%ncdhSR0Lo@?{EMSJOGN7>&-G{+>`IM|fLXTjXO3^RxPg+#;od1$D>ldJZp(_wBAV zgc>+RbsU6bt)X;=1gkcr_uW@mPk;izm8rD5^>cu!)vLX1-%ta1)I)9Oi(P}S=AzIi zzAMvmIq7pzVAi3-V}HV4Rr2lI>cM4u_Qm0>%M@Kp;6j^8Yn{b0co=PCI@amfOYPxi zjhP(9zJi3>YJZOtj4Um39FR9lnGlu-^i zsnFEHah}TDSJx&~(AKXPnz_d72_;EEu>lv3RqEONY2K*)!`bE1fMSlhmI=aURu+DQ zdHN+*A0NgmS8Bbw*2Ov^rrR5uL2SFA#s1@O(*1_tUd|;oRC5&{17<6-aG{)KiAjn! zpVAZrFrrf%goGYwAaG8sUJzqbhd>^3bN=BZC~U0X7gecUHzwk-5?n*J$cueg>vzt) zmSDErX40WKF*xwtnX57{bydyAGAW4`jk(-};FNykS(BBexSo-EcC7iqZBIu9(}~C^ zHS&(Pt-C0)4uPoqu*)IrUu^%bQcS*YxZ+$S6@pqo#k@W|`g-(bf9WD0lEb<|uzHuL zP8CQHo*^N7!8Z_!j#Iw#2S@hNgRu#$({8e&VZM7)|tl(VtXqQpby{0em$Bw zZ>$iE0dfsq_h6r)-a`V~^gd@%kOR8)in zKiM7tBHb?Nb(}V8p}6x1bY(NfWteRR?i|;}86JG}(E0i9-&yH4z5|U{EdQ^f5^e%K zc83|eX1f#F`|1{sYWPu6X}Rwv7QLxcqB+mD5$_*C5Wh|@f<{6qXZm>IS5WtY;${Ol z@h=3My*aNE@kv! z(?ic|-|dnRZ8obQUT23Lf+1JYCu`Li|<_onM6LPDFcA`)lBaP@~8WC0!P7cp&sNKz%-=_?x!NcD>+iHLR!gb7dT$?3Xvw|cCZX+)42F#){w&DxVq5t40$L% zGEUhKV3*@P*CHaD(*RW-PseO6d57=G1R8O!lESB5ky>o%Y?mM*RHrM8AX%y7{9Bw2qnV+L-q4~`~e}i-8D*oUX(Vd#m&!JWOfIK3odrvDqpgm^LH!^WIie<4&3EXs(L3v5Y z1PGf-6soa$Ej%_xH;Tp_?H2OYQ5Vn9J`f=Ht^+PX!pPVr9k|fky&ZbQgasibgN6iy z>H2B5Zc_>67ZIm)i)*jYpBe@Yq8el3Hy6L3+kAf?MoP2wb&w1}ahNDnSPe$l3;52s ziHeYxMj|Za*!SUBOi@^6Ym=b;(>}LR1A_vQHQ_@~b^VP|@P2fpsKp8(_a>-2)fyj` z&FjV5kkj}%<6s*;N5NHyY5FTyLVIIHB;stuc?BE)+-Uu;F1q}$36ALY@9DlV-9dFg zZXxdB6@B!EJ@&$XAmU*Y@7RR-c6?A(!4{rw0)4I0Q&ZgKn+4|0R$X%^O6!e#pg_3+ znbT|;J*x`!{ekSlw%*)iEO=%;YU&)OUB&(ndv6^U_166jqaO9B#8E^L1da+KAl;2c zO2^O*L-z~}jVLH7LrH^lBi$n+AUSjo-6$8eQL^k9mU23?hxN@w&8|E>5ta?MBtRyXD6z>zHqo z)czKHbI1*fky2f2kCMa!7`prUHSEspW0y|7Vu?Gmr*FR(-!ewj)Cx@T=0haYs#wKP z;?NcFV4jCx!whlH$$*)mO zdTn7+?8kd&WAUmsV<3vuqv*tScx9sE_>*X2FyDNrHnxq2jW5STI#=ndb-_dhh>TJS zNG%Wr!H32!VOsSTTQxSl;0-E!S5fly(wr=?^_iPeM@%2JEZs7#gVUR%qhnS+=-mVE#>JIQ zrf`495UE^-oOF{)+B#vm9Kp5>W#xXSogJWmOFy$w+7&sD4it(3{P(D}wWDbe-?6w= zQu!XUtQ>-hu}#idNBPyBz{g#BVXO5mr+T<#1>J#8U{NL3l7@UFO+@rZl=FO!9S(!^}?z>xCPc(UDIzpHcz#Fr6BYb+qI55Rud|w z()(mtqR7T0EJ7dtW`XiwZDoMvRx3l`i8|`|MJgDld=!)X&V#H>xR66VIywqvQ`D*U zBxmUknmNO>8p3l%#;aB>T@D>>&e?hCps&5dv#_B#s&_xPCI|WR#I2Tj5QHl$>8YJa zMQy5ES>?4S%k=60wra#-Y9X-%(=7uPYIE}gdm~5lTVDD#TRn`hZ^Hn?Q-P+TPE3_l zt=}4@syZ4dO|M2pK81caQnwk)GsiC2+R46AyRn2+j_ND)|4&^%aWzmL-se8(U6;(A zd7eN|MSpUJ=$6SS8?~K$?`v&ioxgQoES+cW)fb7=qt=qr@a_AtqcSVY9cON3YKk|O z?v!7$&ohIJDAWFaMFLwb5cu7xGJL=i&%38xXXy@F%eNmBN_+EAhJ?8!UTc{2bE`bu zt=^gR_hpinl8@LM?jFiCO*xMozpl3SPwC>kj&d%5vPvbq0uc_5JqKRTYBT@bTYSIx zq7%cne6qWDGc!%WxuvanyCx+wQ33sokrA{%UhuWHa|CgtGAsX7|ED2Q3e$f@yPt38 zr7q;Z z9C}@vj&X@{76Cpib6j#3CK;i*`R$vgx?U>FQzph|OlnYYTm(h<0jN#*0cc6RVBWTU z2Mp$w%o~)U(^1z`Qr2Q65#Sm;j0B0(&Q1=35W#=`L4!KWDP$$Ft~AAJcYSWmWAyinggC(G5GiC|z>8Gx+$?ZY-Q9Lp!rz(u1EsvI zIm@MrzTgi_fSP<-gtWJXdjypTuEps*4`&6LW3%(K^C|eT=KtKtqR&>Bzdq9C?@ELJ zpsth*eWif(szHi{ntA#A*BODEqSr5G=Odx$XL+NTzEeH!>b5W#YrxV)3&!5Vk0m3E zX;XkeB>~;y=|}vrlp;%NxuamG?X`zofVHwSNN(Q4oAeqXlm>Z?@Q6nj zq?unh3O0#n?uA*(ji?yNQ@UUtpJ!Cgj~!nBrd$lM}yX)%8$;WilC1uo^lUpmu-KT4)2)N>=VB9}5D zcb^vDk*>+G+*M}YIo+6eyDmaac0ugsls|UWC51_RF0=$6Ck=_$&y5hgbKiMxOE;OS z-}N7L$BtIx3%mN1-$wH>0zw-EY>U6SPLyKOYf0bCCv8% zn~Sqp;&GCl*N1wDWN*oEE#9Ow3%ZtPjxvY$?i z8bZVCj_=oVSU z>JH%J0$;z&-!g5+ZkGbPHtl`r!2xi>G)yKXj=y&aChj-CJDxUZId!xSiKP%phn^=< zTUiKr&jd#9<+E;lX9%WB2MZO=k|A9AqL-=QjhWXZEV&_EcfiuS`9D~|r}OqfE=lM0 z+yt8)hEHOzz^c8?loVC~2f7c-!z6~J>pjBYeR(%kB@S>e9m=`?Cj1r44)6Kkiy@0o z!_9(Zf`a-VDBhQ9Ag;nA0ra|n!M^3E@fC)e-!cH zWPbTX{lN(4&K(Jvg>Mcv>%s{<2}-;Ivk3g*ZGCN9cw5-Vtf`gCoNRra8=}LmDyFTY z92c9&@DUkVmOlVWmwRh@ErY6ra+FJ;mo`|gGF6se>T2GbV~<83#qxhns1kZu0dbA& z`+MuOba|;@jowjve|p!y1I&{*-E(OmVZH5&KO>9(slbc%`n%k>@DDb)@?q)Y(j{)H zo8QFq46?q~?wvMfb{L1Yc<*+g7_&HsZ7@sg>-;ve6o6b(GTH|!^4}?GB92Sy$M;Kv z;5IfU-?OvJ=(4iEb(;w5^D!)iWlrUmvF|MXtt3UkL;9abXy2Vhe5)8`B+&ZGy74%v zYHjSm=B0^S^GPC>BpENdwbB7==2X0}NGKwO%VTg($vm`eFQ1sGTfEzsG%mThlflVn z^@Bh5%xa5R`XOThn8bY8m+AbA!*}WC>~S;@KgBkC1lP2LAmmG%a ztIE)D38KIt*K9TFVC)<)EI+K z(#(A8lcY|LJ5sOW z{MkZwv}waV3|HykqAcU4_dGngQWBfpb4%hNh|tD(U}sz(lJKT$8B>s$AH@fE>D+!P zN&0}ATF?FT3D}Z>XA0W++%H}zb)R8lTIVxXVt$qhM`zL?3dY~huo6}8c=i?+>^K=X z2Uz%_v2K{a_3x+UlElHA6HR3qe<`hn{jd%ZDWN~Gchj>S{`AW>^|s3OkUdA33e{;H z>K2-wlVp+Dr}K$ zNMD-ViCd2*Ae3QJ2rC0+kZjULX4UOAD!hLUo&Ek}-WhRP>43gcsY6YDJDnT!w%f7u z)~~RH^330nD@dar|)lx(MKYhPxHK%`80E~PG`TI6R(Ei=4ua# ze(kM}SDaOhJVwTF#Iw6ChSB0isx`&pkrCyq)01K@Hi)H~_%BzSedVm(R{hgBPOka) ze@V}OqwDB^_FBEeMqWu@TiM3kEnrtyyBjM$JCZY>;a<`9<1?!W=-RGbXE0Miw7Qow zVJ$6tR)yHOiow=#BK%uSTx;Ac=4r1Ey%4s;t2{n{mGpqV-4hH>z@Ga(rD=4*pvotm zA6E*50hT)NBZ`B6GzkLr|LKSZ>Q%HEB(JyKJOkvbE{_}6KRx)lG5lF?9p$lq5LwpQ z78CsG0CX5ztK68X5|Owgp6pd=J(XJZ>0gvX6SmBb%8}`@c8OT+0j-dS@HQI7C!fTw zjCvoOKT#=qu2%9I*P!Qzg|GDH6tu`cMq|>~%0HbQETKf*S_d*W`F>%isOYs#pir0Q zt1qwZZ>(?3c+s(1G#y+4c%nv~k(0BD{nX~hen?E=Sgu)+|H0N+o@^PN-+T-*8cB6x zKWT)B`Tp{9aE13T^Y5#2?&IY|;RoTVHtp?HLIj{}3U85=b|&}0@C~6Zvmn(H8OqMT zx6%e$r?4($F;QdVqahn(vb`B0CsHS7`;DH6*RN?R%l&{NImhb`){)9`#JKcI_L-M+4hLuN)Ka zf%nvDpx@#0ufFSIGQ`Vk$>-IGF?xykKrw{nrd)(zc^)N1E=fbL5L2=?T_FB})U)6mhtndHm%^5vR*wDlQBvTTu135^5^B|&CW{)DVZUuB$K;29 z>|mpCY<~Z8@V!mbWl6$y+$^@nMVix!O~k{m-m~1jF!@c_rw0>zc`c)(Jgb}{K$e6l z+cep=mUHh*B@(U1vul-E1)V;)i)m|>;|txaDy-Mn+6hYk6umWtP(wXDF>CEtZqPa` zdLt#eT+UcJz`Td8w3%WSw%iQUr-MQZgzj*as8mXw^X_P<#cqZ_@%th)gj*H){%HK< zdP_!DA%AfzyJ1<0>tLR?u3!_c@1MQ!e8b z$yY~LpArpz7Q2}rj$jEW%QJ&D>PqhCc5U*E#s+Eyy zw9`*H`t1XqTSYTX)W=)3kc`+<5n-$(?9<2Q+DgibiFnr+iLUd=HvhTOkhQV35Gz~P zncS62NkrAUv7dYLP^UUhuHGvv+pa23C5H?xkU~oPlfk+9EQ#LE`>@m*ry^?M_Q`Jf zsgy>_T}fZqZ8Q~L=%-wLl*9+@-4yBGD-=EeH6}hdSXdxi$hs2hCrL_Y_lQ(?O!9Mu z-4yRDuY32%l4a1Gl=TJ1&e=+H1XH=}*}5hldUL0F8+J;o(#!JeCVHPAhLi~{x-Q_% z-QXWN5teom5u~f+7a3PtsShCfRh2uPXi~@NpVOifESy4mEb`QM1X@x23VPlGufb#3dx& zU*E`Moq)u$?>IXUZEy38eVB2g5-)i{Tc{JQuTyq>lsZFQ!xV+NYEm>`E&*HB+h3Kg zISqf7P-z&|+uy;=G;odlaJ^`HLQ>f71Kv^{2z90L=}IFY6qi)y-T8EbO~D1$mJ@6Z zn?=dh@@)y54>YVh>oM|jG(R<*U(lTEVo7)qavjnCnNAMuEEy)_WKurVtRaQ2?aqT` zs$^%T$IOxzGNi2}*rRcJaBQ%7{)#XucXJM19bkRar&h???cbID{IzLux!LYyLVqF) zp>&0mR||dSQyG$`1yQ|CU?60Z2)*u~UhA)|x<25DW-s?urnRi}DGA(xo}VhA*dObY zw@AUwwl{6~LWT8pUFp>LxNVL7P4lEb7kMZDT&89Sl}?h9qbT?=$|AjTK|h=Z zkuiN|z4MBh=a!`jb-8rm^VRC=p~cW>!N0+xn-fZgcz&&TWAQ2IiqJq3JMvm!vyuFh z2Xb=iS?8m6PY5*1+=E07?{2Q4cn+j2W~m*nubGQSrlmYUI_>%T;|i$GdiNfvQeeN-kmk}^r&Avm2a0Hpxt=1< zgd}3`Ys!1ZOki~J<_sP(a} zMiJdwx|uib;VCSi0i_j9(vXdhEPDpa<`bh;C?&dl#iN_H7ececS};}PJyQZZzWRFi z9uC{r#7D8|k1B#p(a6C_K)~|9Iy|AHGU0uSMX=gmxU&v9CkZ4AQZ29KG2&w+##1Wsy0w_3Aq6C(G~hvIrj( zvJR-4h0=vbCM1%rZ>TJFyH?kPtWKOIpVg}WSeNb`IJ1n|TP@;{5`&S1L?-VrozslK z3=bPl7LeImb?(~I2u+}o(-?-!ylkU={rr~rg>FsIGkY5y4^Ge?=X~$3zkQs#-!@zI zF>U?BYiX}=_FaDC`+&Rnk07j{Q=S(2*>6l?3u z=G48V^y|11ppZ=(Zs=QX`(`-9V6R7S4!u^S8d@Ban739ny|F-}is&et+s5Nh<}x&t z(2U#Pb?boYdprq$N%u1SmLqqKYItY+3r*8wI4`wWWOP=oOO7G#HF_9hY*1#qS8eKE zna6i;AdDU5$S`To`_cR@gVpJ4__%;(6+P@1L#QK1|FSP9Q42 z03~b1@?@`1#Ir4_z>0)cF*l4nYx#uv72$`z4K!&+K$XvbumF_T;g&C^Iitq?$Ku_4 z!nMm;t=@^}C^0WZmy$-xV@cogf6&Z$0I$sT$F3P(n|g#dGs}T=w)56ag_AE&uzGa% z=$)uFOwyFhPxroiFFOod`RDeuHp{0#0m}0x+Vi#_HvMcwgxOd}-j4mvvF^d<>f-F9 zUD|WE^=_-g#BLq`Cz|OBDE&;;Mcb2uY-|e+@_ejh?bEyGb{;jqZ~~C(YRa(jC#dEy z?^Ul`ZP>j{H#7Sv5st4x5bKJ5^GpRw@;l4Wqq{H@0T(`UlFHm|L;tg|@I$q<3qUwue@JuoEb-I`VcO;A?DEMZ!`jrTX zH+F2aw87(0(Q$Ty7G+=J@@x0ko3`#gCM`|(UBsOG>sO3K^xnkBX;1NXBETvL_#ywG z<6i^O|FP!^g*h2h*_bf{a-T#xGJmS#e0)m1+w*{wNBizXi_1Ydxkc_&(QKv_TXdNc z+!hy~%sTP)(ENESYYBkrHGyr3)jz+V?A+dj8LSz7G_$_$iVf}neh|`#ezAl~^Ya-} zQ_}_0g@qC{En5Fh%qJsgRyFJ-gT@v%^*&F#_2;E}!S;8;Yf)idlQr04w{!La^>};E zjpTBnN!%%4+u~2;S|Noo)Sf(qSSghOsZ2s6>$;UEmY$)mUGA~fSVhlV`STSpQ8qU6 z#uO-or1Y}CyukL>HJ{r|L?q?ZzEgy2P@;Bv-=;Y*aFsZ^!#@IaQatV0aw4)cw>aIT z*%!mfk?sjqAcvINw7@npCKF}lKq(98(qR_H!vT#$KFsY=m#X+V+V~afI<5enaM0Yc zBtNROB0U}BDXn?;PFD7H%w`T&GQBP_S!mgUx^$D7@(v~OyUztEhen}Sos5uRxh zBzX0GgI5<(WoWgA#k*46lDXRN%_zR~V>c7n8r-+#l%%h0)e@)3=iIN^d-dv5rQ^Y~ z6PNy?j-lb97iom+gNVh!rCR>@>S@_NdZ0|G7>3(M@=7xx+^TY2M(zORmSjR$(@|p8 z+Cp=bC9IB_luzHgEoE}BFf_)a>wFR?{{+Y9;-+C=J|1Q>2~+G7=iKfMauF0vxF2EA zAL^IvflA*|=Eb}|+39Ph&sfd9AHfE|fB>V|+1Wl9)X5n@2hQ$*ll>TWGe~AYQ(8JqWvWr!Rl_*K=-Z>P*iOo)&Nr=QYTW2W2F`Ry@mmrX~O-i;7O@Y=1Va z{_6T)qvL~cj>3V;ouD90LgEHDY$JzLY4R?Ij@KKp;qBZOn%Q9pTddpaSMi{ zmEK;d^z~%YCVB8GA6&z(X?r5y%6_Vwm>4b#u@#_6{-QU)_UOg9lo`~1iZ$A0f|NBVe)s5aJD^ z`6fm`N9#>eYFZR6LsQ&`iT0p7)208Dda z1##|`i30eUv~Lv0xfaEO-ubD!+$ z_JZck?xernX~k+wJ(}1rQ1>M~_FcFS0CX#}EC6y6e5-z`OooFBY4^sp#d{Bxz6PK1 zyWB=61B3m-+lU_{@MHpDlHKi<18?c)ZDRQJ@$MN)Uss$pP;s?L{^0o{N(Wx^!Ev#5 zGdmT`V1RfU@C=B7H^X}t!QayfbZxg+e9r*BFL$_bl}=CGwcVP_ zbdY(5E>tYL8Rwt)}GGh7y|S!e=a&5|oqT^^{V+jr~8J z7ngtR;$3Ct<$nPFN@>Bz6O&mXiITvLky(+Vs-2qR@PG&2K*=ZFB4EW2{R_Np|D&Wz zL7>ul9N}j-a#`Bu-H7}9r+UX@NMRd?)QU1GZS`ChD7S#@2qUFrNPSRCquShZssm_K zg7<@nb3ID3BLvq={C;RLBXa%UDg3Px(!gPqvb}zhXA1rXKR$B*MZp;MiUi*%%d~6| zuis1bj*L5*-T*VO55-$I;3vKjK~1nWQjCDsCK(GJh+NQyec^w;{eQXZUW#9-U;||d zQ7OgI*Wi>wV)}O8VpC2=WtAl*B`+n7iDH~r|Jg9GE8>=SaA@ltA>DTi3@UZ1&Hf-5 zU!YU!fGs=&h4~#A?uZCaq>cM`7=J(Fc-UwY=_Y9ZYdLU`%6M)ztd(9>)f^Tdc#~GZ z*8F?aN!Vi{IlQ}O3Ov%HX0JgE(7H9_uQrya^yLlJX zl`KKa_>GK@x~vRzJ0o5gIm+uLDbt1h%nrx|gZkL!(fzHZ+o_=+1-X1v`srr$> zp78TSPxjAWp#5c%nAvBEvB^y8Blp=ILxyk`EvCXR>rEE^if_)vR9-x>$W$S@ZFqs7v|?( zF@rHv97}Gu4o`c+=j`eZ7m%oPl`^gV@;M2Tc=uK!ks6qCerj3S9yXc0{&2evWGDBR zBQ@%54q*LR@*tR@!o*75gA{D{-mD6!Fqo1Y&=>h(iRvD@NUL_`d{H=s`$JX$wxLT_ zE=C~{hCY!Sk2*Qp!z{IiQEB#TtzD~!l^6*phsU1HK&QOU&Wc{YZqBsI@bH?V=KJY= z1@FkYY6VOu^De+Va?2Ak6!(z{y-o@fOKWp#vhh_%KbG{*?2iM>$;imesHFPl58^Ys z>b#WaYL}RzsJ*9f%T&@mkufn;1tl_>9A!ZXy{6mw)BidEx4qzBG#D0ft|`!#u~9(dqP z$}DkVC^6i6e4r^YwSXvWQA7;w&c~nq(8ZmFnc00Q4YB3PsqiE+(?o}$V!A<-hexx) zXhWOU!=ma(Q6_pTF`ykVQ(BEhI=jbiT%&% z*@SwkPRI0f*ACV!?4T&m;fD9#ti$BZrn8~gX%yDpG0L=prO4(`zt#qc+*~plev)^~ZW<{?QXK!EZeRx6#_7@UjZ!#I9U2A1aqH zZRX!}%C?0(eNGyoOh`_Ae+0Vsv(fhw4s14VZ@e!*|G`-oJnU~&3cb*S$>W^V8mw4NU!{U{rKeu&H34cUCWKdW-6P`l{ZL@(Wz^SD)kr_Kj6 zJnY`LFxTJ5<*mI}*(r+qW&;{$p1KUWH9>Xx;Xj~T^(h1Wptu)c_E}#)NkZ}y>~St1 zLw{-eKRpVlqi*tDFZC?!!R7(>kd~21Sx?Uaw{Q*}NiNrpA>OGC2)MQub9y>nQXN)r z{&~r5^P~Iu))=!~p(kw#JO0%L zjXVib;1_WF&fSDs{~^ofdhAV7Ra2E+x^q6iLOzvv*kpHd4Oy>+8;2wcNl@9e*WeFO zpPV7#zxD*~qP2~-^_lJJ4;jzaKP$a#z%7%d@d{KUM6T(7NlrX$vswzFNay}Q=BFpC z!I2b$>ISrHRW-jNxm7cB(snYcVsW2u>g)&T5V$A%;_Vd(+gbM>-nZ{l8u~EBH?!rR z9)i1)lC7Z|X`2nOmXi1SRS;C;U>&VDm*r_=))Zx?tUuv;>FF?Avd400P6TU|=Jo3V z0;QQ=$BnXf4SSzwGNX$$m~)6Sl9IglU#6{Yl|%F^7K^q*PDsruhp&i7B{^hXx2N(J z%SiP)fqgWb>F?^=pQ}vfdFBz=M#@%mmbpe0Q@7s;$$Z>FEdZZw)xSr@idc!gPFVW- ziwm07uHopjA?=6e4hYY5!M&n}-Pjp@b(xAHk;7uq+nK63vEwP@L&DW5S=6icO11{W zOl8|`v;4a4k=Raze6sZ)ETDr~&wXi^YnQU?ip!MASSPzW`K3z@GA}hbmJ1@t z<`9gs9Z6KIv7)dqhWn7R8^5s21?SQN`lxvm$5qG_iz=Q%%S3_Jl+eq{G}~KUNx?cw z>qN&Q(q!KTj%jqKIrmn>iHV|t&r0SKT~XZRxEUquvHOA+z(rp8HJq*Q$0Q@ZrMby; zXb}eZ5SzccbOg>Wo`ibD&_Km)!_2PDTH|QcRBWA^mfK?ALSFEgN98n0Q|hTd;i~(} zYvVV3u*nb4$wR0RW_o!%>qQ2s>j@K6DDetMjsXc9ucP3TwQ!d=Ekdm^eGLt={SlcW<~KE*n*uZ1~&w zmkxR2Whgjg^m1om4b0_5`r(bp@2g`DH z{Yf01oLHVdRfR^V$Wsg48&1{LZZ?u=%L!r=E{gUoH{B?#he~8<*V~pFa&}y3Sp=(j zAUd)92!s&;d9qg;!Ad)os+&FyVsASS5%rV)aim7_}#rrMz*#~%;bH}H9RbvOaGL8+Qd>z%0OzE+6azQ*^&H#&cHuvW_l(y7sXTUy=Wnau4 z-|f?0mHYPn+m`%7Zu8SyBMoJT^#m?Np8N^o~~Mu19RBl=O5}vGFJ3 zF{&qyIJRW3GvgOV+@J z`M}ra^vbDaEi|Opihgi+06%FTqG_6M1i6TX4Fy8zSy<9q%`*BL7_<=IF=@={x}(tC{fcz%(%-2msXOJrw|Rzrc8mb z@B|^Ww8XL7I@b-})`XGE@l@Fy)MM^9P=Rr_KV_tpOKh@rccZ9Jcz$Wb4KKe5p1BY= z@7mR!XBck4hxQ`|I9x4_TVhU-S$MOMrAv#19C|JsDe@{e$Oy}0+b^k41 z{O*i@`=>`duXMR6Dj=-oK5JWBR}^=9s4kZ1x*;jhqK4nZ8PvSDDvX=nTH`w0j^VVb ziWU}F7$6a2LrR)U^~iB$b=KJ;>pg=SCVpgJFOK7h&_93s_3?m^oy|mz6KHAcpV0*j z#qlN4dg~eTNxh_#_Y$VVf~CSqgQdcQZUn52fE(aL0`$KT^|fV^11= zVSF%AKjRJpD0*%tu5F)&8#8!mRlO2pc33aq(}Q4D2#ba%O1Dx3IY8={o=D9r|M!5g ztmmQ=-ANu4X7j5Q;-G^kfNm@fg1PqX{unfNWlJ=$!Ge&&;?AxPHfA=L?8*51U>STs z@oB;`LD`sdhA_c+1j4Noy9eWgke6DaX}LVkro>o|tp?F3w((-qEafv^V>f9Al_bPA z=5>d<*Xd9xEL0VK@BTi4I(OVSRH1e^`n>=Aq_i+Oeb6%516NRl!m3R%aWF3I+Icl> zg=(JAOK6fc5k_h*3{p`Lb3p5IC?^g5L(wC=SH2T$ZpaU(;o}#bN^gbZ;K{Dr@ZIdjozWd>>RZ+tm z&~fOGr9-ua(2dW{ZWvcys>sV5z?1N|7WTim3AhBytgu}SMet1uU0JHObRBT2hz zgj|xK+o->l)9$TEt%ZdJs_v8HBt%VE7=(qT%O-cs>iEQs`QGk+;ZRj^ad!7t+?#`m zrOu)JL%ezqLeH&*QO1WjQ}3c7v|0@UY0cLn*J z(RJ#`J3`+R%XNlCLGtV2I~l8GFuzGbO^zhKQPo6<2IU4XL<7(J1;B%wG8iko{Ur$_ zxCWJ#k=1vbo7>spx)LfKm)2N$0P)m5L7N57zMhl%oT_y%0MZIg}}v}oRLIU ztDS8Gr4RPxoZFfd^4Ilds4JQ)l1w?gB7G6tThRSE{3UCxYyJ$<`0Mr*+mVVG zwk<}ivkGqHgG%oE`^?QnzihhSko*lJBcoc(k7kB@H=2R0{8<@OGtE{rP#L_PpUs7`8$NOj$ z5ftd}=KO0bE0b9eNE1DZt#BKow=u9oPr%};{uX8-8 z6cFbAXWhzYs`H_Rd(?uiZ$x5|QP&z&it3Np4&LdJ=p!f|U(1fW zrhM{HjE(czxXao^L%5$WKD~;c93S{Hx3%Onx0gp0^9*OT&@Iw(C1`&Q!@?=7Dpo7D z_)~3o%FvkvGT7MES`>?jF?>50cw>nfDlKClxY6BIihl}2}E{c1}Z@@_rYmOZ;<4ZCYC`D6o06mSet!YKU)Jcqga|5Xe(5* z<9t9<4fk||m-8(%*TI{HydedA!sYnk73|*1pqv;^pLTyE?mt+7ecLTi+;pI&w|6_$eF+%y)$Zq4Nul!bo>MApb@ZjCrltzQ z=R^B^UG>iGasaYgi3hICDaWSr_ECFa<(x+Gd7Lhg094Fve*;~ZTWcz5x1TxJ73wutF_s_>Uk~dlWOknb8PbjVp9TKS(L1ZGYlGajDs}2LbIXR+!r%k^0xY-W(->@d%N1Y zu(+kyC#@yk>da4UQ5JDC-UK;uQ});<&>a54ezgM#;|M9#?S<5}jRqmJSljmBX5+H~ zqq$>XjXr$LB`d~!6?3aKwD@#IbW#uCa3)pr{^PWW^L{&`pnkx#D3%j!1vZIuy=Njr z#XT+D;%?rx`ZZn~zTmGw&`|Ic8ws<~RBxFzjjCDkiJb0P`Nves)O#N!hEYylu67>| zjnSUyrv%jN!_s>l2Q?dK!^sWnvtP}$8_wHKW2R1i z*tbDw>p9^A|D>6*HEj0=BztCQbPf(Kbdc!L@KzNW(JP5aP-VJT6yOTv#6z0m>JPf1 zTONBMGe{8r*vP%GH@|D=y}!XWc+Y}cDcsQ09p>b0|EXr{<2$;vEFIt|2%GX!PwS;% znJQ;6n}t&S#@Ryd3zZ>LF8cO1QVH7ufkj=vh?ad=DxB#z?hOUt}DR;*Z4$kV8B%c9LhAs1_x<)7OdLWg8zZe6RI%*%<+XVm_46V_VWLA}%Bf%~(F!F3@T-3FtA86?mHnywvM&22Fco|IEn z-uIt!OxnSa+sXV@2sW!sxQi5|>csk8CdlfF6Fn}qyO$0%S&gaNYmrQoB;=$_-U!Fq z-uSiaxq(67>I#XlPPchA63-@T>9*ooDlIR~rD?PX*HjR7#sas_`H+ohsZ?G_i0p@g zNfM1BV{A5`p2tAh3A5Yb`p%@40!H+3g-gw{KwYMIhuvnP-l|n$3L&54TN}UTqF={j z+LCCo0>wSOPD~RXU;#2_(RO0)P1Y4Zv-x&`UUJvT_7s&jN2=gu$Zo6W<@H?d@O8Z7 z0zJ?qRdRg)$e`@2ExTJDMLE z#>>?Vn_SvwYWd`QG+{x*3V7#L*-4%TTN0%Htev#qu4c-<&Rn2e^QcwdEY6aG(-FDiP*ReyB zVMf>LP)3tWGRlHmIXRqokc?=Js=p5~5)LMyme2Icrg7MGLPm z_Gsaw7~XYPKb(tfk1q|aTONyO%Q>M>efT^t#%pPQ-n^n-Jr6_fWP)z+^Jdlk3U2~k zE03;JUcGvakfuk7KRcw4dzI%ekTC7J$p!R^993dJIB;)Gc&-JAySPCEVak@@8vkk%4}C0(6G*IdZ$iC9nu0k0UR##cz$64b=(NKb*^DM(xIs! zgM#RAZiWi<`#sAhWe&OJcDO0#+%`XYGD?ebb6-vw^Z#jUB5WrmZ||kQvjw1F3qg(W zge@J8nNxS$_)%7-7hpNf8}Tj?5aRFqWZ=aei7w-_Oln{!ZA?$wTOZ!cSP1{C>*Ko! zOpWu0K*G{=Pax-W%j1#qnVCs4MLm`;-;PP)td>(mZ5}^!t4aM4!B~4pBTPe1OP)Nx zvUv}~`-q9j!~R?k1`pwhijPOZmXhXbd~-<4#{z*1HoIcx4C{QjeUN+h(fEmu_ukPB z*vSmmw!!9r`<9;EsQ0g*K+gzkeUk7-K3rdavIc;8?(nVrf#lyzmk~wg6E6vrAR>@7 zYduk7?A>|$;~*Djsi$WhokmD#AO(-LPgXXQ|F3S@Pm678v#c<{@9svf5x`)K@H z>u%<}+(?P%AwW%l7f5qdz^3V?sftJ~EHLl+*X zBr9wr&6Je)_9!QfO@DmC-P0Q$DR!NFh9Ct#kjEF9?*wl^Dx?85$X3GC!kyD!LOUWp zN9t&4@r=9#90L$)Je-&UA}rhl?okyb(}*}0;|)RrmK#}cg8Vc{7^|%JvCi`j;}Idl zy{EFZ=iu8EwTDSXF>?;ko8O{IzTy=7ancKkvE z?m^-cGO4l@3|*YMl7oezLr!H@ zUZO;rhP2-E?Nt^II2@jK4Gwn#iQ@yg>1A(3KkCsG^6>OnmRnWO$e_EahO%BN`hd2x z=A$2$dJ{e@`IdrA4FZBve)7xK6OD5WhqQ7?r(WikeH8=WiPJA40nRtl9@dYCv%esf zmg*jHn0|K}$)y%sURh~1w|0MdYfzMvo%4sjMS?B|195A{&v&RW?6)M4VYv7}Al#9T zm7Yh0kC{(DPYpy9Tt2INJMK!deA{Mk!F$%^B=m~I>R!~+A%q|WaT`5MzAYSgX+=|HF-Ji&xh#d()Dn-5~HU)7lub38>f#`(Na}Wm}YO`^JmOqo~}1 zf|4R2BBgX=(cKLq-Q6)ND$;_4ba!_SBO)N(3^fcjzzi`kF!V6%gI*HL*D9fe|vaEW@x%}%g9p45EU#JjbzHQ!)A`x3(At-E&iDH~XK zz*Df8sE1bd6jbxjBf2}M)os6XZ@mr>M{I5id<-(VNkR!JpDTLe7(DB9h`G0j-B{dQ z{~43UHl3YDs$#LaLaek{7N91dEHHwK8(Eu(JmwRV;;pTs_an)SXHM^K0&mOa#)X}( z@?Ua7au3AtPVsd1yz%29+9`b`*RPHNk*B{}{6i`S{G%MFTv=YQx}Tm;nFWeHyUkkA zev`y~iDGQrLA_$|ZVsvE2;>%2!Z@d6*29kWY!AnkmxuBvXG;~T3_sV88|#F5$z)sUrhH*e3FTK}Fa@e0mIl`m`u9 z%DcD1BKSgpk53HQ*C8PM%ikvBz^Q!Du5WYhH$-UjM<`fd^7;D7Pba&+^yOW)F$5yD zJ9@py^eJ2O=^Zu(@gQD~hL@L}c*qmicLbp=Z<{mbOPOpdIac3}7L|_gr^b%*LKve- zOoz@9ITnZG*F}845KG}(Z%l$>&cxGw>=tol3MhQa8u^A(V^Lh~COxUj-=VorkA&EBj38+z0C>s*ODK;4p?kKQp_!u ze%}QWw_-`z57%1;n2AHGLsdX=^4~oI(QK)rR2j)XWA)XvFl$@$g8h(}hc^EH zeDKfoQHr6;!tu#5KYr-0ETf)e3^>uh?zkLye<4*{&*+&H!YECAE_FcgdvK=cb6aWY zFKKDe<{dbs-j<^_u%#|iGEgbTe4u$N#Pa>`_4!!+*ehXl@|Icls1ey}^;hSs-41br zEqA)uGGdu6s_4+UNp!yc9=C)}AC|&*?*THyg{vdy0_nm9E)od|6#zrj$^aXZ>fjFE zYp9?7$nrQLyLVkb*K)P@jmllNbfoH%Zl2qJ(&o+{hiXEjpCmtt0M``+hA+~r1pl{a zY6Xv$chgp$Mx|pZ13$XYndRX|ym}eeHBk5O@feh2HwUq! zZqtT=!DpY|`~LlW?!;aE)0~ZH&>}0v(ZUry^{4ig#O&>@*>;*i78~h%iT(JI*Kq2B$%vhVfRBdVR)wiZ-Y+|JG#Pgf^Zb8?r?QAa+UJH-H zSdB<=i!5<&5Q3f_8&)i{f0+DwVNe=~0O5n_-|+Dd==tMg-wrtw9rkwJHs&QcS%zib z&*iXbc+-93;$}B)LjM|9yk5fg*?2a@Y07uyZ|L}oH_g-9QqthR5*N8XQ%k0uD0kBq zjX_W#L`6jR*B{Iajw9RKCC@ER(mQU%#vGe>MuA`av}E5i^3T`*ls%eWLIApXp!mgd>F~WF0f$}fSKDZoBEVzU*-K@8EIH{j$K{v|6J?)ItK7OpNIao*~%x5=Kf#rb!ECC_SG zD)}j>Q)50}3QBMCl@>Esk(*?f;BX$>&dIse%=@?0A{;<5g8l2TfKa%K;mlAF8AuqL z;qs4CeBEUHHuG|7@XGTnm9qn^SIbl5j7U;4E2*+bZuzuV zp|MY<*`4)2J^L^?R{I%@bjAF^Lrex&5vwtIx+c!`+^nbTA*HNv>fk;2q0h}s&&TPy z;Hzx};wROof8(d?&r1ds*-IK=-sag((ml3lYm*sW^CS3eb5T4swc?C)Q7bHlGp6fC z&%>B_5qfBcYY$Gdn(HL|5WXeM$(BL!LiGW{5UD3PE6HoqUOix&)I@Zeg6tNWVBC7n z3j?nWGR{Da-%dOdr=Ptp-%nVMRgMh{6GHkMvMT{# zjX>1*tCNe3_dIVLhJCz`qNXaLbPU)~d5|;%G9JkSkit-Q;nvf)onkM8*>5lO|9lOY7>wYxyS@!2x92dONESAZN&?9#XLg;+8%!* ztklJ7@S-T+{{GL})8mC(XhhI*c}}cXjCmv-jcEPtJ7fp(sy~98Ud>|Se(3t(rGo=h z4`*(~bwp;Y4fWN>B_#AMTD`OU@@51-!J*e`rz`zM$Ln3Mbny6}@BG^j?sIl4%aefE z)J-SF-o#WF2#qQrG2pu3s_@eSz55sNDJA*!8dS$RTdkLj=}O2IS>-9^$$Q@FsC-OL zjB(fMSzyVxV2DzFq4dDEZibmn!!mmo9li^K)k>=7lk0c~>o|khZvk(KQ5=E{-xL+b zc*el4lFo z!@QU)ke=CC5m>g1xm*$ zxFz|7xWz$gHb#%PkhjTn*3x^~aL25?V5~af`|qz6?LQ+Qa}Mi930I>^Qv(RE<-ty_ zgr1O-(Ge(pF{3X?OZKtguae`F(@Q+Yxr(sh8)Gjc?pzC?L;S#lnu+@NaZ-TCIjQ)` ze9T>!+FI6{t$QhUH1!OqtmSX?pw~wz+0DOtOpq(af6u1nQ4t(v7tOVkcayO#a#AbZ zc_%fNs5z$EoKmzxRcM{{s$j^Ob%$OmI|Th)pGuUWqUF9OtrSm(7y}y84e~sZG?jtB zBRpD^+Kz9oY;HyH+=(AU|5YPGLn!WL+WuYZvyu1HnLm@7OsS6>`)!+eTNCp*L;skO zyNRLmGS2lm6rL!_0S;FD^H}mv84dn2UgrrC-QWr+W2yg>x^ex$0bb(1vN&bYvs@Sm zfA*}_?H-_cq{$A_j@QX{KPMBqZ^5m*v4wteBM1CK#{Q|d#z6&<6$RdS@lw0DM3t{K zc!~7OHgy+vsFAb(96e?>O@lB#q2iq7 z9I~TbWu#iCy}RU`oNx^|g)^FD3tW8vGVvU1d3`G9j!jPbVX9-Yi~Sl16aygfGpMGA zB}?fT1P^IBO=NXvzhd6-7r!=a2OOse8c=Fn2C4oiNcBOf@mn$zKdP4+=j!IM{?Ee) z?wc!%jm7HAEdP=8d!6_kGsCTg1bYMCrhQMSbKqj$=>JC)6j=xRF4KX}B{>Qnu?r|N zC|Eu&a`%uUGN^Bt4~AX48D3(dOaHFB6dden>*IL7>b-GR$<@~ZX8btvclWI+WSYLn z++ddPo_k(2^B|N%sFO}r81>H7QLV_BbQ$g}#VP+d?=B~C+}nY6Wo6iVFWnqh6sKw9 zyD9GSTBCo9`SPiE^v!+ecY|a$A6c5l1UX+abewv|ZT5#np0eI=v2#~S^vX)GkQ4Bt z3M|cC&t8|rQlY$QT)-0$1y8_HUOYPg!d0VpVJ7`44MvpG&GqE*mH740@v7jKUJ>i} z3RbVwL&Iy#wR}FbMdp}K=!T)8En0THUF*rHHsjge<&~mRO17~d8r2jUycT_8cmB{T z3JairpC?2xudOdUvL1PLZgR!Ht^_R|KUUD2zRiunoqc-TIVbNtkM}NIm9(PgR!B^y|C1l?JyB0%67+A=1+uHaU;|{T@_2?R62-Bn>4*a zFJ@eGy>#x=)aTkiUBE$ z_dc^+glp#%zbE-087jY?IVu!-)x-02-gD;RFqU3sLJ@cmG}*1!bYv>P+8p>t(%^?E}vslOEe?|2tiv4&GXSXR6r;%IwWKyBwNc z2o{vvP%{>1|HT~!nJoz;V_wCSonkXa)doppW|X>)PSAqh=n1`SSeT-&gXr_U-n%zl z%Gr4;zS9+Ih}hUEGj^=+6u;>xiZJ4M5;2EJWi_){WXgZhtw~aN1Dy5;z}Thu@6Sbn z4p-#|nH;o+i0Is6qeYpH|66*V^1wo~l*&hpo{w223~is@CHCByo6NT z3x?x0Z*AYyDG-dOzowFJm1Jx<=9U@r^ke(*-b*8{f&D|$o47+AHWtN_`Hl+6 z;nSS1<1d{_A_M$ZalyfXLn?O(&C=}6AF(%Y-b5P)yN`adOj#pV1?_E{3kb*!71QXC z4@}5crGI;ea8(8mQ;^q~HY2qv5Hj~MM;=qE4Zf%EK7%Bd1%!Xr|9wp_=_x3a(~HDB zb9H=W7Mc<5uZCxWi_aPT4)$zH!HY$$tlX!OkYEy7o|O{%`vz*D=`ihnwg#)`G^nd7 z?f3b`fp?OZoWPc4n;?<`dWEybL`3z9S_l0Q2OTmcEDd!YcqiWx0Yh>$b+Iw!d&;o` zMtOcam?w63g+JS!KlJZE#QJz$M(3G8C5VBI#ZcB!-K+;ucUJcL*XufIFGR)Q!baUu z2JWi2pJd!QcIaj1n-!)-Eo6q%8Ku%2rN%-!}jb@jL8?|vjQ`QS=DEH1N@P8?Weu+C_RK4`;HF&G$|6j`j=+Ay>1kG>1 zx-<`JC=MZp@6+X5ua##b7)Lq)RW!5mr~y*X7^w%l*W-CybOyHjH;| z4kTq>_Q7+^eJq#qJ?60+UW^g&!$9_mLOJ=N81bSRds&>qB$Qd#<-_6MOKFx%dI1<1 z?LkrJjUL9HDz_d;i$Y&7s%EZ5@pIe1$=o}@#>tHNfBR-+uH^4X@WXY1HVOvysYMF4 zh)$#5e>(|xF$H6&4Rz+%S-A|d?f40SXtoud5(OD`41FR z5{+$YOq#Ai@y5$x=o`K6`u4B1iBC&HzEK%CQeLYRypr#5EqlhyVZ5}!d7gBiCW;gaxJLMjp`@MqYOQ}lh z+EkW4e(R1(QP2n3;HIy(z;A=T2uNX8%$%*)7Pn)6=(>m!i;n!7(xgg5Qu>lMcDMMG z7YU-}GXXCLpQ9Xf&i!Ynr{ys^I+3(9%7Z==EJgR_gY2}3gC&C9e@TzQEt9*fIGF0$ z@khJO#)Z~dK$k__ZFYUF7-pWqH6 zdM4_3?=E2%R~_mj-&X0GJbyPLWCz;a6`$52RjEeJ7lfT7E}bDHlBQs0q9M-aM` zW70By=sqRyS-pDVFRz8jGyXP`!2E{5nhxqrJ*)auV|#%KO;Pg@uOD$^+i!M{uXSSR z_4#R(XVoAgHMj5V2+qW9o`Ei=X#+vc;eE1(FD)A)FFB2w^w7y0ckl4l8%o@PM~d5S z=54VkI`Q;WT{V`B{LQgo$)1PiNGC_qgKvUcS0822_i*$Or}{So@UVu4f{mS^G*FJj zevTQv>gRDY@y{^m^X2DSQ{PYQU3)#K%j(Ed@ic?InQS4I>fsUuk@p4+tTI4L2qaP& zMPstJJG=X!Ao_xBvdZQbL=`uZnfvaK*(wSPtJRq9hi8&F_oya$sTG2@4GAY;Zt_$7 zukrfshH^|3E&NJl*m#8a@x!|-WwiZ^b1gvtwttyb5!RaQ2(oC=DT zjkKzzW0zbL-c7Hx8t8!P4IEN2F)=^?#z|j;3vOh*;ZsB0u3O2T=cSEjoX_M3{>BhL z;vf^q?v61;-eAGsZiVU+1|WX6bV&JR;fA7I!)|T=y7A0GMaSutflT=sdE%zhhYIT& zOEcWf6*cXZ#cfW;HBnmlhR@AfhF$jNEb1!+@woiA7tG9YP#FtvfaBq=yLVxBmI2u0 z*Ja{n7s@XFyZ;)Ne>H^zfbRJJPo_MT7eh}Xc9nF}aW0=km{eKsWIM(G9N1J}+5>P! zDrm=o;hP!{z|!hH;^Xk2NLB`OV3n#HzP`u6w8r%6BN$3jN#Cq@y4Gyd-RDwZ3 ztrXSWDJCKUJzmP8`9W@AYik?u-p%4|VK5Z>g*L7rRZbYaxJ`BM0pR^awSqMTxYr3% zd9AIF(H3DjId5FlXs^A@Neka?^~^zjbu7z$dziPjg&KMCOZCzq1BfI~{(xfw1|UF| zD7alM>Xsq26oY|5Ej?(3dkh7HSx92*dhk%2wx*PV<-yt{ZAHsA zrjL%!?o3kLZSzkFHsAzXjE^P6=oi7G=mqxM{hctw?bcJ~v3rBz-UA8Y=gm-E`Ze{u`>0di9~Mi| zQ^xXFYF;A(;;!qbR}w?HV9v_nKRBcN{luCEw|SRhB&knZ_*cl7o^TxRa=~~+s{jF! zcf$eeBL6mejZ}FPLpkbj`ay?VNQjuj)0P43f4I8Rl*DN5ZZ9BM*;pczc_^p|v^sWA76k^=cjRl#IlVN3XZm#(+^ikm0%yoxkxvpjT2Hilb8)a!T{_ z!iooC-a=qBQgFA0)BO#`@UXDc!!5I)T%t(Svp?)3=yp=;h zO9_vK&Q$t_aawUA5HJ5NN0uSn-nE8C(VuA9AQm?K zS8Y>g1ql-k*HtOi%92DD{q%<}O(@;<@DM?+086-OexIeieYsC&ux_RXBjnFka_w0T zuj7{yH_}MNCo-q>2NSZkCxI_H65~?+CTeGYsO0}FPX@Ykcn0KchGD3P$L8-)zWZdH zsl@XSK@ztU&yWM;r3N)UgM&`U)x2$|a(tle8;#G6%O9<)tKF1zzg#8lbv1hSGE7A5 zkgoA8ImL2mavCn-hUCKhX6|0fA4vD-6`80FM9w4He2AUfzs&B3)!f6@*!v^Zt!-c<1YI& zj&FGAjjh6;y`}gD$w2H6--KHJlP7V1iAyC;r37}0&(SoJ!!}v}#+$7#aH*5^J*-lq z;?2{ZuMwpg5|MTPGl$h#0mV!!f(vRn{m(DgSL#L!F zBOzL|F30TTo=4T6KE0Oq<}y3Zw&a+V`K-V-xf4oJ1tl!P$))giz=Aa*SX1pzMXalC z%(a+W2%-re66x#hLxQu8AeXS#JHNGam;(Hw8mgxK#A6E_JGJ#1(6iqFl_UL39dzaQ zUPQX*22}OD!K+58vAMZF{e|UBT;EJX_#Cx+Zfz~+u0`*8uq>O3Fmjz;%nO_0yYXi9 zWj-nSdSKsec%+!K4cLV6`h9h)6ok-Xb+mAv#gveqzq+#8BmapeGbH31(rc_XG|^-M zg<|3<(=yRyFQ6ox9@vZq{%XoIGTfazV8wWt62JW;tBRK_Z>1jZ%#I@n%tN52eO;x#0~!OiFWy_2$o82`Pz(N41d?x>JIyi{fs^eQWWwwrC;Z}ckZ^}h|f+KG{g%*$<8LQwvmz{Qch z6dTiVy)e>!4~LSoJJ8FK#Nqb(`aBuCfaB>O8j4&)a+;y^vb|b1}MdWPiSKr>h3Y?GG=-J00J!2ER+pH z>61Wd_2gh%iXZsCY;7NcX{9P$xoH!_!IO|C662y_@)#Jas$sgSO}O`L1$K;2dltkG zF{GG%z`Tg>D5Q&x)kNWIR=kZ)4l#Y)4>wTyTdjodFX33=D6bewx_+-a5{-5{9QI7AV?vc+lbmlbWF=Q#V+ME5A@%xD=T{JLmJPb<8j$m z-N-kf#aVHx*4QGrl_<5_`b{K&6KzqQj)nEm*+mSV#= z+(+v2C7T7oQdRNgmG`LMn_3Qbug*D~`E-4e7#k zsu_k_kII$g((vakPH~M})4KDpo6r97~7ieAeAnsF$J`}8&h zbDee4XlGUi5c^jVK9TSKx$%9qk(lh&?eYPrXvO=#XK8I6qos?&Pg#BTTn2LYOIm zQtLt#%dqW)aSL5_&N!{r5IGoZMoG~a7uX`eO_4^L|5C|ehZW73HoY!MgZPX|&<6E$ za(|zmZHW$YKB_yZ6B}DTCE!w%pEj4x`oe1&edaSNB5!PQ4lvBu?#Kr3(%B2G9M zirpD`!}fAu{`>{Ca`|h~P&0#&;;P=gzOe4I@E*^n?hCpH>9b4Vs^{A znF>6HF)}q@{TWe_V@7N;h}eEkwD5Czx8D^?E`*lMj0XS+XJB3D%fkg-0zkWuk^@y% zgoF*}X4AHJ04}D>o$f4;EeBTr4xYyR!bZKY7r1NNn*pnTJc;ehfP@jOBscvMqWcNl zkzDiZ(P^paG3;YP1Ffr7r_K||hU(hd{qt_qa}ec5B}FyTZJI-b5XV2`gjSxytUDe% z^Qh{(4fMANIm|Or61}(Lha`id+jf}IDeQdP3W{*(usQjh*IsGSNu->L-PARB;gvb) z(LP};->4kfpx+=-Yemq>t8VF_Pwh{oeEI?$HwB32{b@OV2%adH;<9ukCr$Q^YsCo7>*XmPQ8gpf7r(1g3z>OVri! zl1$*AV>2ZTdz^ltvUIoGgog-gu5SfxI%O2lboXpIKT(Qw@pefUTD^{k ztoWbm zCxo^xl;S=yr+>|^Omt|1x=4&M(6MI{D6*758ZIvk~??d+R5YfM#%-E}xAYq|XLY90R|v$y~VI1KxhB z8zRDkjpffait9&CflGeeVPtCWE2c(T0j123^h3MisZEc%aex6pD2^`?Dz5uM)^$s$ zpDOgma`&x=dIG#FUolnP9L_=6chto|UftmkqcQD_9W=}r6BV7BwgsBvn#-9Q?p=EV zG5;74p2RKH0(3;K?rLWI$)BzNX12iTDo?on16#szyRCiB$avoG*fr0M85ju_^P9}X zM~eRe5qG)t(Zya061{JrkS-Px7B+JAn_Iq}GIZ4u@O{`QRD0iooMr4)C~H0)pIhb3 z=E9MsV+p53QCI)N5t$Ov)2nHW`7O%ouk?GQLP_tDoiP~VCEU#u@5-3Z ziOh=iOG3?0tdy(BZBT-ai1;5R8$<8{U7-&932nXtWevVlVyRJu$*4(q?#eipYF&o+ z*3DZ#z3?a*dm-nN6Np$LWT>mPR#YSPyLpJkw}|xn3v0A=U9oo@loKm|6O#FE%5QUc$QY1qT#gBG@@^M{)ER*7QG_Fu$v9dby7%S4uaHGvN= z$f!~8$&AcrV?NtYBL?_l<&iGrXd|L|#JQusK0tb6Gh(Bhe?F}JE zI1gNvoME`zBPEzr%lK0B-~xM{9?Ujngz`3i3!xnAt$;FRVihP0J-Afgt&(%YwS*=P zr{)zF`H_(ZyaTsvXxN#H=2ewfKr&iMBBC?w_#S z2c4HWR1VdLrK-M`(K}ou>J35W6Ae}8*`9BJIj21yF34~7wyni%d&1$_*+{n090IpYkTr+4Uj`-BF003u4unTtn0Vffv$zh1G>ZS7~+ z+xaT{TN7KuQ804s5s1#|0*H|DG2K@^;TY=G)m7{?L@rIx|370y(G8(=kp~Fi=E9I6 zTnHBKJaJAZuiYwj_$=2lgp{_BKvMt=Fe&&Mv5fe{jqNLbSo#{eXD#<=6;$D@U!dX= zN-!4t_gnvIoi|h*`Wq%vT2d&l6ZjIAzM8IGSL8_>`pfLvzobJ<=)WA}cT7O2Zcj~{ zn5pvl%T=JlO45lWf{Bea^0-h`ErN+XS>ZX`G+mv8J{vp13q7t<^_A~U&$T1!`}ZOH zorf2d>EFf@o>bwDHd)iDHv0^;<^jEMsmf=Xv#77X-;^X^CFm&=6A~CiH9TK<>e*zX zHGiuh%T|0G0$!QLXe2@l4w?GrBms9CeI+nZu>^a?K~-LQI<&QzvQ;jcFY#@}?ULqv zvy(8MeJJTZ-R5RM8Ul2ijOgj?k>`W8S3TF8)PxvG#rR&lF&rwsOW#nCrp7sCNEm#u zy_Hnvs|6e_rpK0@;O@TMLUuKy%(P9*PMAOG#}*x<;jFxO=^nU%Of9Kgxx6*mdKj&U zr#%}5WQEuObq~@n)h!H18D@iW#rF=y&ss$#4x?z5{7KgRxo&MD6{~(NS#nH-1_chz z74QAZ%CTdRb<-&4=FT4)Wqflu4tg~`6+6h}-Vq&vWJzcZCYeLZY7E(tVn#tC{e>mBB5QHuzL?I z7sw(+SScK0=gT5-R9Q(AN4n&@|2h6;@4qo`O`r zr6Ha$SHY1}hH=m54~1w z<`U@rK?{P#9KWCAZR)n@n@_8SHKd}U&>CAD8eW3woI~A!ap(DF90!l!)D|aUJ1H>x z{6Vti^wx9Wt~VD*@fy%hd@z6iHRPji_kp@;V9QREE)ssIALqh)@OBB*Z^*!nTfRc~ zNUjgQ7boIq8B6Lkj^E8Bkv$(D@=Ostr^uGt`O{}N{tURc1)Zjk37@2;0trzW6%B3B z{}xk9!zO#)b)qpz0}>zpzx&+=I-VpX%on1WY*2eHaSk&DbtLRad!8+AzI}JU@NV*C@)KSqDpIwqi%9K~@U< zD9Ac@|IjkH^Gw#Al)ZK0yo;Ax^UR~EGQQ}X=v@4Z=Ag&Ve+}(3a4A?8ge_!}^q3UQ zR`5|tX?`w$v2cfX#t_`|LEEHGYi>&JqNidBKLm+8UD4#F>WSjxYmdc(!@scl)^3M| za2w%tlys{5%T-5iOV#o4v0I#9(VW3&OuFt2XL`{{Yp#W3G@m=#%T2ET5JpS;Dx?{T zrJdaH+ViUBqx?8!zxjJEaOv6U%fE^xv<=&mBq!kxb~Kca_xCMDlLQK+z_+VvCmI#z zG&Lc3Vkk#5(^~e-jDI+@`(?1HLC%Pg`^4w=Dx1HJu3zzdnqp|??hQa}~z2Ugmdyq2%NTcI# zFfvxiuFcyuDnP~+RYdUPWX_7pMef};MOI+rZ5guFSYqm;$y4ndE2!~7r%1YUk5&-- z9aF8ezd3&lcudKTIR_;3b!)%62E3(KnYLvDQ1cW(=ga3`^SDarslEFNqTdW4GDU(uySm?LtUu=1&$lJnz+sIj1`va2P<%^gh6x zJ!W^hV6_%zCO(9mj38qTHMK(Sn0vAH)o^16qu*1C1*#dMuG?us3amLZk`Blmm0QL3 zt&PjBH;CSQ!I&<_7UHB?@F`6>SA~58YfxoPjVAJYuSCTQv)X;^L^J_=+fy?Gditp% zI&pEPbqt1JR)symV!EBBgtl9=PUeVsl+#DQ|fQ-W#Vnsch3}^gGyDz zT@D?_m^if2@yv(!sHg@~1<^50LK`7zN^%P6;)KE6AM79@30m*bl?vE<=-Kq&nMi3X zhIXo_>T9MkWJzt$?6P3!#m*(!zL)>q!SwE8CuUs=xbTNaUvn^dnXU_Jn+H@Hmgs9R z?zGdX@ajJZ1Q!hVm6f77O+gWYZwiTDW!**jc98b`d2=|3241(t;?wP)tf4G7idY>8 zu8T_r3~idm+sj);Du6HbqD5K$b(#~}l0POj_K6{%SfR0o#>8YmfOvfK-|Oyfo{4;H zX-WdK8IROqbx&qVQ>C3Z&(}8I(Ds)nLr-XPSYK$K!>7Bm&*x$of>aM-4l)HZy?v`-1TtA2C`Ik<`5I!)%k1il*5*n> z#5b?c%55uYyz^R(?L46#6{-gz0ymMYBNF?Wj%P+%`lq0rXkhMh1?zQs@qn{vR$}j4 zIhTcTc}gWfk+NbGDQ^i*8%b-XIT*zeAn@QJ?o;bJjp>P(QGoyy5cwbSn3Dl8c`yxF z&H+qGk;m4SYppxuMjd5nkU?OOhDFmoE1F|g$bu*`@4iSlLfpPs{R*L74wA|no9d@9 zKm|;6{yyVJFN{FjDUDp5*_Ye)V3Bs{=jxN?$^Z2N@~h?$g8}qV{OI!6>Bmf#&qQd7 zp|{&k(c}~|AF@`X*AgrATFl`=dDW)l>vw|(>e;!t=#7pEV_AWQfqLb!?~XvYpb6~3 z$Hty-AO$qo4i5L!OX&%M4))e<`<#-lfDrw!*x&Neze`Sl!06(TG`ehl1NPFQF);QT zYTYmQl^GeBGOJ0?KR2B~Sk5 z3TGf(=K3Th=gCtFDVX49O6rxY2JJ}A-s9H3O=%gKW*33L55is7h$6QiUSYkr@ zlsBPwh%cPXE4P~`5-CEj^E!Iwd#^O5454L7#b4bcG$U@gxWlIkh?$&ucN^t(`o6)8-HUrR&z>zxBwD#fbF>t6q zeBtro{nmPencta0}haK>;C1u&UJW8izt&m1K~B{n}ocl z@!tyA=dp=Sfa!b0Dxf?PZ>6bBDHB?dv4mYKfjR4QWzT#qx#XlVs(*3Cg*+G}c^h*U zW5wWs6;EW->0Nxk8P<)_7-tJ;b*E|1NZrwC98dG^ch3TMp)qtH)(l2 zy|lZ$MYO7{a>iMM(^S{}&=+-V5u$#&i1w$FQko?;%FcXLiH7)B8!N`%)TBbB1!_Xr z+{*~Zk1T!W$bl+hIKEmMN-9oVa3D9N=KcaX0zO~x&Ir&yrR?4;YnfTz^ z0DqKswtok0MY^;xR#PIXGhbAD>)6(J{qj@<6~z$GnfWpJ)W`Sw-y&ytXZz3lVrT5O z21!C_+?Z?2e-py~&^K^4Am|U38-PD&(|tsxTv|z=egoW7IRI55I+H1)n^ndLWrg zM6)GN8vq&&cWilUyAsHRm21KGU*?NPYgOM4Cc60Qcclkq#eolm?k=qcdPi4b_B&Fj z6SRq@P$A}`wNKW5oIb1Rc&X$-KWAcbzmU zveNF8Mcm%d!2j9z;WJdMn3-Ast^$$`8`RhIa}xw)p%QJ-lT|oPC$D#FeXOIl-5wiM zt};Gu{L-OV=|NLdlh@X0)-De;5Dq42fc|A=T5g)*B*WD?ndU#?bQ?5k_)kk)&px4r z5RC3}-gGezBcN?)<5Ckd-AG9oMl*G z_7T%=uBe%CLN$29*Bz8^{<14-%+1|jcja5`J^#sEAT+Q0${zT#9)m88?8P6XB;%o= zX{T^}>^B66LZSq~BP#6ZMqj&nq)?{ysTK79F4&>_XwbjbV9S2o5xbTjig z`?|~y28Jck&lagXFmYm!ak6N1(rb+yuLZ~qLBHPS$l3AqcBb}^V466=!zj>-QNUzS zalZ&;BK+QyxuwDR{Jjk%kGB~hJsfqsqIxD1(t}3qF1mHU62zyhTPtd~*JyvlpXvA0 zbZ9$D5bjv8V*8X%)_-AEKGBV>l}qY-dcha>JCEubpSNO+_WOc2B6Tbi?{SN_y(yv_ zQ9+ir8zSsJXGtjAtwG#4kV6&?`Bx^8&R|r{w{qIw+(J9zZ+? zQ#+r@GV&sNtQ}Zqw=bK-NX;#1zTyMW(5MM(vG<3S_UFSb`6SyKJ4pL|p@FCX6x4smYq4iYaA1q)nOKxZKifPdz`~@;X-SYsvO( zWoBmS+b88=+wl34$oC)ZXUMR0=}0_UGWQdD<_|Co!mTW?XrJW(O-0wyuG)^-rp*7A!eBK#8;12C7QO^tl~TtqOIYE8P`87^tLGEGtAYR=iUcG6rBQW zD>11yLaC$9jV^$I;2B4=>zZVf6oQ5Gt$*gRLHw#kbo~eCEmrXPM$M4*^7ym}-3sK% zP_G?nAm9Z4<*V4J?g<+O-D*N%Us&CRGD>+~yUs8+V7EBfc!PjNd7}_NLc@6;E?o_1&WXj~fR$B}s!yqIU;?wzi2S{B6LVFiR9THeYTHCq*mWD$|G z1|2xF7d-t6m`?Y1cIq2j0^G69%L;(+v9w$R{J*oalxt)`W1TrbEwBn&3(n4Gm@y61LZa6;LS5{UirAEJlc|yp!ab25Yfmf{5XoVf^-4nu4IA}~# zQv6^|Tv^3nR#xu$KQ>!r>|^vl80hCjY<&Y%n%b*#UzdA4Hbxf@LAGAOe0xPV%87On zvs&$sZEs-+@G|XR>>cxUTEnTN~Ywc-E_ciqr#6zxG#`L_~ZqYIQIt))mtb zKi)|LiM+tvUNr1%vED!945+@`ak!A%#e&?aXOEG@vjTDTn-ksdmvd&m%HuYWM8Ub^ zU&Ly6xBJG9r>}FobIeXZxc?qKg2wWzKdWJiU3xJqgA*HagnLTF5c^f}uyGql;)i-u z2BSnngH%(UO&e=#;de8Czu#%$qlj8b?d4{VYwfphNl4U*!zx8XY}cxRC!V9|sr&F0 zl-FW(#fz{pHzZh|Ue#nPHb&W7dml!Jyo=eUTv&4DWZTM8h6Q-ad82DU5?bWU7C@ zI?Nt?Ifn*D{!$q*l6MfFq(BQTnl4hzWxeno!wPdfprOrf`zs7MMbHT@q|aJCl&}X- z)e7AxYH9|mvl(~t68L#a?58ll8$?9IpjHLMc}3BCYuu!s9sjj-bIvq~s5m0mRWLU= z@3gjk1$I_-_OaWvw`V}}8EKWzUZ?EDa%1l2bf5DwkXl^|^jAtV+A4W-hpu5D@FYW9 zJI(n7k8blrB-}3%N|wxJS;iRPCs<^&!PL3suuDrzi}UytMj~Yjkz(v2g#u(5Ahzij zokjVrO|bobJvi6E!zHnddFb8ArWJ{$VW4q1(5~N_D}X5nug|^kLnSN6O8yAOOL4#x zb>sZ~8oRq#&-OQByU!1SaHFmEA)npfVDF)Np(f9V23e^A##MiSH{?Py^i}d`->_~u zE;nVP|8n?fwFbT`1j1I3^%*SlzZgwvio*@X0 zW;OuU!zJHTt_!7Opb`*XF}4=W(2KJ6@mXwIbY8YUKbfy| zPq})l#>rnVNT4Rt^c)!s*BMeG;7T*z_580F&}|B|gRL5gKy8zvtFuw_!2hxOs5Pe2 zKc8C^GJaYir9Fn28J_u5u+Du-_J2S(6B(<6Z@ZeTo*WNn@&tp>@7}JG@m~f~H9zulmRSzR2N*Y>yyI1#ZNU z_@jdPS{cJ`>oojvy6oPg^a{#daf7zi(6x_~5n#20j`HjBChxgIl?x8u3CF1x(7#|? zai2d&0KMX7=6Q3L^I1UPd;q!%7DT|E^2|H9;NcWNqdQ`$&7TZ*ey~3|vs~~L z|I&OnW8*+Ap=!z}uiEgJT5y*CKKBE$fOG2#?~T!Rmn{B-xiL5+)Zt(}`_e@KM>+b# zgx3{(L5c8-Ldc6@qzdPEc2*r*P=9XLsE}jBupVgkyEZY=*bS~2T&_hOB)rt@sVm+{ z#8`6FZMF6Y$OJ1p7KenLdu>Pe0!6U65ytXyl%n z=yNgqUIIVus0egiwXXI3hKS|>d3kf7(z9%`?X?06RqX1Y@``)l{)F2B z`=;*~KgbD#vDoB(ya_Uq%8cn1*&2*(no%S`STy}%@nGk4lXo;XInsMih!IviM8#gv z9Zq@W^iZqx?d7kk$iVZ1lybN?w^m(v)Y&GKI-*)Sl8H4>D(GlEfwqDVL%D##@NS&+ zFt#4wntuFCuBLNOel|s5%Btv+|RNH3jjE3Yc6nM%GKCa*KRb>&(qUg0PqQ zADaX;ift$<&~x++_5f-wb^@yT0cL94q81%UqGT)C>0rl~@2Y(K~SPIUy8Z;w3Q z(`#dsUi^7wS#F+EileI72qbG;VR7xc$*vxf#(C@iVehS@qU_$b;W1GWP!Xh2=~gLe z6a^WiI|rq^I|h|d5s(~>-pv%9p<|B zwXYrLdF(TeQ&CQ(kdJ#;*Rk-e()#+4ZXD@ew(pVdkD@ioNuU|)3Pb~TlQvrfLd%7-y*(2fw*MN9Yfz*bLl1y;uHfbU+33BBBsQ zcAcI#4NgwnE9_0jQxr#$EVxOq6Q{K+PMtL%TEJ{(;9GKv(ejuR0Lb zM<6Wjr;OJ9?&@$uOMICmF@a_=laFA~`ik6)To_df7u!+}t1;#y`4NuR)(ZpWp9D=! z6Z=hpMJ`JTU({&FJox95z=DwLA6*wl>9)baj7yDB2=Y10Mpb-X5E{@j&b&KNWc}vZ zf64j2_Eq7s4NcB_6KlMVNlu}O7(nI&{vbNCCwO7odW`zdBR1WWTQ5A&Z(lelZMD{X86baWv_R1Bn z@Me{17w*e@ds{2rIiAXl6C=Rn#&re6jC-+R%jT&hr6zz9I06ozRlEkED^H&YR|$M7 z|A8DV)OLau>~;tHI<1=;VyfH!Bzn?*gB0H~z3K_-t=#Uotp+LtVo3-7mxdNj{Z&@w z95WTr&Nf~vl5gI!voZtbI_jt9Ubef-qj0rd5Wk?YkO2ydSZf8;npI!H^>PJ1fF-Q` zFaPO(rCl>xDSW|I1S+3>{Qa0i_Dlch{X`_c`gd&=`Mb+=v&KewfK-v|f2|g#Sp#A~ zK;cqAsezBLHG!{&gS9u2UPNuiKD^}BzwhkUEOtqw^bT*~44@o}x>~ZK3Q;4%lE`@B zEii8qQ8_84<*DrWUFW5+1_6<&V7Zlxra zVG9CLL7RiD;AoIQ7yVs(_Gxz2NAJ7f&$`^EUKZ%>n>1L;CrB+OnhlhCS&(nt>S!N|5EBCyJTho}%-dz?ZHdSypMC}WiZq_fyP^{qz zJU@33q}*^%U%AfpNW#s{=i+(Frd~PMhq0mrT#{d5=npVK+lxzG`V^E7jrrI*df@L~ zi1bS(Wahkp`vC$u1s*altDo*yo_j8i#e|24SMO0h3!}S?e@FlG4aTX{QCG@;BQN3SaI8*u-oS)ioQtRVEa(4a7Rh?*7<7BYAv5X#pjFkTSbYlq2|G#;*bj57h_2$&ke@X7qGo4ecb-G{OA5?`hx+L zaLW!yM;@(1Z04XA9Yf}ZPP@^=WKbG;nbvj1*)Y$(oM2+SS>8F!ML+#zN-&ApKoq0WZ?Xz zEiuq(4O?5Jx;mda-(y||36?LkCkU*V_8ROm<_aMxEDnqDL8hc2k2(F>K~Yw0dpFy- zLD#PX?fIY26GCF_=KAMT%ZlX*{m+N%EKE$;&RDsiI}%v= z<`rG5HSJPsZrsCJL~jb23}4U2}@hU z%rz!6E29-%BSmfgJLg+H@%pnE(3~o0t|craoQc1UY|Y%WHupK*vuNHt}3>sz9GCfeEs~Z&u@BC@WliJX_W!;#K_p- zLiW*S8UopO2fW&?luqJu{=xF+L(HJ1Qm&=le{BJfui=p)!QZo&%rsxyil28-v{@Mm z#4;a=8)f=)Fd?QTO{0VH=2#@~--%f4V?yHMvN{OoF#7W|y5|yy@zTwBI&T&GYMdUR zC71!}2)30gnQuVHxX$lTdLm2Wajwr5KnVI}laz<)x%bceQ5%o}N^Q&aV&C{BRKpNB zh>(bse_uF^_ItRs#z)heIfz^5iwQFFtt9{`OAvuB2Z{+IG4k#0gEH6!Xf4)ft?|^sr5 zh3jfE8C_gFnArp_Za%-5g+-z{W<&>jrJQ&lL=&&1^&CD!($Y;? zXPzC!b{kyA$a#*tW-oBpzu@P=GwhQYR3DvZ%!e^?*Q$J4vBe&I06rqC{a6_Azi$dCDT-NBhsGyTxB=&@_S-pxi(t7}uWia||G+2PNX3L^ z853y*`TQ&xP#ZGIUgjQr)5hK*`tMxKOxr55;0AV`9kCq}zMum>KCL zvzl=jORv&t%ZFrh6R(ot5a8ly;>}~HARSb_=l$eN<#o5_7(3*drL1%ej~STgd6i#~ z1}AGK^YA_69qj%6tFdQLqX4_yy*6J6!sdXqywJmP0rhjKzH_us*tPhAxwNz_H7KQ2 zLHpSC&S>^$3%lgb*Esl|p8L{vYLQWHjF$94EMY=s`*x}QIglt66NFs?JPz1>i+zOY zqJoV1OUsInw;p{dH>WGDN%6xjs<3NQ2VcQH@8i0F5=y-K{><_26PpFt6;mrs6QAb{ zcpw5^ULpbCMY#z>2xUvs6`C5^scW$Jk6fKPXaOhhK8g#asl-rFp3z3A@@1wjXm$%6 zT51Cx$LDE*Ch#ush$u2RWyX7smXTXFS0yGqDnkix6ZY`z?ztiW7Jg+weJV!?=BsTe zUhKp0UILefiG|7H9A;q^Gm`xS9(vt@i>&_G7&#=1I*}r_TpCMNjG?bD)~Yhsd-c|R z%lB05$VnM=wVyaRG%U*)K}OF`cW`3d;-z}ReZdILwK#V*l-y% z@r=S|FFb*eqVv3u#NX>X*G;eD;^R1`mi+TE3s*!=xTuBRVI(jJ$N7TuBybCM5TIX zH#IevZ0ZiN`cGLow#1a~8}PpkP>7_XDyN!GW8RXa7#Yx~rfEcen_tq^6M!F2Ly2h4 zC~I!rOu7YD1HclH4R-|iUnDQ?HBr2QD*0M7*#HZrPStSURYCX7WdpF76QR&0>nf1s|@ZxbEm}TKZCqzvCmbP{~{XRjsJBk(H5v%QB@^n?_g^qS~?bG+Y`(#@*D^G*q&;zbf`Y{^|2>E)kaNQWwAqtf+FP8(SpdbKhl+fRJc_n~k( z-jtuqBCfj&8U8PR-0d#-B8(il;$H3QXwqN&g0eTf&<`glVZ89jSnbtYThj`^EXAZl z&ns?D*-NUe>9d`1i>iC1!?^}xE=t0GlRiA?j3p>2DLK@iqXGMbQKOJYto-Jq#V?(4 zS`Q*Aa$q#AwwjbKtD)hgN5i8{h&7hL<%k4rGA=6g%7Bjm4}Efqxrh^{#4tx%6M6@^ zr8RLXHNUIPPaYcE_Zy8$fz?LlR%JG+u?$eN^+~1@*nj1TNbA>}&*N%za7JVSt!7h+5r5y-`elP9|sUF5DF+J;Ux=9u~xd@%5KLe)p z&-2n)q#y@&63A(RFauKrgg;}fg`q>q{97VHCW7Tsq_wc0@qO`idGX;D(T4)+ZvEwGGXP~ z91*I}!M$l$bF_rW&}*q2uN7Hxk}7HX{d+3@14#8Yp2N&Ivoo5be<@bt$7+<@SbeHM z3KW|rTUEJkd2(y^B`Nxsw3EMi_GT=sIBcX#)nBD0ZDwuBp!lSBUaVx5Z!AAPuQ+c> zl|^9Q5U2JMq;@&QtO!Ald@^JGWAHITkQR@Azf={fchXElI;b8_OnjnItZZ+Rv>Q@0 z=z93d*0mxuF793H;8H}^;LlUGp|S4NP`{+!0ZxWf;WCEjJck>vVL7gc4mbJ49aaa^ zOtQvzEr*>k>Ehk)LX$U5)-<{jYWw0=D&9=D#V%9M%Z!a>e)2qN5Y;Yk9qO@_TRKLJ zTWaPR`Zw6G2qhW_kV~<+?5vfXl%D>Xl+_-Ir{sEDev@}A;bY-zK`TJ)2l2}EbsoF3 zA?URU4qRR`qx@r-ms&3iJ!ccLN~rl9UObL$Y#e7Aq;@a>ij=>^^7vPT6fI8ide9ja zCGQ_&#b2sF<303W_4*!6XEqbs*%luK#tK_6XD0;B+XV&M+jjZL6^>Mxcno&2}xY>J`8hO4?H~GY0>R@#=XXH_FvOMJNDU=*dp5cWX65 zGu+WM+9)J}j%!oTW;7o@{ z4+fDh6nSw*pI4k{79Z*MCxpDzaN1n2rmS3w(f$^=Z_{{P{kwY?LlS+4>Vi`yIz0z| zVie&{9e)Qkt);t`%C_V>5HdVhWgo<~IFu;4kq0W?jJn2;y?7c-E=$Szmc*iE_+=hF zTfctjOtSEJz5+4*_A;-B?&*ZB#TAUe@F2Y8bo_NCPY|YurM6D0T>gJQPli7rUO%7z z9nK&P@J?28kXCWrZP1puKT4rHx(!w!Di7WCr~>ym=$cNCX#j73jRB2E$(#NZZO=b; znn5L|C2#2R((%(A`M4A`^MCZtf2w=@UjN;cN9j`0Yi1|av}Qe=)|X0ee{b|ggxQ7$ z2NT^T%$vbWH7e72T(ubL2R~TtGa<~A=_v3Ve(^es%WNhOMC2`-TTr=)^2$q?yDJ!% zZP0z)bu7{M2bu?=^*U=Ly*6wi#$5N+Js}+SxCozN&Dpdl!MIp~ek)d7mY`K$a~Hww z!ix3H@4>#)MLSmAyS?26)lO^99P{K+xo>Y<3`=@i3b;MX(iI$Q`r{q? z6TShJ3e+2kD;#qxL8;PPhx8m-#pVjC(UQ-Wj3-iduYW2*uxVs$HbNu>;qM57MO|eqbBA=TV`Oe+icGnPVGp#40H{OS zuvD!4A%(#)tYyyyGR=OzC+zb9c^aH#M`FX9wW8^hVN3 zzn>1hKbmrw%QN6}{2_!^%ED@IB0v4_{;L#0JaYS1ApE~dy*ULslP;^jLj5EaZ|O}% z%UH)ieiTm|2i+Qxx=BCnt{_Dw?xIp0 z&4d{@lL9_S%+A-UtXO1kPN#ED{=ob`Za2F%`nkf5_wA|TeI>jmfBj)7e6!72<)W zdvD~{`4!KtQ|C5b(AUsm_%H!5;5!(PE(B@{^l$CS$I#KwGkl@#L^4@>04oL$aS&$R<45blMw%FKX$(|EPe! zYK~UFCmth94R=`ZXeM36FgiMwto*c^m=1ycjp5wAn>25VEGH%=w%p}a{u6R`|C%xg zG6#&^04$MBxhR5ZZXv)Vxg13Sjcf!VL;SDaI-Mev_+W_M=-Hl^4de6LP%& zC+sI#I>Df}+iVR}fViH4NmN`YVZ?VW_tvsk+E;qfz zv+1o(_WH@jCh%`qI#6*7Xp$p05;X<5Ghj_kwwSb;1!F9-iP1|dsF?KbzIwKsMbk-y z;51#Gp~DNi*V}oEC+94VeRtQF;G_UPzqsDzFMl^J*SmOqCxV;p1asH ztUB&N(l3PGSJ{Z8$*Wd9bz66-b2W(L!kk%Y8EM(+1$Y}f+mpmbuOD8|!Src^Lr)IE z0Z80i0SlHP$7zh|WLTzdFzZtnFosdYz4{U(*xSQF)C=Dbod%u%|qrwCI0F>1r zfvv)Qbk)0D81Z>+6j7YVFJ@A3*{(;>rE7N zJs;I1?1_9vD84~yk7EsVM%D-;_TY5w0^~uI zT>fmOg6$HPP>3?TDvB(!pDkIaBK>`6ZIcTKgNj8(e<9H;A zw)xdx-_2mvQtbb05_@uy1s0ZB`u*YZ;{ltQZQoHkv1D9Zt_r2#5d>mWuDP^meky7~ ze{>|p_uzq$lSCRjo_$hh4xgu7oLX^t9=z07+F-KM;_RfvN%N&fX0`~K?ILhc(FIK# zn>iU(b{wW1Rm?@Kdj8#jDJgvP3?F!Z+ak;DFjMcSG(jjuOF$>~=ThFCuJRg7xX#g1 z1YTO8q5k6BXX&?69&Yt(oM#%x11MC6fJ>d_rpPq|A8Z~U4kWRKCZ6LyfK;|GK@^R6 zYg^0dL0*8V(+5L5Ec;d#ya@y+4#Wym7n<(`&IMel8p*qve7O_nYdI>b$CeV2I}{X2Xo%L?opvT zXs5X9kk3n1Dm_*oGF##F$R)v%Ef+u6mUX?SCBTi1D|&@GD>s~$MD4lX=<-4JrLfx0 zyhPSnVQGP6^BYy(&7SXf@p)A3*h{%AEsR*y;jY{!i>7Od z9g+i?GNXq&=)T&S{`qflf{T7GM!&@pv^T2*QV@QjcCTJmsdTp_1iTZnqhiZ{dk zu)AF8f@4zY!JjQ3;0TwKS-5n&??$=C3V@)8F|<%{&^Xu{kBRp2)JhX;PL(fcBc zXC>4JKZi_RW3H5XC@-r@&N9~#P#tSJQu}}D)qcq+z#1SDjoNnaLj2uN=4oF7#<+>p zax;oBC?Y(ne4|fZePJv;swmFmhs9y3aaKo1N@}=wQqIbQX)4N*)KLA;w#f1jwnAi~ z~5{>)Xu4hA>LSm+T#CrG{3z&DK>cY3iRr2D6PV71jIXso*; zskp7J8DI8usJXl%HA+2++O=v;ca~o15H1n$@|>!~ixlK70;6_fEO16yS&unD&_twJ zQnFX~%a{>H^}a&zoI!Oh+<=}Gi=r=kc=<(aGaorX+S&T-n#p2?{19#2%(8x7M?T%L zM|C{h9#n|#t5hEx45}8CC8qMweS>yHYf*9>M3>GTKgP8Z5~z_`F-xT$cAF_q{-FQv z^r$yGCpS?j+m`mG;|}9Jv|THLiuI(?1Kia<{hBr?V zN*nDC4SAus#xKB^oSZ6oOEP?A#XKSI+0PeVK{XqdTb_v6Q467=KvXFT*aD$6z(O2J znW3b)s2-&{HEmm5j#uT*%J#LAL=~gSL`sTZQbHWPH2)2{g9+ihwZ8srIn}x@TGM6N zl-c5K#>5S6hMQId3@L(lJF_m-8Y3YvB%fh`x`%!SF`m&)EiFCm^-NZBW&A<{rOb1g z@a9`Wdkdf8=oMiyXZgzyxHV@m%g^&=8$C;lIVn1G%pI1x+FDxP@1%M>_(ap^fB4!9 z#@4)SztmMVGhBc~dOEf=;R)b_I%m(H@#_ryX<*18ki3`aLUZ=+lckB)c<1()Qb()a z^!T;BGxHjfd+{OBo~sIx#d+GT)po=5P6W$8*4Pt6w1&5v>(10m-S&PdhWu67f`-h8 zbUMC4vHNDw0b#>QD>P{`c_%a`Q%TlwfCta?AS^lMDwT{QdW~9LCQs+yCbj&R!N>pV zCV*v$wlH)rfbCES&~MGAGh^$jfNlHK=1WLr#_VL~8lBvw5XGMNwDn2-u4R?a$48cQ z@clz#%#Jp8WYV`N~&V*2c0 zokd6!L_~ODK-8Ztu)J{pu;S=&bNL$z)YwRz(`DY7(4f@~%J}U4% z-4mnf`kgaVck@GQBerlegg3ysW(wQPtqV6re+VrHi9qh}CJE^hY&4C*XXl#7*xxU_ zrI7wm@R&~x^jr*&zzZ`{gBK1=VcGHq2qv-ZZl@~bpWqd6Ya&_bE8ij?i&ruVZ!I%F z7S5SWPUtO~=cr+g!lHZ+<2h8Zjsd`Tfc?HhzjzxiRjNTO1ML4cLw&3kxgTTnatf@` z&)+=jP^sgi0avv=*l>>mff%(B)Zm*J-}gS>ycGYusgR%TZwCyMO^SMugX%*R;-M@z zabJU*i+j}u&9dXTN&?BqvEz|0`mbl@B5bYgE3H726Ziqr5A-u+L=YEy)juCy;)_AM z`05q)Un*uA{+DRB$eS1KU0kY5|9}3*?E4T#T#Xza242-9;QKEx#751e8)A<%z=dLN zt%H+jzC7es_AaJIn*a9ss#4;`9{NDM8P9+1uI>%v+T&~2{8E!siF#{a>P=3rViqTL z*u>phJ355zPD3W6Qv=A=)HRq5OnXa4ae`v2?%%&>&)3)7T<}5&UXDlEhc0!@QLvEM zb!=Syq%Gm&r1wAHzekWyP0ie&SkrWmDdgvtYuOTeLX_~m?0tJG zNO*hw3L{MYz=&Z@Bc3gqyJ9KO6YbIZn1*KSIHeV8($p+dcX$b4PKXz?XlQ&?4up|9 zxS)BHv$jz=Ly4wQ7IAsTA;yF&n%`5{>Gpyhdcu=(s6+`Wj&T90o5J?neW)y+KYtpU zqmO*?cDJ_5bBxgVD;gSVVK&z>`x!-?E`J|t|7#1-@#I)oQI$WHYq=h@5=sXsyx>6NUrbv|U^zwVOXHUMNM)(l8glsP^LT6cIXDeRP6Q$n+w3 zchW$)Rdc$yUZChBtTCK6FcPG*G?r4W01f%z3i3#&r|xZ=k@XS$EyNgsrJfk}k;eY6 zPpMz1Lj33XR@(RoHu&?Sn2GN!KEfEx)baK-Ar+a(rY~&iM0OsV8PI}PUJc8$5`pKX zOSEG8M48SAe#zOJkHoBXYL+|NIXX_>Oo$&9s6IOUHsz1pWMM!#Lrsc}2b@=6<5+(n zo!nF4oeRZ!?B#c$B%~p+-2!>-)=qXzsnT-R3xI$VX*s?>qO~F%aINUi^Ol`+!yw@qFGzo^RbKO%7nd*={4ezi9h`6{;FkX zWFTvp*KWL^s7M)_cv<)=NV@~o#XV0?#;0N=4KW94^dcKg&zm`!>FyAcpS5TfspJj6 zFOJ9hI?JBk_wrYLJ#|pLy=??@f!9Y%qb&ff_L9$*h^(MK2es3kX2hIw?zRl00N(hjr#Mf%Ub4cfZMyQm zOx~4$&Aq>fMjejwdA7qf{ac8cDxzT{n$(`2jq83dfB#0r*galf?m7Y%@=b}}-$tZ| z+gsGRF;nuJW9Uf9&RCS%jI;5tN2(3d@$w;-7oS$WSJ!A^9i2S#6WGd7EZ$%H7Ww*esi+|jXw2i?Jehz&7~ z-n$v}%~O9U3(k5tGBD7v@S|SpH0og22-+OW=Va6N$LLgzE3ZU0Bdtkc^RTKT4z;jl zMNGu)uCA_LYIC&A0e_-3Ju~y%bbmsnJqF+jERpz9pvR%#&!2h>LK{5|vm)y1M4PJi zL%3G2#p_9O7e{_b`#G{{@|fMHB!?f*M6n6%HZ(F|s1aoAA}j+B>~=hSJZ`{P)sBx~ zS+~*7WtDi8_L`yMJ1H3VXX~;0pZh*s!g7V48t?L+xgBKuBgr_KJ z2K&bGN9qWY`VTvoF@SG0!))GB!DGa2qN#zc5-;l;D3Pv_zrM#nAEXGCOzIAEpPA9h zQOPWUgw zj1wY1%P%eB9F4ZQRCe{sS(v%`L+mgUfskvt={DEB*~;sCoLZp>gu|lkLZ*Xe@@Yi8 zCpXM`#(9Doo=3`iXj#|rZZg=ainq}^pt5r5b0yB}#y=<3@2f}R4vq;ccPYp6UD9fP z&3=C(`GknGR7GCqYJA+r=24nV0;ksE;-sb8Cssl}zVfxsXsfbRgRO?bx>HYNe`Syi z84Y!PQC>|RTNAPNty>2Mi<>x&_`E}5N_GTP!aq~ zDe&?Z>I|8F*&0kh_tOFxYndU}T&3SOd>*-InX4*+|1Chuc`+aeeO#)Hn)9oNkHN>a zrOA1pj83#5V{}}WqDkRC5owjjnb`23GWq_;@e$gGhkoO?(c3G%9=}GMEX+5h(0byx z5$Vn|pL&1izFHV|M=b<369o2@GX0216=5#D#}m%G*_#JnTytFg+mQZ(G@eXp#_yr$ znHgfzA>9$g3k`#8Qu#G}K>gy`5xqAWn@5Zp{?o{Cy4%#>2jh!7h zoQEtV9s(5!QAjSf>`6cE4U$zWT6U9=z^U^iW;+;8--y8V>}aVNB0#!D>@J-iPVPKN z3ncxKWuu|4E*-@+=f@$kzx+uRj~6THXc{jg6kPYF^S<3m&|9lC8ywo~Rp zSe}Ap%3r@um-wuf6a_Pb>sFmNgK=)7+fIQrxb&TlRNr}TC8{?d6ZIPtM)Wgvd=!XOvBGX#qH(F%PanzN^ zB!VIivwzHd6w5t6Y_vVm23nMG4TVmZ#*Xm1-+FHz`WOb^8H_o^_ z@vbo1oB3Xw(1@ox*R7^Lm!EiLkqr`_x~Yhi z6cZ`+gAOxJTKRNTeVDFmKG>-_M@Nl*jpIh|UerGTLbFOK&iNE5a9^i2(r2|p72nx& z0?7JuV0+QE0*th8nRpZ0jym%9Px|x-h6V@8kXR}3_4rOtPcNPXiLH~ z3UOU!#3x)hTiv6?>I(?gj|WgVn&fY3T6c6;{+kn9OUqS*Px`Nh!=-WCi8I7U?EH{B z{Wf!Sd&wgt0fr;#mFTmg{5>}9Fk7I-;JF!dsi0 znZYOPa@+Kl$E+Y9B(SC`3@65;Jk^C6LH=zD$?Wl?<-c|hK_L;iQ`1W6;Q+gBU}`s;fCVsY+!YS`7z(?#PQR5S~XlPb@Wri(HPybZV82E zDhSKO3-6)7W{IKq(HR!}O0r-*FcKX-^7i&6A6pqH*Ou2?u{THetXtaN&2x|@(B*K# zf^JddZ;Dz-uKaLXcv8}*cMZR+sWL!Bw7`*R)Dy<%Z=vzw;XW|v)Z%1`?P4jg0R(r^ z9!=<4rG>@M7zleF)dSSQG;7$ndIkDxTl=SW46%c|e|A08V0&o|RJs{0u}e_N>YrDc zNpfECVL;pifgOVO+cW(SEJlA9Z++0Y=6*xdX_>Rij4NvdFO(MDxK^cRoN)8sH$@$e zO!p?lri%~Wd%|nhlb9av`-#?{xSfn?cKVYnis$x`k>J616Zpt8L2fzbU9s2S6K6w4;^Cv;n*pa9ULgXS`yf}=uiaD4o`=XbN$x2vKB@(YW%H+C!T#gF?veDu_0 z_1FhINvUt(HiLilC7M-I`$jL}K>S^(%h0>$H{yR5n+z65Hn7ETm*nR+wYMv;i8ua< z6M|=$OkamG9RFYbvvzJB%9MZb#4gSJ)-9s>qJ-PqG0oZ z7PlxVhnj{t6G(Y6mWBsl7Si7+0}SY@FBxqxKSLp4bBOT>NPS(@0Ok8zy|zAQ;kNBW z&YR79oI5NXgILLU@!IpouA?KJAj{J#eC1+OoqenXdd zVUepaAU-1Wh6(--EmJdG=wdTStf@)fOdQAOB#)xshQ2bvt@V#M-Wn1p+Hn$aGT!<_ zGyT<6>k{?HksIIhWkjhVX}_-zEnZ__)lz|9Bk?%y%!lqhtYS%5 zQ)Z4w<>sM|l)rWzR_17OF&W-M#B7XZANV>Y#O+%DIEiOD?Gw$YC3w-ya?r`UfXu%C z^ofHl6qI}jKec4z&?cCmCO#|IoxGP+kgBa6yGAa&|D}1aR|-)Z4S8!OdjE@Xx- z@2Bs5wL;mh%>8{nx^Ds)4jE+Pglq-Z734mjc7r8&_WVrDt&*ISx-$C@11(vgJv!gh zE4eNidNP2MkY=PGSrP=;jZbC?vIZx-i%_dB6ux)W=joBe3C zN}#fW{Hf#Q+F9<e$rhlMpP3F6+kDy^bKX6O zq9#Vh2|InuSy5a9lYf20QR+<7ipf;GAX6--1H;G1M?5~(ycoT-F+EM_Z*^AxvA$6@ z{;BqOq02OY9@L)b+LoNtuVrS0$^qm9;oX_m%*!YcYH<0 zbi@-p(+Z6Yv!7I0|3SlmCqYGstgaRhA~CJ->E6TNv3GKFoWrqstu;wSb$4f&nq_8g zerc=ek38WTwLGG=)&`wwk}EJ4T{O*Yl1N_G25XLSFrO;Bt1W=c*~a9(-@N(ea4srh zOgRe$pi3No@#l2_Db1 z8g;^Y@-}j351Iuym}V#TP%3dKXLY#h*FbzI!?-oV7f znU{BuKQv)hYq)lEC@rF^9QOrBRqB#McYy~>^Jcn9SW8HFxTUkx_^%|)?>MLJxRYOR z$;r)5#O?-n>(LA8MZOqzn^*uuNH_$nd6rm&@kC*C`XDK=RA&m0pi1^b)Gq&xSsm5z>n;Fz>&`@Gr6T<3)nG(WZ`^4k6o3e zaA}0?dR-^nS3-PgZEPS*6D?!mZvq=jyPkRL^p4}2fS}6|i*J$e-onsi@1733DTVo6 zI}3t|s7|5Nsck0l2ZT+%jg8q2OFJDHk|tmSjO&3fryzd>1p#(0QD{--$g-Wl}jgp%W+MPPCI~12dA% z$jd6r?~i-xqTQ`a@qN)HHzzYVmeA&dHM{}>njtFKWs&K{Ox`&^Gb6lnthvNviOvho+^PzKt)bH@ z74Yxf3$4*w-|9aiYu}QUWj|$_^)O9T+V``bSii|M2DZ}z+J3cb?ubJqzodkHPW{T! zu4!LlZiTtYyY96Cs@F*OEks)QX|)FGB%kFj!<9~iA{`b}i#7-6;h4q(C~w?b7yMev&7ps?>dX9cdB`j9pX1e%{)> ziQW+hQk2ICMc z_ogZrO(iIRH9&Oyh(d^JeiJX`N`D|NX0y;+DYk?_h$7!Fe$>1k z*wWUffWCUo&rn}~XlRI0`7N-&fs^^bxX@kalE?;NcL&Cf+i0$I>cp`4W=T}|bFQUA{9ou_u5;j0sF0gP%| z$L*{DBB#7{SnC@$|N z67vIoNeEH3@~GM`%HdKTEkYu~EF~dOOO2<>ZAMM^X+ThX*_=F6*w}hmdyWPVKnawD zMqK?WuQ7c!h{;h$3yu5ZWBKGCtZiARS?_@-LUS>VTX`tn`BD*;g*6QgjgFHAtsthf4XmRJUGz+4a{iwUL1qgSN+X9nN1Xij8X(w&W#a z9PaMENLv{MZc)*V9BnhOg~v~dl~8jLDXk2$B>mv5Am8eN6Iin`MsYH_yu2)5=Xbw! z@uU1lqR}u-GEng)1+xgOj0gmx>cP(H;8p}U1E34lr(cqvA>FGdN5@L-pH>|WJ`g!Z zy2qWansL14j)SOi@bUE9*hZ%$7lZ!j}3%qI=vzKubedrGfPAH9Yzgwmu=O%d)s#yJI+wT%Q-RB?t6SVD_&`s9lQv*pBZN^)b}&a5 z=Asf#SDS0?_Jp7G8&9$HFBUzJkacf)vZCO*<)*FrN`D)eYY+Z%=5-z&rWJ47_g)VY z5gb@wouWHi7I5w>9%QlVfJ#*!Zqo-~_E0;-b=Ttrv^ZalffFgO#c0xT>abydKem}W;s=t%OWnB-U z&dHwAd%2Xvo+kxKVvD{8Jp6eF#vLE~ieCyl9-y3^F|7c19&&?1kDEE#QWv|M98_woDw>5%tDf_siqSUE7PUpsz$!{mnQTwFKaz}K(8B4QDSXHguHANCqx!GW7 z0Ks?D^An;yV7WUYpo}>ji3w?V=Ds>}GYLd&Mut_{t{9$ZJMl&U*!$FUt51(`z-r`& z?D(4&tC1N}SleNO=Zxs!7G))Ypzz5~SXkC4RZVsE0CI;??2xyp^iLgJ6JdXf@mZc- zTwPLJTG*JPA3zA1cV`DrMuz}St+52|@%2@2n>|-FbA404frDuxa~8o5+KnoAIXx=Z zhV)pG>1N6K4w%B%Sy&^wZnWRJJ=uoF^VlV-#;MGmZ10=Pc1-yi89p-=F%{qR?A|tY z80J?&9f&jmb|?t2i5zIf#?hwHl;1vy9(5zI7^$d)C9L|kuab?d?PqX;;yC`E(x#?E zC2>bPPIzf03WLMLY>|5)ve;jNl=!r;&H6Aai9yC{q;P51v-%q#tsWt)TZL=EPQx(E z3zD7N%L4_zwItiG4gIpGf$Cr+GLu7yT2OiYo~P|UJ0Gy-&aa`XOzI;4 z?h}46>V3_STn7w2pIO2?2T^_+^!9n29>`M)Oxzf@+>C>PgtcJ$5^sxmgVCQ(6J$WRB_WdN1yi&-8P;m_ zxrmBmFAF|7jHia5Dx&7L2mMR&NmWsnarhRR8k*|Oe(rptHQlAd@&JW~Dmu_Fe zo5+-$mT+|~BhNjU=sobQtI5!b--rx5p~XuM69sN25spX)sZx9>-OZrSJnDo7L)qFf za|!TG-$}tTg-V3NDz6Cp!SoupI8(d|TQqCrQJ_L(csm(F~oew^}yuG%&GFshbC@Z|_MSC?srN!;cVR4gtsWe&zE`eXE*K>si zyAqV}lo{d)fItlkzSpqzm3?8rbA6H5*DUod#mcG*W=Re>r2ZL`h?dpaKT90KE@qu( zM%)9Y9M^n+<{4ds=RC_f)nHO8*^Pa_q?zMNQ&i^RN+If$>>_n2Q#E?j|a|72h*z5hv3)0NwV;+xmq_7;?kIi;lh zU8qr~>!0?R&{89Be2(gkQr$N@q|Q<5H!`Zuv+7NhVp`|oT192$*g6*r*k5ugU`<3k zazW(H*Kkh7zo0V_oY@@?KRNdC9KZri2qN%N;w3G;Oe-!Hwbs#YU4QoPn9ZSx818@m`_rz0XIb>6N9ISzkIZCB`D zN3iy^MIOq5bArFAduP`rV9<%@giiv;LwC?YDg*au8db~_+rO0Pl^i#-yj=1K4vl>4 zW)T)%;P~k-{(wX(cdo`!k$A|;e?lYJ>Ix?Kos3szX4I6VaB=;4b)tF97i#wmJ&`bga}4gV zA6JT1M%6fhrqVKauOb317)C^nfphendqVjOy%4A7B{|{8py<1iS5TJ1mE{pTAz)%Cr?5={Q;3C;l1E)EcO`-nYDn%=+^3jZUg%2H5j{CP9py(>TQWct z!P=eaPkR48DQS9n*}PhClnya~)QkDrJd}Qj?=baAsuUj^t5wHW@iiLqSBZ@y2mm;&=}Xjr#X=C~+p^v_(J*2S{^wp*Ej})w zbgucNK{BZvPb|fXCerx5MLi6`%)rGe$if28_Zu410UmP&(1Mp42>JljOxQIC^;Z;t z7$jLN&1Ib(%e?5fd&>9<<*u0kU0}yvnHl6<({jN>Bc}lZU25A%>Ax`>R6WPu%X`6R zB5DF$!w}9iSrT;(josC5$@89goO1_27};*sLUiZYuV2f;1*p!())t%l3Q?l|=kZei zFE9NiW?2mo=Pr}W`d3YJ_^%q)0o@O?e)aKqd)Hc_1rXq6UdF~m>w5lY^t_^qN{g`R zuMj2Ke_CyQiS5HbpU7*V3;+52e-r5Ou-OLluPxyJwlI?mH^s#O{9hgs^FN`hAnM2K z!(Z>2y0ni5KUCA`c?OPyUmZX@o1m>twhkqwUB+RcXhn2^11!|&B@0lR>J5m@O2IPTB+A9&UNT(Wu4iHB z^lL6(5IPZHX8e#GwykGme=})yg)HRBOTL>ogM{ocg~wr>%H_ajD&IOfINX~euf6vF z5ci(ZaCYzeH_0vTL~uuhgos=89?^S35WR+IBSrKUj5bP|h~9}#^fE*lWiS&FJ$f08 z5}nb9Q3m7LzTf}v_g~NZXRYUDvQ`$ku6^x&?&Ca;&xu53cK1rt`5ZgxeG>3NN_*K4 z>yhhy^+;y#qfmL$&e6u5Z-)qjM<&*VXl|O7XP8SqAT9(QYy8eJe2l~IkY~^Xb^h00 zzKUG*1)|AF=Hhb=>uC7r#WEll35B#hH~ZS^vwad}sny?EX4wN*muICY$^`S_j9umZ zL^!(L-stGK_;`Mpipr$f8bJp3(`buH4!-{}+}mYG{*Dc9+<5jQn0#JO&QYB zy=kGhm=S=5)yv>m-M!x?ROHF^3@2{Wztgz*`Mm%8SUAA)Dw5F2q>a?oa-QZ0`E;YC zIO2DiB4#r>Ogrw4w@C+$AkG(tl$yi>AC+1MH|y0V0a_NRKwde%xjyV9cEXHbGS64p zO462+N;9%9B>d8kUwG}1(L87HAe_^#_#kB`%*;EuI5cZlcZz%7hVr7}lk$FUk^$YL zZC!!$JCL_md7)=6waT<)BW~c8ZGo(Q$p!T4UEGCJ?GeR9)pkv)paZ693vQXZ)<_{G zJx=s#sCBTg-L9l+q{*O){37dv9};9q<&o6T`FM*g`0BMt<7yS>G>WM)L<7lj73Vbj z18qF)hd6&;C(O^kax@WR-YAAq)O1&E)8Yf&EQh~=-ERok1IhH1mLG(HD(#t-o6kn^ z-b;;{TW6mOi$5c4?Z*r3-wE86XNdza4S*j=uJ~0%WjQG(cE+Spg?N)I6Xw$1yEA10 z2bT>!@cS2CyD+Wsuz|Bod~mm#%~t5Mtn4K9#)OQFkg3iqWp?0UGO$SBaD+7+*v)pf z%osbT#3ajTXUD{f~0ZZd;f6n&77B9UD31XuAH`u(>>RPzTe7phYAFsDn zj(@C5E%%U76lvld)KPx{^JiFeg!=E_-3Oi?cz5rukrLEK=H$O3(wpcEWWZA$_2eu@ z<=iAVwqnr|E&V6S_;Xs=7aggKHLs|gC3h~bRqpYlz81ynUN-S|r%d2_Gd#mOY4P2C zH3L)oEbskTr-W$Rxz`dJY3zj`TXPrxPGM7%vFB2o8Ph(cI-^O#`CQ9ZWy>`AvZ6ot zzblgts0|}e;;vkyiH3SZBQ&+nJf>0mO{=C)Iyk$ub#8=Euk!4c#z}tCG0;H%DlT79 z1_MgW;0FW6*){vWb>QpkCK{fNp1lyLMcId5uAa@shVO&Q$hF}|C5s~w&&;DNLc@TP z8~?n40`m9zY;Gb`m95QE=M0WHFVCh^n_<7Yq3DvZg=yp2S5o;#?UYcks<-p-ceRjq zRajKRB;d-H)aXA~H9SZ4Y&M%3I4zU&ux98=qy!rX? zci-UTb5o{rP#Gr$6fSu`Lvu-sYZxfT?XXB>$1eu#ujfY+6TABQMk^w|s9%rPar1ba zAYAXiw!glF<*utvzQ5I&Tgp)l{wQ1J>zd7xOmO7L=dUwdQI@T98ORM-P=d*kJNt|DZxJ7(v37e>rk&m65vlYwItlxK(a*5=~R3^2CVHkvH+ zN^VB8F1@2Pk3L7xJToYXO)E>lX4D}hHAw$?HwA2fTcJh)_V^O;5rg9G0_5YN{%vLZ zoTk1(s>Z>n1B2CmHMN(_PMd*Dh)qG*_ZN#OBa68|2{IjT%J^?hEp?)%&CM)eVYlh- zaWfAh>{koRW9f%*a5YXOqO#Uu`WHGgt1vO~%}(Oi*S5+W?0eho%7@c~D))w5ANMk- zdj>it+mNF&H6TA%2fF?R;uE$~Mq$g{VRP9@(ZLPV)UFn9ILu7M;HC=RPa&$B{A5^| z?i3#I#T1Ict*~`T=34%7O)L|e%^gCWumtay^(*)*qfYv{$eF6guDZ$JJCF8SVmtaj zb8!{&KQayfqN5k`u5@Y6f4aRds@?Er8y5%AuBiLd%zjtYCa3u`F8u}VkKK#AefGL{ zrYqN_n&9OBLy=LUhnR@WUoVJ>GmR1Uv|>i$$|-dd{4;{g5wM@% zA;uIb^F#M^$w##QGc=U%g4?8WQ6uXq-L-j_$}i8Z`H=UJX2Z$ypG=}};{-q*?8_|;{FCIl3Q(wkY&eKlW$u=D_~~e!w&bic`C{mgBN<4iCxkMT^>2-n=<-6t!+K>LEO5Tw6br7 zj2I@xsp{e8RM7n7Mh~nFdE5^fX8N4+m*uw;auRB;LvxZ&2sc#=XtJ&)Z5M~fpM58> zY&yY56Y-ks3v0xlFw2YmEJLu%w}RvIq<96)9J7oA!-dqO-&oeV1c5_oaJZ#eR($mE zvL5>Hp?XK`XB^XUAjQZ*4CY$+mw4BIuCf~$;@j3{$_KaDS2#ECcQ8qdi4~hP>NtBJ zOPJo0u){(*xeBMf)l3dQKxAj!>v!EquX|A!GsLDmyGq@7kSM=meo5A@-qCKF2xM+) z>g~98Z5$?Pp@8FEoT2C?VMy#$%p}UF!;nmzVOMTfj_>;aeQy_i)6KEIUU&sdl13a? z+`YKqqhChi!t5(WaV=NDNe$!u`QRl$g!EfRB?Ko?FfM@JRkw7ZfT#2D01txWhHr(A zw#1ggEqVsHRWa+8j^3rz^<0(>C$4F%Id7#Q<4=w(&f;>mx>_(8+wZKg?mCK&{SN1G zvF>flzsELftrPsbMKY20FZ#!Bh=kIe@jps2=#VxFTNR1Ph<8L91SS$Z{wA!?D7h3k zTRZkedEuFbW(VRpA{I{qOS>upu*>9e58}2f7Tresu7PYcp79aGR60xf1ZSk`L*r|D zy--KYQyKMcFrnY3`z zaG#&k7tmM)t#Gogj<(Rv*t+*Ya2+@9<3H-7zM|VVn8=dt0T1JPwU6vMBoD>p17okQx zT-{u|UpNeoS7M^Wx01}Pwj6gEOHBXXQOZ9QJgoS$hh{f#W;GqnW)ui6)woSr z*70E2XHAc(lP#hRF5#gMGS)S-ZfR)s>E7;QY-t@8kzji>TNw`7>MPizxHM{+EJ2Nx zD1{vu)GxjrK{+-wm`R6qIUmk>)Ok4%BGohKT)GRtTfj@JKXOFS8I}i%2nXZvvWTe+ z%ZlFC5{l}gj!c-ni5kfV zo0IwreUPC@p3xuZBvN${(OJ~e9=ua_)zS^em?z)`l#rKy%+L;DAkbu7i*p(| z404H&A9^>L3H6^^AMq0I+EDYuQIM)!(+<)f2JHJo>OOz@dip8$$+!b7fbtSM#3i_b z(&clSCQ02=$-M-W!0yU5W^j(TKXY%=#ThICVkW zSP;j0R__a1R-0r#tBA5?aXlon(jBf5(9`Y`_E;|MXmDrqKclsaX>Df zT<}Z%4zpuvJGA+-u!S^pf}%tEUo9)b>vXDuOvJUci#ai1?S6%~wOg?$73wD2^yzr1 z=~9B)@3TsKk9LLcQHk-l~3l((9XXqv9^X!AC#s z7Fn~kEVOTP=HKCr;9%Js_~O|9bgIV7&x7rMv;gj%S5FfXm&8A6ut>8s?fo%Tr{k5( zS)3(u5&WIXWH#iz9-|W7uL;(*77A&GHR!+dE;J@I%ey{Up)h(JH&txXq3I$oD-pZ# zyM3CQ^H!s;>x;e5ft+124gwnch`4Xz-%e1;JZO*07pvvwu78eT=zpIFU--rIPy)(~ z-hFWPtB?DU+^x|rf{W>*|0z0$`^JzcbTTRu0VQS84>vR#Idr$LrY?cPw`)_w=yZu+ zKq_#GTk>w? zNjAK2;m*F^AS2zGd|%RpnI)N{;dX0?b@SkML+aT6gVm<{E9GjJgnN|0g^3&?53U4D z^d>rQHl51Abw!uOtmJob;lQqXakA1kaB28Z@vGCcCS9k;d#@Zji6QJ6kyQ`Z1a5+? z0RkJ{Q+4+%4zp{}{S@Nb~KkIKLo?D?1|5{R2 ze;S|}!i8(=1n;zI0e~-DnGPGR8>_u4U1*J?jeS`{AmOpX5v`3nHkb% zdp^i}OWrT1=!(ehF?+boIF{!PcXsVoJ=axsb>@`;;%D4luf9RMEu z;R2V_3nCndo;)GH{YbrdEeEI%oaNfuJ^OAR`wd>5;@p(7=aa~(-ah3Oy7=LU%zJeA zPWJGY?uHd(^gvlSeZ7ggl}2l8%S`K&-aEJ+j`2bfQqIfLB&!AywRpwm}AVuRA%DwbCLe!eEG+tPlIgUsv}$5Z}n zQhK6GBXNEwzAITGlamb679BaSJai?sP%L=RTDSP{R-(IGgHd{X!VEi+wA3J`Cn6vS zq}QEip0kLUgr9Ml?jw33w)Dj97b$i#117op9OgAH9bg9NJe^^(t6YuqxjmvT#(=oM zOO^nrKL1(F8W#Z1M_m`+v%$UcCzM<)5{e#@3_78^LB7}?VK1N&u<&S?3I#=GEP!IpXoiX@z=J_0efZ6-fi+{R_k0O-_W!&mGccLKbhyVhn(D!lJ~jv z@p%pvEM5GGn-La>W(%0N3l|mR2X@H~nH&agjv$VXZgBOqezVf)-C(I0#~qD!9r z32Yl_0F3xw(Mscs^gHqdrEt~28-rKf3-|`T_I}c->d<(B+IYWXvKi<*{1PllHV0l3 z#Q;W~3)#~7cv3Sgne;@rM>P;=ZyC+>LXur0PZxmPS0(_4!5c@egYp#Xwm`R3>XGO? z?QQ0A&n0SMd#hMsq}eieF=7AaiW2QzG>4=)^R%?Dmkz)Rxo=r^bXcNUu6A!X!OtrA zy*2+u`Sut0!sww4BAmk6+d~EK(>Zz`+P3m|WV+}a&Q1i3j^)ORgm(0Q>g*l*`Lkduv}Ki5;1S?(y3R z{tH0k8>zgb(zpyg@w6{UK!5{99r^^{1g>=5+9=bw2SdvN$4i>tYTFVASFBF|^VkDlurt$NII1>6DOrx)Y zfQtw2yQ|-2Sgp$+E64u9y~?Y+pCo=Dm@YSCAI>+yC2Xk11D3HZTALqlmYma9$aU(+))O^RZ|f}@j5 z7Ynsyc@ltz1GY_YByjw%%tx2H|C6hnQjhC@duZ(H^qC29nTZ+fww-kUFwRPWvpTsb zEdxL;29-QAJoLL5)WbTAKfHo4hn<>)6=jXcq}thyWa=U3L2^PD#d)b(D}^ z?a+|u#pfxh7ic0sou1CJS$;x)Y^Lrt+SO8C6yfX}qgC#|AZN(}mwFsL5vr>Z8KoUJ z>(r2mc#p0b}1#v{cry#;0RduuR!ga7zOSLsQ>nS zE~vaEb5}3I#o6iqrKgq%gTM6sZ}R&8w0dm*Uqdhc|4;k=f7jc{exj4reDo)`e|tRO z5xE{UwWa)a_3Lv$yUi{Dy}AeLVtCUl23WxplFMvjVV|a8JJ5Fg7?$Q zKtQfo&P;_l{jN7JuPS-Bl9tmcu#F83izZZg;rAPW|CX%|%rWMFb2tQ=pMxTt^0)xG z74wPrwh%uP^Kpy>KmYpA{68D%ck_Q47z{6xrN(^COZa@(OPDew5yvYnjZ}u*x-Rz) zS9*QHH&jLVN^k;Sl%NOD$?dxzWYTIxh4wrZ95tj99oGF7%xPVah%G>96Fj?v5EAtMq{TEu?v| zV(QIk-9kC? zWT19}Ae6@f>e!oMpbm=Hx zSMJycrk(k~VgBq87*pvHmnmtoo&#C(qgqrJNU_k2ZEckUJ9AUBm9X>%p9;3tW45V+ z5m;R;4y?Au@c5YLZ>9pgsaLUv1bAUvNyECt>OV5?~KaySHm z>-4)U8i-*O}-sOBW^%QAtPW*A#F=N)K2i_-VI$OmUx@g8hbwM$wt{KSDi(m;dmxL*btxSm+u$S%ZTlaGD=yxab%>nv9V^e)cHvNH=+ zw4e8u8O0x%w(ZS4(-mF;L6}6&`(ABQJe!B*Kd+t%XsFd?3!(=hC+^eae+q;xQ_&vwCEM3SPLa!RYRv z3-Q}QzU{AZ-5!h|+O-1@fY-?W1b_|#&)X<7@3q@6f$T*{rjIWO8x-i;50>q2Q?1k^ zrP35?9Hx^BAwH!8QEwMir_Vs>Qa~`W<9?hs@xMWRtNaJ<+5T%29c2RHT9Ua1SEHWB zWX;^u(eS;WiHWDfE9;_~VB2iNA!Z0WJTRkc-YriUUo5VmA5GI3tqdqd2OW3YaRQS^ z28b$Bg|6gBI3Q<+$KD>Z7{ZRk!~&l3Rd|=BHZFDF84mHoxHNfniUx1(6(8|mHtD0$ z4wVd8ZQ+_mHxpW3@pTl$RSj)J_S%+z9^`zq{ZZ1QJL>fSMKZsCP7{POJhj2l_!7O& zldhFi<8Jkz6Fb5fD@;DkR1uSb`zF#D#4l^N6gW6J5dqkwbCQIWC9j&bbi~$_$ABk0 zBy&qKknj>a)~n4riF`c^{#!;*-O303_s6I}v{^i$o4RShP`K&rFieRwvI@4MO>C1E zIo?R?g5IAbYQ;`|Eg?BUY?>2VuH&V#G*Nl-&aV;;f)7OC{3)Co+0b&B=@gupkmetA zDq;M?jdC8y6ex$CZax*uo$O0;}K$iu(G>W z;W|;S3Bh8q7rQ1%sWOR|!S3%^7#n-7CVq)8?5Aax`LW6i47=$7OEB~(sS%i#$CVEc z(FipMKh>vp_5KQul1}Rr@c68XI)jHGz33j7y*zccJ`y+|`?huK?&|zJhcJ8*8Xq?t zs>5QIysnV#*EP6|@^DK;3S6bJqBJ2ayR83P{Ex5ESeACg)Lk#)%x9K}?yR1VQ8W(6MwPGVT{^tPFnM!-&D^uex*7Y)!*Noc{dxKg=VZ26-ahu4%6rR2K z)ya7)i;-3WO0Zwh?|jBM(a^Ac&rCdU_|U|lf^=uM(%ZLb39i8#z*xT!x_ON8zm9j6 z&R5xP#32Z^9twAYRB*$Txx$p~A<+&a4Hk#wHh=}FO=6-9S@jzlIXH+zw;#@kKaGk2 z@xDZKDF}_^+gcx>IL|S>ywWOBc?LHHaY^ZM-)J%=h%-5XC==O%#pPwxL7!9C_ZpW8 z&-r?o>z{l=CXDbgD-eL~^ZNMIn$;InJ6n_{K~Og~%Y9_e&D(LdAb3sI66Kf6;b%S9 z)wRGhhJlVL0*`7@sIJ;dZ`!|YaVKii(Ak}qD(+)wQg!^w6MPep!Mr!bB^NE0nKkR_D!FBu}s&L2o_nbY(3VZXi2Dlihm#f(* z_cAm%9&K$qs#iW*XGLd72|`z8w^to&T3rJl=mr$x%K#aGRdl{@MqZ}py+LOFA`4F| zd+rrAUl6{*=lDGxZ;5jdE;FAUUWV{GO z!Q9W(yf#nC*e_0a4WEPzxbsIMc`yl@XmZEBaknMa=iaCe7;IJOWVwGF+FSMK&5Bs1 zeY8FN1hIGhOTQMCuBKK`7jbE7hD7Q;W0{W3gw6)dmQhQyQAHU`3}df<9r~v0Q8#G- zNp#p>S{!E=X*rbKa@bE`7hwx9@n?!HSid=esYv-W^_tmxx5gu(JkPoK}U0a7i?_t$N5ZF(Z%4 zT;9D$>fD3gopzXzO`B1b*tq@2D9q7VZ`7#KC$Q&0Ue;^9yNH^3Byq?-r%?phL52F- z-+YgMZyR)atZP~ib3-f0LuaMb{UcNMf4^^HuX;j}yUl|CbJof%S;WYgb(@(nD>aFP z2_sZpR?P^F&XSRJ!Cyx#xB}<_E6isjJFpqtoks=(NT6JBE(P?I4>OU?1HkBSK|@nr zS?Tf|?ULg<3=EB^mmhEatJ?-_GTN$ub$It#@x9CaIevwZk8+0#H+^=KoGF&!{VDv81AL|_2#od#%KkAY^vy|%nE>WrDggrzGp1dH@?JwFD!d>7!o$E%1r5QM>K?o0dqG*pYC?8d*Q zojvcaj=rPdcv60Ls3@n*aF>N8N%+`IacDAFv&B0y^;^_T?aq31grCmS=jihR5!3o} zRO9UVY_)@z)+;}0NrNyDFGVg7n z1J6^8AOzax-I*y6ie{q%wJ}VRWN+r}3$QTApKw(VC(JcO{MKry?soTj^WmTIIoE!F zRVzZQ`$o}KT>vcU!k6|d?ylyE5F?*X*#Ek0nAjxrxvC$YDyfgrL>%?$8;*n{ZJJN2 z=;H{w>N@J1lir{176Z}ACTIuu{R2B9=EHD&KdQLTzhVB+^|~zeQ!|Io&Mx;)@y$fS z$;4-6^PZ3gq}Y{3kEDKEK-@Sx3%iS<5!ayJAh!tJJvEsnHp)`X_f7Nq;&h;hIQp@~W7smRF;)auR3t)@eopaxAiQRAw=r}btyEU9?gb2Fxp za9JTsHv+e}-SN^F;~h8x41Aj|lKx5lB@2>k?UU2u8*N)N)VIFog4!hfyjk%Ogqb>H zi9chh+q9m)&XN!CVg=fzHdRwi>K{WFwh|-Y zZyhN_O(fj$?ZP-y|+s_jq?j z5fGHAvj`w*RzfA*?=#|-3I9yE%wh6oL=|*{nFfht2Z11(xo_%j>T}jsOin`H{L`wY z%b*BLfxI%P^0&b4t@uj~yQPZphRnueOdk)q&7K~aA8%eRp;!MUAXlyF66dS0p=ki)u$k^%A>Vo`|$BM8( z*VuAEGZ=eOwF8g{5x9yIn!ARK7eqBtVR+V&2QHWPwsBC~?-f=PD={IVx%~;Mu+RWX z=*d9Y+W-U+1Q1J&gQhJkua}}VAVH|Bhb!KWCl|N7)HKQ1aB^pUhM?0`|?Zu&48%-9g*gqJ`loR?**fuNDAIMH}YSgg_() z2dgH_Ue?P7)1{zSp6ni!_TO%=1o##?DTyGdEcugY9!>_9(#H8GRhyhaz~54m3dXpd z2fjojca$0*f8K3sP9(@$;?ZdH)_x}W_1??;Bf+#t8jMMhilGT>aRU=VpVOwGqN|jI zoE-0OcvCZ{>^KbbJ&ORhU6%k zMBh!CZe1Y%sA!eB=y`(dl)DGKWFFig~Hv}z#S>sMy^DNxi|6q z`5zGkaeZk`sDH>LsBNE{yZ9!V74j|-gI>R$1-&esaHyjh;7>`GzzPJ$NUod}d5VR+ z%}JQJi>7XW{artmF6QMn&woVK>-RUOwVjRa+8gxZ>H>CCc)|T_qUf>Z64$CNRhrwm zTW*MTPczKZz}pF&X+#1LhEMQALNqi7>{|`3tEPaJv$&BL{)TgpE>V)Nz+v>Y2;hl1*8(i4lX$Oo0Cw7G@##;^XhVYXv zXY1A|Ra$j|Nu038%>D~^(SY)iH?!*xolfM1#XR=(U4F7MdVYMP9_0k-uViZT`KrOY zZlgsqaGBk|V-QkE*^^2v{FFeuHdq}eF^2E)DM9)oEogu)DD zVXG0lI@nB!r(y$qgoc!4n&<)QSiTUlfN7)t$w{PkrjQ`7EI`HGN5ROIlR)cuKX ze+Jy3hVn@01D0Kc;fe8a+QZv?#<+T1o)unTIJ6}XRT>q?c-MVtBxR3CxF8P-=Y3rr zK|x!nEHha26jI=_(A;N@jg1QD`_{v@+OYkWJvE7LZ5-z{Fjn#h~`>hXFb7E6qJAN2jI&wL>)Z>v@ z3G1J^^2Y4PrK8;ii*^P*J-NO&7ihNJpBR7imo_WTl`kD*$Q#^ZRv2#~rJ4%n-9G&@ zema$^fc0t>=IA%joaR(ST_)>(wk9Nd=|!N!iBB=riZEoXA|V|#@|6wT!xsG>idJ(- zzT7VpRtykj7d5=3kUL(<15R>ZT;)|&%Vd{#pW@!zLJRBhLm9HQBF+PFj}vEEXug&D zz?8TYx-P3+)DTkmO+qkDMrNE@zOAp%_>wol{i(Xgx~QE)xB0ZqOW}kdiq)tOHf`93 zm3M!kQpLc*T7dH8z&9UG~cs@U;}gdaz4rgoe99n)hitNQB0zc-|61{&UL zsysBtk6GvBr@2yAyfcumD?1=xwqDsfMYk6aj5u9at0xh1;PSF?lTJ5NVHT+p|4Ksq zurzD&pW;R8YzLWBJnAyiI&#FaNlxAcNOtG=%lURh88v|FiS+(g*gS8smryF?X@|xC z&LOBc^Hset)TWl;R2LG5jefIdM=)2iso(BuKZjH*Y)`W|O_Wt4NtGe(45HVatUV*v zsJdd!0&>XfW?m7M$ihs>cTZ8hJz;)4e6IUGgLy9l@~ua<(BF(h4d;ICJum@op!2cw z*l+j3G<3UrPi#Q7`7mAG+hhC=;{2^z1=8TMgkMr~BEl$2@)OR+YLec|&uQUQI)D?W z6L7Tm4Z{B|+sJ7=tKKJv*57Dx>>Bd8)=hH8%oj zY{6YWsvU4@27I4A;#Ws^dx97{bRjHM>%WRmMG8*+skSez1`$k;7u4Roc>|C_l`qm} zf}8b7e|=&UrYJ1P=f`+7y?_=A+xYY{oOy6a0nL(nz%-N7b8`jgPYhO{hO+~bz82Jf0k%I_T=G_viHx;v$?!E zGzn8%iY}HUb$C{$^UgZIvPr+W*KUmQAOmr#YLfD6{QNo7`WU9`e7HpMK0Tk*V)u5? zn)`ha5#Iu0|FBx?p3Scfvw@S^>sDslAinpQ4JllI_ojAT@pjcfz9BZw$@xvoQ8^10 z@)Glw#~|gvX@G)pRe+9;`gE0`>sQ0b0-!_@2|&lzV@wq*uUPC|Jsx7tnv!3xl$Z`V zXn4JmP-yEififZ2`xF+s5?aGOm(A&~q4l_T9NQx*FaMf!hz7JxjYHDmw1U%6 zgvkuRR(x7B{Ic@0oKGZ^F$luLL*;8VTzsbY`^~WBL!*9PG}7aN%v0X?2^$dzHtsi% zUk}_mvN`qDN3XQ|UO`a0Z8q&@)rDlG)h^Wa^~}J}dwS{wv&2`%KmXD~*^NTL9N65~ zo@cM}$pmhV-Ex$Wms&c`tcy_P_3W8a9EoB;DeeT^?~pq zxWlHMr(5_dWL;kwxVz1avq>H(X*|v_?}8Nqo|3yit8}0P2E~45M)W1l!*z>?C+jj9 z-*qsDoJo*PWDQUdM&IP}lXFi6Z6~q7L`AD5T(QH&{SVYAEe}z9j2{y<^0OvPtX9Rp z^*`yj!_hE*?Ml1ALsg7o>5G%ys}#Ae_F_b%D7Gv!2pE-)Lqt}ctskV|jun2K`upvpo#5sD7Rt85L2BM-#1kej;>K!F3-4RTxNqjd0ecLr(}d?bJUv zX`N1mxY$)JZ)Rlr^YYp}+u7|fpCP`fIJuSm*Zumf-0kYq@x(7bL|4v_ zV7)L`xsxBOuyr*ZX?8_6%g8q$P0 zIO7-QrUKP_j?N2zQ4+Nb{*ZI}%b~VKvvx>lpD-D=5mfn(_@u0nXp_N6Jrk~88zIFwGd?HTMpvsK>#EGLlEH-=-&f}Vb}kTwuDM{NPPqu4Yhf~xA(gR5^v z@?M?oPPryF9aCI?ZNs~c>&P8r<)>DMxe7;j7JY4+)+uAuTWN{fx6F=5kOlww?tgn&iF2-jTb!C?T^`yA-RA?Y30pA+W=CtOlAbfmyl`cAKwGA zGA#kqU>AtrfCFRm=1pnF6@_z~!ER_;$gH&6c*f;*4E$3dlvopvwwmLPBqqe5@(n&z zRkl>qMKEvxuDsA3eRF4{XSgJHSGta_6)5< zbqJR zZ@wV_SKNG?b;%-Hf!E52^&$F04QlS~ug>G}jYS z^Pic)y?{iNaeYL)57X=z0^3GT7d?JrU1RoX)!@U{CADZug%gLFN5f3L06hF)gQ`f8 z?%1+|>~2tV0K)}K4xmE2KBT4f@b@dY9L11=K^L$c=8;!64ImY~Z}JNYwx?iv@e86Aj+iQ+_Hf7)yh{k=96P2CWc=ijl--Mz82b1mA6MLiy_cV54KnLZxzo0-MWY9zncq;KS{ zXZ%e{D@x4t4aS2fkl(+1V+&_d?g#CSHuV!yJVlu$mU67jS=lsSo9wz2?d{h9L2VtR z+H*fPH~rd;w_VHuDv++P-|~ls?b|H82aB5@qw7rGokOqaBrBi(>af!4VOF0H?V`PX zZ2efI|MAjJscR6QGeD7Gs(j-|YH9$pfs!JG&v&;84(}b| zUART|C>Vs)M(6>TSD;RbHI8Qod^rzTPT{t7QLRcWrbw((LM?0UG){(}8ESuM( z?MGC|!}8CE9b|e;NPcOju2~mr8z7L4Dsr<9R*#gVgExM(yv8YE)+5jTMR*ol)U2LrYsW8{WWi2B6X!Z>Gl{(BMZg&0z?VRT zSD*;Rafb&0;+ol*7Cx8TIj}4Sx$spB1HV4=VCDAs*F~O#LD97OvQ?$bL zt!&j2gI#~H86ENVb91gcDC#OI%z@0h25IVRz0aA8Fljly?@DrsKk=Bh8h!eB&><^m zQ~4OR&K(Q%uzb-%9|c)S??qw-ZQE-5I5=~=oS6Rs6TG%H`&ngV7L<$zTH4h`X%P3_jnCmp{^4CO2iKlJVIN2u#Ic^;f{nxa6fBDaULy1Jse|EEsS z_1^A=IYxu)*M0zs&}`80`@h(TA%PJ5c8_as+(P3M0^D3e@Yy(E6oUZ{?^9jChMSdk z;5JQ$R$?W%d1vhZ_`5;y%#i>9%EFF7eKs)gG!fF2kl>S9Uhsw(@WrG#lGa{<)|e7A z@Rcwlew%ves&;=>`FT(*7fmVuSUA z4Rl#hS`7YXt91x(QvI-y;*qcs% zm;JdxYr|w56g*P2s8@7wkF<0c#7lNrl}{m4_o)_>;*vC?Zfg}5lHet!cFgbX*k4|? z1ITr86cYY+?IY^=kR^abRNrs3p6CWVih^>GkINU0_JP>l+RPJFEbmE+t!uXZQT0AL z&FdTCJJg7AfA1!9?B8cfhb>}EgDL(n)Bo-^A!^JA5 zyIiW)45&Q-?VUP{^>R)X{(3m`Rb96SAE#&{f4s zP^kLuuD`MI7%1UO7IeJVr?$dP&#P;imY?S;)<040&{$9k$^Bcf#l912^|ZcTs(5=p zg_|4d5Y&5UIpgDFw4V<4AbeO0U^HaE0-iXBFzg8d7lakWxqEpXq_O@sw8b#Xzp~Sx zxUYO5>pO*SzyPLCLUx=}DFq4gYzQu zTu+~Cs{s5#vlqcpKn*!@wk%>i@g;qrm*>>51N5)V_&)fW(B>dNeN zc6+q0(=#KV_D=)X(Jx(FFU9d13yp^^S9sxr!JC^!su`n~cHS5LOHqIC%&I5m`+CAZ zVZ=t6^}X#8k*NZC8PvdE-6Z9Xkz(IQFDLU_VZprp6ZM&NbD=(+aK_(!xW7?{KW=bV zI9d+36T&Bf5pD{Ur&q6zHW!V!LU^6-zdVb5igx8X@jr7KBz^3-2j&t8;Rft3SjFT4 zR4L*XUeC}1H^S{d0yLf>)eq3C;(Mh1?7ve7LZi_<6CS2p*us+&SA~j%A+Tz@;YDg8 zGjG%A-vJdzpO||~SnVWi7M)9#^_|BK1qLx=6Z;SvIJL!M!?AZP(hSI3dzN53@iO7k;~E|M8(s@q#F zXCs$(VqX{1|4&WeY$h(6j#+%A*I7pulpO4>NOE5qqF~Zix228y*R?xOq~+xtRS<;B z+j~Rd!A9SE4VA&@X7-n*zt#&H;n6>-h1;8mW$T371ByMsX4iq`zyHu|FyH;YcD#5F zh3@XYTe3ityF6k2xKw)m`*#g2rO~&LRKkX3W9VF}y=N@r z==|+cBV(D`o^8>*KDDCz|J@)-)5@jGcV~I1P&DP|)6$lK43lM{nk2abl>;)N=d&Y- zov6MX-rc&2ba+(zsedEZYU{!ChN}h@iHD^+pZrT*hx0G9BKXP_1Jpea?Rh9(nAXRo zW@r1AjDZjmz(XDbSD(hrdtECs4mS zOC%s$lPI)a2GhS|zyErKyc7 zj^%^&w(quwr@m^yLtE5`fAw^}58$J&WkR8!>CW)Q!z~VdyA1Vrz-n`7G&pOLRE4l5vDX2)!L8VG->3tg*{pF^SS;*6&nKu&{ zk}+#EwPW>u@0jMSKUamAqlT4ga{_%XJ->n|bZ}zY{Y1ECN7IwJ{z8AHyPt?3>}`Bc zYWhCFlC%+*>K8vGJZfcO68!;~N^~>C1B|-AIY_8E#AE;%rSnc#)AmU4Hzd^;dEYK3 zO3D+4UgqRE>wJI(g>kId2h3lTOgFJmRum#{oR>2&c^J#+P5`yn-SydxKFpjRR^Ql?flE ztyq`=AR@6mwSDh1N&x{~Mg>{7U}t<=GlrQNjeNBUrNd1xbd@}`qk7C#U;+|GmRsh9 zDQm;8MGdaNQ*#+YFG@%Kx*NcGo19jEtOjjgx~D*GG9`le`qheW?EDH#EcW}4S| zAo>TGZChA9qjbcR=ntpkT|bn(%+UrAFgNMI24dHd`4KN6xp=EuyN$ck{=LhUYrtGx z^xz`;t8u@U_oiBD4{I+81f+EOdwMM0`Qz%&09G47{R(tvs}+L;Qi;&B#4xC1|0z}a zXwKYqPR{%?NJS%;K3#8sAEcQE33-%(Bq3k!-oKw)w=wRxUj~qVMe!pbIuG5C`isZ=bUpIW|&jx^L*>PXMO+AI_o?AL!qheuI{eB>Z)D4_8vPJdELiW zquVL`%Y0``2U)I}>@jEwUYm4jc z5@J1+ii1R(rr9G}78d>4HY)MZWIoSp0F_G5d88-3J2F?qt3xk7Iz03@J9P$vr_zHk zCyNXMIi_9tJ0yy!9>tDGu&puf4AwG>$m<>u@uwAHLZ8c;w)9kjh>IbBCJ zLa(mQsT&zwjm`5yl%myE0@st)9je7keQ^cPScOxSdKcYWMz6q<%led<_{K!a_qUFX zRDeElz7pFnBoHIFvvY_vb_ULq14$m|ktHOkvl_+sQKu(1N&!w>pBTzwZ8xFdM44=SuyRAN|#@)&!c<$0^RVP zwcx-hq!lVD-F=W&Bb3Nc&w%HHea22cwgx2n*J>^o?ETkHx3f^_xs)6h;p+pGuY8@m zjj*uZ?5ng-ov|;pOfSN|p28UQiL$C|#!J)a$=UnoOU`thPolpC1-(NtJAV^nTS zjcyI1VB>-A7^^H)Stt2yCSkD5);F|E)CSNvMpysH!r>}^5)i)Xrh)dj`vZ|#;P;{u zu}BjbuO;hg${K29|I9vRHwzBYgH&|@`-5u+Z5LhL|p~QaJu+=o61b}9_t`rjT zURauZ&1vnmAx(cxcS?tSTX7ahKM|*~h&`hmp)@%7G@Tf%a&8 z9-Y4uT~?wMMeGC203>1v1nd{v8zyN^KuCfc`Rv^y0$R_*gKl7XM+=@&)WxU08bCw! zCH(gF8+spAw^crPNCkQC1+<@Y>nN#qas;`rdmC0-8!m-|8=b#{0lf)_Dj1r2A)4Bg zT~UhfJNg8%-A|h2b%ar?=SB@jjeJ-cbO}JG9VR5etYv%X|B%LA)Q+k9T4#H0OTgj1 z9!gA>e3Ztup9)wJFo#OpT>>AWxuK$rPXVOJ+BZ~D;&uc5vhEWmK7b^QT5G32a_ZA- z5U@j50t6`CG!n7ihYdgPR5L>|V=mif?7j2|paX154qaFI7(G|}m``Q<)I)l5da)&Q z7n8BVxt2!n+$T07hDx9pyY&s76XKx_$CG)4kAyf4w!{D#H}XOkP<#(*QaqYs{jPvi z?L6YZzRHTZtbFim2v0R(?&D;$S?JzjuznuSeN%rL8jUNX_4-pn&l%4*>SjnV{~+2~ zCWyZ5V7Csdq>vqwD%UjJ;OxoUE)e=5?c^VvxQx_4|&U-#2N@7T2z9j+5sT zr$}PM`D|8qaF}LVa9}vE)tDd?~^^ghM1VvwfQ1rl{I7-^T;2<#KE+h&H>zYO@8$UYw9uP7M zKOZP93l-!uwYaKgei#|ywEOC0S6*hc$u9ysR``}L1w*pmWnP?%7l51>w;L5x=(!g5 zZ##RG?66s$eHf-zBpIEL9zYBmpp#_3-wh(%2lO-=XBx(;QKdsQ-3e6ARDDgjOc5iq z8-bT%acC(BOa>>7%KqL*?3bO#Yjs403NG5fgY!yh1^!u zLszzY{-x;i^YeF!?v|`>FD*UTdvtXH^rD|>IXT-;0`mxS(ul{#0URMtj#-5BYwhK5RMMD})#a2UtgRJ>-}RGn|z7AC&+GO%~cACN#ae zsWB-jaUM2S|0D-+>B0M~Q~8uMaeUI(XNR6?0UJvL#Czbw2wzU-q{@=$+(sO%FR_x3Fs<-y++aKK zg~6yzhNszr=or42bA)ip#K_;qBxJCCxo5m=Z+JKi5EEzfc?cK-y~NHaxHv^za%t)AeEL8?gFQm2RlV=I(HUD_ zj*H{7`m^#Rr%o|}Q&ZRusm#THJUGoNeLp>yS@@u%0vJO9qaMC8XO%SQkj&K(@KyXE zrJvzT9{zGSkxFTg6Gu+UcbP{iKj0F%H5m7rEx5@t_l`K$N`OL1>#2E z5SG`NltdYeK}v&jv^|rSsl9$8w^r-RQq6 zOTuM^_tnO9Smas8!%iB{QFF%vb~e!EZ|Ev+6$-4>lf(y?oBO-@4h&1KqyEOsY;xt( zzEx-siU%W{`DW9H9-4^Hm*aEHSu-Rx_G@|VO~@0UUcYDmCQGCY=`CF*s6n%w(k-Xk zIar%s*yV4=!?RpDyu7&U^S`m@f>{%_WZPH`hN}sjwGg_QULM1_G~UJ8uhHX$ z7RZM@h_CB8)Fin<*Lw=fpIR&@po2>K#dF!_$uo#69}4JD&B#Q{oarVbkCxZ-uR;Yh zt;f;^^7H)EF4BUvoTQXQ2d5IO6fOI1Ni0S~oe>ui&0C=|(*8Nm#@4Npp$Ucszy5iX z>kX-jP%CCFI_lbE7z1_VZ2x)bv6K{>;Prqd;hdxA@fl;@rnCX;im6f?5A@`##;~ya z{Z<|jc3pVFLqDK z43j-_`;Tp{{gPjnH#?0BnC9bc2e&x(LsG6J>lLZn@8HJm8DkZFjwxeMhGQ)LzVF6uIJ{NVmp*1 z@@bGF?0b}bBYNj_c)drFpdVKXOM)QPXmq}h>;cJ9w_0E^{OHN<;&2flwd#6xx>`4$ z{4=VTTIWUH@AnN0jT}vX#X!C7aq*_vPVEa)E!nlS6=TbPeK6-F!==&S$qY(0$@P3v ztS!Ds*t}z6ZFHVsT4#v!Q%7f7nKWs5WK>B=6YP>YU$(mr(lA=!d4Y-qRz)yQA$ zd3|`*lix%|Lb<^zu~i|*|7-NLH17$Wr}MA69IuNt4rM4tD#PGyvJG+1w003S;CDKG zd2H>qnRnGMc>F0VXJw68GA1*ajk770&1yV(r1GwRDQ$C0TToCnol$h6+){E>;f^+r zhs2w=cc~t@{mxNVQL_$|k(@M^#F8Q~-`Thigj7j6T;*I{TZ2p=Ho2f%$Evf(x0jvv z4#ju^qPmNq_W_vpivtNs)%9n3%^Q#-v~Q)E1js%A?OM9+aU1*pCO|sp?lsY&G>2 z4i`j!DRywme6NhP^}x&16>!Pi)7H5f5?9lP?$0xgbqw09!{}pr1}0fdH?fzT8H}kr z!benAN*{-}G)M0#C@C>XY$f5ilarHw@wo+b-D%&xz~r6zxrs5Of-n+b)jJmK%+p$4 za^y=wcskoU@hutoud_oORRrcS+@WshN%8Ft$#)+<*u0EAvOJEmWvM>H zJl3-ta5{YBh&f73adfuJ(s$@=N3lxvga=bKXTJ4VW75@b#9ZL(Wk^Uc0Tt1wv4z>t zMz5Voo+wqU^bI$ECnU2db{N@%Shh{~Ik{4c zA|i@{drkI5?UcNW*`9MtTS=2@Ky%M`!%N2Yr(#v5k`0xX8yW_~@9XHIRLI?TI%PM# z06&R*(GaAxa4|QM2EQF*<0D8zIwylOuj4)`@r^>!p(7akMZk! zaHw7}RBH9<4M?2Sy9hlSV10Hl!A+hk7`-ZKkf>FIClx1XxI|XRIQxzus)g3KLly&a zLJfqHUc7W|-dM3jKQoEs(@l(XJt4x}kjXFh(Ak_m<0QCt^62=d$oGmey{mrH@zv2(CxD7$PTymAU*Pqe9b#>^0y>WuiXm}~jRPhrcSTers+9G7Z zz9TkL`WP%a0s8PsBEUx;78K8hi+i%)sKAb4o<-ul{xuvSDqL+FxM+s@e!ym3GWUqN zI zFpX;cpkLi{)+{k$Z}h&e*X+N0zwEk(2Z1;wXTz#>F$M(f@VZxxO+@y!xxXi?X)9`K zsO;`NU4&KK`uUO1v*mNZ1B&3Mzgv|sAU|(yzM?-Go}UI17r&2h;~xqPL_Xg#$1Pw= zve@;Ysy`2X1xY2``r$%N)&W`}M5k@ICFzx>H^G3J#cLfn5a;#QeJenCLPx5FO{#_s z>>eSrKgIuV;^ylAQ{0^Xf2d4E--rtTuTAyKjib_kH+3Ml_urp^ocjMM2hK`n40g!F zbxUsUedCFlcM;a~EYKmm`OQv{r2qEqM}WCSG092Y;($*V1a^C~WMEBj&!({bmBEK; zhqi*eLmUJ237SQVWU3|R?{CiKaG&d^s?V+!cw0BW)lmnofBqbFi)|pdQnN*^uv#wX zrquubih69|il$Y#euqIVY|QJcGCp>ri4TE& zC;w3J%c*{If{Jkb8P7(dj7&fghmRSimy3Y`ZP65NR>xX|c zAa@;DvE9Xl-5-d9y&|#i#mu>S_Avga=!=kUErMoQ3R=``_uwxZx`OLiH zM3);gp!tf-=p6F5ngu5wpqlCc7vD3?80395)%n`=?TtJ%B=zA)s^%>VoQh~_An^ls zI7BChu7Ab|1kYv{sKpSs43Jc9t(<|sK=?$OO>y$0eK4Ft9|JKnu%o1A$@RkrAVKWF zUliQd+G!)n#8U9b0L9@uxtxp%Ge-50&y9Q}#Jg|12-G(Y)K^e6#LTIB3g)JxZyNol z4oP%jF*cfC%&JJHTmDmeV-}S5zA62?cT&_#Re3Zzli0rKMMLOo^ancM$|5RNUkQ%{02N4<|T=UtN zm14l2lFCAdg4Oo<^MdsGoANeq9&pPXyuf=PDZ^WI^8D}f(?KYM=l4v4FB-(fzr29> zttmH55yJe!Vx|(#Pk}%y4?YXT)xpNh_@YQrA|TQt9BA(i@%*i1%tpeY0GkMy`*#y{ zl=U?IraywmuT_+jkdYx6D|8bw{5t&2Y&9Hp;BuyvjKw9V#5aO*5XjU(`%Pm2vEn2I zf$%NwB0s&iv178o_mQ=e_9o(xP0+n&DatJ>r0;KgaxatuISGMZ~kOwRXZ zKKxCyG!)3YgZGZnVFv1;3F?6OiUn_kWjAJ5>r%Y|78?*UlO2mHg0t!nf@*G5=|}0m z<%{*&kG)TC-X=4+yiQWF90R!nADk{CNKNkMIjM?e3`%~KEQn4BPEs{zKx@1u#rX4< z?%o+A@4v0;^FQM##mzJN&-Q`%{|~_bpXp?pRWSx)H^@&M9btS)CIg!%_-?mv-eoBZ zd2kyrU^H7bGRPU7>V$HWXQ6M56(B!FJ`^1aeBk07tvbc^o_p$_wiS%hyvE8*Ku(hP<7*U|N2RpH9y{P(ckNJUc*X@9h=-Qgf-{Lzh7SFJ)tf{IQ?&?)F z2S!lz?J}UOI@SMd?ObP3j&_ycd)jBE`sdHL!v@ii6(Ce+0;|!i^K)RC3oAU!BS*r;4HuP}a;o0jo;EZtr~IwqtK%5bgi_fjfHh8cVo4le&Wd@u%Vz z4<5&=j;N|qpxH0(d!k68@?GfHu^B9iu=3e65(HT&G#YqteTd2ZnnG2j^68 zE@~5&m`f6?Qn0E5;-Z9KBQe{4nf_ar z$`+)%xR1co*u?P9*Y)#(Cr2_i)<59ZLSGsM3TRW!>QMfPcSTG^xr~fFCsn(&uW0|4 zwew^KWeM7JvEAexW#RG6M|Sp4wC;fVP=?<=uRD%)bwZ-4m3@A_sMr&&|y*Dj1)fH2ZIu-lh9o`E~e#vW!X53Gd%9 z&*8=civJ6W*9>!QjAq1x@cid_h>h52zBb1xjiv^(GT=%My4E1g_zCncH=LqJeQzQ? zJOlo>LlvV-j7bHZ?}u};zh^ymV*+P=3eI|NHn3fgzfII4fPHpjz~n9W-p355l)gvR z?ato{tGEe)vM+AR<`?J1rT{rZ&}eU(y$FNkd*-w%JGTFo0jO>dxyk=L5>kcR7F-j1s(&-0*zGd#JUVVNBFT9dFzG5ucJl@3h~t-@{y!7M zHpxF(3ivbF{*Oto|K2Y6*E_oOPjZx+WM;N)zU5E_Vyupj+<5BvHt~rud9ZjvRoU>= z#Iz~Zicx>w6L5r^#J9$3Z9S!|l7g}E@l8j3+;wsZqYRTBPECp6qR6&BmF0!>GBwCu zi^S2Jq^wjKBn1um)#Wg`fJWTH?@UdL za!EanoOSJt+01t=)~PenQD$!$D~2arOcUXjiBy~;-rg7itim^yrv)FU3{!qLlR5ES zh~ffkL2h_LK?NL0T91imfC7-&47tJ8jV@gB=fn>88PnIdy6q{tJS`G$S6Vp*sA91F z{3}anbB9=^>aF2u(6InSs0j z1&JZIv4Gqk*owMXi}a}D)2aK+~_4dI`Yg*E$1uc3C|9<7lcUEjWa;|mEk zzd^2zz^=kYHxDpOQIg3k-|lP|6QcWbcXEyaEJ|wWcLng>JXKO&@q|NfUHZL;sB>vy zdaGzPaoLV$yHrFwX%^-91;+YmjSPskw1{z%w<08)&s)#EqQ3o5l8`0iY6y-=L6yG9 zN#%9hNL4bH2VbLidX%bicewKAdRG?{wfkPtQ9##rajlK=yOsOXCEE3_$JIJ#PEO-` zT=JW_wL0~&s2W`o5*FV1&Q66g#iPS8LjTx=$S->m0`ee6dvkRTMsq#8y{Fim9&i*m z=UJ9nzBE~fXLOe)?S%W1Aq@ImR8t<)`xFdb)ax3WBQ6B5rcD<1w_UdiJ2{@VK3A1M zwMx9jx2o5W)*QR;(N;4qkR7}Q`j}Ig?;I7<^{Vf8Xyb(x2@8B7=+NNfJDU9bV%LSk z*i(E&-otinn?A}4hDPKV!__dMi(4&fKbd01YAM+h^PBHvQME;AO(rBUIjAgsCFbeTV_SQt($SaM$~CmWQ3MTzy9U06=Er=Ip8Sw zXIM!ITxOG+LMgI50MAfgE*0`TxZ7d6!6I0utGP*v4U8{d9-o*75%{V-Bd zTDt3#zKnK*21adhv5ZoUa~44-1f4-eSN@hedLL7R_Y~M{ z#|w&yGIU6^4o6355&r41RZ|J&1h2Nwf)!EG-)1L&*gne3z{XeLTO4g7h1Qq`zp-N4 z^J;cL1ue2G(WcwU$n+(+L=72t2up;G>0o@w0zv)um*BRw%Hc&Axw1mJ(OUvO-F~j4dMNmoAK#Y2C3}(J3Cus@mZ|@RB ztQwkE15YlX{`mn?kQYrU=`-}oU9lpjX!f#&W_$H1o}HR$4w!{F;t=Gh&(EK7Ko$Rn zw;39+s~Z-Qw7y;l4#j?m)9q5dx~BW7W=t%j=AVq9F>QEo$-t^d{8PH$;N zh3ECJ0^m*QrX{PBb3{cP4NOlNh+|dB#yiSqUY6r#2R+(b+WD~P^fBX!7kXRxRl}aF zEDyn^wz_g+WCAOmLQAtV!~S%1oPd4Xr)8zH9ogsh%z_d)`gxQ`}$@_4aeh8N1TzHwH@~fay=VBx-e7d)!5cs3{Q62P7IV9 zgv1k(KQI}~Zb&~WSv6mB+GSy6IzK*4X5)4`V`p|4h?-T+;S}1<{9#qh(ydx7Gm-S< z^YAdbes;nLwN`6si}OR{mEmgi<6jv1k3}m&leU&;iH?zn{m&<9tSHBwgNl@yWjnYOC2KfjwM8ktz8u4$wg%he(1bNoOm-#aLL1>OLf%#hTnAJ0P ztD|Ff1_HYsN%^tXX`ar0sl^tSWV@aAg4k$fl|pH`xJO*&t};03V{{Bw(z0`L@yhRY zxu2N4e`mAtEi%-}*-n)LEaK=D#<9IRvj0>kTGF&P{I>ia1*O~aj*_8h^3g(QN_R6d zBP4*>;_fBQ#&*&Yon zDmBv@-wiFR*|m7af_}zA?vClrwWLkuy|lmVI`TV?*nD{@a;TdrUt1?Jh)}9}Baf#^ zPB_e1J2E_)wMHeuNzi3jKx&C>T&9ig@hcsYkRLC%hWF7LRkq{5&bWqjkAw*41gwph zuHUAhj2a?XY^`B4XFJ^uyZIGVJG<|krIL?M66TdvXaev!D)3g$_F+`cI{Z8WoFbb> zr>C%fsOI%Nf~t+{io(BL%$fq)JOh^ z>vyH0nYf&^W_4!DwQkjEcZymr6TKyfd;{1cPQ?%lRTNi5^wB_}DJ}C%Uul}p?(UA+ z_Eu($=?h4~EEI+E$XsDm>G>_l7=c|@#vWw)=^61p$M47NPqW@L+V7d|&SL`3-1$>%3`;aZ(HMH-6>>aDUV{kPzyNXkPUOZii zTKg7z7l$J%4`>n?;yrM`=`=~#vw1BgJR)Ek)~tlXw+=wtT&4fw6Yo@2TKmTGX;Z8D zzL(XGg3f#O7h1Jj<;U4_lo<}M8HCw3p8r1Xy}?fh#+5huxo`qCPRAuxyTtT@h2>3i z0^+xz&J-cn46Px@j`lP>ydUk&%11P`UOD7(8IvmC$E{?(V8OIT|y+;A#lgDxS>%RlOFRySJ$bYTkRQ>)=;??^J%>3) zj!aLDx1;gBhuhV3(ziBdS!4F5Dukc?bU!;OyYJ(3geyaLRUs%uZ>qOe0xja-AIS*T zdiH|F{Srk(ueGwgDrBgA($VpYoFZ7j8J;%&x|3-i?Sc*_b#iX{oPyS5n0(U7nBv+z z(z%>2psf>ePNQB=ufMzYbw0-OA3{7zQVM+wNwDK=rhIcV zU1+<_ChCN7IY*Y739n5vPx^Uz3HFjRj6?& zndeb1&KyfIdUx`4IOcTo+vT_?Vk|<7Iwoux=|3FmAA~Y%=`zHzC4YN-hTP7AxBt5S z)tkg^6v0_MI$9zZBFyfTXp1U;)3R#rq`50ao1ofQbHrMOa9>=>2n~H?P*N4G28FK9 zLwBdn((Bi$7?QFaUK?L4Ku&DIaER>dH_j}fK3%&uli^~}!|Y_& zB~HiHg?s2nksnjsS`JvGjCMEOOTxaEY@Suv;n8C|Z@#LqwBU360p_4|3OF7@j6V@m zmVN$)`5~+9DX!PUyW%HQZk(jMdws6H*os139_B)3+hI!9bIM2T znN|4GlC-Uwd7JspC=d9G)v?jhYmRKW+KqV9(5|+{VgyKf^T^cr9i=EIwv@Wt8mywL7qf6!Lk#kT;x>|~;fb}0Mr^al# z`NLlZUj4E{AAQb9yh*L+p9wSgNx1O=!L2yKk3GXOjj<62DTmX2kAz1jEcCqkBnr^s zn0fm`(CbyRH-h>$zc)n1_AU@UI}uBxo&FLMZC@`hIxXKCT&l*uBcPc(D+s-dL$R~m z)by{jMl%8E3Xa;Cd&sCWNJ6vPkO<+X&SvChg%y9AY3asbn%E3wk}hI9R(`yg7djO5 z-dZm!gYP)>R%&R40z^b1F^O_CNL)%I3no4k-aTfecGuopmfa{&+2@N#KYy#uXLQK# zk+sg=GWPpz7U5AC4YlK~C7bk+ z-NioD#&N$&)X#B^22+FvfZpDp->{m6k}Nwo*Pk0n&b=W?r+uAJ6G~>W(Ws=N6FDBI z&dwzuFkul~qNYT~$=TB|ET5VZi!975;*g^wiLEWMg>q)3`#tOZeV4GpJduNyggwgRiH43+LM@M&>8cLy(Yce;%bvyX_;B;HFuJ%75)8`eHFYFVSc^Eg?4d(k$^HL9vi3dHBp)m4yX0adq}s>$BXNrD6P4SAaSGk>U*d9LS}Sq?0G5f@8j$nlvQLp zW@jQ(?WCGp(-CPLt$BAY0>)FH*->k!W`Hr#JIL5E+-*U7G@~RgPj;VEa`Rr^k+fk= zdbV3jqu^Hjsz3jyl9j3u{~$}Z)7!porG-d`-GH}DG33@Xg$S*2m-19@i1!-VEpqSA znHDQg@%F4(w&EL_A2=?~pW0GX?{b@4_v~jHt;NaCukMX)t&p5Kt@$*V#?#B<26hv* zWFe@}oS2cHBj{vOo751W8=99Cv-p!7hZL-#jhVTb$W5N6@WQc<+{fW!Vstw6dAh?! zLn6IB#WST9Cm)RQl%iF93s0_lD5cusi_aaL6#zu$o@q3^D3oO9U|t_;T~7clXP`}g zGG;x+(mMMJo4+n3z%+i6^Jjni{5U^Pla2FGV_2$pdfU%`vrlonnZcA&obGtZp1(%I zZ4F<4uiHp1GE?SfKWk2zYuKiWh#Z=bUj9*D=G$9QV{ZuwYpTG6%SdI9z8H4FLx@b; zc*|_>TptTN{eXy6ainT%N($&gg`ulgVQ%{pu;Al z^W19?Rf=c3X->yQ)&qiP+v9D~--vzL#Pf@qS}hxoHkL=DJL`PO>N#3o)I9y&ZET@_ zF;+>GcO^$-M0UqS<6|OH;IUI7+)|0MilKf}k(&`wU3=g0obTPW0ue+t0L+N`G(*_s=vl3BF)MMCKV*`w<9& zzFS<+I&yYzm2$qHqUD}?4*?=sVAZJ7)diq}aSHK0=iW+zj_*m&Xla;k#BFaa&4}+$ z7q9NFrjc!lGe?yKOlb_eEe3~zA*-|{FQ45;$A*5nAp=9s4Dt(W(^YTf4>)}GAkF9D zSteap<~QFvyR)$@^fr1lVhu#EJUaR==os&+jgLrE$w)VYv3peVM{cI)ZukG2YmxH@ zSBvYFICM~=^({%gvp#<;`&}3Wuak`|LQ>7YhLrMJWt2e#I=YRO%_JN$NV2J96dr!1B8Y*vn`rKaRA*TyL~dCTdQbgUw4r!}o-q0oxUMf6p# zDJQvBQMGOk({o1adP9Z0G|^)MT-prZ4rZPvUKZQ=`&4R(VwNqTX3YFvq#%kwyYs&H_?ze!0uf)FGa^Op{O*GaByHzUib{9tVkZLdz zZnygka{lP|@gFe3HiUedfYf`Pko?Ns%Fdi?!9-2ZG*!Kaw|ifh`*x=g9D*y;Z3OaYD549OaJ?nJ=mEn&IGPrGwMnVo z!Y`Rq!I^j?-$*W>FEFpL$T1hr5RKSqrHO%5Yg^T#9t*MD^-ZUhg6ReUonu_-spJzT zh9-5Yt={S3qE@Wy#^m;XG6o*k*fEO$wEpH+K-ZQ$^kN<4l5Dg1G_2>gwDlk6L;)@p z3s0)f&z9TFWi;?DnNJ>RIG`QXbCon@V3j{l6=^EmY0!&hiLK8tNPkBYOip5DZ45-R z^rqCW{HrXG#s;>WO{MCa&z3!4O=!5?-VcUHhvKipeU`Grw%L5t)cbDyXNV=Zwy??@!^>(aB4;lGNv|&*U9wIsVSSytm@cc!)&Wv$W=&Ja6CgbuVQg6$D>QEb z3|y;A;eE7g&2&s*{13lT*R$oWj}1 zojjq+QgZpH)fLBa7n2q~@E#u;`Br)l&CO%9p~z-GwGkPTl*$=Ws-|cpY3W{De}_}< zM>VUU76v30ZNH%{*xx#-KUNt|o6#IpVbJwuCOY~kY{<(@qo%ye<{6FQ%j=3E-aJc( zPql}GaVCM!dBA#jv-97zN%bH)jchwm#T~m`4E)mfxtsJN_8NXvBaH54eU_h>H%lIS z(B`f;GG3D*FZRYoDO;RdQPb#|!T8u1>Utd7eXTX#P^O$TJFDHz^jxiQ>VtVfFtw1f z4h_-5`ts_J#E5Es)0E7B5vyUrw$Hb0=0yZbZkR>`>vd*)cH$p6I|fk&hwHQ44*AL+ z_@W_g?-9}U<%-nh9{k(qyPd2&J<}gG<++aRY?FwrzURj7%{kQ&dMg%cxQLLE zKRy>cTD6Fw03y7Zh6VZNb7({;wpIN42k6F2&dw+Bt5wA;c4rQ&mGH=f2=r8~XXsZ^ z*2b%rr18Y%olinm2}lw>wAlqS-9CrW@3dbkPITGV)fPU%;`W<$6+TF~Y)X2_i}j_Q zjjb6@p`MXLTCZ#ST||+8WZRprz65R-<^m7YvfhfU&}ywzWV<*3_)lB`mr1iISZ+Lz z?)6Go>RHIy3^^kN4gXlA-%hzhOSu1(Nxbz<>+VzrnGwb5;c2x4*)$+0k6X^LV2-cr zU5V_?L9d#>AH2^J%slg09wik<%xJBy5(^^{u`?DH7IZ5ICpN+ceYQoC8y;=7@C407_Dsu&sfy6VfEmbvrTCGZKId3mjhh9)R3 znz(!wcECD<`g%t*f>NjO&;XAQL^n*gKS%@~X)rvg4Giz{?1L|T+N#Yf*Vjm_dEWE^ zT)=iPL({@Wai{i_(H*y|dn|h=S*VBY;3$w(+jUiRr?ic7e8*PK_i3UT!*z@B8}Wm7N7m zFZc7ig*`0goz|%IpdU)APMsXP85zfze7n_2sojS*1|CaGbPD?+GoC>TiGZXehUiOw zM$^f*1Ul(4ix4z2XVqEYEF_*8_v9F6HrHvy(WWD49g-O=-Su48?cA@3|2%)z9N!h-V# z*eEy-H(msDC)~D``b2MB$0`CFr-@=S`)I)80FLq_G(cyg&!G_(A%%4tJ3DZV_V%KJ#)T1YHOa3qcW2 zL4U0diu&x3_kXP9mJk{bi(v@1*a|E>!{T0ETDVwi#gnIgrK>r%wN)V#kcpspbPw5# zsiy5bLz(r^4V7|Rq-IEY+{tFn5h4+#Wg;p670cxr-1ty<8>$V?h-hQJp5obACM*(}t*CoAAa42U*Ku zkFUr5{EKmnw8Y&bBO~y$!G4_1%{H#NWUHfXWtH)KXL^)FU*aQsqj(85pw+*Wv%1C0 z%+ePkdOi2*vej_aciwYjA$6PO)u=-VyHt8-J>4VD)8d2z`?rSCnPHzMI|mm-%=_>O z@!7b&ma16kjd?()CDZ?-2;lzbBirQVN8M2vsnxbfPWO5_7545fCTZzzPfr0VDn2e3 zO#tI7*TMy6`BlUAh(#N%s;6{8Uo6-@Al3XI+WUV#eAt`dMxinxwauFRZL^AiKnH}c z%{-(?Rx7+zx1=OD&(_JNbQ5-<>*<(>;pcW0@5H}XYN7?jmMsb180NTP@vwg&WxF>y zWhOYQLxKGb?}re3b#TEoJ(I(Fvpw|EUPpUL2uFLwBHS;b8>c-e#c_me_;3a`7G}=jb>gd+(gx|2LLNQJt zZh(iB%X&h#@qCo43iEANME&9M8Qa-|4UAP{70igG!EHEvW|r?9W{Q18XRNHKs&8BX zr0pJ2F0pD<&n3yCwT18pvWnXto5!zt^1G2yd2wkdP zKjwJNp4;$t8e?9y9q@FjZ(eTjIsC>x z!uf_^PHQd=SW?~?S?T%JrIpecnoGNTD@&hBPM-f+fPhlg7c+zvtBdaAjJml^pB&x! zc|#&^i_^Iwiu6di_K()ZGI?wytoRIWkLrPaCwhu*C!4!l%OX#$y-L(>p2VLsK{OXu zfos=*&aqE=N<`>a54IcbPwGP~Q$axsm`i}R`s+C-*JHqH`40<)`S{c!8|yCZC0mEY z>l?-mpXK+l1acd~NFMDuC(NHe|FT*{3Njbk)d${_OL%1?@Bj;dg|1by?aLnfk*X33 z6N^aehUfy(Twh)LWL?1gykKnm6c>v+SbTYPt)rm{{At6^r!u*Z{OX;KluvV=xO15T z=VML6HE=B84c;6ZA`$=%A#eiJ%GKy9T&xFb#(U~$^FdVq)zPZ|@oI!k;Gs6eR_Qh6^Wx2ZF0)i%t#Pq|bOFf&ij zB;EFnftXSSPABrBjJ7c;gY|q{n?bhEcx(f5uciNr=O(VxmdHt2kh zZ>UB8*_dvY@%*o?@XlZ2(BB=U5B@Tw{{Hq;`Y+k)KZXBaI8eU;BBD014R||P!Rdo$ zb>%la)D7c53`D@KvC+j&H7}ekwcN;E_6_C#OL(0B%i8xIO@-Y3PtC!9s$U+bVrzA%+=vqPmCCS{6Ft7RRpsxJqSz@LBn4WYlwAI>|NU&N-Q zVNgq#@a+##@K}WKf8+=jfB1mX=IF3JQOJ0#c91>5Ff+Ff+2p9T{J=}&NM2Mwyzqzn zSmMHh_m5$QP>P2J2E&+-a`&OSh$RY|Y~xQ=7rB1*)6ucL@V&0UsRVm=TI=uzgh(giNxx$m-CT%ppeedI&Pji4^%ng&H23R?3ciPfEPlhXa(Evsb0F*KcDq?Y2-L; z_zD%1=zob%%UouUdf;3Wg07(M=<`Ih)&M6}y*$0@36Z&Uijqc$xtU?Ug912gBXV8O zv*Z%d^+F%(Wr?{R$+A^2v2Rwp_i`xh9-&yFGqz|Yqm+9}qg-5s!iPt` zz0)b4JJf2V#y2sPYIJfc+K4(uC%aX_VA;XkKmITF-t({Nto<6ragb3) z84E~9rAZg*T}45<-?H~r)?RB}6wd2Db3|aNKs*&oy>e|=kGIkR)>058t1Fq)jO97bUYC+P zj~zW1fw#*eO21R+sFEdLTNlQr=ohCcNqnVTC607z%1}}FvEheen%C)E8KO-*yr|q% zO>K=@YzpT-(|?~2|Ff3Iz7x}_Cz)TIYjlG#D2_kP?I?>0PTJp0dc~HIcN=mxU0yxx zntgOUcz~Yt!$sNoJ_(*Pk#t)h^f{<-_#y$Wp*&llY3CD%KW_JZcRh(Xb>>sQwv6b7 z2V_z%;QCsQ`zPwoeBhOp>VyE3uSz*xbqd@oQ1nrO>p1Z``1ALvkEve0`sw8AT8u0c zGSP-;j!JJtr6j@j)Tn$92rHe6)Ugxo{$X{Q`W717^^~_KjwW*u5Aa3zeHB+H?^$V`dqA_;hl&(clh-yyypxvii&I!?Xcj5B2kcBTARy9hG zUvFIutFM~trdH=;-(kclalG9Uz8O~SAH9U3&h9kDbr8rRlHl(@&;(Adc* zC}G}-;#1=2PhC?{Llf6q{fNtJ_0rcxKtwm~0fqw&4ek^pOqFsnJKtMPMX$<=(05Lh zEvTl7d%skT4mcX0z2Rqq;*}K~-R0Wms69A}inTohE?97p%h;5Z6mFhz!5Mof^c1{g z=xK_E`C|gJs3<*_qQX90EI*5Apz22a&+`Htd0Iz^=WIPtq(3y#*3$zH-qmy6Fr4Rs zP`}CokZ(q-wl?2Rem!>h$bJ1R)wkI-BrdMC+A=xX^u=!fEP8I;-@^p$j<1C277B_! z$BMu5vVX=t*iR*QHs#vMemj}CbP@UddT*72`(BF_3(;ki8=uJHce=A~gjgRLFvylq z4q>>tvlAB-t$w%`Hh&=JJray=7;aUWV#kX0?KnKKN#J5}5O8}UPD$81YE6SS3g_Lr zDYFVx>&(o8b3HZ$S77#x;cVM4!veEjnvS02f>v15PL*Dh z`T540LFJH>7)$0vmj=NWk^UU@s_oKhG2G5bADSctkG}71d6F6-7-8p7n_IP8vN-i% zD#dM8m_R0be=rPlJlK*K9nv5Ln@;T@M5^rTKM`4H^=475*X=lrtx6HbEZ0nE2K^u zQGL=th4VcERtpa%qvv!hH=e)b(Y8`usXcASXER;Tw57xK z`W0kfz9z@wkmX`uyQA5^j96VhTdyG$#W9Q6Wk~cXDvop^&;sL?tiL?TIa!KZGZyr zHNQzV-Z_|coR5C9_Sr7m!=c)}-fB;eJ!0nv__CT8&TBJ`YvoIr+fxr)_5scoCg+;e z$E+cJ5NojK0b;QpX)DVh&_qpRFYT0wM1!m0>`D}LANaD+iP}H;3w+HZDp2!Ihl7;6 zfyNv5i)?+x5XnDf+YA-roR>lscE((&C=QQBaRXraxsLBqst%u2_{O{`v6Grr+kkkk z=kba5Tia!;F*duG%cd=8iVx;uAD-8U9vR$&z?=LyV-waJ6{mc+Zgkz+` zZKP)$-n~2DR=)3CRo~itl5qm4vfR$LRLeSf_Dy>xP1W7af`v2$zfFZ<*&jK1o4@?8 z)kv|uB!oA@9S`=jP#>eB@O4N&W5+ECrkZ5*BJNLCjH=ARh>TFS+RHISaqe5i6K4Em z`lB;oE-`LsM&*GNkSlg2orhyaO`yc2-r>(Qx%mp&HZ|3S>HVIck0R77+@!fNV2Cg7 zdDUM7A-k*?eS6Nw!Z*98Iq@_R7tXHLxBD`PSxpoR)WutL3(jR0J*-F1r4fvf$E!p9nWYYZ zVoIg<_{T5;f}YPDRYZ>Hf7I!((QIst8G>$NfCOuw&UBujxNf~xXFZ-C{&SJJ#uBU* zWkh~%p|@KvXG@J?(SB$W+_uQ+^<9~BF~WO4AZ32v_)>59C9~`$L|9mklL5CE7}#z= zL7~sX#pmPJ+lriY^s+IsS##coN5=ZS!pAbT)My>LI@_8Ww&xZf_C(j!b1>c7-li0D z7*9wpH7#ZSe)q%8mQYt$SMk{)W}nTWpl-Pg%Z07w2C-jQEFMb*Nt89O?Yn$dH1*0G zOtHl!CXQuBpVl0#s$tuY`d*3-Dg8=j=%A9TP2c z*@pPyCeXz%y!hZ-^j15?D8B&IDIPxbJ0nYVQA4L4RF?Lw?66uM=$@VEPEMe?3mrhirQ5B z=laZRXKhJK9O>`=8tV&HKT4Mq;--kZ1!>?^jF15Wmu0H=iQ2F+z2yDp;O#xi*-P=P zFK#RU`0lUNVTUnN4_;tHU0HBao~u9A_oR2&6pCrP-WU@ad2dBbjvu(3Bzb!fVJrM~ z3ve-0-zMx%&tKhVCpG(@rAXbh5N3e!1V(StH=Di+7YEYR$a$+MVmC0@V&(=d%`}2mKo@2|t@Q zU?d(fH-l~9)S6&t{Cw(l5^_BlXBY2Q2(S0k(6XL@Hw8@kgbY3v(~Ik#@|m*bHpV7| zI%Er9b3bU>ai}}}71wDL8y#DBuqB4(C0h2XgsC&iDH9APk2qYZ`&HBW^vR~G*w;Z0 z7jYLB)X~v79rOV6LrP|2ELjqvtHS4bBBkGBme|M{u?N{+M1xG1Yh}=T_zjeTXZW<3 zunCw-pg_jJJ7E?+@BP>smZ-H{8(qY>wEGbuqVaR^w~$Dg(R$Y2a>ddN|3(!JImh;| zt(BF(bZo><_gkIulN9TysmV?qLN~-@_bcJ&bR5J}_eHv?O~^6!cQrEvLP<|%Rp!gC zWj*-lThw+wwoA;0MuPVQb2jNT?B88pnPR4%dYg7yY-fq9wOiVHzeLf^Hnwmf_GE9P zhC{EAf&B2CgzZ|5`PipP{w$DPoY`;IyzJnYsy*Zvke~EhPfzh?Y~VKKw=qv;D+A*EFz&e5sJlbbBL94AT_f0R)mr`1xe@?O1w~d8ZI!R| z9ms7zF*hF+0sW`zm$E3l6hfA?vVoO7Itf%Wx+;{}hFw!1vrKM6<|UN%ds%|2D{Jv8 z(~YsQ>`abRu>Ke})Dy(B!**xaig$wxL8XlG)SC(b%|>R({^|VhTxxSJ%IKPvi{)IK zbUZ*$0`#A7 zh$HD^P}f@i!(uuQv09(2pm>JMrfOgimzwLe~EkkpSIwi~PT1D3jsv2Q=w zSK-fMNt+)6Ym)j3P|IpdHzLiWIx@EGO-v^34rIRT!t88q-zff_CTdj}7&tz5bzIbL zRMSM;>`2v$xERK=|A}7oya*l=m?eU<@5Dqy{3Or_+z&am*O0KX0M0p6kklmPnlakR z$l5TQP?qXPNKv|}5XQii;rc}(BjJJl+mrP<;Hi^eU}I=2#K!w}JD~TqU6mf(~#R9+-ahZNuoSup3aO-#(c#22=KE?M>Kz;mPRngPNKbl$& zdO&W;*-FDAL#iU!kd7=cEIjqcUWBob@n~K6yj*z9PMbD@4}v;bi(@$lCsBrAIrIzE z^HF}d;HPoA5jrXqrX|_5dc{MDY0`19Sg82YexgnQ>v*KwM! z$8ks;PhEb&Q~>{7udL6X<;z-QV)P32t07j5e;w@{K*D8S4&%x9x0uBwQ4NRBan$B|c{C`(``DL-rmT+kh3Q_5MZP$pEaHYEKpvTWWR$B&8&s zbNkYio}J|2NTO4~PS@0vSX-Iahxi@K?*n+L{M|^;FVHAC3~X+Sj#Y_Eb;|gJPOuGb z;}I~KgZ7%DEJIO;$?9p84=}@W<5X14%1}=eQkhKqe5sDjyie#_p*|RwCT0p1mg3yl zUfD>2ZApa5I2QEzkp}`Jwb~ujf_%4?aN_xUgq-#xu3b&t2i#rzI=}i5HRP^?J=_Qv z!2jC8fm5t3Z<5V?znMZHK~0vk6XHX9joG4Gw7MzBM_Tz+1CI+l$2nb}AX;}UsGDwD zc6u%jwk8F3f*epgaNVKq;4)qXF<*@*lL2N# z`Mu*F9QGkWVhUY1ROI$o8Qk{vhE3f{Mzd3WUq?8>jR6!OWnZgBSo~WrDDl=IqRu%r zDM@8qgCMY|2)>`p5NM^}SAzgY0wD|O8;+cQbasv%Of1Dy3W)7a)~nim`;% z2(B$6^VBg+siokIUiXHAbJPH)0x2C0-MrzmHIEFE(k8R-`t{3iX8v|;Obi;ebQ9kW zO4gYs1EH~+v&PS#F`bdI+m!0GQqFs*&K40mic%lJU%j6kp6G!Q3SvBD8jNE36)llT z4A-geD&4~;UZik7UpwV+)25v%2=k2y!x2x=)Mb-T2fJSiV1aHmf<~aF=EiH%?);C1 znYt6}ZW;HmFyvy=hTl}VG6KB;>rV5W_`9OLV0h*1poyo2l1H&wAqBS2n3d+U{plHK zu?#&E*e9!wH~!6UWYpvU+>lsb%FF3aFh6fLPO%O!ktyh6BVwUj3On3tL2ga+OFmDSrwW3?RG5l_gB5}3*`#CNAndG0I0h*$Ie9;muMk9ekytH&DdTI!C z+6+HFQ>m$sI-pv5d%uV5Z~G&g?i%D?G|naH?>X&82kk%8>HHze?R4GOYE-?BnKsIEZgd+jrTzeQg$26 zqaX)O2I#RA2tq*Qg|>6rYN-K=soQBVRNvsy^zWMm6=Ady!sw3DO*4y}{QRRVFw1^83Ri$M(9%sRZcm!T$ns7h<*3R8u1C)v9sKHnUusHeA z!TZzQUh(~8PfvJqqy@^teFaZVnHLoHHRK`RE`4jLXpqX;p=H*@ElOU<*saq`mk#$* z{wP)--dx3Q#KWskKl7}vu13R$D1JvpP?@CvNq%JFJ!7x|+b(kIyp1Dy51#BaQcyj# zsdjRiIEPj|k@fYYlQIn}n|=yJ;cZ}~fg4sV`T0#}g~jj096#Bwp6Yf`q=)RC;>Ev! zXy%poe~QByY8w^st0=DkJj6a@>qu=}ZR4}6{1sI~2-wl8v|@d`@aU|aZOT($qqX;? z7N<1*HQ#?d{(Yl}=AGFsOWa5;G!A8(QR20+#|aK2jcjabULgxwj7_w8(4PqOqurHh zZ-&y#3yn(@a3@u7H|piHw!Ul@yQo@7*&DG)|E^E@>xAUl-q$a**zmiFR`)=1`elx{ zYdVvfpHd0c9skO~C72tjQd7s-kNCdhhfm*u`S=9E#aM2L-WTEP_dK4%vJ~VO7}+FO zaW=bJJQNfcerlBiWUHM<9{I>L*s)K4EK^YhFHgb9b@XBnG{jpRce+2dK^f=q>thlFJ$Ugi^%YV)J#z*vO}+HAm^+g&E{NJKSxh$Fa7Vo4-TOTngi9tQj$PUi1tHkfXtoWr z-*(KJ)Qu!$hX60?D4RlcST*$l%1iG20D@67?b~8=Q%Q#EhTq}n!EwKkkuBE;?+N&1 zOAU}Ta(2p&6{-P0RM)owgvt4{BB3>+^+KISz0NhN{0!E>d`i%E-cI#MWJmsd->7~; zU3P}n4O%nx!+vjO5tjtHOE2~2kc+dc{Dc7A{9T9EJor=iJqIPCYBNdz#>>SAVm^p% zIN#lGRt!>7H6RQuoOec57DmP=mo51Kw_Q{W@yLqt>H2q0$W&ZnyFL&%bI}Cn^--wZeRf0ol(w=lTK zED2(Ii|CDvdJv!;V23e;o83}2p=D7SghbYs9X$bY*x;C2c9P6agALA`5CP7V-l9@a zDAX}&bwUryzay7H{^NHu%o^* z^ha?}S-*;gjN`A5M!_br?3YD0wvFb69zd7>)YG%X^w41&6nS!kP*! z_R*u3(_fAjerGl;FmQ2fn~zI9nBv6I06=6|`gHb3f)EFTk6r$H&8eZO17gwC2Mvz}FAJ~QIC3WZ)4CkzOhbQ$#&Rmy=_%4&&O%!nulS7VGsT1UbHP2qPY<2o$ z*umrpItL=c^cqo>xr>yGMUKc?dmaX9xNjU^2G48{pq~N@$&MXNVkX1}n~fxR2Ug(3 z2Gn`uVzCKn?;sYHY^kv0m{x(hg)R`a>4$}dg`fAj24bfB7K9UX&NjO6VM*{^irChj z?FHZ6(F3p$tJmnWPXC+nv4Rv2-phl4>|pHqm5>OOuyUj$%bi#~fvQ)7ET*04C0lT& zI#fx+B(WQD>|j6|&tYn#;R;E}c98S3Yi|;a6^?anjN3r7ozKrz6Za)?EA0le+#Ih> zC@NYTN67jC=#+~_e7-3`&X@GLAgHXb6SSxg)Mzmd-n-?Ol@Dr8B3(?q79Mk%v6Rdc zTr5sEN0Y$#vwt`5cd%w=V^2XFJR#|K<J?dF_3p>A zDdOe|@Vmt)E<&JZyAowuZX(SueHgep04>yctsTmAz0gjMU>QDTt&9~Qo zRYkzz{K{eC$K^M()##5Wcs5RJ=Qcp00*(85GqpeO zab{4`QvSe7`0ZvoWtZ%;D}9{@FU(&{Z_KW;p}Wj?y8Mp)5wWL8QFMClCp#-)vp46h zpbhESqP|w_x)g8lVw84YJ#nU3DRiTL-a0Gezq?4~UB1l_lRivAeyBvU8JjEdm*?~L79(sXIZouot)4>(IG^K& z6$DD3U=X7-$TMsktf3lvPzK4Nys}AkWjCsDw&(75uy`IFXDvpzX}}!xvZStedwf49 z_45qpWSc8zniv?&Z!7{^WgcKX9=K=)H`%I<=FZAYiA;n55w%#}-jTNt@yJ_^mVsxh ztdDBXTN)>JUQ#|f8~m5nb#4ZA{W9w=xul8w+#!BtIgvDWwuKMm3oQbCl%6o)mEqj9 z1Eo1<8x_m`%MSXdhYST)zxL{v8TZN)9fHe4s<#Yf&j2R$HVC}I9>y)-wBJsg>2=~2 z7kfk$!h%Vs#|PBAGN5mujk9DH(mAIYB;HNkDErORD8CITCdJO#moxC89IwxD{awy~ zZJ)@-fK?@#zJyuB^MXNU8M}|?C(Y?+zs;|DAOI`)*}gWO2ImLkD%%GKpPm2T9@uYs z$2$QvH@mt&(tYM=VzJ#lWK`r!GCG5UfT6=XGCn#wJ`PyDWT&Ry>R(TG58QQ7H@BpZ z{y1mJzJhvloLgW4j@SDb7iZU(;P=ROHU4u!*#F-G_Tu>i`S4<*CW|l+>|GQ)y8~FLaG{zYp^OYCUOc z{evI#O~ubir&}6W?vcb|QxnC5c6n!s`(Sk9x#gWV(|I7W!yErq?94u|V?}YL zTy*Hc)Nu>bF`#^3Je3Zly7uBdDGv@gIEFbLKipQ;TXwxVN@RBq8c&gZJr_>Ef3}hA z{qVE3f6(^Ad#*YN+IlCIZ|hi1Z)jjB$MSYNpBHT1sx@S9-%(I@ZhrlqsghT07zK`t ztPYIQThjir_yMAL?m%^J+Pow-dtgBmryI%$XMG*um!Dm^ek><8PaTUXjSIw9UH3nQ zPM9P!0{7XSAS{wI8zZ0Ok!`UUlPu~|nBkw&cehvGUwSgxuACm`;6eUK2+fbn=CA{I zp`iHr$g^5Wt7biwA(ID|-vsBE*O$wuSLvRyQ@{R|vet8v>>?uw zT~f1N=>q40@#nt`y`{Tn_7g=GK`l=MnWVVdNBDjYj^6z_%<8V+_L+&x2FYQ$aLewi zhK%)uBhcRn>tE=JJWU`1#|PJ!OC6Zr7R2|!B<;gH=(b-UaHrKJaCM{*7k)&kx5ZMa zD>p=`8Q3S00Z-vw$@7TG`}S%EIPB^<$g;f6u_}`;4C!_7PPDe(&i$ToPu~2ly@vv@ zCcMxy*jIXG;FD6uXVEiy#pxL9a$P{y6qtdV66}4=Pa$TbOmC~9DiyAmZ1lp=NN)pA zSYDYIz3cvEHFYe#ymom*A~!be_~DM^6d(fWE-Mc?6JFZ>-z3w-e_}HjJvy`m9%}+^xeDlS9)aJS25vfV3{jw1Y2i} z&h^UUql9d%SLRfN-Jix2VeL09MQ*;xAmZ76ZIy|s| z`uiDoOmF(P-jWz9oQh-yQ|U?Plnne z)Dtlg9&?+I`TQux-K5DMr2o^+10skMh#;otM#1ktou4K}WPa!?qpXuQ{-(@>K65d1 zGu!3e4r-s{$oXQ)BnO$*%X0cFrSzNiS8bVn3sDVPz}G3dd<@h-oWYE5jJbN(kSb!i z_%}=ww$&4}QB=l`?YGS6pX)#j%I0uu242lABF;B>kWJAS%W|6Y@A}xKsP7Mrr2i;Y zurGa;-1#gfK60-$9~_LAjytP#cBDyLFO@qrcI+GH*c{Fv)JDD7mrayjVnq9|-3n%8 ze#jeq8Pl`3>~=LTB;)0$KRs1M%R*wEZ%Cc3680qP>WYS3>)u9?Caa8O3jlH);}v-n z5wKygQkV~-4tMC%dhR%s#n6p@ zibQ<7Gcy;N#Mlkj$lkWEzF^Oyuf`}>r+|24 zu#Gfn)h0W)!QYbhrUhpBisxn0tGicz{`|@QH8qViwMtlLWVn7~Zi7p3eX4w-=yIM& zg&TI5)7Z29)?R?))2Ewbb{LFRb*oxPiNwh*LDrh*qHo>_3G17%a%JMqf})m&rn=n0 zGVu3@+S*kR49KM-AF{FTU`vZ!G*a29=#c3aL2Qz8?piP3fvgb!V2mDZs!J+yR($?G zF4@orC6OX$>1>9t+HPO|?tj7&dL^!=a!fv_KcV`WHR2C1<+<>mcjUT1&ORi%y+w+x zK99g@`cd}F#F@V6qL#=x{A3jt9HZTeFOWhm!ZWrF%v(kLzQc6Zvu~7(7;^0=9cz zz{r;Z=N^3LKiTc3!Sv=1MsyvXqSt^Sr4Yx{_Skuzs2C$&3N?vL_(ZMc(j8bo;|oLG zU#2$h+#xWEIU8DOP*D7&{0EN}EEM&* z`c2O#?tJS3aybMmXK>%mV0sinaCH14Vzf;)9xP3P2>2vcY&E*gk_a z*O|;%G_~jK5urWALYjz9HK9dHoi1IDXz?RkzWtb9gIVUK2`diK^T@%g=%U24?W^}d z&Q`7$*KU1UI9{*U$M0MiA>X+9>%-j-kZrqCJFA{bR&G8-qR;kQgnym;$-E; zJJ3OaeFv-o{h_HGQeBGcAXe}xiPLtWdwEySJfx}cWBP>>tRJHsWD*2()+FX zhSs&`vMO38IgC;Yoiucvsq|5)I(O*UiB_t#S(yy(Mh}%0H6Es+2mu6Emn+KbM|$u1 zvqD{R%lpjIA;UesS-#OBE`N0gVd3%N9I$ z%p+l3Q3j@EsFVI^`$4l|ij1SqPFA0sve?3ar`fy;bgVFK6_9lQ-=cP?h&C@$TLPZ<*R08;{y|&( zWf4qy+5rKh9@MbFVHdcf{%yPtS09W0+!|3H#1_ovDhj6)6@Nwi+?3y_7^0#q5`3Rp zwyoRK+#K_Za?OLod{wDabi5G$oshUR@li|Ur<;2@i`bjZp@7rKkfZ727-ubd`lXvU zrm1f%nPXNJ6_&|Kr4Ar>2*X?*%#fdxKZ1LFI%4f(M)8MGeJUSHj*tn@tnI^% zn-Km1-s?)qt0$3>rOHIM;h{mShFLd*if46=u&GtYYmp@?=t@o~Q>AOx>)3jSIQwwR ztJk(JZyj8@x^0yjOMb*fd=M7Q$R;K+XTBKomUj7G^|LH$pa}t$VIRTO>_;Q-XsE}E zDNh~7BfpT)W7eA<@!v;dG(o>5jk*Xn=J3A~YtaVTSJQp^$pD)SU+E4NYVkyKgzz+kRoat7WyZP@k*NZ@KC3k{vZ_|kbkghR;p~zK2fOA zN;EZN9+y1QQR`pHzqneSTUGvK-@tFaA=23`#8TyM{R0Lf#nO$y8w%z+7MEF-T8*97 zUz@S<0}oUI)^1&&k#wzbj~v8kB%9K`ted=NLsTq`uN!D*A7qJ}nL?0z1c2jqdJZa)QLOn86C5 zlajwgq#qv{6**P1lJ$sFRvV2sDFapRt7`Lk>Kt=w#x}05Hm+zs2epy3$Ow=1uQz$= z6uY{Hbi00B^qt@gVICU`;-=7unKWh`+@p>eR94}vo2OWG{{s~sSWxE61=cw6nR#Ro z7{xY}1nn9u&qgXOQcHMDrp9wng8uOPhbgdboxkzql!orRgT_RY$uJ+Am($a19+O8$ z1cd^qI-F_va{9L?rJ)NW#jjY%izOrE{{Tm5B>f8Q*!iErY)yKEdm(jO%W4!6Hu9~Z zIb=Pe;O2$E{_y*7o={ljwl)*rCTuZ*CTTVoouiT_bmXW`3#E=4i?3}KQPtPlY zUTvfhVWQu@f<--eJvY00=Q1lLm0*fQ>K~76z>Ri+M)5zrmSqOndvalVHCOzSqtbEN zo;S2q5@P(c*eWTUOvCMNPWn^A{mXe_^kT+!w8Tg1PCJ)cs`k=%uc_ zou@$_zOz~Rpq?mdAKxc#J5U*LY9}nzMRjW$|DFGNtZqu916ZMDEz~+9&$48MEuxEx z++V(3I*h;j?e%m`dpq~hP`c?6C_TFU49f2EXH{GxZ&qUsl9U?dG2s;MaWsw!h{y~{ zluJxCsbcqoHB4Pxp5zDj@*eo>rAPfYu#r&$H1idgh)i^HERU0&xlR!>N9E^?JiJ;` z>e?0IIr|}7HGV$CLmzJi_nAdBJSNGzB73CD4Ceu}HLiVQ1g#^!*ITw#N)7BT`T?0t zNU==q`Fe%wB|V}HQpb*2y^FCsC7CAIE&;S8m}d}vIWK{@g-Nhj6I+{zOVMx*wZBd? zCsehyjNfzOYUzI>B(UvKDRm7Ku@8Gi@@9+&Ig9{*RC;AELKHnq0lp_>%(**uze z9K{JHh>fpQuvG&xJQW{;;>~&N5zgO3+L|AfNlw1In+P-@wKxdN$ zNoD+y(x}oxVLwFx7?398s|vTU?1Xp&ZL{F+$Xhv3{GU%?h*5S^y1gg?&TrVEW`_`* z0OwC-y{MhJi3TmNBGWhrA*LDYvk$(+#I`3-b74U{v=^Ybwi$o=n__Nhq*_UP4^+uU z5d1q>;4il`tr1KZ9=Ek%;}7-Bphb`T6umnEa)(yX%}BXOv-wCEa(HlMu11oh&m`BPV(*Mwb^-ua+nw zF{Y+iJUEL*N5nNKj=Kbd0NBjZvbLGz1q_@_YPOp``Oj5pIe7ss5KI4B;O^jc& zUQ%xq#^8YkRy6Z{LfHjWYD_mZA)0kO5-vMkFRLX+7`iYkZfgEmOtlB-qnxB}M5l?m ztj3{>q8|A+9|cgaP`l9xW(lUJ33D5(N17*;y>^vg(HIU=PeRS1t0q47fzo9zyQ0L& z&54%}Asv7AvUVaROwKy94F7#)%T73vfDc5Bgx|4@cNXPgaR6iblqTEdL66-=he%{w zdlH!@Y4KzL^s(E|NGHP;kv}7aEE^v2__kq*~y01b!C$C9$v^!!% zb&MFu{K`y8n!#VMNm*z`_YJm$(DDvm$Ly@Dwnr!Vma)CgbU4|@#;wm~C`u&wZk@vl zWLRKGm-4?rCm=q0B=z*_W#eimBzTd+ZLNc&-YTa$N*P)~HF@xK7+!EqTQOSa#L3GkqZ#{R^$+jmWY9oE$ z1SxY5gdqcy`ggY?8Yw8AH#{d?Vr8XJdb5NJsR8wQzRmKS&)vm>NYO~W=#5*Gexi=LNAVJDgQ{1Ha_{BrUarK2w>{n#x1whZR$B;QqeG~tf_ zdYo%FXgSP~r@AS5NJu&d)E1fk!#rsmUxa zG|}J^K#WAyA_@x|wsXLFe5U1Fj2cZeJUq@cKDiVPR1@1du0&8T>qpkRD89}Hf9~dX z)w`~bm3ze|2BM>B8ucQ1aHZyhy$*0B1=A`~C4MPE)__T?ZM`d#TGs6P45Eq??-6UxDvA*A{|9O+-Hz*-d<;F? z=|k%kPL{g`26TN>5b|A`1_s)Qx;K!gp85>OoAVw)INyz(j*Ak@iQ&`lSKzfv;JAN$ ztn%pK#SN|Qx}$YDo}pX}6L6e0XjQE_9x4E2!@_b?CnW;IhVOne5*-`E(5FKmV&Q5# zz$9iW;nETavU62t*2RWlIc=o$t)2Qe zUMjZ(BiG$#JK?T8Zm7%fx2s-xN!$CkU&g8Uczq{axGvVjY-!WKML9fHK^1w+hjRuU z=Rt}x)VMkAgcQ{?Ax^i3B}4OqzKklxTRB#e4i}T(`sw zZNCLw!l;MbNg+GK3HsO`=+*5}7Nckzpbh7z-070)EG%KXYHF}s0vFWY0n`&|={L`J zuG&vku8gz5aHY^iKmm$e-`d`$6_Z>56y3S_tn&5oG(Xd7izvnci08H}URlDu_IOK- zLDT_*{Yy)T!$Jg!b>Il}0HDK_HL0s}OGW?y{B7dR|P4d3~7YmqAZ4DW{ zFVSb>HEK*wy9rcduyLpcpvIT?PIqVn*7d4(^!}m4UJH<$Yjj;3$gBiDB`3dXXA)KF zq>W_8ZggkB2vS?M>bOnyhW5cxOwvyOe)L?`s6^<_<&0EM9xmgZ>Ipi7u?u2*VX8zcbK#@ zKT>CROASKq3}(kTdx6YEUE9P6LAJzP{b_z%Ncg8bL8iNQw~JxJZ%Eey@sRuAqoM;O-D>ZiuXe5UUNBrhNPx`lx#3vQaIc+VL=s-nr_3Zi^usn=OZ&YK^f zxz@H0%N%NVdWSoQeY{aHFj+csz@8M|)D#DCSww}5C&~$f$-7|S`1j`fM1*+(qI&+Z zNm&6Gn9dD2=Q39Ny~;k%AD#l%l&zqLd*??==Gx=WG->A>&F`so?6r-_9`_{eCyIU^ z4Ha4ucBB{1R_oL}vXHbIMCD9RAZHKeG=GUMOjWwEWp1^^4j6c)tkl~$HA!$5O@cul zX=1io3>rAya9J2J(23%hCwTwbsNYm$k;oJz-07%qxS!`6xI`ZDKDP@q&6g(*9?lY$T^RvsxNQ6AsY! zviu0af7Il8uJujxn&T&b_w0Y8X4Gn~&PiC;m5GQMLoqT)lMMY;%xxMz@3WwV72tP) zK3lyy+PFYf7*33L|*dJvCLuStB3$3Rz)4s0di8!m; zU~xF+f+ag+zxuzqwQE^N+igVZQ_zx($(R~v@f|(ka=zoa&|70z^U)d@atQJ3-v?tj z+Hr&o^`@Osh{lZkQzCE7PKP8xm~Bw!t~QC|*{ zkfo{XX&;O1xyyJ-hs>GJIuHlMkP8Te^=qWEU$8ek`XEO#pi7JAjhL^+I-D+N#I=SA zYGmU)7g?<<+b|d>z`1&Ql_4^^^em$rmRndjRxGiO8b3RjNzzD?F}E>3+4DHj=p0Z@ z5ML;dvQ(l)ABIt{h}y=)h)rz4Oks!ZKm|{YjgE~mb)8=W2hlH{PXqlwSAxfA)`lNR zeo80L5{vEyqPLMEkm78TF`tNoC{%Rm34O}U4LCbNO5<=XtJ%eVx7?+-$*b@YZzXaKi1$p>sTe5M};HGb*#U;g0Ri5kj zJEC#V9x7t5t;#OvSl;0Ge43%3xV-#RwymJs@Z^W#>7J9L!9Q*Tj#Ovm+fPO*MxzSb zBMs2?Ra?o&e5;%v>hpe-T2E0U^SF{8!Eji9NvWUR9@u>oQ$M8sw^H0``M_}NF-a=1 zj|XrE`P{ojB9$KnNn9TtSSXS*zw6%QXjb_=R99^BbZKa9OF5~YG=r>R@zxDRM@mZq zzT$Q(u4~BsbYTrms#hg#!$_S1&Ftn5b-T}ZI5}3;W0w)Usx4I6UxVN%lg^FjbPFSNQS)EWeEg(1TpTrZOdG;?sCLEg zj3lEstc#c#iHYBBsY%0r%b@z!Xd+mPO{<_JwIEKjOh& zP+!-oVA^1aHPYc8H1@I@jl$~rCPN^*J%`%kBW*sH3kH@EQA6tL7smXWKQ4b;(SwrI zlyfW?4?J9hwys!b{F>^M-n%MXP=VPf;18(w#u8P6y6x;_j)K62j_>s;c*t%7>MI@p zyKu=BF3!$manMLA0(TxKAPI856Rud0Z@pmZ>b?UVsgh7PiI?^(NA;BC9`7HgX%(Qi z?Tvv-IzIQyK)I^K`*zI7EQfa{}| zVIQRIQQLr7nj{;Y5VNz17dWf%t(XZ_C^Mhe$R1@>YM0&~uu(Q+-tS66M8DrCvBc?n zHrE1I>>N|?no_5uN0b6PXQag}2= zwJ0kyJI#+IVlBIZN2ZCaNH}#hi`kB$4y8Hf1UzHSR1uXj-4YN8Sme3aF0t z?0Z(^R19G&V~8N@znfDT-dF;w*dDQWMvspUH(2ys>V{hxeI7Sun!%u?s_FYy?i)ue zkt$cC&eSMrQ41YDp;c7JSjq-;m8mH8`a;d&9D`cf11h@{17{6oGsGv{!o=JCCX;6r z3j$}3E`Eu9@tmkTZ)O#JhPdta>+5E5VR9373N-6XKHE2=x*qOZh0k@ZHVdpfs2bXd zAJ;4S$=|}dzG7h>tvx&wWq=ESvfS9K#iTw|4Ti|{^POz(#^LM^{kg`8*8783j*9ed zL$^-~HZUIbc1ItN-L!_40&|-s;5hVxex)j{Zs(&@kDii= ziT7U0@|HQ!BglHM(Dko9*HtOiEOp!`aMte*oVLvNP$KFCn%NA(#Vki1(nhT-T5^nw zr)k`hsWA6t_NR+l{HQQo$K7eLvX_bG#1A!a(~&~{AAJP+t}4fwP?H+=*b?x=5{QTG z?5BKI|27QqiZJ*i#gq9|)AY+?)~V3=SvdLExwx)s_JO?~)33uGd}!c7qHHENJrI;? zYX`r{m8SsPDPFZK)Z5&;+lyE=&Mu$2c(^#QMycl)t8Jcp6oB#!*`g~K@7yFhI8aSj zGUf6z@6Y>dePf=Rjq#nqUmKG@HJUStX{hEclvzp5Bgs?iXZ&C7z4upBTlYSS1rZVO zSU{=AqX>wAigXAnD$)f6q#s0juK_}cihzoMQl*4Q@4eS32#A!>10*5zKq#Rl0TPnC zIq&ClzvGT^?;r5qaTtR!_76LI@3q#PYt8x0wVr4CBSD!myejXGfTYZZm{q;73EedG zTgZ%E1kP=dfy0GF5^*h?bYq2ns-&aGsr#f9kaa@mZ{PjQKke+C*`OjCY zP?bZv*Uaq+3-ADjEYVn3TE!cWttMPX45t{KPh6{8Yq@0^IPDCHqq4`(lR(+zYVtx|J><=-IMl=pO`RW0!hwF`y|;Ubw^^o$|Sa`xHR8 z#4uT;MGi8q?HQ6Ig$2_djs(?3aIq&&Rh#iAF0_s5=sx?#yhg>leJZk_orQRu6?`QY z<{lMgQ|Z$B^38CSPf+tH0lD251}JqXKnF@>^i{2Su5(fcG;I9wpl|w8`W(&{fAJz48ugO7oYvH|PZeJ1%@L#>ZC@G`Q$s>F_x;;UJ2jcF(akYx# z4k(wQ_}~q7`RMd93dh(o5jNqd z5X%98no(^zk!)(? zmQ+63(6~~q6x4p%e|94hkw`3u!%JVi0>MbE!sSWb>edXrQmvRzyZ1=H(hfX$*xN`n z+Bg|qckj5%NR-RHc&>myZV&Juj52Y~N{jixk(Sna>F3G)r;Knl_K`pgLf(pVObOsT zIt@I={@Q5dE`VU@&mYj=K9uENT$%MqjXdwu2Zs$Q>e8^oI_HY0YWq(BHAS!Pep7SM zU#DLSMG-j8q&YaA-rO-zS_g>C448vGh}vph#-O6IVjI0L%*C@U7Q}4(^=j~Gc%Tqe zACRwR_ImKu?+*-#rkcPyqbs{PUDMw*n48w$k*=+k#I{lR3mLy1sc<`~O01i3HPBwH_a03*g1!MS_$GEPrdEnfMa|z=kz!al7QrIhvB!5{6 zyb4zo`C}U!DI{Y#cx9PH8?@56d`g&Q5PGy-Ew!|?G_~m2*<*8=4W&&@HzZ}Wodu+- z_Pt)6HxUBwUaU2X`lF~YA|m3~>};})PsYjAF!lcOwtFUCB8aRPHzY(+Lk}kOGZebk zGKa2Zk8SP}V#fX#3oyMao!8NOktfm3O$W%ml;M!29tV^X^;0~Sue<9@UzF0P3?eWM z6msxpK#C@vUjv#5EjxNf$xM}r68B=XyFs(r({BQbx3FtNtZW^A)usOHfOqWQbH=^B zB-~TlP-nPOu+uK8;LKSa-pOl!rCZ5}57Jh|!I71hqS}d@-XbnvA#NXFp})TX0K&A2 zPZD;3Uuk;ns%GsY0iDan_4m%Dk7^;({l<%ANHN=I6^2*E003dA_g;l8m@B_gBQbV91rb8N}0-RpM$k zq~+Nq)xUwWokMdEc4F;yyAv86QD0tuS~1GG95UIGSGmHl3|JnF&q#5{5|)sum9T1o zn8c)4uK@o0DO%NSB{?E+mfn=5MuYq34uI{465o2CB@WzX9CHR?bLnuE;Hi`T-9WVS z%2Hn?7F2-zxiiMLIx-((@%87cbkDC%gXULgh`yhwc+P9x)-rQnvycCEk>jLNBQs=} zEIeR2V@t~M3(JYaa-ZkCCj6`C*Cn>{3$l0HqD%dqp1=U)C8XP0iS{>7?+ba^s_JU~ zOCx??9@$m~6{M%f<#o}!qLcxkMO!kU|3Fe}UZKzD`d!G!QE*t;S;yZiSIpQU6h1U~ zDdCaI;jr>#V}xs-Fl;YiBozl*R)urzm?=^p$(Ek4(8G0VXU}Tt;sZsBlxA1<* z6~Im@iv}Z$ZbLu1Hr`8ntFQHq3*9U!eCn1i0nPzG-C61GI(P?CV2m0}YY6#i%Z}pe zqaVzgIEof?Xs~ga-Ws2V?up7guxbe0yU1$d(%+Pa?CRf<)|&s-^(GV)S1KkY9*u7W zFTAe<0mPr=4@wpjoTfIzAq{f=ZBm8Jdk6O}X-k2ayEIbEK+o3c?ta(uujsDy(~bMA z#D}k{Q~C@??v7POZXFj_)FD|Sb82;K0|xI21)GONaaoa&w#C=$Mj1cmpLDNH9wZMF zLA-T!s3JBYh`~)&fc7b+dqXY_a`v@IlX323DfjEaZbJ1Xj&wD@Ii{`xuDg<78^rB?&}i*hP}ajSDVNr%QV;04P-?(FqeA=r z4`8GJSm8mK!_G+BUF-VMkgS*FIlWx(G8_NQ69)AcOUGPx-~T#Y%U>zZzGOcSAo#^w z^_cS)WOc0YK)#aey+i{}bZYYGDS9t`sCE!zc|ENj!FqYwkm^{#arHrDQ@7@UF{h)1 zMDbB3$!^`BA)?8{E&!+^i1cUrJvRx+Q1bs+T|E*`fEW2q#UV`!H~^lm)G~bH;Jqbd zuV=khENraurT8mI4Xc9UVoW^N?~eb|3fNBmyOV5195llbiQ=NfYm-4)T7#$}XPhR({#a&gp1L z;1Z}pup(c)jKW=(t?ZhB@bdq4T5R~s^ePWUxth1jpQHH~j{;2vxld{C!@?Vzy$NkQ z43eT_s6)<-0l!=8gESw;h1SrS-VO)dGyL)%5U0S#oHHJijQ4!HFg1h{W$TX=*GF>J zr90)#REcJFrQ?D9bNdMO7U(#HNu({v;ut|&11Q`cEX+C$PT+P=G>s&O__z9vfBVt# zB(|6SCeruiB%v>fYC)c?xrs9I7&|mx6de@lRw;1lZdr@H&Ke%hYvrxJr!!P!A5|=M z=zjb@{O<9~#9Fgz0)6KLVR+q;_qGsiH4Gn2nr~^L%j5S8P%&(EP8s_Z@-G)AUUj|$ zd0K}uT7q`iLS=VrmIb#L~z_=tK+RT(z0BiDQzRD?AZnO&7*|Q{q`%XixrJMV+HV?{4&KU zUqG@S7ScPzZS?q=+YMJUFD0gp%n(bt6f)5i&Dzw&`Wd9%U0!AVbTwLb&o#sq^5f~b zb|Lriz#x*Zxopu7=0N^MZeFLaBY*ngxkC3z`q2lrfAz0KEkW$y^^GbgLsDQEI9M+(WQI9u$_UxS8fWrQA)jSb2U|ou@*XmEb*|d?TJOUb> zWh1pRnyj={Q)3LC7RePpadNh@3E?zR*xNxVU4_8j`&VBWx7Uvm2|rY)%LHjH6*0YB zB$^x4#jiSqE=KoVkH(=b2o+(Jn`EbD;lr&dq)2D>XO!x^JbMKoQIml%S2?cmD*Zwm zf}S=Ks^-7)dgeoXUdWy0)kp?;H=9bqhs58s$|0*8V;kf2c0ZlZtPRe1G4@bZI1Y#6 zYFk^V7Y_Cuet+(5ME+EjI{I^5o0{{__mf7cOL9#iy-=x%HC}t9_b%2M9g_5+J78mU z{?~>??@2{o82#0eq&bx8`D{9sPy6_cL#gm(#*Yu4s$Utw@qMu}hoz)Qyp<&i>@;=P zHqrP$Mtig6fW+8L-pwiiIQweXxK{r9d9|T*8Eb0z*chDKovtcqy7)EzHz*EE9Yi99 zl2S}(vUc=V8iHvjUn_~QL>#=FZGW7pns7*{S&?Dm6bhIxrRG)lzk9p=9SW9cWX51T z$=~5?vo#m6Y^ zBxLvM&DXU&WZU19kvbE}SEsK+sW6mv%5~3ky8|x;SMz7~;|dHEO^pdlaxZ+Nx#mT6 zv=GQ)A9`e-anRxJf`%-0jZf*6iL(sPVMWc0>AANg2Yu*X8aIi40N>5Pd$u|DP&Ax` zTEX8*uq|ZTh9pb;CnKIjv`|MO3$7+i@ zwXB7w;l#TE8=tbRk@7UuSn55bE2bl6>hIOh@}jbNV&bW7Ue*&Y>ir`n)Syy1$bKJw z_j-rC2XbCh4PenwW#pfp#P-JK!+NF#&F0+j@;hUrI&qsJkxh7V9l4s+WgmT6ajD1A zM(^%OSy_fvTV+mcvO}eXyP5m3&5l^rotbR?@aQ^s3mYGXvpsmPVDB+{dE)B3!rss# zFFo%4{e^UyhQR(l|AmNfi(uGOm<^V; z23I1BQJV*7Gap#P_c?v}uyq~f@rfO27b1}NJf2Q0k7TYsSoN^p0LAmZVz993Tp=$} zJJ2pe0m%cZ%Ceq2vpFPCs>)qYZ`(aV#@v3I4W86;lgr6LjFEv^|<7Vbg>cGj&yti z+xlL?{V+MFV(&Ngv&}SUq121kImLenp&FTZ-CM8DW^0q*!c;>@!CO2KS(ndgqhAMa zDKkphHm)3Olwz1J)f87zSv%VY50pSNX=d@Bd)tZD?&uIZ{0`b}S_$em)gGj*2JSGG zxuIiuoAx@{L)d3R820e(!0$h4uq#0*J&|ye?1<-6|cGq_%<|3k8M7{ z2|3lY`WywTly2Fk*+zYb*0+txBaJf{kSHylpkHaue7ln)pq61O*iIC zv|uP?s!~K)QmkNsdf{Gw#=V_nf8rIzVC4i2xw)mEZ{qIc$@6 zr}d7dF`NKUvl}KjJXhguLb6g1O)n9UV(j(!%>#>INdX_C%FAOK*I z-f}xqF?gd!5YcMehh0JF^Fy{V+-hx@9`@oqr4mB%Vy==Y*>q;p?U5hQ(L zR249BFxy5m^QNI-F|;zogb`}&7`YX#=8Ylo_&`8|EMscB%UHpDpzSR{0gJ2IU)I z<~p&87hUgOy^y`OM-ok>U7rUGrO9#CkpF_HE+^s)UxIw^_&av(j8b=uiKcz~g@KIt z{XdmvX+4Wv;L8YT9iQ?k;-Icg+rj;FG5w1Zm6H+OtZXE7}Uvs&5fxFmU5$#+f} z53^8@e4xwWS-R4f3&aLB*7Z{M;I9?CItF#wU-&5fzZ{uV^NHmehwf`!;*Q5?D>4pH zWgi{G#m=Ui&@@}+>aN}X6~){ z+UNj#mE?t^zp5^hp(xkX=7koUioh*TJnWX6pWFCN0qZKCK!?%q+@g*=W7D?%8<2p> z1}t=&hnMcw-}n3^f7y5;vo10*#0j3X-hsMI+<%+ZsULgr@^`yp?p;rlOa3oV<$K!s zjDYSiX5i+Bipt=~fLN@r-JW>>BDT1$MLYLs0l27Vy$DkOVCND4ykt1`ItjWv35(*r z3R*H{BTo-T+P_YG%W|0*H5j$OKY+=_u(Gn6T7$K%twSe3^v}?nM4rTi0nth3lr{zD zi)Lf&FUZQ%RTH4Gs{2R|lwu>+u=X!!bhc)E7Y@D3=YesrUVMX8av#cSN%J`Do<>fr zh<-{qqxQ=PWxup;R=mRpD9%HH`2F|BNPzPt3xf_Z3pPjB-L)rsR=OE?-TP%tq{)&a zc__;Ur=ekZvayIG;x@cBKg&)GqhC(3`+F=g{yKO)(2s&Z#a`L<+uE*Kt#JceqSkL7 zQqEaNl-r_UYkqwkcBh2NU1|=uQknZTmC~OMiSNnvT1B@+dn`Nol{7LT=RF|)D>y=r zYg>x!erIKvumEHBj%txFi;dC=>t#pxq0C+$!I+5#D}oU|=sL`McFR-sHhoh~wjibW zLr1T!O+pH56EvPjWCZ`b!7*P?HRFovZ8w;be+^6Er9^1GfP7}$>C7zZ7{BMChQZdi zlxjW2CTz%VJc=z>JBVByvyV{QcN=7Pw2o5*iV~L0d_1X6dtciFMql~vXIBim6vHBQ z%Q9q%R2IAgkBytt&f92RZ>qB64SjF%@#77hbjyGb_;Y{1lN*VHOYB|Jg@fkb&!eu$ zgLcwX=rgU-;+~q-`Aphx4aBP$MLJ)v74HSHVy@MFd&`193}?Nbue2OL!Nys7k7b~( zS+Ahtu5|u|(hNsqQ&Td%uVr7OB^azUO)a!Z=NZQDGHT6hIO}oa8~)$5>ydJy%WUy& z&GdLjW)u19N;XV*d+GBPd}MSnO=z%bORMsU`raQ>f}4I#(0&s(lNyWpQ=C9JRDVge zDRgzLer=FEFP`1r{qfC6*Ls~vqKTBFy-_5Y{t@YSE(_1k2+*H!!WAucfblPeuBb?o zFf|@y*^v5=8AUgb%sD}|?ryhbkdxJlM%>%>_TKU~#U9Imamw3j{igum$?4abZ4t-U(>`$tKjJ)3!Sui4bZaZS?5ZdY5ws zOnRsB+5l@jawaTR&1RZqFG*Qg$1!#d$N)4*t%@O%;QF-@y#lwN_bKNG9CXvlhAP#Y zZqEXfeX{%bCz}JwbxbKw5hdp?ZrltqW2zp19=(TV+<6umLux!kjnfUR1IHn;Qeu7g z+?k_brd~fLDMU(U^4JDu@Ewlr>6E>7ne0=4}uwCpcojYT>_TvcY8mwv^|5jYOzP*p2~nb1hp)Qe$dcJLPZ~yyD;6T)-^8 z+R>pXA#P2TxM%ho8gWd`vJ{zh%qy_bPQUeb^$SnE0fe*~Y48NK#0j zQS!Q+D<$1V7&iUOz%G8y-~-w!$hNWD7wV0Xpj&3v2N0mloBM;{PCWlvK9#jR3z_2g z>-A_U{t~?8n_$ny5<-}yJVp%nRmI*VSDE=NML%6&I`y|uK-~o^AFsrtAm-!v4oQz5 zVEw>)Vxk6TKDjGj{J7%=!K2FJ^y>~vlpUMni5UqHRI2A)VPht}&32|&1i3ihlRX^W ztr2oJu;< z1w*?GWAg|}!$}v4;^uZ!IOpZ9IiYr(?-(K>^weF)FJV#-bQ;<-l>}TcL6Z|l{>yv&` z_qAA6$RX2ysyowayPW2+G45abk%A3PlN^b*#ece`Of`1`usDWQQ!8%V!hyt%S(%tC zkAz|zcZM(MaEh08hPl(+GoJsTV0Jap;4636FjcWJLdqZ`9bW0%MpfNbt=;zp&**+M zgnpFHi*EJzatO`25WGHExWCQ0cbdkmqn4pVw_Z-PEzgUpGYf1#FpH3>pjp#$oK?d0 z=F+j%rFAZ8+WMrupGJR5-5PIdiafJ%$R@A+#Rlv4YTd?Xj}T>7pQ@MB3`W|JuS|Ef zV{&vaJlY*+vOY4~h#$zXR6n)}WU`1;-`)A;rNNP(RrC1;Q(cD2it2E|z1S5-f-R5-0Cz&`poavYyj!9oD$`OSkEmFG$c<%TXR^ z(kly7pcZs+7dWAUc6iSUr7AY=PPTv>ccM-u9~LrU8A0OWdNAQu>QX?l@m^i^`nW~T zvCYq!_yns4d2EWuJG9GGjb@<+VIU2*tI2y-Fhfx_9Q2&&DlIA7={Me&QZ2(QFAx)C zF(`YM_0D2qx$#HS@xR52$BFx_9K3BbM!s#fdgNH$gkN@*a*kbWoUs0s<(G4d5dwa5 zIpRS<``4btthZUC4VBMcY05E|+ULp1$R8-pB8SM8ucN(jKHv!#vWK>fAHC)6! zd$tBo3RWR219Z)=m!tyuug#BSF3~ShWep&+RE9^JX1Lv;+Ws6ML$PgQk)+nFKUTc4 zejuqR$t8TJ=-an%wjIM}_dkqmB-tZdKMHF)45Y?;gaDbgm-bCB>S0Q6H^k4zl;!L* zWxnh8TQ4dhMVSsgqCLpz5K|?nrHRwVyJ@Y0osFQGt@id#d!#D7?#}XfZQPw^4qizm zYL;vJdMuhziWLM2Dk$JyWWU{NUJPdB%1bp8yK)-(cTq6xD74i-sd7ijYMj^<;9v;X zjL&Z)Pj}}EK}j9@BOF(iOD8KAcGemW<0J}&rOQa#J=2XNT!(QtCu}hw%`N*hX(VH# z&#byv1;e3jv#WtJ0Zd*;3L6qTmip@9?@SrdX_;Mk9CztR5e_XQ%9U|vHU<#1R)7Ue zk~j@qn}%AeF3a9~eS`|wO*fEcl1Zlzzf~!R+;-Ni_78$s+e792bpkWJn(cmJ?1eeY zK~4vI#Ng780*w!lyK_W&(X-m3zafy)!uL~^jt*I>BK%%JhVZ!zjk2xlTW-hI8^e@i_XY3t#!Z500JELt=@SyMC0 zLQ+H6d**HcBV=Z#y}i9+sN8ekE~dP3mc)H1A>;Zol~L!34!DA<+Zp!#J+GhWOAK;b zDHMf7{5Eg!8uHFR1ho=fC!u2B%ty^t@eKy^c$+Qsg@G1@-PDd|?A?r_tYiAQYYCFx zy)CG|6d6*u>0RGT@4(17k_<6u&PbUYa&TS*nVSHbUL* z-bcFNH{a&UH$S`8Z5|fuvZCgZ)Z+YPk^ZlDRsp#H3Gy%N#WVtV~^i}EU1YHA4~>Vl-7GJy`(=oEd=NSi-^{;yO21)j+a3{v;1-DUNN$?gY>fqRbZ%XX zRkL`89hF+aaf1|T?P|G3U8;s#>53xo;P&$2=;E^G+E@6SbOl%oCCLw<{tLC*wxHl$ z(F5?i2zGVj!-;rQa)?+0IYq=a?p1$`AQv`YOJ=DQ7X(x}up(}^%oCEKoul>m=tkO` zKI6}sIe;MZHJ6Rc?=>-9{V?RD&F+LB-!``Q=d9@cYk} zdEA$HBpK-U#|SOVzyp*Pn%{NwPipciS@WZ^crs_;jSxtW1~Oy+@UUZAzaG|RQvRw_ zpe+>dXOBm62dx&bT+jktjA4G%&*-&C50W^&LV8j>_Iz(Dze5R0%y34=z~$!w{P#Cw z+R(9$w){&mrLcJ1Z9Ety#V=Zts#G@3_Q_fWOog6#V2Ho=>PDt}?R>Oe~e_rbi zC2_)fxqkc^wDP}L0Ix#cTJ26DiY*jQf!3M7VSO#ClOFQZo1l{scO}y>(WF;HTeMJu z`q;DWkfBV1-V@*OHBM!mf~?iqDHV1N&f;-4DynYdzyXoHIoA{}e;`HCvSJ_*2-x;y za_-f^W3)9B=L6agSN*dGoBKYV^3265KZH8h#I;t(ScGX+j@YP0tr03xjc`b11WkNZ zb==Uc$6D;pyXHJJI2c|fMMUT6rXJyBBEm%l8QhU@J*Oai2b1d$|DMRQgI>wm&Gs(q zX3`56o?x=dmqK`OC_ztkBzm^`298Wt&J}`Jc@6jj@Ov0siTX=3sqdch;RNFnPH(yK z)jA3SR+6Lp67R^1$ljtmlreI%!>Xc>qK(YWunPAlUa6g4LJCS2Cjc!@KfkO)OqdzsRrSsz=p(E&N4A z^kUFhFB-OSr;5tUBc-Qda#B

)B(U-m zM>n0neyo8&0@<&mZNpq9T8PNOxuA>|fcN!$K>p>pO&5c>7IEZjpNXWFIrOuxb`+mQsz zK-^ju?NLB#3pmpq1D`Vol7(Sz-iZt1cOzv_1PQoBmn!RB;PH<-6s7F?E+c5+i1^Wh zwMXu^-H4opK%9ObcrPQgbL_HJ|87V=np+Z-6&-+lj|3W|@N>WSF}J>PAdDOrjpQc@ zEWG>^88swreBafdSu z74eJ4@1}u#=vs@CPyA^T1Vvo_3Uh|mwv5iKeoqHA^C3%s^YpNE$$nfRbcT( zJ8R~OT6Tlsbrm8j=mAyY+u$ClGOg5Ok+LcWjQ+3GX;fz7Vm zH7{;XW2XbsS7EGpgs+rEbupZCEI5M}en5-*Y%=>t|G;1Bkl??U7ix3fZ3(cK(m29^ za=ZG2;Z?~Q#(z^|qOQnJ+6S)y;!(&||KF^=ff?ZV<7^(HF=!;lT4HZ#F@KuO?s=s^##bPoAz{u}YN$JC?`f z?^;dA+V0%216tfNZVxLCY6a@*JlY6V$vh0ve||Mqf^+*9Gw0rW$A|EJv?VisChho? z->oD!z19G3sFslSSzz+OAL^KEAprVY<%H6@s6Q)`Hk1$8B=R62&aXA>KbW*o3+4q^ zPb%ile?x~v{N`3Ll9=Oz@Fm~A3NI+?BLU*ta4{aLZfm0ytSI{ zrlWiLHdO8yCdlpmcnNE6OLK_u5kaGZ`Z(5uT55VK9JINcnj!+s5aN@AV)KtBM@BoD zwVo;>o`T)rWdQK;0p{=8?j}Gh{ihU{5%rH$DaIHng#!?i*oR4vSj(@j-#IisGGHwM z44GL5Ii9m8%1_!K>-{?cA(;Q|pjMt>qRP5o^(z|&qdE`Od)6v_&0}vmS532bWrqY? z?N3t5FW~m@8H>=LU6gLW5y?xbn-!w}e#H8>0{?>mBhW0m908b6-!4r5Q+WLQ45NgZ zcNg)In_y=KF5MdLw_>!D9%9%RZ}Qg8OxkC&E9O4G+_2zhVkU zR(+J&RiQcd1CXu+#()W7JaOUiFI$DpA4Gg#+XDXPb;lU(@ap5gcpzVO8N8B_J|7Ys zUfe$Qbka&-DRbWX9023VdB>H-Xg(pT%Rd7(hG~35&U+eidg$cvK}@)Q7R)LQ^hkl< z-(_s9=s93Rm(1A@aj8UmeDr#99P)KO%LH^cjYKWbQ}TT7xx79OKK#XQjEh=Pd2|t%0+Df$?qGahF=Tu^@7eGT`CI z;@N)p8A$74#5zsbZ>KY9$>o=!I>wfMg9X{n9$3Eg-4xj0k4qW-#E+uE(A|dteCD`Y z++eX$2CbPHn>T^Ds9k2v{Zl@pD>&n0TP=5*{ozlxz#ePx*tu_N3*tv-_f;x?3X9^E$$+B3b2gtme*&>pIKn_|9@bud@(v4F zpiE>?1Y@}k2N=bK{zB24Wf3-FyWj`s^0>)>PL4HKQaUKDX)GA0+1*&Ao&^l5|Aa^cd*FHea*~z3WO^9Z|wrIJ(mO` z5xY};0$@YhL@xakE{x=I1M-QV5&ZPpPxTNRUx3oINZBReE$!1I@g6|ga!^ z+0e{h&wBv7m~;v-B^V_aA5JhnYkp;XW|$Tqjzx^+NraU z>t+mabLPGaK_J{p`T!_t!|MR?NlRauAeSyu!4Rp8A%Ze{1Hh=YpYM_mK}LP6mY;nm0V9gGgFxc;N9=i8c9k54H$NZTfi;O(UR|Uh{VDH>30W(k;Hu|D*Jy%37 zc-g)OypzpnOTF%8aR(sm=4Bwej_&tr7b^bEI4mDxtMz|%^FL#W{}Y{uV3z-jjy(7m zYJh?N$ulPYMfkr6rzQ0OnSW%9agV^i!r=e(sW1O>;(B&YWyo48LHy{6NPdB0-@8zbBCJ1fGiCAml+Zjmua%S T_ct$Nj=Q&XZx-Bm{OW%J4-l*U literal 0 HcmV?d00001 diff --git a/screenshots/04-dark-mode.png b/screenshots/04-dark-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..ae3ec016d4c1a9b7d6983ddf8db85016ad5893dc GIT binary patch literal 171288 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 z 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 literal 0 HcmV?d00001 diff --git a/screenshots/05-api-docs.png b/screenshots/05-api-docs.png new file mode 100644 index 0000000000000000000000000000000000000000..054cb62442028c462ca72a3d86790d8d3f829b30 GIT binary patch literal 165075 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%0A|=^>vrM|T;XpywG=b+a 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 z%0D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

QK*=h8CJk8y)z>ck*1RW+&j=t;ueCmg6gsayy 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 literal 0 HcmV?d00001 From d5fc4acc2d92b2a7803a670be6a06ca284460bc7 Mon Sep 17 00:00:00 2001 From: Vinicius Castro Date: Fri, 7 Aug 2026 23:42:51 -0300 Subject: [PATCH 21/36] docs: comprehensive README and MIT license Setup/run instructions, architecture, business rules, third-party library rationale, API docs links, tests/quality, screenshots and design notes. --- LICENSE | 21 ++++++ README.md | 203 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 212 insertions(+), 12 deletions(-) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8b3eaaa --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Vinicius Castro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index fa3509b..901510f 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,210 @@ # Investment Manager — Coderockr Fullstack Test -Fullstack application to store and manage investments, with compound-interest gain -calculation and age-based withdrawal taxation. +A fullstack application to store and manage investments, with **compound-interest +gain calculation** (0.52%/month) and **age-based taxation** on withdrawals. -- **Backend:** Laravel 13 (PHP 8.4) — JSON REST API, PostgreSQL, fully decoupled. -- **Frontend:** Vue 3 + Vite + TypeScript — separate SPA (deploy-independent). -- **Infra:** Docker Compose (php-fpm + nginx + Postgres + Mailpit + Vite) + Makefile. +![PHP 8.4](https://img.shields.io/badge/PHP-8.4-777BB4?logo=php&logoColor=white) +![Laravel 13](https://img.shields.io/badge/Laravel-13-FF2D20?logo=laravel&logoColor=white) +![Vue 3](https://img.shields.io/badge/Vue-3-42b883?logo=vuedotjs&logoColor=white) +![PostgreSQL](https://img.shields.io/badge/PostgreSQL-17-4169E1?logo=postgresql&logoColor=white) +![Docker](https://img.shields.io/badge/Docker-ready-2496ED?logo=docker&logoColor=white) -> 🚧 Work in progress — this README is filled in incrementally as the project is built. -> See [`docs/`](docs/) for the API documentation and the sections below for how to run it. +The backend is a **pure JSON REST API** (Laravel) and the frontend is a **separate +Vue 3 SPA** — the two are fully decoupled and **deploy-independent**. Blade is used +only for the notification e-mail templates. + +## Screenshots + +| Dashboard (light) | Withdrawal preview | +|---|---| +| ![Dashboard](screenshots/01-dashboard.png) | ![Withdraw](screenshots/03-withdraw-dialog.png) | + +| Investment detail | Dashboard (dark) | +|---|---| +| ![Detail](screenshots/02-investment-detail.png) | ![Dark](screenshots/04-dark-mode.png) | + +More in [`screenshots/`](screenshots/) — including the API docs and a caught e-mail. + +## Features + +**Backend (API)** +- Create an investment (owner, creation date — today or past, positive amount). +- View an investment with its initial amount and **expected balance** (principal + gains); withdrawn investments show the balance frozen at the withdrawal date. +- **Withdraw** an investment in full, with taxes applied to the gain portion; a `withdrawal-preview` endpoint returns the taxed net for any date without committing. +- **Paginated** list of a person's investments. +- Token authentication (Laravel Sanctum); each investment belongs to its owner. +- Queued **notification e-mails** on creation and withdrawal (Blade templates, caught by Mailpit in dev). + +**Frontend (UI)** +- Investment list with owner, date, amount, current balance and status, with pagination. +- Investment detail with gains and final balance. +- Create-investment form with client + server validation. +- Withdrawal action with a **live taxed-net preview** as you pick the date. +- Responsive layout, dark mode, skeletons, empty/error states, toasts and route transitions. + +## Business rules + +- **Gain:** 0.52% per month, **compounded** on the anniversary day of the creation date. Computed month-by-month, rounding to cents each period. +- **Tax** (on the gain portion only), by the investment's age: + - `< 1 year` → **22.5%** · `1–2 years` → **18.5%** · `> 2 years` → **15%** +- Example: `R$ 1000.00` created 6 months ago → balance **R$ 1031.61** (gains R$ 31.61); withdrawing today (< 1yr) → tax R$ 7.11, net **R$ 1024.50**. + +## Architecture + +``` +┌────────────────────┐ HTTP/JSON (Bearer) ┌──────────────────────────┐ +│ web/ Vue 3 SPA │ ─────────────────────▶ │ nginx :8080 → php-fpm │ +│ Vite · :5173 │ ◀───────────────────── │ Laravel API (api/) │ +└────────────────────┘ CORS └──────────────┬───────────┘ + deploy-independent │ Eloquent + (only knows VITE_API_URL) ┌───────▼────────┐ + │ PostgreSQL │ + ┌──────────────┐ queued └────────────────┘ + │ queue worker │ ─────────▶ Mailpit :1025 (UI :8025) + └──────────────┘ +``` + +The API follows a pragmatic layered design: + +- **Domain** (`api/app/Domain`) — pure, framework-free value objects, enums and services (`GainCalculator`, `TaxCalculator`, `ElapsedMonths`). 100% unit-tested, no database. +- **Application** (`api/app/Application`) — use-case Actions (`CreateInvestment`, `WithdrawInvestment`, `ListInvestments`) and an `InvestmentCalculator` façade. +- **Infrastructure / HTTP** — Eloquent models + repository, Form Requests, API Resources, thin controllers. + +Design patterns on display: **Value Object, Strategy, Repository + Dependency Inversion, Command/Use-case, DTO, Adapter (money cast), Observer (event → queued mail), Policy, State/Enum.** + +**Deploy-independence:** the only SPA→API coupling is the `VITE_API_URL` string; the only API→SPA coupling is `FRONTEND_URL` (CORS origin + e-mail links). Each app has its own Dockerfile and builds in isolation. + +## Prerequisites + +- **Docker** 20.10+ (Compose v2) and **Make**. Nothing else — no local PHP/Node needed. +- Runs natively on Apple Silicon (arm64) and x86-64. ## Quick start ```bash +cp .env.example .env +cp api/.env.example api/.env +cp web/.env.example web/.env make up ``` -Then open: +`make up` builds the images, starts everything, then migrates and seeds demo data — +in a single command. Then open: | Service | URL | |---|---| | API | http://localhost:8080 | -| API docs (OpenAPI) | http://localhost:8080/docs/api | +| API docs (Swagger/OpenAPI) | http://localhost:8080/docs/api | | SPA | http://localhost:5173 | | Mailpit (caught e-mails) | http://localhost:8025 | -## Documentation +**Demo login:** `demo@coderockr.test` / `password` (pre-filled on the login screen). + +> The three `cp` steps are optional — `make up` copies any missing `.env` for you. + +## Special build instructions + +- **Apple Silicon:** all images are multi-arch, so **no `platform:` flags** are needed (avoid them — they force slow emulation). +- **First run:** the queue worker may start before migrations create the `jobs` table; it is set to auto-restart and recovers on its own. Give it a few seconds to deliver the first e-mails to Mailpit. +- **Reset everything** (wipe the database and re-seed): + ```bash + make destroy && make up + ``` +- Run `make help` to list every target. + +## Configuration + +Three independent `.env` scopes keep the apps decoupled: + +| File | Purpose | Key values | +|---|---|---| +| `.env` (root) | Values Docker Compose interpolates | `DB_*`, `API_HTTP_PORT`, `WEB_HTTP_PORT` | +| `api/.env` | Laravel | `DB_HOST=postgres`, `FRONTEND_URL`, `MAIL_HOST=mailpit`, `QUEUE_CONNECTION=database` | +| `web/.env` | Vite (client) | `VITE_API_URL` | + +**CORS** is configured in `api/config/cors.php` to allow only `FRONTEND_URL`. Auth uses Sanctum **token** mode (origin-agnostic, no shared cookie), which is why the two apps can be deployed to different hosts. + +## Tests & quality + +```bash +make test # PHP (Pest) + JS (Vitest) +make lint # Pint + PHPStan/Larastan + ESLint + vue-tsc +``` + +- **Backend:** 63 tests (Pest). The domain calculators have 100% unit coverage against the challenge's numeric vectors; feature tests cover every endpoint, validation rule, authorization (403/404/409) and the queued mail. Tests run on in-memory SQLite for speed and portability (the app itself runs on PostgreSQL). +- **Frontend:** Vitest unit tests for the currency/date composables; `vue-tsc` type-checking; ESLint (vue-ts) + Prettier. +- Static analysis: **Larastan level 6**; style: **Laravel Pint** (strict types enforced). + +## API documentation + +- **Interactive UI:** http://localhost:8080/docs/api (generated by [Scramble](https://scramble.dedoc.co) directly from the code — no annotations). +- **Raw spec:** http://localhost:8080/docs/api.json, and a committed copy at [`api/docs/openapi.json`](api/docs/openapi.json) (OpenAPI 3.1) that any Swagger/Scalar viewer can open offline. Regenerate with `make docs`. + +### Endpoints + +| Method | Path | Description | +|---|---|---| +| POST | `/api/register` · `/api/login` | Auth → returns `{ user, token }` | +| POST | `/api/logout` · GET `/api/user` | Session (Bearer) | +| GET | `/api/investments` | Paginated list (own investments) | +| POST | `/api/investments` | Create | +| GET | `/api/investments/{id}` | View with balance + gains | +| GET | `/api/investments/{id}/withdrawal-preview?date=` | Taxed-net preview | +| POST | `/api/investments/{id}/withdraw` | Withdraw (full) | + +## Third-party libraries + +### Backend (`api/`) + +| Library | Why / how | +|---|---| +| `laravel/framework` 13 | API foundation: routing, Eloquent, validation, queue, mail. | +| `laravel/sanctum` | Bearer-token auth for the decoupled SPA. | +| `brick/money` (+ `ext-bcmath`) | Exact money as integer cents; deterministic compound/tax math (no float drift). | +| `dedoc/scramble` | Zero-annotation OpenAPI docs (`/docs/api`) + exported spec. | +| `pestphp/pest` | Expressive TDD; datasets drive the financial test vectors. | +| `larastan/larastan` + `phpstan` | Static analysis (`make lint`). | +| `laravel/pint` | PSR-12 code style. | + +### Frontend (`web/`) + +| Library | Why / how | +|---|---| +| `vue` 3 + `vite` + `typescript` | SPA with ` @@ -14,13 +12,13 @@ const showHeader = computed(() => route.meta.guestOnly !== true) diff --git a/web/src/assets/figma/coderockr-logo.svg b/web/src/assets/figma/coderockr-logo.svg new file mode 100644 index 0000000..8e972ef --- /dev/null +++ b/web/src/assets/figma/coderockr-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/web/src/assets/styles/main.css b/web/src/assets/styles/main.css index e732cbf..eac96b6 100644 --- a/web/src/assets/styles/main.css +++ b/web/src/assets/styles/main.css @@ -1,38 +1,48 @@ @import 'tailwindcss'; -/* Class-based dark mode: `dark:` variants apply under a `.dark` ancestor. */ -@custom-variant dark (&:where(.dark, .dark *)); - @theme { --font-sans: 'Inter', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif; } html { - color-scheme: light dark; + color-scheme: light; } body { - @apply min-h-screen bg-slate-50 font-sans text-slate-800 antialiased dark:bg-slate-950 dark:text-slate-100; + @apply min-h-screen bg-[#f3f4f6] font-sans text-[#111827] antialiased; } @layer components { .btn-primary { - @apply inline-flex items-center justify-center gap-2 rounded-lg bg-indigo-600 px-4 py-2 text-sm font-medium text-white transition hover:bg-indigo-700 focus:ring-2 focus:ring-indigo-500/40 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50; + @apply inline-flex items-center justify-center gap-2 rounded-xl bg-[#1c64f2] px-[17px] py-[9px] text-sm font-semibold text-white transition hover:bg-[#1a56db] focus:ring-2 focus:ring-blue-500/40 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50; } .btn-ghost { - @apply inline-flex items-center justify-center gap-2 rounded-lg border border-slate-200 px-4 py-2 text-sm font-medium transition hover:bg-slate-100 disabled:opacity-50 dark:border-slate-700 dark:hover:bg-slate-800; + @apply inline-flex items-center justify-center gap-2 rounded-xl border border-[#e5e7eb] bg-white px-[17px] py-[9px] text-sm font-semibold text-[#4b5563] transition hover:bg-[#f9fafb] disabled:opacity-50; + } + .btn-danger { + @apply inline-flex items-center justify-center rounded px-[15px] py-1 text-sm font-semibold text-white transition disabled:cursor-not-allowed disabled:opacity-50; + background: #e02424; + } + .btn-table { + @apply inline-flex items-center justify-center rounded bg-[#1c64f2] px-[15px] py-1 text-sm font-semibold text-white transition hover:bg-[#1a56db]; } .field-input { - @apply w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm outline-none transition focus:border-indigo-500 focus:ring-2 focus:ring-indigo-500/30 dark:border-slate-700 dark:bg-slate-900; + @apply h-[45px] w-full rounded-2xl border border-[#969696] bg-white px-[15px] text-base text-[#111827] outline-none transition placeholder:text-[#6b7280] focus:border-[#1c64f2] focus:ring-2 focus:ring-blue-500/20 disabled:cursor-not-allowed disabled:bg-[#e5e7eb] disabled:text-[#6b7280]; } .field-label { - @apply mb-1 block text-sm font-medium text-slate-700 dark:text-slate-300; + @apply mb-2 block text-base font-bold text-[#4d4c4c]; } .field-error { - @apply mt-1 text-xs text-red-600 dark:text-red-400; + @apply mt-1 text-xs text-[#c81e1e]; } .card { - @apply rounded-xl border border-slate-200 bg-white p-6 dark:border-slate-800 dark:bg-slate-900; + @apply rounded-2xl bg-white p-4 shadow-[0_1px_2px_rgba(0,0,0,0.1)]; + } + .section-title { + @apply text-xl leading-[1.5] font-semibold text-[#111827]; + } + .figma-divider { + @apply h-px w-full bg-[#e5e7eb]; } } diff --git a/web/src/components/common/AppPaginator.vue b/web/src/components/common/AppPaginator.vue index 7f1ea14..8a44116 100644 --- a/web/src/components/common/AppPaginator.vue +++ b/web/src/components/common/AppPaginator.vue @@ -14,23 +14,21 @@ function go(page: number) {

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 literal 0 HcmV?d00001 diff --git a/screenshots/06-mailpit.png b/screenshots/06-mailpit.png new file mode 100644 index 0000000000000000000000000000000000000000..edfacb9692fab057cb0ce013bb5ef13e75365783 GIT binary patch literal 115631 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

NMY_#>d@iDXiI^eQAs`JMJ4MB6F^Vf(@HR=reaH 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 literal 0 HcmV?d00001 diff --git a/screenshots/02-investment-detail.png b/screenshots/02-investment-detail.png new file mode 100644 index 0000000000000000000000000000000000000000..517a58a7a8b5e11f8d6def6b642093d0ecb02032 GIT binary patch literal 91948 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�>tIQ? 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