commit ec1ae92799c5c17ae2c10f273324a06b3a641a69 Author: skycel Date: Thu Feb 5 02:08:56 2026 +0100 :tada: Init monorepo Nuxt 4 + Laravel 12 (Story 1.1) Setup complet de l'infrastructure projet : - Frontend Nuxt 4 (SSR, TypeScript, i18n, Pinia, TailwindCSS) - Backend Laravel 12 API-only avec middleware X-API-Key et CORS - Design tokens (sky-dark, sky-accent, sky-text) et polices (Merriweather, Inter) - Documentation planning et implementation artifacts Co-Authored-By: Claude Opus 4.5 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..646bd84 --- /dev/null +++ b/.gitignore @@ -0,0 +1,41 @@ +# Dependencies +node_modules/ +vendor/ +.claude/ +_bmad/ + +# Environment files +.env +.env.local +.env.*.local + +# Build outputs +.output/ +.nuxt/ +dist/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo + +# OS +.DS_Store +Thumbs.db + +# Laravel +storage/*.key +storage/framework/cache/* +storage/framework/sessions/* +storage/framework/views/* +storage/logs/* +bootstrap/cache/* + +# Logs +*.log +npm-debug.log* + +# Testing +coverage/ +.phpunit.result.cache diff --git a/README.md b/README.md new file mode 100644 index 0000000..6c8bfb9 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# Skycel + +Portfolio interactif gamifie - Monorepo Nuxt 4 + Laravel 12. + +## Structure + +``` +skycel/ +├── frontend/ # Application Nuxt 4 (SSR, TypeScript) +├── api/ # Backend Laravel 12 (API-only) +└── docs/ # Documentation projet +``` + +## Prerequisites + +- Node.js 18+ +- PHP 8.2+ +- Composer +- MySQL / MariaDB + +## Getting Started + +### Frontend + +```bash +cd frontend +cp .env.example .env +npm install +npm run dev +``` + +### Backend + +```bash +cd api +cp .env.example .env +composer install +php artisan key:generate +php artisan serve +``` diff --git a/api/.editorconfig b/api/.editorconfig new file mode 100644 index 0000000..a186cd2 --- /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.yaml] +indent_size = 4 diff --git a/api/.env.example b/api/.env.example new file mode 100644 index 0000000..346c89a --- /dev/null +++ b/api/.env.example @@ -0,0 +1,71 @@ +APP_NAME=Skycel +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=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=skycel +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}" + +# API Security +API_KEY=your-api-key-here + +# CORS +CORS_ALLOWED_ORIGINS=http://localhost:3000 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..b71b1ea --- /dev/null +++ b/api/.gitignore @@ -0,0 +1,24 @@ +*.log +.DS_Store +.env +.env.backup +.env.production +.phpactor.json +.phpunit.result.cache +/.fleet +/.idea +/.nova +/.phpunit.cache +/.vscode +/.zed +/auth.json +/node_modules +/public/build +/public/hot +/public/storage +/storage/*.key +/storage/pail +/vendor +Homestead.json +Homestead.yaml +Thumbs.db diff --git a/api/README.md b/api/README.md new file mode 100644 index 0000000..0165a77 --- /dev/null +++ b/api/README.md @@ -0,0 +1,59 @@ +

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. You can also check out [Laravel Learn](https://laravel.com/learn), where you will be guided through building a modern Laravel application. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts 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. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com). + +### Premium Partners + +- **[Vehikl](https://vehikl.com)** +- **[Tighten Co.](https://tighten.co)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel)** +- **[DevSquad](https://devsquad.com/hire-laravel-developers)** +- **[Redberry](https://redberry.international/laravel-development)** +- **[Active Logic](https://activelogic.com)** + +## 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 @@ +header('X-API-Key'); + + if (!$apiKey || $apiKey !== config('app.api_key')) { + return response()->json([ + 'error' => [ + 'code' => 'INVALID_API_KEY', + 'message' => 'Invalid or missing API key', + ] + ], 401); + } + + return $next($request); + } +} diff --git a/api/app/Models/User.php b/api/app/Models/User.php new file mode 100644 index 0000000..749c7b7 --- /dev/null +++ b/api/app/Models/User.php @@ -0,0 +1,48 @@ + */ + use HasFactory, Notifiable; + + /** + * The attributes that are mass assignable. + * + * @var list + */ + protected $fillable = [ + 'name', + 'email', + 'password', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var list + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + + /** + * 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..2661f8c --- /dev/null +++ b/api/bootstrap/app.php @@ -0,0 +1,20 @@ +withRouting( + api: __DIR__.'/../routes/api.php', + commands: __DIR__.'/../routes/console.php', + health: '/up', + ) + ->withMiddleware(function (Middleware $middleware): void { + $middleware->api(append: [ + \App\Http\Middleware\VerifyApiKey::class, + ]); + }) + ->withExceptions(function (Exceptions $exceptions): void { + // + })->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..38b258d --- /dev/null +++ b/api/bootstrap/providers.php @@ -0,0 +1,5 @@ +=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.10.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "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.10.0" + }, + "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": "2025-08-23T22:36:01+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "481557b130ef3790cf82b713667b43030dc9c957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", + "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" + }, + "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.3.0" + }, + "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": "2025-08-22T14:34:08+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "21dc724a0583619cd1652f673303492272778051" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", + "reference": "21dc724a0583619cd1652f673303492272778051", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "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": "0.9.0", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" + }, + "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.8.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": "2025-08-23T21:21:41+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.5", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/4f4bbd4e7172148801e76e3decc1e559bdee34e1", + "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25", + "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.5" + }, + "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": "2025-08-22T14:27:06+00:00" + }, + { + "name": "laravel/framework", + "version": "v12.50.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "174ffed91d794a35a541a5eb7c3785a02a34aaba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/174ffed91d794a35a541a5eb7c3785a02a34aaba", + "reference": "174ffed91d794a35a541a5eb7c3785a02a34aaba", + "shasum": "" + }, + "require": { + "brick/math": "^0.11|^0.12|^0.13|^0.14", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.4", + "egulias/email-validator": "^3.2.1|^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/uri-template": "^1.0", + "laravel/prompts": "^0.3.0", + "laravel/serializable-closure": "^1.3|^2.0", + "league/commonmark": "^2.7", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", + "league/uri": "^7.5.1", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^3.8.4", + "nunomaduro/termwind": "^2.0", + "php": "^8.2", + "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.2.0", + "symfony/error-handler": "^7.2.0", + "symfony/finder": "^7.2.0", + "symfony/http-foundation": "^7.2.0", + "symfony/http-kernel": "^7.2.0", + "symfony/mailer": "^7.2.0", + "symfony/mime": "^7.2.0", + "symfony/polyfill-php83": "^1.33", + "symfony/polyfill-php84": "^1.33", + "symfony/polyfill-php85": "^1.33", + "symfony/process": "^7.2.0", + "symfony/routing": "^7.2.0", + "symfony/uid": "^7.2.0", + "symfony/var-dumper": "^7.2.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/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/promises": "^2.0.3", + "guzzlehttp/psr7": "^2.4", + "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": "^10.9.0", + "pda/pheanstalk": "^5.0.6|^7.0.0", + "php-http/discovery": "^1.15", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1", + "predis/predis": "^2.3|^3.0", + "resend/resend-php": "^0.10.0|^1.0", + "symfony/cache": "^7.2.0", + "symfony/http-client": "^7.2.0", + "symfony/psr-http-message-bridge": "^7.2.0", + "symfony/translation": "^7.2.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).", + "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 (^5.0).", + "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.5.3|^12.0.1).", + "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).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.2).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.2).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.2)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "12.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-02-04T18:34:13+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.3.12", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "4861ded9003b7f8a158176a0b7666f74ee761be8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/4861ded9003b7f8a158176a0b7666f74ee761be8", + "reference": "4861ded9003b7f8a158176a0b7666f74ee761be8", + "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.12" + }, + "time": "2026-02-03T06:57:26+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.0.9", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "8f631589ab07b7b52fead814965f5a800459cb3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/8f631589ab07b7b52fead814965f5a800459cb3e", + "reference": "8f631589ab07b7b52fead814965f5a800459cb3e", + "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-02-03T06:55:34+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.11.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "3d34b97c9a1747a81a3fde90482c092bd8b66468" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/3d34b97c9a1747a81a3fde90482c092bd8b66468", + "reference": "3d34b97c9a1747a81a3fde90482c092bd8b66468", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.11.1|^0.12.0", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0|^8.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "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/v2.11.0" + }, + "time": "2025-12-19T19:16:45+00:00" + }, + { + "name": "league/commonmark", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/4efa10c1e56488e658d10adf7b7b7dcd19940bfb", + "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb", + "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": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.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.9-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": "2025-11-26T21:48:24+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.31.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "1717e0b3642b0df65ecb0cc89cdd99fa840672ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1717e0b3642b0df65ecb0cc89cdd99fa840672ff", + "reference": "1717e0b3642b0df65ecb0cc89cdd99fa840672ff", + "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.31.0" + }, + "time": "2026-01-23T15:38:47+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.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", + "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" + }, + "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.16.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-09-21T08:32:55+00:00" + }, + { + "name": "league/uri", + "version": "7.8.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "4436c6ec8d458e4244448b069cc572d088230b76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/4436c6ec8d458e4244448b069cc572d088230b76", + "reference": "4436c6ec8d458e4244448b069cc572d088230b76", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.8", + "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.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-01-14T17:24:56+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.8.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c5c5cd056110fc8afaba29fa6b72a43ced42acd4", + "reference": "c5c5cd056110fc8afaba29fa6b72a43ced42acd4", + "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.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-01-15T06:54:53+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.11.1", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "f438fcc98f92babee98381d399c65336f3a3827f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/f438fcc98f92babee98381d399c65336f3a3827f", + "reference": "f438fcc98f92babee98381d399c65336f3a3827f", + "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-01-29T09:26:29+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.3", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004", + "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.5" + }, + "require-dev": { + "nette/tester": "^2.5.2", + "phpstan/phpstan-nette": "^2.0@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.3" + }, + "time": "2025-10-30T22:57:59+00:00" + }, + { + "name": "nette/utils", + "version": "v4.1.2", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "f76b5dc3d6c6d3043c8d937df2698515b99cbaf5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/f76b5dc3d6c6d3043c8d937df2698515b99cbaf5", + "reference": "f76b5dc3d6c6d3043c8d937df2698515b99cbaf5", + "shasum": "" + }, + "require": { + "php": "8.2 - 8.5" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.2", + "nette/tester": "^2.5", + "phpstan/phpstan": "^2.0@stable", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() 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.2" + }, + "time": "2026-02-03T17:21:09+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.7.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "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.7.0" + }, + "time": "2025-12-06T11:56:16+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v2.3.3", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/6fb2a640ff502caace8e05fd7be3b503a7e1c017", + "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.2", + "symfony/console": "^7.3.6" + }, + "require-dev": { + "illuminate/console": "^11.46.1", + "laravel/pint": "^1.25.1", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.1.3", + "phpstan/phpstan": "^1.12.32", + "phpstan/phpstan-strict-rules": "^1.6.2", + "symfony/var-dumper": "^7.3.5", + "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": "Its 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.3.3" + }, + "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": "2025-11-20T02:34:59+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.19", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "a4f766e5c5b6773d8399711019bb7d90875a50ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a4f766e5c5b6773d8399711019bb7d90875a50ee", + "reference": "a4f766e5c5b6773d8399711019bb7d90875a50ee", + "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.19" + }, + "time": "2026-01-30T17:33:13+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.2", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "8429c78ca35a09f27565311b98101e2826affde0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0", + "reference": "8429c78ca35a09f27565311b98101e2826affde0", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", + "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.2" + }, + "time": "2025-12-14T04:43:48+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "9169f24776edde469914c1e7a1442a50f7a4e110" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/9169f24776edde469914c1e7a1442a50f7a4e110", + "reference": "9169f24776edde469914c1e7a1442a50f7a4e110", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "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/v7.4.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": "2025-11-12T15:39:26+00:00" + }, + { + "name": "symfony/console", + "version": "v7.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/41e38717ac1dd7a46b6bda7d6a82af2d98a78894", + "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^7.2|^8.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^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/v7.4.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-01-13T11:36:38+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/ab862f478513e7ca2fe9ec117a6f01a8da6e1135", + "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "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/v7.4.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": "2025-10-30T13:39:42+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-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.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v7.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/8da531f364ddfee53e36092a7eebbbd0b775f6b8", + "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/polyfill-php85": "^1.32", + "symfony/var-dumper": "^6.4|^7.0|^8.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^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/v7.4.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-01-20T16:42:42+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "dc2c0eba1af673e736bb851d747d266108aea746" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dc2c0eba1af673e736bb851d747d266108aea746", + "reference": "dc2c0eba1af673e736bb851d747d266108aea746", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.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": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0|^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/v7.4.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-01-05T11:45:34+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", + "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.6-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.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.4.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/ad4daa7c38668dcb031e63bc99ea9bd42196a2cb", + "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0|^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/v7.4.5" + }, + "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-01-26T15:07:59+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v7.4.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "446d0db2b1f21575f1284b74533e425096abdfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/446d0db2b1f21575f1284b74533e425096abdfb6", + "reference": "446d0db2b1f21575f1284b74533e425096abdfb6", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "^1.1" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^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/v7.4.5" + }, + "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-01-27T16:16:02+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v7.4.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "229eda477017f92bd2ce7615d06222ec0c19e82a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/229eda477017f92bd2ce7615d06222ec0c19e82a", + "reference": "229eda477017f92bd2ce7615d06222ec0c19e82a", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^7.3|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/flex": "<2.10", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.12" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/dom-crawler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^7.1|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/serializer": "^7.1|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" + }, + "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/v7.4.5" + }, + "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-01-28T10:33:42+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/7b750074c40c694ceb34cb926d6dffee231c5cd6", + "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/mime": "^7.2|^8.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/twig-bridge": "^6.4|^7.0|^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/v7.4.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-01-08T08:25:11+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.4.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "b18c7e6e9eee1e19958138df10412f3c4c316148" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/b18c7e6e9eee1e19958138df10412f3c4c316148", + "reference": "b18c7e6e9eee1e19958138df10412f3c4c316148", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<5.2|>=6", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^5.2", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4.3|^7.0.3|^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/v7.4.5" + }, + "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-01-27T08:59:58+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "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.33.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": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "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.33.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": "2025-06-27T09:58:17+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "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.33.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": "2024-09-10T14:38:51+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "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.33.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": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "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.33.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": "2024-12-23T08:48:59+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "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.33.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": "2025-01-02T08:10:11+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "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\\Php83\\": "" + }, + "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.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.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": "2025-07-08T02:45:35+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "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.33.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": "2025-06-24T13:30:11+00:00" + }, + { + "name": "symfony/polyfill-php85", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", + "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", + "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.33.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": "2025-06-23T16:12:55+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "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.33.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": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/process", + "version": "v7.4.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "608476f4604102976d687c483ac63a79ba18cc97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/608476f4604102976d687c483ac63a79ba18cc97", + "reference": "608476f4604102976d687c483ac63a79ba18cc97", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "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/v7.4.5" + }, + "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-01-26T15:07:59+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "0798827fe2c79caeed41d70b680c2c3507d10147" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/0798827fe2c79caeed41d70b680c2c3507d10147", + "reference": "0798827fe2c79caeed41d70b680c2c3507d10147", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^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/v7.4.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-01-12T12:19:02+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.6.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", + "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.6-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.6.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": "2025-07-15T11:30:57+00:00" + }, + { + "name": "symfony/string", + "version": "v7.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/1c4b10461bf2ec27537b5f36105337262f5f5d6f", + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "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.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0|^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/v7.4.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-01-12T10:54:30+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "bfde13711f53f549e73b06d27b35a55207528877" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/bfde13711f53f549e73b06d27b35a55207528877", + "reference": "bfde13711f53f549e73b06d27b35a55207528877", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5.3|^3.3" + }, + "conflict": { + "nikic/php-parser": "<5.0", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0|^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/v7.4.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-01-13T10:40:19+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.6.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-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.6.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": "2025-07-15T13:41:35+00:00" + }, + { + "name": "symfony/uid", + "version": "v7.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/7719ce8aba76be93dfe249192f1fbfa52c588e36", + "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^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/v7.4.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-01-03T23:30:35+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "0e4769b46a0c3c62390d124635ce59f66874b282" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0e4769b46a0c3c62390d124635ce59f66874b282", + "reference": "0e4769b46a0c3c62390d124635ce59f66874b282", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" + }, + "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/v7.4.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-01-01T22:13:48+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.3", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "955e7815d677a3eaa7075231212f2110983adecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", + "reference": "955e7815d677a3eaa7075231212f2110983adecc", + "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.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:49:13+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "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.0.3" + }, + "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": "2024-11-21T01:49:47+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/pail", + "version": "v1.2.5", + "source": { + "type": "git", + "url": "https://github.com/laravel/pail.git", + "reference": "fdb73f5eacf03db576c710d5a00101ba185f2254" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pail/zipball/fdb73f5eacf03db576c710d5a00101ba185f2254", + "reference": "fdb73f5eacf03db576c710d5a00101ba185f2254", + "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-02-04T15:10:32+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "c67b4195b75491e4dfc6b00b1c78b68d86f54c90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/c67b4195b75491e4dfc6b00b1c78b68d86f54c90", + "reference": "c67b4195b75491e4dfc6b00b1c78b68d86f54c90", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.92.4", + "illuminate/view": "^12.44.0", + "larastan/larastan": "^3.8.1", + "laravel-zero/framework": "^12.0.4", + "mockery/mockery": "^1.6.12", + "nunomaduro/termwind": "^2.3.3", + "pestphp/pest": "^3.8.4" + }, + "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-01-05T16:49:17+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.52.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "64ac7d8abb2dbcf2b76e61289451bae79066b0b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/64ac7d8abb2dbcf2b76e61289451bae79066b0b3", + "reference": "64ac7d8abb2dbcf2b76e61289451bae79066b0b3", + "shasum": "" + }, + "require": { + "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0", + "php": "^8.0", + "symfony/console": "^6.0|^7.0", + "symfony/yaml": "^6.0|^7.0" + }, + "require-dev": { + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", + "phpstan/phpstan": "^2.0" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2026-01-01T02:46:03+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.8.3", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/1dc9e88d105699d0fee8bb18890f41b274f6b4c4", + "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.18.1", + "nunomaduro/termwind": "^2.3.1", + "php": "^8.2.0", + "symfony/console": "^7.3.0" + }, + "conflict": { + "laravel/framework": "<11.44.2 || >=13.0.0", + "phpunit/phpunit": "<11.5.15 || >=13.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.8.3", + "larastan/larastan": "^3.4.2", + "laravel/framework": "^11.44.2 || ^12.18", + "laravel/pint": "^1.22.1", + "laravel/sail": "^1.43.1", + "laravel/sanctum": "^4.1.1", + "laravel/tinker": "^2.10.1", + "orchestra/testbench-core": "^9.12.0 || ^10.4", + "pestphp/pest": "^3.8.2 || ^4.0.0", + "sebastian/environment": "^7.2.1 || ^8.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/" + } + }, + "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": "2025-11-20T02:55:25+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": "11.0.12", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56", + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.7.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.1", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", + "theseer/tokenizer": "^1.3.1" + }, + "require-dev": { + "phpunit/phpunit": "^11.5.46" + }, + "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": "11.0.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/11.0.12" + }, + "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": "2025-12-24T07:01:01+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "5.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903", + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-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/5.1.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-02T13:52:54+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^11.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "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": "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/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:07:44+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "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": "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/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:08:43+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "7.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.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", + "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/7.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:09:35+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "11.5.50", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "fdfc727f0fcacfeb8fcb30c7e5da173125b58be3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fdfc727f0fcacfeb8fcb30c7e5da173125b58be3", + "reference": "fdfc727f0fcacfeb8fcb30c7e5da173125b58be3", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.12", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.3", + "sebastian/comparator": "^6.3.3", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.1", + "sebastian/exporter": "^6.3.2", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/type": "^5.1.3", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.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/11.5.50" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "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/phpunit", + "type": "tidelift" + } + ], + "time": "2026-01-27T05:59:18+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.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 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/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:41:36+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.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 PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-03-19T07:56:08+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "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" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:45:54+00:00" + }, + { + "name": "sebastian/comparator", + "version": "6.3.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.4" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.3-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/6.3.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/comparator", + "type": "tidelift" + } + ], + "time": "2026-01-24T09:26:40+00:00" + }, + { + "name": "sebastian/complexity", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "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 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/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:49:50+00:00" + }, + { + "name": "sebastian/diff", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" + }, + "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" + }, + { + "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/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:53:05+00:00" + }, + { + "name": "sebastian/environment", + "version": "7.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.2-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/7.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/environment", + "type": "tidelift" + } + ], + "time": "2025-05-21T11:55:47+00:00" + }, + { + "name": "sebastian/exporter", + "version": "6.3.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.3-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/6.3.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/exporter", + "type": "tidelift" + } + ], + "time": "2025-09-24T06:12:51+00:00" + }, + { + "name": "sebastian/global-state", + "version": "7.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^11.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": "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/7.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:57:36+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.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/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:58:38+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.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" + } + ], + "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/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:00:13+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "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" + } + ], + "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/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:01:32+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "6.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.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" + }, + { + "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/6.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/recursion-context", + "type": "tidelift" + } + ], + "time": "2025-08-13T04:42:22+00:00" + }, + { + "name": "sebastian/type", + "version": "5.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-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/5.1.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/type", + "type": "tidelift" + } + ], + "time": "2025-08-09T06:55:48+00:00" + }, + { + "name": "sebastian/version", + "version": "5.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "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 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/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-10-09T05:16:32+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": "symfony/yaml", + "version": "v7.4.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "24dd4de28d2e3988b311751ac49e684d783e2345" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/24dd4de28d2e3988b311751ac49e684d783e2345", + "reference": "24dd4de28d2e3988b311751ac49e684d783e2345", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "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": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.4.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": "2025-12-04T18:11:45+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "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" + } + ], + "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/1.3.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2025-11-17T20:03:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.2" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/api/config/app.php b/api/config/app.php new file mode 100644 index 0000000..957641a --- /dev/null +++ b/api/config/app.php @@ -0,0 +1,137 @@ + 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'), + ], + + /* + |-------------------------------------------------------------------------- + | API Key + |-------------------------------------------------------------------------- + | + | This key is used to authenticate API requests via the X-API-Key header. + | + */ + + 'api_key' => env('API_KEY'), + +]; diff --git a/api/config/auth.php b/api/config/auth.php new file mode 100644 index 0000000..7d1eb0d --- /dev/null +++ b/api/config/auth.php @@ -0,0 +1,115 @@ + [ + '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', App\Models\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..b32aead --- /dev/null +++ b/api/config/cache.php @@ -0,0 +1,117 @@ + 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", "octane", + | "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'), + ], + + '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-'), + +]; diff --git a/api/config/cors.php b/api/config/cors.php new file mode 100644 index 0000000..9010a7c --- /dev/null +++ b/api/config/cors.php @@ -0,0 +1,21 @@ + ['api/*'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => explode(',', env('CORS_ALLOWED_ORIGINS', 'http://localhost:3000')), + + '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 new file mode 100644 index 0000000..df933e7 --- /dev/null +++ b/api/config/database.php @@ -0,0 +1,183 @@ + 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([ + (PHP_VERSION_ID >= 80500 ? \Pdo\Mysql::ATTR_SSL_CA : \PDO::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([ + (PHP_VERSION_ID >= 80500 ? \Pdo\Mysql::ATTR_SSL_CA : \PDO::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..9e998a4 --- /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', 'Laravel Log'), + '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..522b284 --- /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', 'Example'), + ], + +]; 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..5b541b7 --- /dev/null +++ b/api/config/session.php @@ -0,0 +1,217 @@ + 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), + +]; 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..584104c --- /dev/null +++ b/api/database/factories/UserFactory.php @@ -0,0 +1,44 @@ + + */ +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..ed758bd --- /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->integer('expiration')->index(); + }); + + Schema::create('cache_locks', function (Blueprint $table) { + $table->string('key')->primary(); + $table->string('owner'); + $table->integer('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..425e705 --- /dev/null +++ b/api/database/migrations/0001_01_01_000002_create_jobs_table.php @@ -0,0 +1,57 @@ +id(); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('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->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * 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..7686b29 --- /dev/null +++ b/api/package.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://www.schemastore.org/package.json", + "private": true, + "type": "module", + "scripts": { + "build": "vite build", + "dev": "vite" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.0.0", + "axios": "^1.11.0", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^2.0.0", + "tailwindcss": "^4.0.0", + "vite": "^7.0.7" + } +} diff --git a/api/phpunit.xml b/api/phpunit.xml new file mode 100644 index 0000000..d703241 --- /dev/null +++ b/api/phpunit.xml @@ -0,0 +1,35 @@ + + + + + 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..3e6abea --- /dev/null +++ b/api/resources/css/app.css @@ -0,0 +1,11 @@ +@import 'tailwindcss'; + +@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; +@source '../../storage/framework/views/*.php'; +@source '../**/*.blade.php'; +@source '../**/*.js'; + +@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..e59d6a0 --- /dev/null +++ b/api/resources/js/app.js @@ -0,0 +1 @@ +import './bootstrap'; diff --git a/api/resources/js/bootstrap.js b/api/resources/js/bootstrap.js new file mode 100644 index 0000000..5f1390b --- /dev/null +++ b/api/resources/js/bootstrap.js @@ -0,0 +1,4 @@ +import axios from 'axios'; +window.axios = axios; + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; diff --git a/api/routes/api.php b/api/routes/api.php new file mode 100644 index 0000000..7c3dfac --- /dev/null +++ b/api/routes/api.php @@ -0,0 +1,7 @@ +json(['status' => 'ok']); +}); 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..fc19609 --- /dev/null +++ b/api/routes/web.php @@ -0,0 +1,3 @@ +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..f35b4e7 --- /dev/null +++ b/api/vite.config.js @@ -0,0 +1,18 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; +import tailwindcss from '@tailwindcss/vite'; + +export default defineConfig({ + plugins: [ + laravel({ + input: ['resources/css/app.css', 'resources/js/app.js'], + refresh: true, + }), + tailwindcss(), + ], + server: { + watch: { + ignored: ['**/storage/framework/views/**'], + }, + }, +}); diff --git a/docs/brainstorming-gamification-2026-01-26.md b/docs/brainstorming-gamification-2026-01-26.md new file mode 100644 index 0000000..baeb257 --- /dev/null +++ b/docs/brainstorming-gamification-2026-01-26.md @@ -0,0 +1,653 @@ +# Brainstorming Session - Portfolio Gamifié + +**Date** : 26 janvier 2026 +**Facilitatrice** : Mary (Business Analyst) +**Techniques utilisées** : Role Playing, SCAMPER, What If Scenarios, Yes And Building +**Stack technique** : PHP 8+ / MariaDB / TailwindCSS / Swup.js / Konva.js / vis.js +**Langues** : Français (défaut) + Anglais + +--- + +## Executive Summary + +| Élément | Détail | +|---------|--------| +| **Sujet** | Amélioration portfolio - Fonctionnalités techniques et visuelles | +| **Objectif** | Exploration large | +| **Idées initiales** | Carousel témoignages, Compétences cliquables → projets | +| **Total idées générées** | 40+ | + +### Concept Central Retenu + +> **Portfolio = Aventure narrative immersive** avec quête principale "Trouver le développeur", chemins multiples à choix, progression gamifiée, et expérience unique par visiteur. + +--- + +## Insights - Role Playing (3 Perspectives) + +### Perspective Recruteur Pressé +| Besoin | Insight | +|--------|---------| +| Se démarquer | Design non-conventionnel, éléments surprenants | +| Infos rapides | Compétences visibles immédiatement | +| Preuves concrètes | Lien direct compétences → projets | +| Teasing efficace | Previews projets sans tout révéler | + +### Perspective Client Potentiel +| Besoin | Insight | +|--------|---------| +| Confiance technique | Détails techniques par projet | +| Process de travail | Section "Comment je travaille" | +| Confiance humaine | Ton authentique, touche personnelle | +| Personnalité | À propos qui va au-delà du CV | + +### Perspective Développeur Pair +| Besoin | Insight | +|--------|---------| +| Impressionner | Animations/interactions avancées | +| Valeur ajoutée | Opinions sur les technos, contenu régulier | +| Mémorable | Élément signature unique et challengeant | +| Dialogue | Interaction qui donne envie de discuter | + +--- + +## SCAMPER - Idées Générées + +### S - Substitute (Substituer) + +| Élément actuel | Substitution | +|----------------|--------------| +| Textes classiques | Narrateur (toi) qui guide la visite comme une aventure | +| Images statiques | Animations SVG + entrées animées pour les projets | +| Navigation standard | Navigation gamifiée : carte interactive accessible via icône | +| Formulaire contact | "Objectif final" avec célébration à la complétion | +| Contenu bonus | Easter eggs cachés avec récompense globale | + +### C - Combine (Combiner) + +| Combinaison | Résultat | +|-------------|----------| +| À propos + Timeline | Section "Mon parcours" narrative | +| Gamification + Navigation | Système de progression global sur tout le site | +| Compétences + Projets | Compétences cliquables → projets liés | + +### A - Adapt (Adapter) + +| Inspiration | Adaptation portfolio | +|-------------|---------------------| +| Zelda BOTW - Quêtes | Objectifs de découverte à accomplir | +| Zelda BOTW - Dialogues PNJ | Témoignages sous forme de dialogues interactifs | +| Portfolios fluides | Transitions de page animées seamless | + +### M - Modify/Magnify (Amplifier) + +| Élément | Amplification | +|---------|---------------| +| Compétences | Arbre de compétences RPG évoluant avec chaque projet | +| Progression skill | Avant/après projet = niveau qui monte + description | +| Transitions | Animation "changement de zone" immersive (élément signature) | +| Storytelling | Intrigue parallèle au métier de développeur | +| Micro-interactions | Éléments cliquables cachés + easter eggs | + +### P - Put to other uses (Autres usages) + +| Usage | Implémentation | +|-------|----------------| +| Ressource code | Section snippets/templates réutilisables | +| Networking | Multi-points de contact facilités | + +### E - Eliminate (Éliminer) + +| À éliminer | Alternative | +|------------|-------------| +| Navigation classique (menu burger) | Carte interactive + narrateur guide | +| Informations redondantes | Chaque info à un seul endroit stratégique | +| Footer classique | Intégrer les liens dans l'expérience | + +### R - Reverse/Rearrange (Inverser) + +| Inversion | Effet | +|-----------|-------| +| Héros mystérieux au départ | Intrigue dès l'arrivée | +| Révélation progressive | Chaque section dévoile une facette | +| Pas de page "À propos" classique | L'histoire se construit au fil de l'exploration | + +--- + +## What If Scenarios - Concepts Avancés + +### Quête Principale +| Concept | Implémentation | +|---------|----------------| +| Quête principale | "Trouver le développeur" = fil rouge | +| Climax narratif | Le visiteur te "trouve" enfin | +| Récompense | Dialogue avec toi = formulaire de contact | + +### Double Entrée (Visiteurs Pressés) +| Chemin | Expérience | +|--------|------------| +| **Aventurier** | "Partir à l'aventure" → Expérience complète | +| **Pressé** | "Je cherche..." + éléments loufoques → Roadmap complétée | + +### Expérience Unique & Viralité +| Concept | Implémentation | +|---------|----------------| +| Parcours multiples | 2-3 choix binaires = 4-8 parcours différents | +| Même destination | Toutes les fins → Contact développeur | +| Rejouabilité | Chemins différents pour chaque visiteur | + +--- + +## Yes And Building - Affinements + +### Système de Challenges +| Type | Description | +|------|-------------| +| Challenge obligatoire | 1 puzzle facile pour accéder au contact | +| Easter eggs | Challenges cachés plus complexes | +| Récompenses | Snippets de code, anecdotes cachées | +| Aide | Système d'indices → réponse si bloqué | + +### Dialogues PNJ (Témoignages) +| Élément | Implémentation | +|---------|----------------| +| Format | Avatar + bulle de dialogue style Zelda | +| Interaction | Clic pour "parler" → typewriter effect | +| Personnalités | Mentor sage, collègue sarcastique, client enthousiaste | +| Variété | 3-4 textes aléatoires par PNJ, même sens | + +### Sauvegarde & Réengagement +| Fonctionnalité | Implémentation | +|----------------|----------------| +| Sauvegarde locale | LocalStorage JS (transparent) | +| Sauvegarde cloud | Email optionnel (multi-device) | +| Rappel narratif | Email après X jours : "Ta quête t'attend..." | + +--- + +## Architecture Narrative Proposée + +``` +┌─────────────────────────────────────────────────────────────┐ +│ ARRIVÉE SUR LE SITE │ +└─────────────────────────────────────────────────────────────┘ + │ + ┌───────────────┴───────────────┐ + ▼ ▼ + ┌─────────────────┐ ┌─────────────────┐ + │ "Partir à │ │ "Je n'ai pas │ + │ l'aventure" │ │ le temps..." │ + └─────────────────┘ └─────────────────┘ + │ │ + ▼ ▼ + ┌─────────────────┐ ┌─────────────────┐ + │ Intro narrative │ │ Roadmap │ + │ Héros mystérieux│ │ "Partie sauvée" │ + └─────────────────┘ └─────────────────┘ + │ │ + ▼ │ + ┌─────────────────┐ │ + │ CHOIX 1 │ │ + │ Chemin A ou B │ │ + └─────────────────┘ │ + │ │ │ + ▼ ▼ │ + ┌───────┐ ┌───────┐ │ + │Projets│ │Skills │ │ + │ │ │Tree │ │ + └───────┘ └───────┘ │ + │ │ │ + └───┬───┘ │ + ▼ │ + ┌─────────────────┐ │ + │ Parcours/ │ │ + │ Timeline │◄──────────────────────┘ + └─────────────────┘ + │ + ▼ + ┌─────────────────┐ + │ Témoignages │ + │ (Dialogues PNJ) │ + └─────────────────┘ + │ + ▼ + ┌─────────────────┐ + │ CHALLENGE │ + │ (Puzzle facile) │ + └─────────────────┘ + │ + ▼ + ┌─────────────────────────────────────────────────────────┐ + │ "TU M'AS TROUVÉ !" │ + │ Dialogue avec le dev = Contact │ + │ + Célébration finale │ + └─────────────────────────────────────────────────────────┘ +``` + +--- + +## Catégorisation des Idées + +### Opportunités Immédiates (Quick Wins) +*Implémentables rapidement avec impact fort* + +| # | Idée | Effort | +|---|------|--------| +| 1 | Compétences cliquables → projets | Faible | +| 2 | Carousel témoignages style dialogue | Faible | +| 3 | Transitions de page animées | Moyen | +| 4 | Fusion À propos + Timeline | Faible | +| 5 | Multi-points de contact | Faible | + +### Innovations Futures (Phase 2) +*Demandent plus de développement mais réalisables* + +| # | Idée | Effort | +|---|------|--------| +| 1 | Narrateur-guide avec textes d'accompagnement | Moyen | +| 2 | Double entrée (Aventure vs Mode pressé) | Moyen | +| 3 | Carte interactive comme navigation | Élevé | +| 4 | Arbre de compétences visuel | Élevé | +| 5 | Barre de progression exploration | Moyen | +| 6 | Sauvegarde LocalStorage | Faible | + +### Moonshots (Phase 3) +*Ambitieux, différenciants* + +| # | Idée | Effort | +|---|------|--------| +| 1 | Chemins multiples à choix (4-8 parcours) | Élevé | +| 2 | Quête principale "Trouver le dev" | Élevé | +| 3 | Challenge/puzzle obligatoire | Moyen | +| 4 | Easter eggs avec récompenses | Moyen | +| 5 | Système de rappel email narratif | Moyen | +| 6 | Textes PNJ aléatoires + personnalités | Moyen | + +--- + +## Plan d'Action Recommandé + +### Phase 1 : Fondations + +| # | Action | Priorité | +|---|--------|----------| +| 1 | Implémenter transitions de page seamless | Haute | +| 2 | Créer composant compétences cliquables → projets | Haute | +| 3 | Refondre carousel témoignages en style dialogue | Haute | +| 4 | Fusionner À propos et Timeline | Haute | +| 5 | Concevoir la carte interactive (maquette) | Moyenne | + +### Phase 2 : Gamification Light + +| # | Action | Priorité | +|---|--------|----------| +| 1 | Ajouter narrateur-guide | Haute | +| 2 | Créer double entrée (Aventure / Pressé) | Haute | +| 3 | Implémenter barre de progression | Moyenne | +| 4 | Système de sauvegarde LocalStorage | Moyenne | +| 5 | Arbre de compétences visuel | Moyenne | + +### Phase 3 : Expérience Complète + +| # | Action | Priorité | +|---|--------|----------| +| 1 | Système de choix narratifs | Haute | +| 2 | Challenge/puzzle principal | Moyenne | +| 3 | Easter eggs et récompenses | Basse | +| 4 | Personnalités PNJ + textes aléatoires | Basse | +| 5 | Système de rappel email | Basse | + +--- + +## Stack Technique Validée + +### Architecture Globale + +``` +┌─────────────────────────────────────────────────────────────┐ +│ BACKEND │ +├─────────────────────────────────────────────────────────────┤ +│ PHP 8+ Routing, templates, logique │ +│ MariaDB Données, i18n, progression │ +│ PDO Connexion sécurisée BDD │ +│ Custom i18n Helper __('key') + cache │ +└─────────────────────────────────────────────────────────────┘ + +┌─────────────────────────────────────────────────────────────┐ +│ FRONTEND │ +├─────────────────────────────────────────────────────────────┤ +│ TailwindCSS Styling + animations CSS │ +│ Swup.js ~5kb Transitions pages seamless │ +│ Konva.js ~150kb Carte interactive / minimap │ +│ vis.js Network ~150kb Skill tree interactif │ +│ GSAP ~60kb Animations avancées (optionnel) │ +│ JS Vanilla Logique, localStorage, events │ +└─────────────────────────────────────────────────────────────┘ + +┌─────────────────────────────────────────────────────────────┐ +│ INTERNATIONALISATION │ +├─────────────────────────────────────────────────────────────┤ +│ Langues FR (défaut) + EN │ +│ Stockage Table MariaDB `translations` │ +│ Détection URL (/en/...) ou cookie/session │ +│ Fallback FR si clé manquante en EN │ +└─────────────────────────────────────────────────────────────┘ + +┌─────────────────────────────────────────────────────────────┐ +│ ASSETS │ +├─────────────────────────────────────────────────────────────┤ +│ Images WebP optimisées │ +│ Icônes SVG inline ou sprite │ +│ Fonts Variable fonts (perf) │ +└─────────────────────────────────────────────────────────────┘ +``` + +### Librairies JS - Détail + +| Librairie | Version | Poids (gzip) | Usage | +|-----------|---------|--------------|-------| +| [Swup.js](https://swup.js.org/) | 4.x | ~2kb | Transitions de page seamless | +| [Konva.js](https://konvajs.org/) | 9.x | ~50kb | Carte interactive, minimap | +| [vis.js Network](https://visjs.github.io/vis-network/) | 9.x | ~50kb | Skill tree interactif | +| [GSAP](https://greensock.com/gsap/) | 3.x | ~25kb | Animations complexes (optionnel) | +| **Total estimé** | | **~100-125kb** | | + +### Routing i18n + +| URL | Langue | Page | +|-----|--------|------| +| `/` | FR (défaut) | Accueil | +| `/en` | EN | Accueil | +| `/projets` | FR | Projets | +| `/en/projects` | EN | Projets | +| `/competences` | FR | Skills | +| `/en/skills` | EN | Skills | +| `/a-propos` | FR | À propos | +| `/en/about` | EN | About | +| `/contact` | FR | Contact | +| `/en/contact` | EN | Contact | + +--- + +## Schéma Base de Données MariaDB + +### Diagramme Relationnel + +``` +┌──────────────────┐ ┌──────────────────┐ +│ projects │ │ skills │ +├──────────────────┤ ├──────────────────┤ +│ id │ │ id │ +│ slug │ │ slug │ +│ title_key (i18n) │ │ name_key (i18n) │ +│ description_key │ │ icon │ +│ image │ │ max_level │ +│ url │ │ category │ +│ github_url │ └────────┬─────────┘ +│ date_completed │ │ +│ is_featured │ │ +└────────┬─────────┘ │ + │ │ + │ ┌───────────────────┴───────────────────┐ + │ │ skill_project │ + │ ├───────────────────────────────────────┤ + └────┤ skill_id │ + │ project_id │ + │ level_before │ + │ level_after │ + └───────────────────────────────────────┘ + +┌──────────────────┐ ┌──────────────────┐ +│ testimonials │ │ narrator_texts │ +├──────────────────┤ ├──────────────────┤ +│ id │ │ id │ +│ name │ │ context │ +│ role │ │ text_key (i18n) │ +│ company │ │ variant │ +│ avatar │ └──────────────────┘ +│ text_key (i18n) │ +│ personality │ ┌──────────────────┐ +│ project_id (FK) │ │ easter_eggs │ +└──────────────────┘ ├──────────────────┤ + │ id │ +┌──────────────────┐ │ location │ +│ translations │ │ trigger_type │ +├──────────────────┤ │ reward_type │ +│ id │ │ reward_key (i18n)│ +│ lang (fr/en) │ └──────────────────┘ +│ key_name │ +│ value │ ┌──────────────────┐ +└──────────────────┘ │ user_progress │ + ├──────────────────┤ + │ id │ + │ session_id │ + │ email (nullable) │ + │ progress_json │ + │ last_visited │ + └──────────────────┘ +``` + +### Tables Détaillées + +#### Table `translations` (i18n) + +```sql +CREATE TABLE translations ( + id INT AUTO_INCREMENT PRIMARY KEY, + lang VARCHAR(5) NOT NULL, -- 'fr', 'en' + key_name VARCHAR(255) NOT NULL, -- 'hero.title', 'nav.projects' + value TEXT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + UNIQUE KEY unique_translation (lang, key_name), + INDEX idx_lang (lang) +); +``` + +#### Table `projects` + +```sql +CREATE TABLE projects ( + id INT AUTO_INCREMENT PRIMARY KEY, + slug VARCHAR(100) NOT NULL UNIQUE, + title_key VARCHAR(255) NOT NULL, -- Clé i18n + description_key VARCHAR(255) NOT NULL, -- Clé i18n + short_description_key VARCHAR(255), -- Clé i18n (teaser) + image VARCHAR(255), + url VARCHAR(255), + github_url VARCHAR(255), + date_completed DATE, + is_featured BOOLEAN DEFAULT FALSE, + display_order INT DEFAULT 0, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); +``` + +#### Table `skills` + +```sql +CREATE TABLE skills ( + id INT AUTO_INCREMENT PRIMARY KEY, + slug VARCHAR(100) NOT NULL UNIQUE, + name_key VARCHAR(255) NOT NULL, -- Clé i18n + description_key VARCHAR(255), -- Clé i18n + icon VARCHAR(100), -- Nom icône ou chemin SVG + category ENUM('frontend', 'backend', 'tools', 'soft') NOT NULL, + max_level INT DEFAULT 5, + display_order INT DEFAULT 0 +); +``` + +#### Table `skill_project` (liaison + progression) + +```sql +CREATE TABLE skill_project ( + id INT AUTO_INCREMENT PRIMARY KEY, + skill_id INT NOT NULL, + project_id INT NOT NULL, + level_before INT DEFAULT 0, + level_after INT NOT NULL, + level_description_key VARCHAR(255), -- Clé i18n + FOREIGN KEY (skill_id) REFERENCES skills(id) ON DELETE CASCADE, + FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE, + UNIQUE KEY unique_skill_project (skill_id, project_id) +); +``` + +#### Table `testimonials` + +```sql +CREATE TABLE testimonials ( + id INT AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(100) NOT NULL, + role VARCHAR(100), + company VARCHAR(100), + avatar VARCHAR(255), + text_key VARCHAR(255) NOT NULL, -- Clé i18n + personality ENUM('sage', 'sarcastique', 'enthousiaste', 'professionnel') DEFAULT 'professionnel', + project_id INT, + display_order INT DEFAULT 0, + is_active BOOLEAN DEFAULT TRUE, + FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE SET NULL +); +``` + +#### Table `narrator_texts` + +```sql +CREATE TABLE narrator_texts ( + id INT AUTO_INCREMENT PRIMARY KEY, + context VARCHAR(100) NOT NULL, -- 'intro', 'transition_projects', 'hint' + text_key VARCHAR(255) NOT NULL, -- Clé i18n + variant INT DEFAULT 1, -- Pour textes aléatoires + INDEX idx_context (context) +); +``` + +#### Table `easter_eggs` + +```sql +CREATE TABLE easter_eggs ( + id INT AUTO_INCREMENT PRIMARY KEY, + slug VARCHAR(100) NOT NULL UNIQUE, + location VARCHAR(100) NOT NULL, -- 'header-logo', 'footer-secret' + trigger_type ENUM('click', 'hover', 'konami', 'scroll') NOT NULL, + reward_type ENUM('snippet', 'anecdote', 'image', 'badge') NOT NULL, + reward_key VARCHAR(255) NOT NULL, -- Clé i18n ou chemin fichier + difficulty ENUM('easy', 'medium', 'hard') DEFAULT 'medium', + is_active BOOLEAN DEFAULT TRUE +); +``` + +#### Table `user_progress` + +```sql +CREATE TABLE user_progress ( + id INT AUTO_INCREMENT PRIMARY KEY, + session_id VARCHAR(100) NOT NULL UNIQUE, + email VARCHAR(255), -- Optionnel pour sauvegarde cloud + progress_json JSON NOT NULL, -- État complet de la progression + current_path VARCHAR(50), -- Chemin narratif choisi + completion_percent INT DEFAULT 0, + easter_eggs_found JSON, -- Liste des IDs trouvés + last_visited TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + reminder_sent BOOLEAN DEFAULT FALSE, + INDEX idx_email (email) +); +``` + +### Helper PHP i18n + +```php + BDD + $cacheFile = __DIR__ . "/../cache/translations_{$lang}.php"; + + if (file_exists($cacheFile) && filemtime($cacheFile) > time() - 3600) { + return include $cacheFile; + } + + // Charger depuis MariaDB + $pdo = getDbConnection(); + $stmt = $pdo->prepare("SELECT key_name, value FROM translations WHERE lang = ?"); + $stmt->execute([$lang]); + + $translations = []; + while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { + $translations[$row['key_name']] = $row['value']; + } + + // Sauvegarder en cache + file_put_contents($cacheFile, 'header('X-API-Key'); + + if (!$apiKey || $apiKey !== config('app.api_key')) { + return response()->json([ + 'error' => [ + 'code' => 'INVALID_API_KEY', + 'message' => 'Invalid or missing API key', + ] + ], 401); + } + + return $next($request); + } +} +``` + +### Configuration CORS Laravel + +```php + ['api/*'], + 'allowed_methods' => ['*'], + 'allowed_origins' => explode(',', env('CORS_ALLOWED_ORIGINS', 'http://localhost:3000')), + 'allowed_origins_patterns' => [], + 'allowed_headers' => ['*'], + 'exposed_headers' => [], + 'max_age' => 0, + 'supports_credentials' => false, +]; +``` + +### Variables d'environnement + +**frontend/.env.example:** +```env +# API Configuration +NUXT_PUBLIC_API_URL=http://localhost:8000/api +NUXT_PUBLIC_API_KEY=your-api-key-here + +# Site URL (for sitemap, SEO) +NUXT_PUBLIC_SITE_URL=http://localhost:3000 +``` + +**api/.env.example:** +```env +APP_NAME=Skycel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost:8000 + +# Database +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=skycel +DB_USERNAME=root +DB_PASSWORD= + +# API Security +API_KEY=your-api-key-here + +# CORS +CORS_ALLOWED_ORIGINS=http://localhost:3000 +``` + +### Project Structure Notes + +- **Nuxt 4** utilise la nouvelle structure `app/` (pas `src/`) +- Les composants dans `app/components/` sont auto-importés +- Les composables dans `app/composables/` sont auto-importés +- Les stores Pinia dans `app/stores/` sont accessibles via auto-import +- Composants client-only: utiliser le suffixe `.client.vue` (pas de SSR) + +### References + +- [Source: docs/planning-artifacts/architecture.md#Starter-Template-Evaluation] +- [Source: docs/planning-artifacts/architecture.md#Structure-Monorepo] +- [Source: docs/planning-artifacts/architecture.md#Authentication-&-Security] +- [Source: docs/planning-artifacts/ux-design-specification.md#Color-System] +- [Source: docs/planning-artifacts/ux-design-specification.md#Typography-System] +- [Source: docs/planning-artifacts/epics.md#Story-1.1] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Nuxt version | 4.x (latest) | Architecture | +| Laravel version | 12.x | Architecture | +| Node.js | 18+ | Nuxt 4 requirement | +| PHP | 8.2+ | Laravel 12 requirement | +| TypeScript | Enabled | Architecture | +| SSR | Enabled | Architecture, NFR5 | + +### Libraries to Install + +**Frontend (npm):** +| Package | Version | Purpose | +|---------|---------|---------| +| @nuxtjs/i18n | 8.x | Internationalisation | +| @nuxtjs/tailwindcss | 6.x | Styling | +| @pinia/nuxt | 0.5.x | State management | +| @nuxt/image | 1.x | Image optimization | +| @nuxtjs/sitemap | 5.x | SEO sitemap | +| pinia-plugin-persistedstate | 3.x | LocalStorage persistence | + +**Backend (composer):** +- Aucun package supplémentaire pour cette story (Laravel de base suffit) + +## Dev Agent Record + +### Agent Model Used + +Claude Opus 4.5 (claude-opus-4-5-20251101) + +### Debug Log References + +- TailwindCSS: Le module `@nuxtjs/tailwindcss` v6.14 provoquait une erreur PostCSS `Cannot use 'import.meta' outside a module` sur Node.js 18. Résolu en remplaçant le module par une configuration PostCSS directe dans `nuxt.config.ts`. +- PHP: Le PHP en PATH (8.0.3) est incompatible avec Laravel 12. Utilisation de PHP 8.2.29 disponible dans Laragon pour la création du projet et l'exécution. +- pinia-plugin-persistedstate: La v4 requiert pinia 3+, incompatible avec @pinia/nuxt 0.9.0 (pinia 2). Downgrade vers v3.2. + +### Completion Notes List + +- Structure monorepo `frontend/` + `api/` créée et fonctionnelle +- Nuxt 4 (3.17.5) configuré avec SSR, TypeScript, i18n, Pinia, @nuxt/image, sitemap +- TailwindCSS v3 configuré via PostCSS avec design tokens (sky-dark, sky-accent, sky-text) +- Polices Merriweather (narrative) et Inter (UI) importées via Google Fonts +- Laravel 12.50 installé en mode API-only avec CORS et middleware VerifyApiKey +- Middleware API Key vérifié : 401 sans clé, 200 avec clé valide +- Fichiers .env.example créés pour frontend et backend + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-03 | Story créée avec contexte complet | SM Agent | +| 2026-02-05 | Implémentation complète de toutes les tâches (Tasks 1-7) | Dev Agent (Claude Opus 4.5) | + +### File List + +**Nouveaux fichiers :** +- `README.md` - Documentation racine du monorepo +- `.gitignore` - Gitignore global +- `frontend/package.json` - Dependencies Nuxt 4 +- `frontend/nuxt.config.ts` - Configuration Nuxt 4 avec SSR, modules, PostCSS +- `frontend/tsconfig.json` - Config TypeScript +- `frontend/tailwind.config.js` - Design tokens TailwindCSS +- `frontend/app/app.vue` - Composant racine Vue +- `frontend/app/pages/index.vue` - Page d'accueil placeholder +- `frontend/app/assets/css/main.css` - CSS global avec import polices +- `frontend/.env.example` - Variables d'environnement frontend +- `api/` - Projet Laravel 12 complet (via composer create-project) +- `api/app/Http/Middleware/VerifyApiKey.php` - Middleware authentification API Key +- `api/config/cors.php` - Configuration CORS +- `api/routes/api.php` - Routes API avec endpoint /health + +**Fichiers modifiés :** +- `api/bootstrap/app.php` - Routing API-only, enregistrement middleware VerifyApiKey +- `api/config/app.php` - Ajout config api_key +- `api/.env.example` - Ajout APP_NAME=Skycel, DB config MySQL, API_KEY, CORS_ALLOWED_ORIGINS +- `api/.env` - Mêmes ajouts que .env.example avec valeurs dev +- `api/routes/web.php` - Vidé (mode API-only) diff --git a/docs/implementation-artifacts/1-2-base-donnees-migrations-initiales.md b/docs/implementation-artifacts/1-2-base-donnees-migrations-initiales.md new file mode 100644 index 0000000..d33ecd0 --- /dev/null +++ b/docs/implementation-artifacts/1-2-base-donnees-migrations-initiales.md @@ -0,0 +1,274 @@ +# Story 1.2: Base de données et migrations initiales + +Status: ready-for-dev + +## Story + +As a développeur, +I want le schéma de base de données MariaDB avec les tables nécessaires à l'Epic 1, +so that l'API peut servir du contenu bilingue. + +## Acceptance Criteria + +1. **Given** une connexion MariaDB configurée dans Laravel **When** `php artisan migrate` est exécuté **Then** la table `translations` est créée (id, lang, key_name, value, timestamps) avec index unique (lang, key_name) +2. **And** la table `projects` est créée (id, slug, title_key, description_key, short_description_key, image, url, github_url, date_completed, is_featured, display_order, timestamps) +3. **And** la table `skills` est créée (id, slug, name_key, description_key, icon, category, max_level, display_order) +4. **And** la table `skill_project` est créée (id, skill_id, project_id, level_before, level_after, level_description_key) avec foreign keys +5. **And** les Models Eloquent sont définis avec leurs relations (Project belongsToMany Skill, etc.) +6. **And** des Seeders de base sont disponibles avec données de test en FR et EN +7. **And** `php artisan db:seed` fonctionne correctement + +## Tasks / Subtasks + +- [ ] **Task 1: Configuration connexion MariaDB** (AC: #1) + - [ ] Vérifier que MariaDB est installé et accessible + - [ ] Créer la base de données `skycel` si elle n'existe pas + - [ ] Configurer `api/.env` avec les variables DB_* correctes + - [ ] Tester la connexion avec `php artisan db:show` + +- [ ] **Task 2: Migration table translations** (AC: #1) + - [ ] Créer migration `create_translations_table` + - [ ] Colonnes: id, lang (VARCHAR 5), key_name (VARCHAR 255), value (TEXT), timestamps + - [ ] Index unique composite sur (lang, key_name) + - [ ] Index simple sur lang pour les requêtes par langue + +- [ ] **Task 3: Migration table projects** (AC: #2) + - [ ] Créer migration `create_projects_table` + - [ ] Colonnes: id, slug (unique), title_key, description_key, short_description_key, image, url (nullable), github_url (nullable), date_completed (date), is_featured (boolean, default false), display_order (integer, default 0), timestamps + - [ ] Index sur slug (unique) + - [ ] Index sur display_order pour le tri + +- [ ] **Task 4: Migration table skills** (AC: #3) + - [ ] Créer migration `create_skills_table` + - [ ] Colonnes: id, slug (unique), name_key, description_key, icon (nullable), category (enum ou string: Frontend, Backend, Tools, Soft skills), max_level (integer, default 5), display_order (integer, default 0), timestamps + - [ ] Index sur slug (unique) + - [ ] Index sur category pour le filtrage + +- [ ] **Task 5: Migration table pivot skill_project** (AC: #4) + - [ ] Créer migration `create_skill_project_table` + - [ ] Colonnes: id, skill_id (FK), project_id (FK), level_before (integer), level_after (integer), level_description_key (nullable), timestamps + - [ ] Foreign key skill_id → skills.id avec ON DELETE CASCADE + - [ ] Foreign key project_id → projects.id avec ON DELETE CASCADE + - [ ] Index composite sur (skill_id, project_id) pour éviter les doublons + +- [ ] **Task 6: Model Translation** (AC: #5) + - [ ] Créer `app/Models/Translation.php` + - [ ] Propriétés fillable: lang, key_name, value + - [ ] Scope `scopeForLang($query, $lang)` pour filtrer par langue + - [ ] Méthode statique `getTranslation($key, $lang, $fallback = 'fr')` + +- [ ] **Task 7: Model Project avec relations** (AC: #5) + - [ ] Créer `app/Models/Project.php` + - [ ] Propriétés fillable: slug, title_key, description_key, short_description_key, image, url, github_url, date_completed, is_featured, display_order + - [ ] Casts: date_completed → date, is_featured → boolean + - [ ] Relation `skills()`: belongsToMany(Skill::class)->withPivot(['level_before', 'level_after', 'level_description_key'])->withTimestamps() + - [ ] Scope `scopeFeatured($query)` pour les projets mis en avant + - [ ] Scope `scopeOrdered($query)` pour le tri par display_order + +- [ ] **Task 8: Model Skill avec relations** (AC: #5) + - [ ] Créer `app/Models/Skill.php` + - [ ] Propriétés fillable: slug, name_key, description_key, icon, category, max_level, display_order + - [ ] Relation `projects()`: belongsToMany(Project::class)->withPivot(['level_before', 'level_after', 'level_description_key'])->withTimestamps() + - [ ] Scope `scopeByCategory($query, $category)` pour filtrer par catégorie + - [ ] Scope `scopeOrdered($query)` pour le tri par display_order + +- [ ] **Task 9: Seeders de base** (AC: #6, #7) + - [ ] Créer `database/seeders/TranslationSeeder.php` avec traductions FR et EN de test + - [ ] Créer `database/seeders/SkillSeeder.php` avec 8-10 compétences de test (Frontend, Backend, Tools) + - [ ] Créer `database/seeders/ProjectSeeder.php` avec 3-4 projets de test + - [ ] Créer `database/seeders/SkillProjectSeeder.php` pour lier compétences et projets + - [ ] Mettre à jour `DatabaseSeeder.php` pour appeler les seeders dans l'ordre correct (translations → skills → projects → skill_project) + +- [ ] **Task 10: Validation finale** (AC: tous) + - [ ] `php artisan migrate:fresh` fonctionne sans erreur + - [ ] `php artisan db:seed` fonctionne sans erreur + - [ ] Vérifier en BDD que les tables sont créées avec les bons schémas + - [ ] Vérifier que les relations fonctionnent: `Project::first()->skills` et `Skill::first()->projects` + - [ ] Vérifier que les traductions fonctionnent: `Translation::getTranslation('project.skycel.title', 'fr')` + +## Dev Notes + +### Schéma de base de données + +``` +┌──────────────────────────────────────────────────────────────────────────┐ +│ translations │ +├──────────────────────────────────────────────────────────────────────────┤ +│ id (PK) │ lang │ key_name │ value │ created_at │ updated_at │ +│ │ VARCHAR(5) │ VARCHAR(255) │ TEXT │ │ +│ │ UNIQUE(lang, key_name) │ +└──────────────────────────────────────────────────────────────────────────┘ + +┌──────────────────────────────────────────────────────────────────────────┐ +│ projects │ +├──────────────────────────────────────────────────────────────────────────┤ +│ id │ slug │ title_key │ description_key │ short_description_key │ image │ +│ │ url │ github_url │ date_completed │ is_featured │ display_order │ +│ │ created_at │ updated_at │ +└──────────────────────────────────────────────────────────────────────────┘ + │ + │ belongsToMany + ▼ +┌──────────────────────────────────────────────────────────────────────────┐ +│ skill_project │ +├──────────────────────────────────────────────────────────────────────────┤ +│ id │ skill_id (FK) │ project_id (FK) │ level_before │ level_after │ +│ │ level_description_key │ created_at │ updated_at │ +└──────────────────────────────────────────────────────────────────────────┘ + ▲ + │ belongsToMany + │ +┌──────────────────────────────────────────────────────────────────────────┐ +│ skills │ +├──────────────────────────────────────────────────────────────────────────┤ +│ id │ slug │ name_key │ description_key │ icon │ category │ max_level │ +│ │ display_order │ created_at │ updated_at │ +└──────────────────────────────────────────────────────────────────────────┘ +``` + +### Convention de nommage des clés i18n + +Les colonnes `*_key` contiennent des clés de traduction, pas des valeurs directes. + +**Format des clés :** `{table}.{slug}.{champ}` + +Exemples : +- `project.skycel.title` → "Skycel Portfolio" +- `project.skycel.description` → "Mon portfolio gamifié..." +- `skill.vuejs.name` → "Vue.js" +- `skill.vuejs.description` → "Framework JavaScript progressif" + +### Données de test recommandées + +**Skills de test :** +| Category | Skills | +|----------|--------| +| Frontend | Vue.js, Nuxt, TypeScript, TailwindCSS | +| Backend | Laravel, PHP, Node.js | +| Tools | Git, Docker | +| Soft skills | Communication | + +**Projets de test :** +1. Skycel Portfolio (ce projet) +2. Projet fictif e-commerce +3. Projet fictif dashboard + +### Migration SQL de référence (table translations) + +```sql +-- Extrait de l'architecture pour référence +CREATE TABLE translations ( + id INT AUTO_INCREMENT PRIMARY KEY, + lang VARCHAR(5) NOT NULL, + key_name VARCHAR(255) NOT NULL, + value TEXT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + UNIQUE KEY unique_translation (lang, key_name), + INDEX idx_lang (lang) +); +``` + +### Commandes Laravel utiles + +```bash +# Créer les migrations +php artisan make:migration create_translations_table +php artisan make:migration create_projects_table +php artisan make:migration create_skills_table +php artisan make:migration create_skill_project_table + +# Créer les models +php artisan make:model Translation +php artisan make:model Project +php artisan make:model Skill + +# Créer les seeders +php artisan make:seeder TranslationSeeder +php artisan make:seeder SkillSeeder +php artisan make:seeder ProjectSeeder +php artisan make:seeder SkillProjectSeeder + +# Exécuter +php artisan migrate:fresh --seed +``` + +### Dépendances avec Story 1.1 + +Cette story DÉPEND de : +- Structure `api/` créée (Laravel 12 initialisé) +- Fichier `api/.env` avec variables DB_* configurées + +Cette story PRÉPARE pour : +- Story 1.3 (i18n) : La table `translations` sera utilisée pour le contenu dynamique +- Story 2.x (Projets, Compétences) : Les models et tables seront consommés par les endpoints API + +### Project Structure Notes + +**Fichiers à créer dans `api/` :** +``` +api/ +├── app/Models/ +│ ├── Translation.php # CRÉER +│ ├── Project.php # CRÉER +│ └── Skill.php # CRÉER +├── database/ +│ ├── migrations/ +│ │ ├── 2026_02_03_000001_create_translations_table.php # CRÉER +│ │ ├── 2026_02_03_000002_create_projects_table.php # CRÉER +│ │ ├── 2026_02_03_000003_create_skills_table.php # CRÉER +│ │ └── 2026_02_03_000004_create_skill_project_table.php # CRÉER +│ └── seeders/ +│ ├── DatabaseSeeder.php # MODIFIER +│ ├── TranslationSeeder.php # CRÉER +│ ├── SkillSeeder.php # CRÉER +│ ├── ProjectSeeder.php # CRÉER +│ └── SkillProjectSeeder.php # CRÉER +``` + +### References + +- [Source: docs/planning-artifacts/architecture.md#Data-Architecture] +- [Source: docs/planning-artifacts/architecture.md#Stratégie-i18n] +- [Source: docs/planning-artifacts/epics.md#Story-1.2] +- [Source: docs/brainstorming-gamification-2026-01-26.md#Schema-BDD] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Database | MariaDB | Architecture | +| ORM | Eloquent | Architecture | +| PHP | 8.2+ | Laravel 12 | +| Charset | utf8mb4 | Laravel default | +| Collation | utf8mb4_unicode_ci | Laravel default | + +### Previous Story Intelligence (Story 1.1) + +**Learnings from Story 1.1:** +- Structure monorepo avec `frontend/` et `api/` +- Laravel 12 configuré en mode API-only +- Fichier `.env.example` créé avec variables DB_* +- Middleware VerifyApiKey en place + +**Files created in Story 1.1:** +- `api/.env.example` avec configuration DB de base +- Structure Laravel standard dans `api/` + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-03 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/1-3-systeme-i18n-frontend-api-bilingue.md b/docs/implementation-artifacts/1-3-systeme-i18n-frontend-api-bilingue.md new file mode 100644 index 0000000..4d87712 --- /dev/null +++ b/docs/implementation-artifacts/1-3-systeme-i18n-frontend-api-bilingue.md @@ -0,0 +1,474 @@ +# Story 1.3: Système i18n frontend + API bilingue + +Status: ready-for-dev + +## Story + +As a visiteur, +I want voir le site dans ma langue (FR ou EN), +so that je comprends le contenu. + +## Acceptance Criteria + +1. **Given** le module `@nuxtjs/i18n` configuré avec stratégie `prefix_except_default` **When** le visiteur accède à `/` ou `/en` **Then** le contenu statique UI est affiché dans la langue correspondante via fichiers JSON (`i18n/fr.json`, `i18n/en.json`) +2. **And** les URLs FR sont par défaut (`/`, `/projets`, `/competences`, `/contact`) +3. **And** les URLs EN sont préfixées (`/en`, `/en/projects`, `/en/skills`, `/en/contact`) +4. **And** `useI18n()`, `$t()`, `localePath()`, `switchLocalePath()` fonctionnent en SSR +5. **And** les tags `hreflang` sont générés automatiquement dans le `` +6. **And** l'attribut `lang` du `` est dynamique (fr/en) +7. **And** le middleware Laravel extrait `Accept-Language` et joint la table `translations` pour le contenu dynamique +8. **And** les API Resources Laravel renvoient le contenu traduit selon la langue demandée +9. **And** le fallback est FR si langue non supportée + +## Tasks / Subtasks + +- [ ] **Task 1: Configuration @nuxtjs/i18n** (AC: #1, #2, #3, #4) + - [ ] Vérifier que `@nuxtjs/i18n` est installé (Story 1.1) + - [ ] Créer la structure `frontend/i18n/` pour les fichiers de traduction + - [ ] Configurer `nuxt.config.ts` avec i18n complet : + - locales: ['fr', 'en'] + - defaultLocale: 'fr' + - strategy: 'prefix_except_default' + - detectBrowserLanguage: false (on utilise l'URL) + - [ ] Activer `vueI18n` pour le composant `` + +- [ ] **Task 2: Fichiers de traduction JSON** (AC: #1) + - [ ] Créer `frontend/i18n/fr.json` avec structure de base + - [ ] Créer `frontend/i18n/en.json` avec structure de base + - [ ] Inclure les traductions pour : + - Navigation (Accueil, Projets, Compétences, Témoignages, Parcours, Contact) + - Boutons communs (Continuer, Retour, Découvrir, Fermer) + - Messages d'erreur (404, erreur générique) + - Landing page (accroche, CTA Aventure, CTA Express) + - Footer et metadata + +- [ ] **Task 3: Routes localisées Nuxt** (AC: #2, #3) + - [ ] Configurer `i18n.pages` dans nuxt.config.ts pour les routes custom : + ``` + pages: { + 'projets/[slug]': { en: '/projects/[slug]' }, + 'competences': { en: '/skills' }, + 'temoignages': { en: '/testimonials' }, + 'parcours': { en: '/journey' }, + 'contact': { en: '/contact' } + } + ``` + - [ ] Vérifier que les routes FR fonctionnent sans préfixe + - [ ] Vérifier que les routes EN fonctionnent avec préfixe `/en` + +- [ ] **Task 4: Helpers i18n et composables** (AC: #4) + - [ ] Créer un composable `frontend/app/composables/useLocale.ts` pour centraliser la logique i18n + - [ ] Exposer : `currentLocale`, `switchLocale()`, `localizedPath()` + - [ ] Tester `useI18n()` dans un composant + - [ ] Tester `$t('key')` dans un template + - [ ] Tester `localePath('/projets')` pour les liens + - [ ] Tester `switchLocalePath('en')` pour le switcher de langue + +- [ ] **Task 5: SEO et balises hreflang** (AC: #5, #6) + - [ ] Configurer `i18n.head` dans nuxt.config.ts pour les balises SEO + - [ ] Vérifier que `` ou `` est dynamique + - [ ] Vérifier les balises `` + - [ ] Vérifier les balises `` + - [ ] Vérifier `` + +- [ ] **Task 6: Composant LanguageSwitcher** (AC: #4) + - [ ] Créer `frontend/app/components/ui/LanguageSwitcher.vue` + - [ ] Afficher les langues disponibles (FR / EN) + - [ ] Utiliser `switchLocalePath()` pour la navigation + - [ ] Highlight de la langue active + - [ ] Accessible au clavier (boutons ou liens) + - [ ] Style cohérent avec le design system (sky-accent pour actif) + +- [ ] **Task 7: Middleware Laravel SetLocale** (AC: #7, #9) + - [ ] Créer `api/app/Http/Middleware/SetLocale.php` + - [ ] Extraire la langue depuis le header `Accept-Language` + - [ ] Parser le header (ex: `fr-FR,fr;q=0.9,en;q=0.8` → `fr`) + - [ ] Valider que la langue est supportée (fr, en) + - [ ] Fallback vers `fr` si langue non supportée + - [ ] Stocker la langue dans `app()->setLocale($lang)` + - [ ] Passer la langue via `$request->attributes->set('lang', $lang)` + - [ ] Enregistrer le middleware dans `bootstrap/app.php` pour les routes API + +- [ ] **Task 8: Trait HasTranslations pour les Models** (AC: #8) + - [ ] Créer `api/app/Traits/HasTranslations.php` + - [ ] Méthode `getTranslated($keyField, $lang = null)` qui : + - Récupère la clé depuis le champ (ex: `$this->title_key`) + - Joint la table `translations` pour obtenir la valeur + - Utilise la langue du request ou le fallback + - [ ] Appliquer le trait aux models : Project, Skill + - [ ] Tester : `$project->getTranslated('title_key', 'fr')` + +- [ ] **Task 9: API Resources avec traductions** (AC: #8) + - [ ] Créer `api/app/Http/Resources/ProjectResource.php` + - [ ] Transformer les champs `*_key` en valeurs traduites : + ```php + 'title' => $this->getTranslated('title_key'), + 'description' => $this->getTranslated('description_key'), + ``` + - [ ] Créer `api/app/Http/Resources/SkillResource.php` de même + - [ ] Inclure `meta.lang` dans les réponses pour debug/vérification + +- [ ] **Task 10: Endpoints API avec traductions** (AC: #7, #8) + - [ ] Créer `api/app/Http/Controllers/Api/ProjectController.php` + - [ ] Endpoint `GET /api/projects` retournant la liste traduite + - [ ] Endpoint `GET /api/projects/{slug}` retournant le détail traduit + - [ ] Créer `api/app/Http/Controllers/Api/SkillController.php` + - [ ] Endpoint `GET /api/skills` retournant la liste traduite par catégorie + - [ ] Enregistrer les routes dans `routes/api.php` + +- [ ] **Task 11: Intégration frontend-backend** (AC: tous) + - [ ] Créer composable `frontend/app/composables/useApi.ts` qui : + - Utilise `$fetch` ou `useFetch` de Nuxt + - Ajoute automatiquement le header `X-API-Key` + - Ajoute automatiquement le header `Accept-Language` selon la locale courante + - [ ] Tester un appel API depuis une page Nuxt + - [ ] Vérifier que le contenu retourné est dans la bonne langue + +- [ ] **Task 12: Validation finale** (AC: tous) + - [ ] Accéder à `/` → contenu FR + - [ ] Accéder à `/en` → contenu EN + - [ ] Cliquer sur le switcher FR → EN → URL change vers `/en` + - [ ] API call avec `Accept-Language: en` → réponse en anglais + - [ ] API call avec `Accept-Language: de` → fallback FR + - [ ] Vérifier les balises hreflang dans le code source HTML + - [ ] Vérifier `` dynamique + +## Dev Notes + +### Architecture i18n Hybride + +``` +┌────────────────────────────────────────────────────────────────────────────┐ +│ FRONTEND (Nuxt 4) │ +├────────────────────────────────────────────────────────────────────────────┤ +│ Contenu statique UI → Fichiers JSON (i18n/fr.json, i18n/en.json) │ +│ - Labels, boutons, navigation, messages d'erreur │ +│ - Déployé avec le frontend │ +│ - Accès via $t('key') ou useI18n() │ +└────────────────────────────────────────────────────────────────────────────┘ + │ + │ API calls avec Accept-Language header + ▼ +┌────────────────────────────────────────────────────────────────────────────┐ +│ BACKEND (Laravel 12) │ +├────────────────────────────────────────────────────────────────────────────┤ +│ Contenu dynamique → Table translations (MariaDB) │ +│ - Titres, descriptions projets/skills │ +│ - Textes narrateur, dialogues PNJ │ +│ - Géré via API/BDD │ +│ - Accès via HasTranslations trait + API Resources │ +└────────────────────────────────────────────────────────────────────────────┘ +``` + +### Configuration nuxt.config.ts complète pour i18n + +```typescript +// frontend/nuxt.config.ts +export default defineNuxtConfig({ + modules: [ + '@nuxtjs/i18n', + // ... autres modules + ], + + i18n: { + locales: [ + { code: 'fr', iso: 'fr-FR', file: 'fr.json', name: 'Français' }, + { code: 'en', iso: 'en-US', file: 'en.json', name: 'English' }, + ], + defaultLocale: 'fr', + strategy: 'prefix_except_default', + lazy: true, + langDir: 'i18n/', + detectBrowserLanguage: false, // On utilise l'URL uniquement + + // Routes personnalisées + pages: { + 'projets/index': { en: '/projects' }, + 'projets/[slug]': { en: '/projects/[slug]' }, + 'competences': { en: '/skills' }, + 'temoignages': { en: '/testimonials' }, + 'parcours': { en: '/journey' }, + 'contact': { en: '/contact' }, + 'resume': { en: '/resume' }, + }, + + // SEO + baseUrl: process.env.NUXT_PUBLIC_SITE_URL || 'https://skycel.fr', + }, +}) +``` + +### Structure des fichiers de traduction + +```json +// frontend/i18n/fr.json +{ + "nav": { + "home": "Accueil", + "projects": "Projets", + "skills": "Compétences", + "testimonials": "Témoignages", + "journey": "Parcours", + "contact": "Contact" + }, + "common": { + "continue": "Continuer", + "back": "Retour", + "discover": "Découvrir", + "close": "Fermer", + "loading": "Chargement..." + }, + "landing": { + "title": "Bienvenue dans mon univers", + "subtitle": "Développeur Full-Stack", + "cta_adventure": "Partir à l'aventure", + "cta_express": "Mode express" + }, + "error": { + "404": "Page non trouvée", + "generic": "Une erreur est survenue" + }, + "meta": { + "title": "Skycel - Portfolio de Célian", + "description": "Découvrez mon portfolio interactif et gamifié" + } +} +``` + +### Middleware Laravel SetLocale + +```php +parseAcceptLanguage($request->header('Accept-Language')); + + app()->setLocale($locale); + $request->attributes->set('locale', $locale); + + return $next($request); + } + + protected function parseAcceptLanguage(?string $header): string + { + if (!$header) { + return $this->fallbackLocale; + } + + // Parse "fr-FR,fr;q=0.9,en;q=0.8" → ['fr', 'en'] + $locales = []; + foreach (explode(',', $header) as $part) { + $part = trim($part); + if (preg_match('/^([a-z]{2})(?:-[A-Z]{2})?(?:;q=([0-9.]+))?$/i', $part, $matches)) { + $lang = strtolower($matches[1]); + $quality = isset($matches[2]) ? (float)$matches[2] : 1.0; + $locales[$lang] = $quality; + } + } + + arsort($locales); + + foreach (array_keys($locales) as $lang) { + if (in_array($lang, $this->supportedLocales)) { + return $lang; + } + } + + return $this->fallbackLocale; + } +} +``` + +### Trait HasTranslations + +```php +attributes->get('locale', 'fr'); + $key = $this->{$keyField}; + + if (!$key) { + return null; + } + + return Translation::getTranslation($key, $lang); + } +} +``` + +### API Resource avec traductions + +```php + $this->id, + 'slug' => $this->slug, + 'title' => $this->getTranslated('title_key'), + 'description' => $this->getTranslated('description_key'), + 'short_description' => $this->getTranslated('short_description_key'), + 'image' => $this->image, + 'url' => $this->url, + 'github_url' => $this->github_url, + 'date_completed' => $this->date_completed?->format('Y-m-d'), + 'is_featured' => $this->is_featured, + 'skills' => SkillResource::collection($this->whenLoaded('skills')), + ]; + } +} +``` + +### Composable useApi + +```typescript +// frontend/app/composables/useApi.ts +export const useApi = () => { + const config = useRuntimeConfig() + const { locale } = useI18n() + + const apiFetch = async (endpoint: string, options: any = {}) => { + return await $fetch(`${config.public.apiUrl}${endpoint}`, { + ...options, + headers: { + 'X-API-Key': config.public.apiKey, + 'Accept-Language': locale.value, + 'Content-Type': 'application/json', + ...options.headers, + }, + }) + } + + return { apiFetch } +} +``` + +### Dépendances avec Stories précédentes + +**Cette story DÉPEND de :** +- Story 1.1 : Module @nuxtjs/i18n installé +- Story 1.2 : Table `translations` créée, Models Project et Skill avec relations + +**Cette story PRÉPARE pour :** +- Story 1.4 : Layouts utiliseront $t() pour les labels +- Story 1.5 : Landing page avec contenu bilingue +- Story 2.x : Tous les contenus projets/skills seront traduits + +### Project Structure Notes + +**Fichiers à créer dans `frontend/` :** +``` +frontend/ +├── i18n/ +│ ├── fr.json # CRÉER +│ └── en.json # CRÉER +├── app/ +│ ├── components/ +│ │ └── ui/ +│ │ └── LanguageSwitcher.vue # CRÉER +│ └── composables/ +│ ├── useLocale.ts # CRÉER +│ └── useApi.ts # CRÉER +└── nuxt.config.ts # MODIFIER (i18n config) +``` + +**Fichiers à créer dans `api/` :** +``` +api/ +├── app/ +│ ├── Http/ +│ │ ├── Controllers/ +│ │ │ └── Api/ +│ │ │ ├── ProjectController.php # CRÉER +│ │ │ └── SkillController.php # CRÉER +│ │ ├── Middleware/ +│ │ │ └── SetLocale.php # CRÉER +│ │ └── Resources/ +│ │ ├── ProjectResource.php # CRÉER +│ │ └── SkillResource.php # CRÉER +│ └── Traits/ +│ └── HasTranslations.php # CRÉER +├── bootstrap/ +│ └── app.php # MODIFIER (middleware) +└── routes/ + └── api.php # MODIFIER (routes) +``` + +### References + +- [Source: docs/planning-artifacts/architecture.md#Data-Architecture] +- [Source: docs/planning-artifacts/architecture.md#Stratégie-i18n] +- [Source: docs/planning-artifacts/architecture.md#API-Communication-Patterns] +- [Source: docs/planning-artifacts/epics.md#Story-1.3] +- [Source: docs/prd-gamification.md#NFR7] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| i18n module | @nuxtjs/i18n 8.x | Architecture | +| Strategy | prefix_except_default | Architecture | +| Default locale | fr | PRD | +| Supported locales | fr, en | PRD | +| SSR | Required | NFR5, NFR7 | +| SEO hreflang | Required | NFR5 | + +### Previous Story Intelligence (Story 1.2) + +**Files created in Story 1.2:** +- Table `translations` avec clés i18n +- Models Project, Skill avec colonnes `*_key` +- Seeders avec données FR et EN + +**Pattern established:** +- Convention de nommage des clés : `{table}.{slug}.{field}` +- Ex: `project.skycel.title`, `skill.vuejs.name` + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-03 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/1-4-layouts-routing-transitions-page.md b/docs/implementation-artifacts/1-4-layouts-routing-transitions-page.md new file mode 100644 index 0000000..d2696e0 --- /dev/null +++ b/docs/implementation-artifacts/1-4-layouts-routing-transitions-page.md @@ -0,0 +1,511 @@ +# Story 1.4: Layouts, routing et transitions de page + +Status: ready-for-dev + +## Story + +As a visiteur, +I want une navigation fluide entre les pages avec des transitions immersives, +so that l'expérience ressemble à un changement de zone, pas à un rechargement. + +## Acceptance Criteria + +1. **Given** la structure de pages Nuxt 4 (`app/pages/`) **When** le visiteur navigue entre les pages **Then** les transitions de page sont animées (fade + slide) via `pageTransition` dans `nuxt.config.ts` +2. **And** la navigation utilise `` pour l'hydration SPA (pas de rechargement) +3. **And** le layout par défaut (`default.vue`) inclut le header avec barre de progression (placeholder) et sélecteur de langue +4. **And** un layout `minimal.vue` existe pour le mode express +5. **And** le `scrollBehavior` est personnalisé (smooth scroll, retour position sauvegardée) +6. **And** `prefers-reduced-motion` désactive les animations de transition via media query CSS +7. **And** une page 404 (`error.vue`) bilingue est en place +8. **And** les meta tags SEO dynamiques fonctionnent via `useHead()` et `useSeoMeta()` +9. **And** le favicon est configuré + +## Tasks / Subtasks + +- [ ] **Task 1: Structure des pages Nuxt 4** (AC: #1, #2) + - [ ] Créer la structure `frontend/app/pages/` avec les pages de base : + - `index.vue` (landing page - placeholder) + - `projets/index.vue` (liste projets - placeholder) + - `projets/[slug].vue` (détail projet - placeholder) + - `competences.vue` (skills - placeholder) + - `temoignages.vue` (testimonials - placeholder) + - `parcours.vue` (journey - placeholder) + - `contact.vue` (contact - placeholder) + - `resume.vue` (mode express - placeholder) + - [ ] Vérifier que le routing fonctionne avec les URLs localisées (Story 1.3) + +- [ ] **Task 2: Layout default.vue** (AC: #3) + - [ ] Créer `frontend/app/layouts/default.vue` + - [ ] Inclure le composant `AppHeader` (à créer) + - [ ] Inclure le slot `` pour le contenu de page + - [ ] Inclure le composant `AppFooter` (à créer) + - [ ] Ajouter le wrapper pour les transitions de page + +- [ ] **Task 3: Composant AppHeader** (AC: #3) + - [ ] Créer `frontend/app/components/layout/AppHeader.vue` + - [ ] Navigation principale avec liens localisés (`localePath()`) + - [ ] Placeholder pour la barre de progression (implémentée en Epic 3) + - [ ] Intégrer le `LanguageSwitcher` (Story 1.3) + - [ ] Logo/nom du site cliquable vers accueil + - [ ] Version mobile : hamburger menu ou navigation adaptée + - [ ] Sticky header avec fond semi-transparent sur scroll + +- [ ] **Task 4: Composant AppFooter** (AC: #3) + - [ ] Créer `frontend/app/components/layout/AppFooter.vue` + - [ ] Liens sociaux (GitHub, LinkedIn, etc.) - configurables via runtimeConfig + - [ ] Copyright avec année dynamique + - [ ] Liens secondaires (mentions légales si nécessaire) + - [ ] Style cohérent avec sky-dark / sky-text + +- [ ] **Task 5: Layout minimal.vue** (AC: #4) + - [ ] Créer `frontend/app/layouts/minimal.vue` + - [ ] Header simplifié (logo + retour vers aventure) + - [ ] Pas de barre de progression + - [ ] Footer minimaliste + - [ ] Utilisé pour `/resume` et potentiellement d'autres pages express + +- [ ] **Task 6: Transitions de page** (AC: #1, #6) + - [ ] Configurer `pageTransition` dans `nuxt.config.ts` : + ```typescript + app: { + pageTransition: { name: 'page', mode: 'out-in' } + } + ``` + - [ ] Créer les styles CSS pour la transition `page` dans `assets/css/transitions.css` + - [ ] Animation : fade-in/out + léger slide vertical (effet "changement de zone") + - [ ] Durée : 300-400ms + - [ ] Respecter `prefers-reduced-motion` : transition instantanée si activé + +- [ ] **Task 7: CSS des transitions** (AC: #1, #6) + - [ ] Créer `frontend/app/assets/css/transitions.css` + - [ ] Classes `.page-enter-active`, `.page-leave-active` + - [ ] Classes `.page-enter-from`, `.page-leave-to` + - [ ] Media query `@media (prefers-reduced-motion: reduce)` pour désactiver + - [ ] Importer dans `nuxt.config.ts` via `css: ['~/assets/css/transitions.css']` + +- [ ] **Task 8: Scroll behavior personnalisé** (AC: #5) + - [ ] Créer `frontend/app/router.options.ts` pour personnaliser le router + - [ ] `scrollBehavior` : smooth scroll vers le haut pour nouvelle page + - [ ] Sauvegarder et restaurer la position pour navigation back/forward + - [ ] Gestion des ancres (`#section`) avec smooth scroll + +- [ ] **Task 9: Page d'erreur 404** (AC: #7) + - [ ] Créer `frontend/app/error.vue` + - [ ] Message d'erreur bilingue via `$t('error.404')` + - [ ] Style immersif cohérent avec le thème (le narrateur pourrait commenter) + - [ ] Bouton retour vers l'accueil (`localePath('/')`) + - [ ] Gérer différents codes d'erreur (404, 500, etc.) + +- [ ] **Task 10: Meta tags SEO dynamiques** (AC: #8) + - [ ] Créer composable `frontend/app/composables/useSeo.ts` + - [ ] Méthode `setPageMeta({ title, description, image })` utilisant `useHead()` et `useSeoMeta()` + - [ ] Inclure Open Graph tags (og:title, og:description, og:image, og:url) + - [ ] Inclure Twitter Card tags + - [ ] Utiliser dans chaque page avec des valeurs traduites + +- [ ] **Task 11: Favicon et assets statiques** (AC: #9) + - [ ] Ajouter favicon dans `frontend/public/favicon.ico` + - [ ] Ajouter favicon PNG 192x192 et 512x512 pour PWA + - [ ] Configurer dans `nuxt.config.ts` via `app.head.link` + - [ ] Optionnel : apple-touch-icon pour iOS + +- [ ] **Task 12: Validation finale** (AC: tous) + - [ ] Navigation entre toutes les pages sans rechargement + - [ ] Transitions visibles et fluides + - [ ] `prefers-reduced-motion` respecté (tester dans DevTools) + - [ ] Header sticky avec langue switcher fonctionnel + - [ ] Layout minimal sur `/resume` + - [ ] Page 404 accessible via URL invalide + - [ ] Meta tags visibles dans le code source HTML + - [ ] Favicon affiché dans l'onglet du navigateur + +## Dev Notes + +### Structure des layouts et pages + +``` +frontend/app/ +├── layouts/ +│ ├── default.vue # Layout principal (header, footer, transitions) +│ └── minimal.vue # Layout simplifié (mode express) +├── pages/ +│ ├── index.vue # Landing page +│ ├── projets/ +│ │ ├── index.vue # Liste des projets +│ │ └── [slug].vue # Détail projet +│ ├── competences.vue # Page compétences +│ ├── temoignages.vue # Page témoignages +│ ├── parcours.vue # Page parcours +│ ├── contact.vue # Page contact +│ └── resume.vue # Mode express (layout minimal) +├── components/ +│ └── layout/ +│ ├── AppHeader.vue # Header avec navigation +│ └── AppFooter.vue # Footer +├── error.vue # Page d'erreur globale +└── assets/ + └── css/ + └── transitions.css # Styles des transitions +``` + +### Configuration nuxt.config.ts pour les transitions + +```typescript +// frontend/nuxt.config.ts +export default defineNuxtConfig({ + // ... autres config + + app: { + head: { + link: [ + { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }, + { rel: 'icon', type: 'image/png', sizes: '192x192', href: '/favicon-192.png' }, + { rel: 'apple-touch-icon', href: '/apple-touch-icon.png' }, + ], + }, + pageTransition: { + name: 'page', + mode: 'out-in', + }, + layoutTransition: { + name: 'layout', + mode: 'out-in', + }, + }, + + css: [ + '~/assets/css/transitions.css', + ], +}) +``` + +### CSS des transitions de page + +```css +/* frontend/app/assets/css/transitions.css */ + +/* Transition de page - effet "changement de zone" */ +.page-enter-active, +.page-leave-active { + transition: opacity 0.3s ease, transform 0.3s ease; +} + +.page-enter-from { + opacity: 0; + transform: translateY(10px); +} + +.page-leave-to { + opacity: 0; + transform: translateY(-10px); +} + +/* Transition de layout */ +.layout-enter-active, +.layout-leave-active { + transition: opacity 0.2s ease; +} + +.layout-enter-from, +.layout-leave-to { + opacity: 0; +} + +/* Respect de prefers-reduced-motion */ +@media (prefers-reduced-motion: reduce) { + .page-enter-active, + .page-leave-active, + .layout-enter-active, + .layout-leave-active { + transition: none; + } + + .page-enter-from, + .page-leave-to, + .layout-enter-from, + .layout-leave-to { + opacity: 1; + transform: none; + } +} +``` + +### Router options pour scroll behavior + +```typescript +// frontend/app/router.options.ts +import type { RouterConfig } from '@nuxt/schema' + +export default { + scrollBehavior(to, from, savedPosition) { + // Si on revient en arrière, restaurer la position + if (savedPosition) { + return new Promise((resolve) => { + setTimeout(() => { + resolve(savedPosition) + }, 350) // Attendre la fin de la transition + }) + } + + // Si on a une ancre, scroll vers l'ancre + if (to.hash) { + return { + el: to.hash, + behavior: 'smooth', + top: 80, // Offset pour le header sticky + } + } + + // Sinon, scroll en haut + return new Promise((resolve) => { + setTimeout(() => { + resolve({ top: 0, behavior: 'smooth' }) + }, 350) + }) + }, +} +``` + +### Layout default.vue + +```vue + + + + +``` + +### Layout minimal.vue + +```vue + + + + +``` + +### Composable useSeo + +```typescript +// frontend/app/composables/useSeo.ts +interface SeoOptions { + title: string + description?: string + image?: string + url?: string +} + +export const useSeo = () => { + const config = useRuntimeConfig() + const route = useRoute() + const { locale } = useI18n() + + const setPageMeta = (options: SeoOptions) => { + const fullUrl = `${config.public.siteUrl}${route.fullPath}` + const imageUrl = options.image || `${config.public.siteUrl}/og-image.jpg` + + useHead({ + title: options.title, + htmlAttrs: { + lang: locale.value, + }, + }) + + useSeoMeta({ + title: options.title, + description: options.description, + ogTitle: options.title, + ogDescription: options.description, + ogImage: imageUrl, + ogUrl: options.url || fullUrl, + ogLocale: locale.value === 'fr' ? 'fr_FR' : 'en_US', + twitterCard: 'summary_large_image', + twitterTitle: options.title, + twitterDescription: options.description, + twitterImage: imageUrl, + }) + } + + return { setPageMeta } +} +``` + +### Page d'erreur + +```vue + + + + +``` + +### Traductions à ajouter (i18n) + +```json +// Ajouter dans frontend/i18n/fr.json +{ + "common": { + "back_home": "Retour à l'accueil", + "back_to_adventure": "Retour à l'aventure" + }, + "error": { + "404": "Oups ! Cette page semble s'être perdue dans les méandres du code...", + "generic": "Une erreur inattendue s'est produite. Le Bug enquête..." + } +} +``` + +### Dépendances avec Stories précédentes + +**Cette story DÉPEND de :** +- Story 1.1 : Nuxt 4 initialisé avec TailwindCSS et design tokens +- Story 1.3 : Système i18n configuré, LanguageSwitcher créé + +**Cette story PRÉPARE pour :** +- Story 1.5 : Landing page utilisera le layout default +- Story 1.6 : Store Pinia intégrera la barre de progression dans AppHeader +- Story 1.7 : Page résumé utilisera le layout minimal +- Epic 2-4 : Toutes les pages utiliseront ces layouts + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── layouts/ +│ ├── default.vue # CRÉER +│ └── minimal.vue # CRÉER +├── pages/ +│ ├── index.vue # CRÉER (placeholder) +│ ├── projets/ +│ │ ├── index.vue # CRÉER (placeholder) +│ │ └── [slug].vue # CRÉER (placeholder) +│ ├── competences.vue # CRÉER (placeholder) +│ ├── temoignages.vue # CRÉER (placeholder) +│ ├── parcours.vue # CRÉER (placeholder) +│ ├── contact.vue # CRÉER (placeholder) +│ └── resume.vue # CRÉER (placeholder) +├── components/ +│ └── layout/ +│ ├── AppHeader.vue # CRÉER +│ └── AppFooter.vue # CRÉER +├── composables/ +│ └── useSeo.ts # CRÉER +├── error.vue # CRÉER +├── router.options.ts # CRÉER +└── assets/ + └── css/ + └── transitions.css # CRÉER +``` + +**Fichiers à modifier :** +``` +frontend/ +├── nuxt.config.ts # MODIFIER (transitions, css, head) +├── i18n/fr.json # MODIFIER (ajouter traductions) +└── i18n/en.json # MODIFIER (ajouter traductions) +``` + +### References + +- [Source: docs/planning-artifacts/architecture.md#Frontend-Architecture] +- [Source: docs/planning-artifacts/architecture.md#Transitions-et-animations] +- [Source: docs/planning-artifacts/ux-design-specification.md#Navigation] +- [Source: docs/planning-artifacts/epics.md#Story-1.4] +- [Source: docs/prd-gamification.md#FR2] +- [Source: docs/prd-gamification.md#NFR6] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Page transitions | fade + slide | FR2 | +| Reduced motion | Required | NFR6, WCAG AA | +| Sticky header | Yes | UX Design | +| SEO meta tags | Required | NFR5 | +| Layout switching | default / minimal | Architecture | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-03 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/1-5-landing-page-choix-heros.md b/docs/implementation-artifacts/1-5-landing-page-choix-heros.md new file mode 100644 index 0000000..91bc56d --- /dev/null +++ b/docs/implementation-artifacts/1-5-landing-page-choix-heros.md @@ -0,0 +1,359 @@ +# Story 1.5: Landing page et choix du héros + +Status: ready-for-dev + +## Story + +As a visiteur, +I want choisir entre l'aventure et le mode express, puis sélectionner mon héros, +so that mon expérience est adaptée à mon profil et mon temps disponible. + +## Acceptance Criteria + +1. **Given** le visiteur arrive sur la landing page (`/`) **When** la page se charge **Then** deux CTA distincts sont visibles : "Partir à l'aventure" et "Mode express" +2. **And** un texte d'accroche intrigant bilingue est affiché +3. **And** une animation d'entrée subtile est présente (respectant `prefers-reduced-motion`) +4. **And** le design est responsive (mobile + desktop) +5. **And** au clic sur "Partir à l'aventure", le composant `HeroSelector` s'affiche avec 3 cards illustrées (Recruteur, Client, Développeur) avec nom et description courte +6. **And** le héros sélectionné est stocké dans le store Pinia `useProgressionStore` (champ `hero`) +7. **And** au clic sur "Mode express", le visiteur est redirigé vers la page résumé +8. **And** le `HeroSelector` est accessible au clavier (`role="radiogroup"`, flèches pour naviguer, Enter pour sélectionner) + +## Tasks / Subtasks + +- [ ] **Task 1: Structure de la landing page** (AC: #1, #2, #4) + - [ ] Implémenter `frontend/app/pages/index.vue` + - [ ] Section hero avec texte d'accroche bilingue (`$t('landing.title')`, `$t('landing.subtitle')`) + - [ ] Deux boutons CTA côte à côte (desktop) ou empilés (mobile) + - [ ] Utiliser les couleurs du design system (sky-accent pour CTA principal) + - [ ] Layout responsive : centré verticalement, max-width pour le contenu + +- [ ] **Task 2: Animations d'entrée** (AC: #3) + - [ ] Animation fade-in + slide-up pour le texte d'accroche + - [ ] Animation staggered pour les CTA (apparition décalée) + - [ ] Utiliser CSS animations ou GSAP (lazy-loaded) + - [ ] Media query `prefers-reduced-motion` : animations désactivées + - [ ] Durée totale : ~1s max + +- [ ] **Task 3: Composant HeroSelector** (AC: #5, #8) + - [ ] Créer `frontend/app/components/feature/HeroSelector.vue` + - [ ] Props : `modelValue` (héros sélectionné), emit `update:modelValue` + - [ ] Afficher 3 cards : Recruteur, Client, Développeur + - [ ] Chaque card : illustration/icône, nom traduit, description courte traduite + - [ ] État visuel : card sélectionnée avec bordure accent + - [ ] Accessibilité : `role="radiogroup"`, `role="radio"` sur chaque card + - [ ] Navigation clavier : flèches gauche/droite, Enter pour confirmer + - [ ] Focus visible sur la card active + +- [ ] **Task 4: Données des héros** (AC: #5) + - [ ] Définir les 3 héros dans un fichier de config ou composable + - [ ] Structure : `{ id: 'recruteur' | 'client' | 'dev', nameKey, descriptionKey, icon }` + - [ ] Traductions dans `i18n/fr.json` et `i18n/en.json` : + - `hero.recruteur.name`: "Recruteur" + - `hero.recruteur.description`: "Je cherche un talent pour mon équipe" + - `hero.client.name`: "Client" + - `hero.client.description`: "J'ai un projet à réaliser" + - `hero.dev.name`: "Développeur" + - `hero.dev.description`: "Je suis curieux de voir ton travail" + +- [ ] **Task 5: Intégration avec le store Pinia** (AC: #6) + - [ ] Importer `useProgressionStore` (créé en Story 1.6, mais interface définie ici) + - [ ] Au choix du héros : `store.setHero(heroId)` + - [ ] Après sélection : naviguer vers la première zone ou afficher l'intro narrative + - [ ] Si store non disponible (Story 1.6 pas encore faite) : utiliser un state local temporaire + +- [ ] **Task 6: Flow de sélection** (AC: #5, #6) + - [ ] État initial : CTA visibles, HeroSelector masqué + - [ ] Clic "Partir à l'aventure" : transition vers HeroSelector (fade/slide) + - [ ] Clic sur un héros : sélection visuelle + - [ ] Bouton "Confirmer" ou double-clic : valider et naviguer + - [ ] Bouton "Retour" pour revenir aux CTA + - [ ] Animation de transition fluide entre les états + +- [ ] **Task 7: Redirection Mode Express** (AC: #7) + - [ ] Clic "Mode express" : `navigateTo(localePath('/resume'))` + - [ ] Pas de sélection de héros requise pour le mode express + - [ ] Le store peut rester sans héros défini (mode anonyme) + +- [ ] **Task 8: SEO et meta tags** (AC: #1) + - [ ] Utiliser `useSeo()` pour définir les meta tags de la landing + - [ ] Title : "Skycel - Portfolio interactif de Célian" + - [ ] Description : "Découvrez mon portfolio gamifié..." + - [ ] Open Graph image : image de preview attractive + +- [ ] **Task 9: Validation finale** (AC: tous) + - [ ] Page accessible en FR (`/`) et EN (`/en`) + - [ ] Textes traduits correctement + - [ ] CTA fonctionnels + - [ ] HeroSelector s'affiche et fonctionne + - [ ] Navigation clavier complète + - [ ] Animations fluides (et désactivées si reduced-motion) + - [ ] Responsive : mobile et desktop + - [ ] Redirection vers `/resume` fonctionne + +## Dev Notes + +### Structure de la landing page + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ LANDING PAGE │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ [Logo ou titre animé] │ +│ │ +│ "Bienvenue dans mon univers" │ +│ Développeur Full-Stack │ +│ │ +│ ┌─────────────────┐ ┌─────────────────┐ │ +│ │ Partir à │ │ Mode express │ │ +│ │ l'aventure │ │ (30 secondes) │ │ +│ └─────────────────┘ └─────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ + + ↓ Clic "Aventure" + +┌─────────────────────────────────────────────────────────────────┐ +│ HERO SELECTOR │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ "Qui êtes-vous, voyageur ?" │ +│ │ +│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ +│ │ 👔 │ │ 💼 │ │ 💻 │ │ +│ │Recruteur│ │ Client │ │ Dev │ │ +│ │ "Je..." │ │ "J'ai..." │ │"Je suis.."│ │ +│ └─────────┘ └─────────┘ └─────────┘ │ +│ │ +│ [Retour] [Confirmer] │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +### Composant HeroSelector + +```vue + + + + +``` + +### Traductions à ajouter + +```json +// frontend/i18n/fr.json +{ + "landing": { + "title": "Bienvenue dans mon univers", + "subtitle": "Développeur Full-Stack passionné", + "cta_adventure": "Partir à l'aventure", + "cta_express": "Mode express (30s)" + }, + "hero": { + "question": "Qui êtes-vous, voyageur ?", + "select_label": "Sélectionnez votre profil", + "recruteur": { + "name": "Recruteur", + "description": "Je cherche un talent pour rejoindre mon équipe" + }, + "client": { + "name": "Client", + "description": "J'ai un projet à réaliser et je cherche le bon développeur" + }, + "dev": { + "name": "Développeur", + "description": "Je suis curieux de découvrir ton travail et tes compétences" + } + } +} +``` + +### Animations CSS + +```css +/* Animations d'entrée pour la landing */ +@keyframes fadeSlideUp { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.animate-fade-slide-up { + animation: fadeSlideUp 0.6s ease-out forwards; +} + +.animate-delay-100 { animation-delay: 0.1s; } +.animate-delay-200 { animation-delay: 0.2s; } +.animate-delay-300 { animation-delay: 0.3s; } + +/* Respect prefers-reduced-motion */ +@media (prefers-reduced-motion: reduce) { + .animate-fade-slide-up { + animation: none; + opacity: 1; + transform: none; + } +} +``` + +### Dépendances + +**Cette story DÉPEND de :** +- Story 1.3 : Système i18n pour les traductions +- Story 1.4 : Layout default, transitions de page, useSeo() + +**Cette story PRÉPARE pour :** +- Story 1.6 : Le store Pinia stockera le héros sélectionné +- Story 4.2 : L'intro narrative suivra la sélection du héros + +**Note :** Si Story 1.6 n'est pas encore implémentée, utiliser un state local (`ref`) comme placeholder. + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-1.5] +- [Source: docs/planning-artifacts/ux-design-specification.md#Hero-System] +- [Source: docs/planning-artifacts/architecture.md#Store-Pinia] +- [Source: docs/prd-gamification.md#FR1] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Héros disponibles | Recruteur, Client, Dev | UX Design | +| Accessibilité | WCAG AA, keyboard nav | NFR6 | +| Animations | Respecter reduced-motion | NFR6 | +| Responsive | Mobile + Desktop | NFR3 | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-03 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/1-6-store-pinia-progression-bandeau-rgpd.md b/docs/implementation-artifacts/1-6-store-pinia-progression-bandeau-rgpd.md new file mode 100644 index 0000000..09e813b --- /dev/null +++ b/docs/implementation-artifacts/1-6-store-pinia-progression-bandeau-rgpd.md @@ -0,0 +1,416 @@ +# Story 1.6: Store Pinia progression et bandeau RGPD + +Status: ready-for-dev + +## Story + +As a visiteur, +I want que ma progression soit sauvegardée et que mon consentement soit respecté, +so that je peux reprendre mon exploration et mes données sont protégées. + +## Acceptance Criteria + +1. **Given** le visiteur accède au site **When** le consentement RGPD n'a pas encore été donné **Then** un bandeau de consentement immersif s'affiche (style narratif/dialogue, pas un bandeau classique) +2. **And** le store Pinia `useProgressionStore` est initialisé avec : sessionId (UUID v4), hero, currentPath, visitedSections, completionPercent, easterEggsFound, challengeCompleted, contactUnlocked, narratorStage, choices, consentGiven +3. **And** la persistance LocalStorage est activée via `pinia-plugin-persistedstate` (uniquement après consentement) +4. **And** le store est compatible SSR (initialisation vide côté serveur, réhydratation client) +5. **And** si une progression existante est détectée, un message "Bienvenue à nouveau" est affiché +6. **And** l'action `$reset()` permet de réinitialiser la progression + +## Tasks / Subtasks + +- [ ] **Task 1: Installation pinia-plugin-persistedstate** (AC: #3) + - [ ] Vérifier que `pinia-plugin-persistedstate` est installé (Story 1.1) + - [ ] Configurer le plugin dans `frontend/app/plugins/pinia.ts` + - [ ] S'assurer de la compatibilité SSR (pas de localStorage côté serveur) + +- [ ] **Task 2: Création du store useProgressionStore** (AC: #2, #4) + - [ ] Créer `frontend/app/stores/progression.ts` + - [ ] Définir l'interface `ProgressionState` avec tous les champs requis + - [ ] Implémenter le state initial (valeurs par défaut) + - [ ] Générer `sessionId` avec UUID v4 (côté client uniquement) + - [ ] Compatibilité SSR : state vide côté serveur + +- [ ] **Task 3: Actions du store** (AC: #2, #6) + - [ ] `setHero(hero: HeroType)` : définir le héros choisi + - [ ] `visitSection(section: string)` : ajouter une section visitée, recalculer % + - [ ] `findEasterEgg(slug: string)` : ajouter un easter egg trouvé + - [ ] `completeChallenge()` : marquer le challenge comme complété + - [ ] `unlockContact()` : débloquer l'accès au contact + - [ ] `updateNarratorStage(stage: number)` : évolution du narrateur + - [ ] `makeChoice(choiceId: string, value: string)` : enregistrer un choix narratif + - [ ] `setConsent(given: boolean)` : définir le consentement RGPD + - [ ] `$reset()` : réinitialiser toute la progression + +- [ ] **Task 4: Getters du store** (AC: #2) + - [ ] `hasVisited(section: string)` : vérifier si une section a été visitée + - [ ] `isContactUnlocked` : contact débloqué (2+ sections visitées) + - [ ] `progressPercent` : pourcentage de complétion calculé + - [ ] `hasExistingProgress` : progression existante détectée + +- [ ] **Task 5: Persistance conditionnelle** (AC: #3, #4) + - [ ] Configurer `persist` avec condition sur `consentGiven` + - [ ] Key localStorage : `skycel-progression` + - [ ] Exclure certains champs de la persistance si nécessaire + - [ ] Gérer la réhydratation client après SSR + +- [ ] **Task 6: Composant ConsentBanner immersif** (AC: #1) + - [ ] Créer `frontend/app/components/layout/ConsentBanner.vue` + - [ ] Style narratif : dialogue du narrateur (araignée) ou message immersif + - [ ] Texte : "Pour mémoriser ton aventure, j'ai besoin de ton accord..." + - [ ] Deux boutons : "Accepter" et "Refuser" (style cohérent) + - [ ] Animation d'apparition subtile + - [ ] Position : bas de l'écran, overlay semi-transparent + +- [ ] **Task 7: Intégration ConsentBanner dans le layout** (AC: #1) + - [ ] Ajouter `` dans `layouts/default.vue` + - [ ] Afficher uniquement si `!store.consentGiven` ET côté client + - [ ] Après acceptation : activer la persistance, masquer le bandeau + - [ ] Après refus : masquer le bandeau, ne pas persister (mais store fonctionne en mémoire) + +- [ ] **Task 8: Message "Bienvenue à nouveau"** (AC: #5) + - [ ] Détecter si `hasExistingProgress` au chargement (côté client) + - [ ] Si oui, afficher un message via le narrateur ou une notification discrète + - [ ] Proposer optionnellement de recommencer (`$reset()`) + - [ ] Ce message sera affiné en Epic 3 avec le composant NarratorBubble + +- [ ] **Task 9: Calcul de la progression** (AC: #2) + - [ ] Définir les sections comptabilisées : projets, competences, temoignages, parcours + - [ ] Formule : `(visitedSections.length / totalSections) * 100` + - [ ] Mettre à jour `completionPercent` automatiquement via le getter ou action + - [ ] Trigger `unlockContact` si >= 2 sections visitées + +- [ ] **Task 10: Tests et validation** (AC: tous) + - [ ] Store accessible dans les composants via `useProgressionStore()` + - [ ] Persistance fonctionne après acceptation RGPD + - [ ] Pas de persistance si refus (mais store en mémoire OK) + - [ ] Réinitialisation fonctionne + - [ ] Compatible SSR (pas d'erreur hydration mismatch) + - [ ] ConsentBanner s'affiche correctement + - [ ] Message "Bienvenue à nouveau" fonctionne + +## Dev Notes + +### Interface du store + +```typescript +// frontend/app/stores/progression.ts +import { defineStore } from 'pinia' +import { v4 as uuidv4 } from 'uuid' + +export type HeroType = 'recruteur' | 'client' | 'dev' + +export interface ProgressionState { + sessionId: string + hero: HeroType | null + currentPath: string + visitedSections: string[] + completionPercent: number + easterEggsFound: string[] + challengeCompleted: boolean + contactUnlocked: boolean + narratorStage: number // 1-5 + choices: Record + consentGiven: boolean | null // null = pas encore demandé +} + +const SECTIONS = ['projets', 'competences', 'temoignages', 'parcours'] + +export const useProgressionStore = defineStore('progression', { + state: (): ProgressionState => ({ + sessionId: '', + hero: null, + currentPath: 'start', + visitedSections: [], + completionPercent: 0, + easterEggsFound: [], + challengeCompleted: false, + contactUnlocked: false, + narratorStage: 1, + choices: {}, + consentGiven: null, + }), + + getters: { + hasVisited: (state) => (section: string) => state.visitedSections.includes(section), + + isContactUnlocked: (state) => state.visitedSections.length >= 2 || state.contactUnlocked, + + progressPercent: (state) => Math.round((state.visitedSections.length / SECTIONS.length) * 100), + + hasExistingProgress: (state) => state.visitedSections.length > 0 || state.hero !== null, + }, + + actions: { + initSession() { + if (!this.sessionId && import.meta.client) { + this.sessionId = uuidv4() + } + }, + + setHero(hero: HeroType) { + this.hero = hero + }, + + visitSection(section: string) { + if (!this.visitedSections.includes(section)) { + this.visitedSections.push(section) + this.completionPercent = this.progressPercent + + // Auto-unlock contact after 2 sections + if (this.visitedSections.length >= 2) { + this.contactUnlocked = true + } + } + }, + + findEasterEgg(slug: string) { + if (!this.easterEggsFound.includes(slug)) { + this.easterEggsFound.push(slug) + } + }, + + completeChallenge() { + this.challengeCompleted = true + }, + + unlockContact() { + this.contactUnlocked = true + }, + + updateNarratorStage(stage: number) { + if (stage >= 1 && stage <= 5) { + this.narratorStage = stage + } + }, + + makeChoice(choiceId: string, value: string) { + this.choices[choiceId] = value + }, + + setConsent(given: boolean) { + this.consentGiven = given + if (given) { + this.initSession() + } + }, + }, + + persist: { + key: 'skycel-progression', + storage: import.meta.client ? localStorage : undefined, + // Persister uniquement si consentement donné + beforeRestore: (ctx) => { + // La restauration se fera côté client uniquement + }, + }, +}) +``` + +### Plugin Pinia avec persistedstate + +```typescript +// frontend/app/plugins/pinia.ts +import { createPinia } from 'pinia' +import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' + +export default defineNuxtPlugin((nuxtApp) => { + const pinia = createPinia() + pinia.use(piniaPluginPersistedstate) + nuxtApp.vueApp.use(pinia) +}) +``` + +### Composant ConsentBanner + +```vue + + + + + + +``` + +### Traductions à ajouter + +```json +// frontend/i18n/fr.json +{ + "consent": { + "message": "Pour mémoriser ton aventure et te permettre de la reprendre plus tard, j'ai besoin de ton accord pour stocker quelques informations sur ton appareil. Rien de personnel, juste ta progression !", + "accept": "D'accord, mémorise mon aventure", + "refuse": "Non merci, je préfère rester anonyme" + }, + "welcome_back": { + "message": "Content de te revoir, aventurier ! Tu avais commencé ton exploration...", + "continue": "Reprendre", + "restart": "Recommencer" + } +} +``` + +### Intégration dans le layout + +```vue + + +``` + +### Gestion SSR + +**Points critiques pour la compatibilité SSR :** + +1. **UUID** : Générer uniquement côté client (`import.meta.client`) +2. **localStorage** : Non disponible côté serveur, utiliser `undefined` comme storage +3. **ConsentBanner** : Wrapper dans `` pour éviter les mismatches +4. **Getters avec computed** : Fonctionnent côté serveur avec valeurs par défaut + +### Dépendances + +**Cette story DÉPEND de :** +- Story 1.1 : pinia-plugin-persistedstate installé +- Story 1.4 : Layout default.vue créé + +**Cette story PRÉPARE pour :** +- Story 1.5 : setHero() appelé après sélection du héros +- Story 3.x : visitSection(), progressPercent, narratorStage utilisés +- Story 4.x : choices, findEasterEgg(), completeChallenge() utilisés + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── stores/ +│ └── progression.ts # CRÉER +├── plugins/ +│ └── pinia.ts # CRÉER (ou modifier si existe) +└── components/ + └── layout/ + └── ConsentBanner.vue # CRÉER +``` + +**Fichiers à modifier :** +``` +frontend/ +├── app/layouts/default.vue # MODIFIER (ajouter ConsentBanner) +├── i18n/fr.json # MODIFIER (ajouter traductions) +└── i18n/en.json # MODIFIER (ajouter traductions) +``` + +### References + +- [Source: docs/planning-artifacts/architecture.md#Store-Pinia] +- [Source: docs/planning-artifacts/architecture.md#RGPD] +- [Source: docs/planning-artifacts/ux-design-specification.md#Consent] +- [Source: docs/planning-artifacts/epics.md#Story-1.6] +- [Source: docs/prd-gamification.md#FR12] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Persistance | LocalStorage via pinia-plugin-persistedstate | Architecture | +| SSR compatible | Required | Architecture | +| RGPD compliant | Consentement avant persistance | Architecture | +| Session ID | UUID v4 | Architecture | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-03 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/1-7-page-resume-express-mode-presse.md b/docs/implementation-artifacts/1-7-page-resume-express-mode-presse.md new file mode 100644 index 0000000..fa4c920 --- /dev/null +++ b/docs/implementation-artifacts/1-7-page-resume-express-mode-presse.md @@ -0,0 +1,402 @@ +# Story 1.7: Page résumé express et mode pressé + +Status: ready-for-dev + +## Story + +As a visiteur pressé ou recruteur, +I want une vue condensée de toutes les informations essentielles, +so that je peux évaluer le développeur en 30 secondes. + +## Acceptance Criteria + +1. **Given** le visiteur accède à `/resume` (FR) ou `/en/resume` (EN) directement ou via "Mode express" **When** la page se charge **Then** le contenu affiché comprend : nom, titre, photo/avatar, accroche (5s) +2. **And** les compétences clés avec stack technique sont visibles (10s) +3. **And** 3-4 projets highlights avec liens sont affichés (10s) +4. **And** un CTA de contact direct est visible (5s) +5. **And** un bouton discret "Voir l'aventure" invite à l'expérience complète +6. **And** la page est fonctionnelle en FR et EN +7. **And** les données sont chargées depuis l'API (projets, skills) +8. **And** les meta tags SEO sont optimisés pour cette page +9. **And** le layout `minimal.vue` est utilisé + +## Tasks / Subtasks + +- [ ] **Task 1: Structure de la page résumé** (AC: #1, #9) + - [ ] Implémenter `frontend/app/pages/resume.vue` + - [ ] Utiliser le layout minimal : `definePageMeta({ layout: 'minimal' })` + - [ ] Structure en sections verticales : Hero → Skills → Projets → Contact + - [ ] Design épuré, scannable en 30 secondes + +- [ ] **Task 2: Section Hero (5s)** (AC: #1) + - [ ] Photo/avatar de Célian (image optimisée via nuxt/image) + - [ ] Nom : "Célian" (ou nom complet) + - [ ] Titre : "Développeur Full-Stack" + - [ ] Accroche courte : 1-2 phrases percutantes traduites + - [ ] Liens sociaux : GitHub, LinkedIn (icônes cliquables) + +- [ ] **Task 3: Section Compétences (10s)** (AC: #2, #7) + - [ ] Titre de section : "Stack technique" + - [ ] Afficher les compétences principales par catégorie (Frontend, Backend, Tools) + - [ ] Format compact : badges ou liste avec icônes + - [ ] Charger depuis l'API `/api/skills` (filtrer les principales) + - [ ] Limiter à 8-12 compétences max pour la lisibilité + +- [ ] **Task 4: Section Projets highlights (10s)** (AC: #3, #7) + - [ ] Titre de section : "Projets récents" + - [ ] Afficher 3-4 projets featured + - [ ] Format compact : titre + 1 ligne description + lien + - [ ] Charger depuis l'API `/api/projects?featured=true` + - [ ] Liens vers les détails (ouvre dans nouvel onglet ou garde sur resume) + +- [ ] **Task 5: Section Contact (5s)** (AC: #4) + - [ ] CTA principal : "Me contacter" (lien vers `/contact` ou email direct) + - [ ] Email visible (cliquable mailto:) + - [ ] Optionnel : téléphone si souhaité + - [ ] Style accent pour le CTA principal + +- [ ] **Task 6: Bouton "Voir l'aventure"** (AC: #5) + - [ ] Position discrète mais visible (en bas ou en sidebar) + - [ ] Texte : "Envie d'explorer ? Découvrir l'aventure complète" + - [ ] Lien vers `/` (landing page) + - [ ] Style secondaire, pas en compétition avec le CTA contact + +- [ ] **Task 7: Chargement des données API** (AC: #7) + - [ ] Utiliser `useFetch` ou `useAsyncData` pour charger skills et projets + - [ ] Gérer les états loading et error + - [ ] Cache côté client pour éviter les appels répétés + - [ ] SSR : données chargées côté serveur pour SEO + +- [ ] **Task 8: Traductions bilingue** (AC: #6) + - [ ] Ajouter toutes les traductions dans `i18n/fr.json` et `i18n/en.json` + - [ ] Section titles, accroche, CTA labels + - [ ] Le contenu API est déjà traduit (Story 1.3) + +- [ ] **Task 9: Meta tags SEO optimisés** (AC: #8) + - [ ] Utiliser `useSeo()` avec meta spécifiques + - [ ] Title : "Célian - Développeur Full-Stack | CV Express" + - [ ] Description : optimisée pour les recruteurs + - [ ] Open Graph image : image de preview professionnelle + - [ ] Structured data (JSON-LD) pour Person/Developer (optionnel) + +- [ ] **Task 10: Responsive et accessibilité** (AC: #1) + - [ ] Mobile : sections empilées verticalement + - [ ] Desktop : layout plus aéré, possible 2 colonnes pour skills/projets + - [ ] Contraste suffisant (WCAG AA) + - [ ] Navigation clavier fluide + - [ ] Skip link vers le contenu principal + +- [ ] **Task 11: Validation finale** (AC: tous) + - [ ] Page accessible via `/resume` (FR) et `/en/resume` (EN) + - [ ] Chargement < 2s (données légères) + - [ ] Toutes les sections visibles sans scroll excessif sur desktop + - [ ] CTA contact fonctionnel + - [ ] Lien vers aventure fonctionne + - [ ] Layout minimal utilisé (pas de header complet) + - [ ] SEO : vérifier meta tags dans le code source + +## Dev Notes + +### Structure de la page résumé + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ PAGE RÉSUMÉ EXPRESS │ +│ (Layout minimal) │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────┐ │ +│ │ Photo │ Célian │ +│ │ │ Développeur Full-Stack │ +│ └─────────┘ "Passionné par les expériences web innovantes" │ +│ [GitHub] [LinkedIn] │ +│ │ +├─────────────────────────────────────────────────────────────────┤ +│ STACK TECHNIQUE │ +│ ┌────────────────────────────────────────────────────────────┐│ +│ │ Frontend: Vue.js • Nuxt • TypeScript • TailwindCSS ││ +│ │ Backend: Laravel • PHP • Node.js • MariaDB ││ +│ │ Tools: Git • Docker • CI/CD ││ +│ └────────────────────────────────────────────────────────────┘│ +│ │ +├─────────────────────────────────────────────────────────────────┤ +│ PROJETS RÉCENTS │ +│ ┌────────────────────────────────────────────────────────────┐│ +│ │ • Skycel Portfolio - Portfolio gamifié interactif [→] ││ +│ │ • Projet E-commerce - Boutique en ligne moderne [→] ││ +│ │ • Dashboard Analytics - Interface de visualisation [→] ││ +│ └────────────────────────────────────────────────────────────┘│ +│ │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌──────────────────────────┐ │ +│ │ ME CONTACTER │ │ +│ └──────────────────────────┘ │ +│ │ +│ contact@skycel.fr │ +│ │ +│ "Envie d'explorer ? Voir l'aventure complète →" │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +### Implémentation de la page + +```vue + + + + +``` + +### Traductions à ajouter + +```json +// frontend/i18n/fr.json +{ + "resume": { + "title": "Développeur Full-Stack", + "tagline": "Passionné par les expériences web innovantes et immersives", + "skills_title": "Stack technique", + "projects_title": "Projets récents", + "cta_contact": "Me contacter", + "adventure_link": "Envie d'explorer ? Découvrir l'aventure complète", + "meta_title": "Célian - Développeur Full-Stack | CV Express", + "meta_description": "Développeur Full-Stack spécialisé en Vue.js, Nuxt, Laravel. Découvrez mon profil et mes projets en 30 secondes." + } +} +``` + +```json +// frontend/i18n/en.json +{ + "resume": { + "title": "Full-Stack Developer", + "tagline": "Passionate about innovative and immersive web experiences", + "skills_title": "Tech Stack", + "projects_title": "Recent Projects", + "cta_contact": "Contact Me", + "adventure_link": "Want to explore? Discover the full adventure", + "meta_title": "Célian - Full-Stack Developer | Quick Resume", + "meta_description": "Full-Stack Developer specialized in Vue.js, Nuxt, Laravel. Discover my profile and projects in 30 seconds." + } +} +``` + +### Dépendances + +**Cette story DÉPEND de :** +- Story 1.3 : API bilingue, useApi composable +- Story 1.4 : Layout minimal.vue, useSeo composable +- Story 1.2 : API projects et skills fonctionnels + +**Cette story PRÉPARE pour :** +- URL directe pour candidatures (usage recruteurs) +- Alternative à l'expérience gamifiée + +### Project Structure Notes + +**Fichiers à créer/modifier :** +``` +frontend/app/ +├── pages/ +│ └── resume.vue # CRÉER +├── public/ +│ └── images/ +│ └── avatar.jpg # AJOUTER (photo Célian) +└── i18n/ + ├── fr.json # MODIFIER (ajouter resume.*) + └── en.json # MODIFIER (ajouter resume.*) +``` + +### Performance + +- **Budget temps** : Chargement < 2s +- **Données légères** : Skills (8-12 items), Projets (3-4 items) +- **SSR** : Données chargées côté serveur pour SEO optimal +- **Images** : Avatar optimisé via nuxt/image (WebP, dimensions fixes) + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-1.7] +- [Source: docs/planning-artifacts/ux-design-specification.md#Page-Resume] +- [Source: docs/prd-gamification.md#FR1] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Layout | minimal.vue | Architecture | +| Temps lecture | ~30 secondes | UX Design | +| Projets affichés | 3-4 featured | UX Design | +| Skills affichés | 8-12 max | UX Design | +| SSR | Required | NFR5 | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-03 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/2-1-composant-projectcard.md b/docs/implementation-artifacts/2-1-composant-projectcard.md new file mode 100644 index 0000000..f36b5ae --- /dev/null +++ b/docs/implementation-artifacts/2-1-composant-projectcard.md @@ -0,0 +1,285 @@ +# Story 2.1: Composant ProjectCard + +Status: ready-for-dev + +## Story + +As a développeur, +I want un composant réutilisable de card de projet, +so that je peux afficher les projets de manière cohérente sur la galerie et ailleurs dans le site. + +## Acceptance Criteria + +1. **Given** le composant `ProjectCard` est implémenté **When** il reçoit les données d'un projet en props **Then** il affiche l'image du projet (WebP, lazy loading) +2. **And** il affiche le titre traduit selon la langue courante +3. **And** il affiche la description courte traduite +4. **And** un hover effect révèle un CTA "Découvrir" avec animation subtile +5. **And** le composant est cliquable et navigue vers `/projets/{slug}` (ou `/en/projects/{slug}`) +6. **And** le composant respecte `prefers-reduced-motion` pour les animations +7. **And** le composant est responsive (adaptation mobile/desktop) +8. **And** le composant est accessible (focus visible, `role` approprié) + +## Tasks / Subtasks + +- [ ] **Task 1: Créer le composant ProjectCard.vue** (AC: #1, #2, #3) + - [ ] Créer le fichier `frontend/app/components/feature/ProjectCard.vue` + - [ ] Définir les props TypeScript : `project` (object avec slug, image, title, shortDescription) + - [ ] Utiliser `` pour l'image avec format WebP et lazy loading + - [ ] Intégrer `useI18n()` pour le titre et la description traduits + - [ ] Afficher titre (`project.title`) et description courte (`project.shortDescription`) + +- [ ] **Task 2: Implémenter le hover effect et CTA** (AC: #4) + - [ ] Créer un overlay qui apparaît au hover avec transition CSS + - [ ] Ajouter un CTA "Découvrir" (traduit via i18n) centré dans l'overlay + - [ ] Animation subtile : fade-in + léger scale (0.98 → 1) + - [ ] Utiliser les classes Tailwind pour les transitions + +- [ ] **Task 3: Implémenter la navigation** (AC: #5) + - [ ] Rendre la card entièrement cliquable avec `` + - [ ] Utiliser `localePath()` pour générer l'URL correcte selon la langue + - [ ] URL pattern : `/projets/{slug}` (FR) ou `/en/projects/{slug}` (EN) + +- [ ] **Task 4: Gérer `prefers-reduced-motion`** (AC: #6) + - [ ] Créer une media query CSS pour détecter `prefers-reduced-motion: reduce` + - [ ] Désactiver les transitions et animations si motion réduite + - [ ] Le hover effect reste visible mais sans animation + +- [ ] **Task 5: Rendre le composant responsive** (AC: #7) + - [ ] Mobile : card pleine largeur, hauteur fixe ou aspect-ratio + - [ ] Desktop : card avec largeur flexible pour grille (min 280px, max 400px) + - [ ] Image qui remplit la card avec `object-cover` + - [ ] Texte tronqué si trop long (ellipsis) + +- [ ] **Task 6: Accessibilité** (AC: #8) + - [ ] Focus visible sur la card (outline accent) + - [ ] `role="article"` sur la card container + - [ ] `alt` descriptif sur l'image (utiliser le titre du projet) + - [ ] Navigation au clavier fonctionnelle (Tab, Enter) + +- [ ] **Task 7: Tests et validation** + - [ ] Tester le composant avec des données de projet fictives + - [ ] Vérifier l'affichage en FR et EN + - [ ] Vérifier le hover effect et la navigation + - [ ] Tester sur mobile et desktop + - [ ] Valider l'accessibilité avec axe DevTools + +## Dev Notes + +### Structure du composant + +```vue + + + + + + +``` + +### Interface TypeScript pour Project + +```typescript +// frontend/app/types/project.ts +export interface Project { + id: number + slug: string + image: string + title: string // Déjà traduit par l'API + description: string // Déjà traduit par l'API + shortDescription: string // Déjà traduit par l'API + url?: string + githubUrl?: string + dateCompleted: string + isFeatured: boolean + displayOrder: number + skills?: ProjectSkill[] +} + +export interface ProjectSkill { + id: number + slug: string + name: string + levelBefore: number + levelAfter: number +} +``` + +### Clés i18n nécessaires + +Ajouter dans `frontend/i18n/fr.json` et `frontend/i18n/en.json` : + +```json +{ + "projects": { + "discover": "Découvrir" + } +} +``` + +```json +{ + "projects": { + "discover": "Discover" + } +} +``` + +### Design Tokens utilisés + +| Token | Valeur | Usage | +|-------|--------|-------| +| `sky-dark` | Fond sombre | Overlay au hover | +| `sky-accent` | #fa784f | CTA "Découvrir" | +| `sky-text` | Blanc cassé | Titre projet | +| `sky-text-muted` | Variante atténuée | Description courte | +| `font-ui` | Inter | Tout le texte du composant | + +### Comportement responsive + +| Breakpoint | Comportement | +|------------|--------------| +| Mobile (< 768px) | Card pleine largeur, hauteur image 180px | +| Tablette (768px+) | Cards en grille 2 colonnes | +| Desktop (1024px+) | Cards en grille 3-4 colonnes | + +### Dépendances + +**Ce composant nécessite :** +- Story 1.1 : Nuxt 4 initialisé avec `@nuxt/image`, `@nuxtjs/i18n`, TailwindCSS +- Story 1.2 : Model Project avec structure de données +- Story 1.3 : Système i18n configuré + +**Ce composant sera utilisé par :** +- Story 2.2 : Page Projets - Galerie +- Story 1.7 : Page Résumé Express (projets highlights) +- Story 2.5 : Compétences cliquables (liste des projets liés) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── components/ +│ └── feature/ +│ └── ProjectCard.vue # CRÉER +├── types/ +│ └── project.ts # CRÉER (si n'existe pas) +``` + +**Fichiers à modifier :** +``` +frontend/i18n/ +├── fr.json # AJOUTER clés projects.* +└── en.json # AJOUTER clés projects.* +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-2.1] +- [Source: docs/planning-artifacts/architecture.md#Frontend-Architecture] +- [Source: docs/planning-artifacts/ux-design-specification.md#Visual-Design-Foundation] +- [Source: docs/planning-artifacts/ux-design-specification.md#Accessibility-Strategy] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Image format | WebP avec fallback | NFR8 | +| Lazy loading | Native via NuxtImg | NFR1, NFR2 | +| Animations | Respect prefers-reduced-motion | NFR6 | +| Accessibilité | WCAG AA | UX Spec | +| Responsive | Mobile-first | UX Spec | + +### Previous Story Intelligence (Epic 1) + +**Patterns établis à suivre :** +- Composants feature dans `app/components/feature/` +- Types TypeScript dans `app/types/` +- Design tokens TailwindCSS : `sky-dark`, `sky-accent`, `sky-text` +- Polices : `font-ui` (sans-serif), `font-narrative` (serif) +- i18n via `useI18n()` et `localePath()` + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/2-2-page-projets-galerie.md b/docs/implementation-artifacts/2-2-page-projets-galerie.md new file mode 100644 index 0000000..ecb6156 --- /dev/null +++ b/docs/implementation-artifacts/2-2-page-projets-galerie.md @@ -0,0 +1,387 @@ +# Story 2.2: Page Projets - Galerie + +Status: ready-for-dev + +## Story + +As a visiteur, +I want voir la liste des projets réalisés par le développeur, +so that je peux évaluer son expérience et choisir lesquels explorer en détail. + +## Acceptance Criteria + +1. **Given** le visiteur accède à `/projets` (FR) ou `/en/projects` (EN) **When** la page se charge **Then** une grille responsive de `ProjectCard` s'affiche +2. **And** les projets sont triés par date avec les "featured" en tête +3. **And** une animation d'entrée progressive des cards est présente (respectant `prefers-reduced-motion`) +4. **And** les données sont chargées depuis l'API `/api/projects` avec le contenu traduit +5. **And** les meta tags SEO sont dynamiques pour cette page +6. **And** le layout s'adapte : grille sur desktop, cards empilées sur mobile + +## Tasks / Subtasks + +- [ ] **Task 1: Créer l'endpoint API Laravel** (AC: #4) + - [ ] Créer `app/Http/Controllers/Api/ProjectController.php` + - [ ] Créer la méthode `index()` pour lister tous les projets + - [ ] Implémenter le tri : featured en premier, puis par date_completed DESC + - [ ] Joindre les traductions selon le header `Accept-Language` + - [ ] Créer `app/Http/Resources/ProjectResource.php` pour formater la réponse + - [ ] Ajouter la route `GET /api/projects` dans `routes/api.php` + +- [ ] **Task 2: Créer le composable useFetchProjects** (AC: #4) + - [ ] Créer `frontend/app/composables/useFetchProjects.ts` + - [ ] Utiliser `useFetch()` pour appeler l'API avec le header `Accept-Language` + - [ ] Gérer les états loading, error, data + - [ ] Typer la réponse avec l'interface Project[] + +- [ ] **Task 3: Créer la page projets.vue** (AC: #1, #6) + - [ ] Créer `frontend/app/pages/projets.vue` + - [ ] Utiliser le composable `useFetchProjects()` pour charger les données + - [ ] Afficher une grille de `ProjectCard` avec les données + - [ ] Implémenter le layout responsive : 1 colonne mobile, 2 tablette, 3-4 desktop + +- [ ] **Task 4: Implémenter l'animation d'entrée** (AC: #3) + - [ ] Animer l'apparition progressive des cards (stagger animation) + - [ ] Utiliser CSS animations ou GSAP pour un effet fade-in + slide-up + - [ ] Respecter `prefers-reduced-motion` : pas d'animation si activé + - [ ] Délai de 50-100ms entre chaque card + +- [ ] **Task 5: Tri des projets** (AC: #2) + - [ ] S'assurer que l'API retourne les projets dans le bon ordre + - [ ] Vérifier côté frontend que l'ordre est respecté + - [ ] Les projets `is_featured: true` apparaissent en premier + - [ ] Puis tri par `date_completed` DESC + +- [ ] **Task 6: Meta tags SEO** (AC: #5) + - [ ] Utiliser `useHead()` pour définir le titre dynamique + - [ ] Utiliser `useSeoMeta()` pour les meta description, og:title, og:description + - [ ] Ajouter les clés i18n pour titre et description de la page + - [ ] Exemple titre : "Projets | Skycel" / "Projects | Skycel" + +- [ ] **Task 7: État loading et erreur** + - [ ] Afficher un skeleton/loading state pendant le chargement + - [ ] Afficher un message d'erreur narratif si l'API échoue + - [ ] Bouton "Réessayer" en cas d'erreur + +- [ ] **Task 8: Tests et validation** + - [ ] Tester la page en FR et EN + - [ ] Vérifier le tri des projets + - [ ] Tester l'animation d'entrée + - [ ] Valider le responsive sur mobile/tablette/desktop + - [ ] Vérifier les meta tags avec l'inspecteur + +## Dev Notes + +### Endpoint API Laravel + +```php +header('Accept-Language', 'fr'); + + $projects = Project::query() + ->with(['skills']) + ->orderByDesc('is_featured') + ->orderByDesc('date_completed') + ->get(); + + return ProjectResource::collection($projects) + ->additional(['meta' => ['lang' => $lang]]); + } +} +``` + +```php +header('Accept-Language', 'fr'); + + return [ + 'id' => $this->id, + 'slug' => $this->slug, + 'title' => Translation::getTranslation($this->title_key, $lang), + 'description' => Translation::getTranslation($this->description_key, $lang), + 'shortDescription' => Translation::getTranslation($this->short_description_key, $lang), + 'image' => $this->image, + 'url' => $this->url, + 'githubUrl' => $this->github_url, + 'dateCompleted' => $this->date_completed?->format('Y-m-d'), + 'isFeatured' => $this->is_featured, + 'displayOrder' => $this->display_order, + 'skills' => $this->whenLoaded('skills', function () use ($lang) { + return $this->skills->map(fn ($skill) => [ + 'id' => $skill->id, + 'slug' => $skill->slug, + 'name' => Translation::getTranslation($skill->name_key, $lang), + 'levelBefore' => $skill->pivot->level_before, + 'levelAfter' => $skill->pivot->level_after, + ]); + }), + ]; + } +} +``` + +```php +// api/routes/api.php +Route::get('/projects', [ProjectController::class, 'index']); +``` + +### Composable useFetchProjects + +```typescript +// frontend/app/composables/useFetchProjects.ts +import type { Project } from '~/types/project' + +export function useFetchProjects() { + const config = useRuntimeConfig() + const { locale } = useI18n() + + return useFetch<{ data: Project[], meta: { lang: string } }>('/projects', { + baseURL: config.public.apiUrl, + headers: { + 'X-API-Key': config.public.apiKey, + 'Accept-Language': locale.value, + }, + transform: (response) => response.data, + }) +} +``` + +### Page Projets + +```vue + + + + + + +``` + +### Clés i18n nécessaires + +**fr.json :** +```json +{ + "projects": { + "title": "Mes Projets", + "pageTitle": "Projets | Skycel", + "pageDescription": "Découvrez les projets réalisés par Célian, développeur web full-stack.", + "discover": "Découvrir", + "loadError": "Impossible de charger les projets..." + }, + "common": { + "retry": "Réessayer" + } +} +``` + +**en.json :** +```json +{ + "projects": { + "title": "My Projects", + "pageTitle": "Projects | Skycel", + "pageDescription": "Discover projects created by Célian, full-stack web developer.", + "discover": "Discover", + "loadError": "Unable to load projects..." + }, + "common": { + "retry": "Retry" + } +} +``` + +### Layout responsive + +| Breakpoint | Colonnes | Gap | +|------------|----------|-----| +| Mobile (< 768px) | 1 | 24px | +| Tablette (768px - 1023px) | 2 | 24px | +| Desktop (1024px - 1279px) | 3 | 24px | +| Large (≥ 1280px) | 4 | 24px | + +### Dépendances + +**Cette story nécessite :** +- Story 1.1 : Nuxt 4 + Laravel 12 initialisés +- Story 1.2 : Table projects, Model Project avec relations +- Story 1.3 : Système i18n configuré +- Story 1.4 : Layouts et routing +- Story 2.1 : Composant ProjectCard + +**Cette story prépare pour :** +- Story 2.3 : Page Projet - Détail (navigation depuis la galerie) + +### Project Structure Notes + +**Fichiers à créer :** +``` +api/app/Http/ +├── Controllers/Api/ +│ └── ProjectController.php # CRÉER +└── Resources/ + └── ProjectResource.php # CRÉER + +frontend/app/ +├── pages/ +│ └── projets.vue # CRÉER +└── composables/ + └── useFetchProjects.ts # CRÉER +``` + +**Fichiers à modifier :** +``` +api/routes/api.php # AJOUTER route /projects +frontend/i18n/fr.json # AJOUTER clés projects.* +frontend/i18n/en.json # AJOUTER clés projects.* +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-2.2] +- [Source: docs/planning-artifacts/architecture.md#API-&-Communication-Patterns] +- [Source: docs/planning-artifacts/architecture.md#Frontend-Architecture] +- [Source: docs/planning-artifacts/ux-design-specification.md#Screen-Architecture-Summary] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| API endpoint | GET /api/projects | Architecture | +| Response format | { data: [], meta: {} } | Architecture | +| Header langue | Accept-Language | Architecture | +| Animation | Stagger fade-in | Epics | +| SEO | Meta tags dynamiques | NFR5 | + +### Previous Story Intelligence + +**Patterns établis à suivre :** +- Controllers API dans `app/Http/Controllers/Api/` +- Resources dans `app/Http/Resources/` +- Composables dans `app/composables/` +- Pages dans `app/pages/` +- Utiliser `useFetch()` avec `baseURL` et headers + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/2-3-page-projet-detail.md b/docs/implementation-artifacts/2-3-page-projet-detail.md new file mode 100644 index 0000000..d0b6944 --- /dev/null +++ b/docs/implementation-artifacts/2-3-page-projet-detail.md @@ -0,0 +1,452 @@ +# Story 2.3: Page Projet - Détail + +Status: ready-for-dev + +## Story + +As a visiteur, +I want voir les détails d'un projet spécifique, +so that je comprends le travail réalisé et les technologies utilisées. + +## Acceptance Criteria + +1. **Given** le visiteur accède à `/projets/{slug}` (FR) ou `/en/projects/{slug}` (EN) **When** la page se charge **Then** le titre, la description complète et l'image principale du projet s'affichent +2. **And** la date de réalisation est visible +3. **And** la liste des compétences utilisées s'affiche avec leurs niveaux (avant/après le projet) +4. **And** les liens externes sont présents : URL du projet live (si existe), repository GitHub (si existe) +5. **And** une navigation "Projet précédent / Projet suivant" permet de parcourir les projets +6. **And** un bouton retour vers la galerie est visible +7. **And** les meta tags SEO sont dynamiques (titre, description, image Open Graph) +8. **And** si le slug n'existe pas, une page 404 appropriée s'affiche +9. **And** le design est responsive (adaptation mobile/desktop) + +## Tasks / Subtasks + +- [ ] **Task 1: Créer l'endpoint API pour le détail du projet** (AC: #1, #2, #3, #4, #8) + - [ ] Ajouter la méthode `show($slug)` dans `ProjectController` + - [ ] Charger le projet avec ses compétences (eager loading) + - [ ] Retourner 404 si le slug n'existe pas + - [ ] Inclure les données de traduction selon `Accept-Language` + +- [ ] **Task 2: Créer l'endpoint API pour la navigation prev/next** (AC: #5) + - [ ] Ajouter une méthode `navigation($slug)` ou inclure dans `show()` + - [ ] Retourner le projet précédent et suivant (basé sur l'ordre de tri) + - [ ] Si premier projet : prev = null, si dernier : next = null + +- [ ] **Task 3: Créer le composable useFetchProject** (AC: #1) + - [ ] Créer `frontend/app/composables/useFetchProject.ts` + - [ ] Accepter le slug en paramètre + - [ ] Gérer les états loading, error, data + - [ ] Gérer l'erreur 404 + +- [ ] **Task 4: Créer la page [slug].vue** (AC: #1, #2, #3, #4, #6, #9) + - [ ] Créer `frontend/app/pages/projets/[slug].vue` + - [ ] Afficher l'image principale en grand format + - [ ] Afficher le titre et la description complète + - [ ] Afficher la date de réalisation formatée + - [ ] Afficher la liste des compétences avec progression (avant → après) + - [ ] Afficher les liens externes (site live, GitHub) si présents + - [ ] Ajouter un bouton "Retour à la galerie" + +- [ ] **Task 5: Implémenter la navigation prev/next** (AC: #5) + - [ ] Ajouter les boutons "Projet précédent" et "Projet suivant" + - [ ] Utiliser NuxtLink pour la navigation + - [ ] Afficher le titre du projet dans le bouton + - [ ] Désactiver/masquer si pas de prev ou next + +- [ ] **Task 6: Meta tags SEO dynamiques** (AC: #7) + - [ ] Utiliser `useHead()` avec le titre du projet + - [ ] Utiliser `useSeoMeta()` pour description, og:title, og:description, og:image + - [ ] L'image OG doit être l'image du projet + +- [ ] **Task 7: Gestion de l'erreur 404** (AC: #8) + - [ ] Détecter si le projet n'existe pas + - [ ] Afficher un message approprié avec le narrateur + - [ ] Proposer de retourner à la galerie + +- [ ] **Task 8: Design responsive** (AC: #9) + - [ ] Mobile : layout vertical, image pleine largeur + - [ ] Desktop : layout 2 colonnes (image + contenu) ou grande image + contenu dessous + - [ ] Liste des compétences responsive (flex wrap) + +- [ ] **Task 9: Tests et validation** + - [ ] Tester avec différents slugs de projets + - [ ] Tester la navigation prev/next + - [ ] Tester le 404 avec un slug inexistant + - [ ] Valider les meta tags SEO + - [ ] Tester le responsive + +## Dev Notes + +### Endpoint API Laravel + +```php +header('Accept-Language', 'fr'); + + $project = Project::with('skills') + ->where('slug', $slug) + ->first(); + + if (!$project) { + return response()->json([ + 'error' => [ + 'code' => 'PROJECT_NOT_FOUND', + 'message' => 'Project not found', + ] + ], 404); + } + + // Navigation prev/next + $allProjects = Project::orderByDesc('is_featured') + ->orderByDesc('date_completed') + ->get(['id', 'slug', 'title_key']); + + $currentIndex = $allProjects->search(fn ($p) => $p->slug === $slug); + + $prev = $currentIndex > 0 ? $allProjects[$currentIndex - 1] : null; + $next = $currentIndex < $allProjects->count() - 1 ? $allProjects[$currentIndex + 1] : null; + + return (new ProjectResource($project))->additional([ + 'meta' => [ + 'lang' => $lang, + ], + 'navigation' => [ + 'prev' => $prev ? [ + 'slug' => $prev->slug, + 'title' => Translation::getTranslation($prev->title_key, $lang), + ] : null, + 'next' => $next ? [ + 'slug' => $next->slug, + 'title' => Translation::getTranslation($next->title_key, $lang), + ] : null, + ], + ]); +} +``` + +```php +// api/routes/api.php +Route::get('/projects/{slug}', [ProjectController::class, 'show']); +``` + +### Composable useFetchProject + +```typescript +// frontend/app/composables/useFetchProject.ts +import type { Project } from '~/types/project' + +interface ProjectNavigation { + prev: { slug: string; title: string } | null + next: { slug: string; title: string } | null +} + +interface ProjectResponse { + data: Project + meta: { lang: string } + navigation: ProjectNavigation +} + +export function useFetchProject(slug: string | Ref) { + const config = useRuntimeConfig() + const { locale } = useI18n() + const slugValue = toValue(slug) + + return useFetch(`/projects/${slugValue}`, { + baseURL: config.public.apiUrl, + headers: { + 'X-API-Key': config.public.apiKey, + 'Accept-Language': locale.value, + }, + }) +} +``` + +### Page [slug].vue + +```vue + + + + +``` + +### Clés i18n nécessaires + +**fr.json :** +```json +{ + "projects": { + "loading": "Chargement...", + "notFound": "Projet introuvable", + "notFoundDescription": "Ce projet n'existe pas ou a été supprimé.", + "backToGallery": "Retour à la galerie", + "completedOn": "Réalisé le", + "visitSite": "Voir le site", + "viewCode": "Voir le code", + "skillsUsed": "Compétences utilisées", + "skillLevel": "Niveau", + "previous": "Projet précédent", + "next": "Projet suivant" + } +} +``` + +**en.json :** +```json +{ + "projects": { + "loading": "Loading...", + "notFound": "Project not found", + "notFoundDescription": "This project doesn't exist or has been removed.", + "backToGallery": "Back to gallery", + "completedOn": "Completed on", + "visitSite": "Visit site", + "viewCode": "View code", + "skillsUsed": "Skills used", + "skillLevel": "Level", + "previous": "Previous project", + "next": "Next project" + } +} +``` + +### Configuration i18n pour les dates + +Ajouter dans `nuxt.config.ts` la configuration des formats de date : + +```typescript +i18n: { + datetimeFormats: { + fr: { + long: { year: 'numeric', month: 'long', day: 'numeric' } + }, + en: { + long: { year: 'numeric', month: 'long', day: 'numeric' } + } + } +} +``` + +### Dépendances + +**Cette story nécessite :** +- Story 2.1 : Composant ProjectCard +- Story 2.2 : Endpoint API `/api/projects` et page galerie + +**Cette story prépare pour :** +- Story 2.5 : Compétences cliquables (liens vers projets) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── pages/ +│ └── projets/ +│ └── [slug].vue # CRÉER +└── composables/ + └── useFetchProject.ts # CRÉER +``` + +**Fichiers à modifier :** +``` +api/app/Http/Controllers/Api/ProjectController.php # AJOUTER show() +api/routes/api.php # AJOUTER route +frontend/i18n/fr.json # AJOUTER clés +frontend/i18n/en.json # AJOUTER clés +frontend/nuxt.config.ts # AJOUTER datetimeFormats +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-2.3] +- [Source: docs/planning-artifacts/architecture.md#API-&-Communication-Patterns] +- [Source: docs/planning-artifacts/ux-design-specification.md#Responsive-Strategy] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Route dynamique | /projets/[slug] | Nuxt routing | +| API endpoint | GET /api/projects/{slug} | Architecture | +| Navigation | prev/next avec titres | Epics | +| SEO | Meta dynamiques + OG image | NFR5 | +| 404 | Message approprié | Epics | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/2-4-page-competences-affichage-categories.md b/docs/implementation-artifacts/2-4-page-competences-affichage-categories.md new file mode 100644 index 0000000..96f789e --- /dev/null +++ b/docs/implementation-artifacts/2-4-page-competences-affichage-categories.md @@ -0,0 +1,567 @@ +# Story 2.4: Page Compétences - Affichage par catégories + +Status: ready-for-dev + +## Story + +As a visiteur, +I want voir les compétences du développeur organisées par catégorie, +so that je comprends son profil technique global. + +## Acceptance Criteria + +1. **Given** le visiteur accède à `/competences` (FR) ou `/en/skills` (EN) **When** la page se charge **Then** les compétences sont affichées groupées par catégorie (Frontend, Backend, Tools, Soft skills) +2. **And** chaque compétence affiche : icône, nom traduit, niveau actuel (représentation visuelle) +3. **And** les données sont chargées depuis l'API `/api/skills` avec le contenu traduit +4. **And** une animation d'entrée des éléments est présente (respectant `prefers-reduced-motion`) +5. **And** sur desktop : préparé pour accueillir le skill tree vis.js (Epic 3) +6. **And** sur mobile : liste groupée par catégorie avec design adapté +7. **And** les meta tags SEO sont dynamiques pour cette page +8. **And** chaque compétence est visuellement cliquable (affordance) + +## Tasks / Subtasks + +- [ ] **Task 1: Créer l'endpoint API Laravel pour les skills** (AC: #3) + - [ ] Créer `app/Http/Controllers/Api/SkillController.php` + - [ ] Créer la méthode `index()` pour lister toutes les compétences + - [ ] Grouper les compétences par catégorie + - [ ] Joindre les traductions selon `Accept-Language` + - [ ] Créer `app/Http/Resources/SkillResource.php` + - [ ] Ajouter la route `GET /api/skills` dans `routes/api.php` + +- [ ] **Task 2: Créer le composable useFetchSkills** (AC: #3) + - [ ] Créer `frontend/app/composables/useFetchSkills.ts` + - [ ] Gérer les états loading, error, data + - [ ] Typer la réponse avec interface Skill[] + +- [ ] **Task 3: Créer le composant SkillCard** (AC: #2, #8) + - [ ] Créer `frontend/app/components/feature/SkillCard.vue` + - [ ] Props : skill (avec name, icon, level, maxLevel) + - [ ] Afficher l'icône (si présente) ou un placeholder + - [ ] Afficher le nom traduit + - [ ] Afficher le niveau avec une barre de progression + - [ ] Style cliquable (hover effect, cursor pointer) + +- [ ] **Task 4: Créer la page competences.vue** (AC: #1, #6) + - [ ] Créer `frontend/app/pages/competences.vue` + - [ ] Charger les données avec `useFetchSkills()` + - [ ] Grouper les skills par catégorie côté frontend + - [ ] Afficher chaque catégorie comme une section avec titre + - [ ] Grille de SkillCard dans chaque section + +- [ ] **Task 5: Implémenter l'animation d'entrée** (AC: #4) + - [ ] Animation stagger pour les SkillCards (comme ProjectCard) + - [ ] Animation fade-in pour les titres de catégories + - [ ] Respecter `prefers-reduced-motion` + +- [ ] **Task 6: Design responsive** (AC: #5, #6) + - [ ] Mobile : 2 colonnes de SkillCards par catégorie + - [ ] Desktop : 4 colonnes, espace réservé pour vis.js (Epic 3) + - [ ] Catégories empilées verticalement + +- [ ] **Task 7: Représentation visuelle du niveau** (AC: #2) + - [ ] Créer une barre de progression stylisée (style RPG/XP) + - [ ] Utiliser `sky-accent` pour la partie remplie + - [ ] Afficher le ratio (ex: 4/5 ou 80%) + - [ ] Animation subtile au chargement (remplissage progressif) + +- [ ] **Task 8: Meta tags SEO** (AC: #7) + - [ ] Titre dynamique : "Compétences | Skycel" + - [ ] Description : compétences de Célian + - [ ] og:title et og:description + +- [ ] **Task 9: Tests et validation** + - [ ] Tester en FR et EN + - [ ] Vérifier le groupement par catégorie + - [ ] Valider les animations + - [ ] Tester le responsive + - [ ] Vérifier que les skills sont cliquables (préparation Story 2.5) + +## Dev Notes + +### Endpoint API Laravel + +```php +header('Accept-Language', 'fr'); + + $skills = Skill::with('projects') + ->orderBy('category') + ->orderBy('display_order') + ->get(); + + // Grouper par catégorie + $grouped = $skills->groupBy('category'); + + return response()->json([ + 'data' => $grouped->map(function ($categorySkills, $category) use ($lang) { + return [ + 'category' => $category, + 'categoryLabel' => $this->getCategoryLabel($category, $lang), + 'skills' => SkillResource::collection($categorySkills), + ]; + })->values(), + 'meta' => [ + 'lang' => $lang, + 'total' => $skills->count(), + ], + ]); + } + + private function getCategoryLabel(string $category, string $lang): string + { + $labels = [ + 'frontend' => ['fr' => 'Frontend', 'en' => 'Frontend'], + 'backend' => ['fr' => 'Backend', 'en' => 'Backend'], + 'tools' => ['fr' => 'Outils', 'en' => 'Tools'], + 'soft_skills' => ['fr' => 'Soft Skills', 'en' => 'Soft Skills'], + ]; + + return $labels[strtolower($category)][$lang] ?? $category; + } +} +``` + +```php +header('Accept-Language', 'fr'); + + return [ + 'id' => $this->id, + 'slug' => $this->slug, + 'name' => Translation::getTranslation($this->name_key, $lang), + 'description' => Translation::getTranslation($this->description_key, $lang), + 'icon' => $this->icon, + 'category' => $this->category, + 'level' => $this->getCurrentLevel(), + 'maxLevel' => $this->max_level, + 'displayOrder' => $this->display_order, + 'projectCount' => $this->whenLoaded('projects', fn () => $this->projects->count()), + ]; + } +} +``` + +```php +// api/app/Models/Skill.php - Ajouter méthode +public function getCurrentLevel(): int +{ + // Retourne le niveau max atteint dans tous les projets + $maxLevelAfter = $this->projects() + ->max('skill_project.level_after'); + + return $maxLevelAfter ?? 1; +} +``` + +```php +// api/routes/api.php +Route::get('/skills', [SkillController::class, 'index']); +``` + +### Composable useFetchSkills + +```typescript +// frontend/app/composables/useFetchSkills.ts +import type { Skill, SkillCategory } from '~/types/skill' + +interface SkillsResponse { + data: SkillCategory[] + meta: { lang: string; total: number } +} + +export function useFetchSkills() { + const config = useRuntimeConfig() + const { locale } = useI18n() + + return useFetch('/skills', { + baseURL: config.public.apiUrl, + headers: { + 'X-API-Key': config.public.apiKey, + 'Accept-Language': locale.value, + }, + }) +} +``` + +### Types TypeScript + +```typescript +// frontend/app/types/skill.ts +export interface Skill { + id: number + slug: string + name: string + description: string + icon: string | null + category: string + level: number + maxLevel: number + displayOrder: number + projectCount?: number +} + +export interface SkillCategory { + category: string + categoryLabel: string + skills: Skill[] +} +``` + +### Composant SkillCard + +```vue + + + + + + +``` + +### Page competences.vue + +```vue + + + + + + +``` + +### Clés i18n nécessaires + +**fr.json :** +```json +{ + "skills": { + "title": "Mes Compétences", + "pageTitle": "Compétences | Skycel", + "pageDescription": "Découvrez les compétences techniques et soft skills de Célian, développeur web full-stack.", + "loadError": "Impossible de charger les compétences...", + "skillTreePlaceholder": "Arbre de compétences interactif (bientôt disponible)", + "level": "Niveau", + "projects": "projets" + } +} +``` + +**en.json :** +```json +{ + "skills": { + "title": "My Skills", + "pageTitle": "Skills | Skycel", + "pageDescription": "Discover the technical skills and soft skills of Célian, full-stack web developer.", + "loadError": "Unable to load skills...", + "skillTreePlaceholder": "Interactive skill tree (coming soon)", + "level": "Level", + "projects": "projects" + } +} +``` + +### Catégories de compétences + +| Catégorie | Couleur de zone (Future) | Exemples | +|-----------|-------------------------|----------| +| Frontend | Teinte bleue | Vue.js, Nuxt, TypeScript, TailwindCSS | +| Backend | Teinte verte | Laravel, PHP, Node.js, MySQL | +| Tools | Teinte jaune | Git, Docker, VS Code | +| Soft Skills | Teinte violette | Communication, Gestion de projet | + +### Dépendances + +**Cette story nécessite :** +- Story 1.2 : Table skills, Model Skill avec relations +- Story 1.3 : Système i18n configuré + +**Cette story prépare pour :** +- Story 2.5 : Compétences cliquables → Projets liés (le clic est déjà émis) +- Story 3.5 : Skill tree vis.js (Epic 3) - placeholder préparé + +### Project Structure Notes + +**Fichiers à créer :** +``` +api/app/Http/ +├── Controllers/Api/ +│ └── SkillController.php # CRÉER +└── Resources/ + └── SkillResource.php # CRÉER + +frontend/app/ +├── pages/ +│ └── competences.vue # CRÉER +├── components/ +│ └── feature/ +│ └── SkillCard.vue # CRÉER +├── composables/ +│ └── useFetchSkills.ts # CRÉER +└── types/ + └── skill.ts # CRÉER +``` + +**Fichiers à modifier :** +``` +api/app/Models/Skill.php # AJOUTER getCurrentLevel() +api/routes/api.php # AJOUTER route /skills +frontend/i18n/fr.json # AJOUTER clés skills.* +frontend/i18n/en.json # AJOUTER clés skills.* +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-2.4] +- [Source: docs/planning-artifacts/architecture.md#API-&-Communication-Patterns] +- [Source: docs/planning-artifacts/ux-design-specification.md#Component-Strategy] +- [Source: docs/planning-artifacts/ux-design-specification.md#SkillTree] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| API endpoint | GET /api/skills | Architecture | +| Groupement | Par catégorie | Epics | +| Niveau visuel | Barre de progression | Epics | +| Placeholder vis.js | Desktop only | Epics | +| Animation | Stagger + respect motion | NFR6 | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/2-5-competences-cliquables-projets-lies.md b/docs/implementation-artifacts/2-5-competences-cliquables-projets-lies.md new file mode 100644 index 0000000..b8334e4 --- /dev/null +++ b/docs/implementation-artifacts/2-5-competences-cliquables-projets-lies.md @@ -0,0 +1,551 @@ +# Story 2.5: Compétences cliquables → Projets liés + +Status: ready-for-dev + +## Story + +As a visiteur, +I want cliquer sur une compétence pour voir les projets qui l'utilisent, +so that je peux voir des preuves concrètes de maîtrise. + +## Acceptance Criteria + +1. **Given** le visiteur est sur la page Compétences **When** il clique sur une compétence **Then** un panneau/modal s'ouvre avec la liste des projets liés à cette compétence +2. **And** pour chaque projet lié : titre, description courte, lien vers le détail +3. **And** l'indication du niveau avant/après chaque projet est visible (progression) +4. **And** une animation d'ouverture/fermeture fluide est présente (respectant `prefers-reduced-motion`) +5. **And** la fermeture est possible par clic extérieur, bouton close, ou touche Escape +6. **And** le panneau/modal utilise Headless UI pour l'accessibilité +7. **And** la navigation au clavier est fonctionnelle (Tab, Escape, Enter) +8. **And** le focus est piégé dans le modal quand ouvert (`focus trap`) +9. **And** les données viennent de la relation `skill_project` via l'API + +## Tasks / Subtasks + +- [ ] **Task 1: Créer l'endpoint API pour les projets d'une compétence** (AC: #9) + - [ ] Ajouter méthode `projects($slug)` dans `SkillController` + - [ ] Charger les projets avec leur pivot (level_before, level_after) + - [ ] Retourner 404 si le skill n'existe pas + - [ ] Joindre les traductions + +- [ ] **Task 2: Installer et configurer Headless UI** (AC: #6) + - [ ] Installer `@headlessui/vue` dans le frontend + - [ ] Vérifier la compatibilité avec Vue 3 / Nuxt 4 + +- [ ] **Task 3: Créer le composant SkillProjectsModal** (AC: #1, #2, #3, #5, #6, #7, #8) + - [ ] Créer `frontend/app/components/feature/SkillProjectsModal.vue` + - [ ] Utiliser `Dialog` de Headless UI + - [ ] Props : isOpen, skill (avec name, description) + - [ ] Emit : close + - [ ] Afficher le titre de la compétence + - [ ] Afficher la description de la compétence + - [ ] Liste des projets liés + +- [ ] **Task 4: Créer le composant ProjectListItem** (AC: #2, #3) + - [ ] Créer `frontend/app/components/feature/ProjectListItem.vue` + - [ ] Afficher titre, description courte, niveau avant/après + - [ ] Lien vers la page détail du projet + - [ ] Visualisation de la progression (flèche niveau) + +- [ ] **Task 5: Charger les projets au clic** (AC: #9) + - [ ] Créer composable `useFetchSkillProjects(slug)` + - [ ] Appeler l'API quand le modal s'ouvre + - [ ] Gérer l'état loading/error dans le modal + +- [ ] **Task 6: Implémenter les animations** (AC: #4) + - [ ] Animation d'ouverture : fade-in + scale + - [ ] Animation de fermeture : fade-out + scale + - [ ] Overlay avec backdrop blur + - [ ] Respecter `prefers-reduced-motion` + +- [ ] **Task 7: Fermeture du modal** (AC: #5) + - [ ] Clic sur l'overlay ferme le modal + - [ ] Bouton close (X) en haut à droite + - [ ] Touche Escape ferme le modal + - [ ] Restaurer le focus à l'élément précédent + +- [ ] **Task 8: Intégrer dans la page Compétences** (AC: #1) + - [ ] Modifier `competences.vue` pour ouvrir le modal + - [ ] Gérer l'état du modal (isOpen, selectedSkill) + - [ ] Passer les props au modal + +- [ ] **Task 9: Tests et validation** + - [ ] Tester l'ouverture/fermeture + - [ ] Valider la navigation clavier (Tab, Escape) + - [ ] Tester le focus trap + - [ ] Vérifier l'accessibilité avec axe DevTools + - [ ] Tester en FR et EN + - [ ] Valider les animations + +## Dev Notes + +### Endpoint API Laravel + +```php +header('Accept-Language', 'fr'); + + $skill = Skill::with('projects') + ->where('slug', $slug) + ->first(); + + if (!$skill) { + return response()->json([ + 'error' => [ + 'code' => 'SKILL_NOT_FOUND', + 'message' => 'Skill not found', + ] + ], 404); + } + + return response()->json([ + 'data' => [ + 'skill' => [ + 'id' => $skill->id, + 'slug' => $skill->slug, + 'name' => Translation::getTranslation($skill->name_key, $lang), + 'description' => Translation::getTranslation($skill->description_key, $lang), + 'level' => $skill->getCurrentLevel(), + 'maxLevel' => $skill->max_level, + ], + 'projects' => $skill->projects->map(function ($project) use ($lang) { + return [ + 'id' => $project->id, + 'slug' => $project->slug, + 'title' => Translation::getTranslation($project->title_key, $lang), + 'shortDescription' => Translation::getTranslation($project->short_description_key, $lang), + 'image' => $project->image, + 'dateCompleted' => $project->date_completed?->format('Y-m-d'), + 'levelBefore' => $project->pivot->level_before, + 'levelAfter' => $project->pivot->level_after, + 'levelDescription' => $project->pivot->level_description_key + ? Translation::getTranslation($project->pivot->level_description_key, $lang) + : null, + ]; + }), + ], + 'meta' => ['lang' => $lang], + ]); +} +``` + +```php +// api/routes/api.php +Route::get('/skills/{slug}/projects', [SkillController::class, 'projects']); +``` + +### Installation Headless UI + +```bash +cd frontend +npm install @headlessui/vue +``` + +### Composable useFetchSkillProjects + +```typescript +// frontend/app/composables/useFetchSkillProjects.ts +import type { Skill } from '~/types/skill' +import type { Project } from '~/types/project' + +interface SkillProjectsResponse { + data: { + skill: Skill + projects: (Project & { levelBefore: number; levelAfter: number; levelDescription?: string })[] + } + meta: { lang: string } +} + +export function useFetchSkillProjects(slug: Ref) { + const config = useRuntimeConfig() + const { locale } = useI18n() + + return useFetch( + () => slug.value ? `/skills/${slug.value}/projects` : null, + { + baseURL: config.public.apiUrl, + headers: { + 'X-API-Key': config.public.apiKey, + 'Accept-Language': locale.value, + }, + immediate: false, + watch: false, + } + ) +} +``` + +### Composant SkillProjectsModal + +```vue + + + + + + +``` + +### Composant ProjectListItem + +```vue + + + + +``` + +### Modification de competences.vue + +```vue + + + + +``` + +### Clés i18n nécessaires + +**fr.json :** +```json +{ + "skills": { + "relatedProjects": "Projets utilisant cette compétence", + "loadProjectsError": "Impossible de charger les projets liés", + "noProjects": "Aucun projet n'utilise encore cette compétence", + "level": "Niveau" + }, + "common": { + "close": "Fermer" + } +} +``` + +**en.json :** +```json +{ + "skills": { + "relatedProjects": "Projects using this skill", + "loadProjectsError": "Unable to load related projects", + "noProjects": "No projects use this skill yet", + "level": "Level" + }, + "common": { + "close": "Close" + } +} +``` + +### Accessibilité + +| Requirement | Implementation | +|-------------|----------------| +| Focus trap | Géré automatiquement par Headless UI Dialog | +| Keyboard navigation | Tab entre les éléments, Escape pour fermer | +| Screen reader | DialogTitle annoncé, aria-modal="true" | +| Fermeture externe | Clic overlay, bouton X, Escape | +| Focus restoration | Automatique par Headless UI | + +### Dépendances + +**Cette story nécessite :** +- Story 1.2 : Table skill_project avec relations +- Story 2.4 : Page Compétences avec SkillCard cliquable + +**Cette story prépare pour :** +- Aucune dépendance directe + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/components/feature/ +├── SkillProjectsModal.vue # CRÉER +└── ProjectListItem.vue # CRÉER + +frontend/app/composables/ +└── useFetchSkillProjects.ts # CRÉER +``` + +**Fichiers à modifier :** +``` +api/app/Http/Controllers/Api/SkillController.php # AJOUTER projects() +api/routes/api.php # AJOUTER route +frontend/app/pages/competences.vue # AJOUTER modal +frontend/i18n/fr.json # AJOUTER clés +frontend/i18n/en.json # AJOUTER clés +frontend/package.json # AJOUTER @headlessui/vue +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-2.5] +- [Source: docs/planning-artifacts/architecture.md#Design-System-Components] +- [Source: docs/planning-artifacts/ux-design-specification.md#Design-System-Components-Headless] +- [Source: docs/planning-artifacts/ux-design-specification.md#Accessibility-Strategy] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| UI Library | Headless UI Dialog | Architecture | +| Focus trap | Required | WCAG AA | +| Keyboard nav | Tab, Escape, Enter | WCAG AA | +| Animation | Respect prefers-reduced-motion | NFR6 | +| API endpoint | GET /api/skills/{slug}/projects | Architecture | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/2-6-page-temoignages-migrations-bdd.md b/docs/implementation-artifacts/2-6-page-temoignages-migrations-bdd.md new file mode 100644 index 0000000..95eb9f6 --- /dev/null +++ b/docs/implementation-artifacts/2-6-page-temoignages-migrations-bdd.md @@ -0,0 +1,660 @@ +# Story 2.6: Page Témoignages et migrations BDD + +Status: ready-for-dev + +## Story + +As a visiteur, +I want voir les témoignages des personnes ayant travaillé avec le développeur, +so that j'ai une validation sociale de ses compétences. + +## Acceptance Criteria + +1. **Given** les migrations Laravel sont exécutées **When** `php artisan migrate` est lancé **Then** la table `testimonials` est créée (id, name, role, company, avatar, text_key, personality ENUM, project_id FK nullable, display_order, is_active, timestamps) +2. **And** les seeders de test sont disponibles avec des témoignages en FR et EN +3. **Given** le visiteur accède à `/temoignages` (FR) ou `/en/testimonials` (EN) **When** la page se charge **Then** la liste des témoignages s'affiche depuis l'API `/api/testimonials` +4. **And** chaque témoignage affiche : nom, rôle, entreprise, avatar, texte traduit +5. **And** la personnalité de chaque PNJ est indiquée visuellement (style différent selon personality) +6. **And** un lien vers le projet associé est présent si pertinent +7. **And** l'ordre d'affichage respecte `display_order` +8. **And** le design est préparé pour accueillir le composant DialoguePNJ (story suivante) +9. **And** les meta tags SEO sont dynamiques pour cette page + +## Tasks / Subtasks + +- [ ] **Task 1: Créer la migration table testimonials** (AC: #1) + - [ ] Créer migration `create_testimonials_table` + - [ ] Colonnes : id, name, role, company, avatar, text_key, personality (ENUM: sage, sarcastique, enthousiaste, professionnel), project_id (FK nullable), display_order, is_active (boolean), timestamps + - [ ] Foreign key project_id → projects.id (nullable, ON DELETE SET NULL) + - [ ] Index sur display_order pour le tri + - [ ] Index sur is_active pour le filtrage + +- [ ] **Task 2: Créer le Model Testimonial** (AC: #1) + - [ ] Créer `app/Models/Testimonial.php` + - [ ] Définir les fillable : name, role, company, avatar, text_key, personality, project_id, display_order, is_active + - [ ] Casts : is_active → boolean + - [ ] Relation `project()` : belongsTo(Project::class) + - [ ] Scope `scopeActive($query)` pour filtrer les actifs + - [ ] Scope `scopeOrdered($query)` pour le tri + +- [ ] **Task 3: Créer le Seeder des témoignages** (AC: #2) + - [ ] Créer `database/seeders/TestimonialSeeder.php` + - [ ] Ajouter 4-5 témoignages de test avec différentes personnalités + - [ ] Ajouter les traductions FR et EN dans TranslationSeeder + - [ ] Lier certains témoignages à des projets existants + - [ ] Mettre à jour `DatabaseSeeder.php` + +- [ ] **Task 4: Créer l'endpoint API testimonials** (AC: #3, #4, #6, #7) + - [ ] Créer `app/Http/Controllers/Api/TestimonialController.php` + - [ ] Méthode `index()` pour lister les témoignages actifs + - [ ] Créer `app/Http/Resources/TestimonialResource.php` + - [ ] Inclure le projet lié (si existe) avec titre traduit + - [ ] Trier par display_order + - [ ] Ajouter la route `GET /api/testimonials` + +- [ ] **Task 5: Créer le composable useFetchTestimonials** (AC: #3) + - [ ] Créer `frontend/app/composables/useFetchTestimonials.ts` + - [ ] Typer la réponse avec interface Testimonial[] + +- [ ] **Task 6: Créer la page temoignages.vue** (AC: #3, #4, #5, #8) + - [ ] Créer `frontend/app/pages/temoignages.vue` + - [ ] Charger les données avec le composable + - [ ] Afficher chaque témoignage comme une card + - [ ] Appliquer un style visuel selon la personnalité + - [ ] Préparer l'emplacement pour DialoguePNJ + +- [ ] **Task 7: Créer le composant TestimonialCard** (AC: #4, #5, #6) + - [ ] Créer `frontend/app/components/feature/TestimonialCard.vue` + - [ ] Props : testimonial (avec name, role, company, avatar, text, personality, project) + - [ ] Afficher l'avatar, le nom, le rôle, l'entreprise + - [ ] Afficher le texte du témoignage + - [ ] Style de bulle selon la personnalité + - [ ] Lien vers le projet si présent + +- [ ] **Task 8: Styles visuels par personnalité** (AC: #5) + - [ ] Définir 4 styles de bulles/cards selon personality : + - sage : style calme, bordure subtile + - sarcastique : style décalé, accent différent + - enthousiaste : style vif, couleurs plus marquées + - professionnel : style sobre, formel + - [ ] Classes CSS ou Tailwind variants + +- [ ] **Task 9: Meta tags SEO** (AC: #9) + - [ ] Titre : "Témoignages | Skycel" + - [ ] Description dynamique + +- [ ] **Task 10: Tests et validation** + - [ ] Exécuter les migrations + - [ ] Vérifier le seeding des données + - [ ] Tester l'API en FR et EN + - [ ] Valider l'affichage de la page + - [ ] Vérifier les liens vers projets + +## Dev Notes + +### Migration testimonials + +```php +id(); + $table->string('name'); + $table->string('role'); + $table->string('company')->nullable(); + $table->string('avatar')->nullable(); + $table->string('text_key'); + $table->enum('personality', ['sage', 'sarcastique', 'enthousiaste', 'professionnel'])->default('professionnel'); + $table->foreignId('project_id')->nullable()->constrained()->nullOnDelete(); + $table->integer('display_order')->default(0); + $table->boolean('is_active')->default(true); + $table->timestamps(); + + $table->index('display_order'); + $table->index('is_active'); + }); + } + + public function down(): void + { + Schema::dropIfExists('testimonials'); + } +}; +``` + +### Model Testimonial + +```php + 'boolean', + ]; + + public function project(): BelongsTo + { + return $this->belongsTo(Project::class); + } + + public function scopeActive($query) + { + return $query->where('is_active', true); + } + + public function scopeOrdered($query) + { + return $query->orderBy('display_order'); + } +} +``` + +### Seeder des témoignages + +```php + 'Marie Dupont', + 'role' => 'CTO', + 'company' => 'TechStartup', + 'avatar' => '/images/testimonials/marie.jpg', + 'text_key' => 'testimonial.marie.text', + 'personality' => 'enthousiaste', + 'project_id' => 1, + 'display_order' => 1, + ], + [ + 'name' => 'Pierre Martin', + 'role' => 'Lead Developer', + 'company' => 'DevAgency', + 'avatar' => '/images/testimonials/pierre.jpg', + 'text_key' => 'testimonial.pierre.text', + 'personality' => 'professionnel', + 'project_id' => 2, + 'display_order' => 2, + ], + [ + 'name' => 'Sophie Bernard', + 'role' => 'Product Manager', + 'company' => 'InnovateCorp', + 'avatar' => '/images/testimonials/sophie.jpg', + 'text_key' => 'testimonial.sophie.text', + 'personality' => 'sage', + 'project_id' => null, + 'display_order' => 3, + ], + [ + 'name' => 'Thomas Leroy', + 'role' => 'Freelance Designer', + 'company' => null, + 'avatar' => '/images/testimonials/thomas.jpg', + 'text_key' => 'testimonial.thomas.text', + 'personality' => 'sarcastique', + 'project_id' => null, + 'display_order' => 4, + ], + ]; + + foreach ($testimonials as $data) { + Testimonial::create($data); + } + + // Traductions + $translations = [ + ['key' => 'testimonial.marie.text', 'fr' => "Travailler avec Célian a été une révélation ! Son approche créative et sa maîtrise technique ont transformé notre projet. Je recommande sans hésitation !", 'en' => "Working with Célian was a revelation! His creative approach and technical mastery transformed our project. I highly recommend!"], + ['key' => 'testimonial.pierre.text', 'fr' => "Code propre, architecture solide, communication claire. Célian sait exactement ce qu'il fait et le fait bien.", 'en' => "Clean code, solid architecture, clear communication. Célian knows exactly what he's doing and does it well."], + ['key' => 'testimonial.sophie.text', 'fr' => "Une personne rare qui combine vision produit et excellence technique. Les retours utilisateurs parlent d'eux-mêmes.", 'en' => "A rare person who combines product vision and technical excellence. User feedback speaks for itself."], + ['key' => 'testimonial.thomas.text', 'fr' => "Bon, j'avoue, au début je pensais que les devs ne comprenaient rien au design. Célian m'a prouvé le contraire. Presque agaçant.", 'en' => "Okay, I admit, at first I thought devs didn't understand design. Célian proved me wrong. Almost annoying."], + ]; + + foreach ($translations as $t) { + Translation::create(['lang' => 'fr', 'key_name' => $t['key'], 'value' => $t['fr']]); + Translation::create(['lang' => 'en', 'key_name' => $t['key'], 'value' => $t['en']]); + } + } +} +``` + +### Controller et Resource + +```php +header('Accept-Language', 'fr'); + + $testimonials = Testimonial::with('project') + ->active() + ->ordered() + ->get(); + + return TestimonialResource::collection($testimonials) + ->additional(['meta' => ['lang' => $lang]]); + } +} +``` + +```php +header('Accept-Language', 'fr'); + + return [ + 'id' => $this->id, + 'name' => $this->name, + 'role' => $this->role, + 'company' => $this->company, + 'avatar' => $this->avatar, + 'text' => Translation::getTranslation($this->text_key, $lang), + 'personality' => $this->personality, + 'displayOrder' => $this->display_order, + 'project' => $this->whenLoaded('project', function () use ($lang) { + return $this->project ? [ + 'id' => $this->project->id, + 'slug' => $this->project->slug, + 'title' => Translation::getTranslation($this->project->title_key, $lang), + ] : null; + }), + ]; + } +} +``` + +```php +// api/routes/api.php +Route::get('/testimonials', [TestimonialController::class, 'index']); +``` + +### Types TypeScript + +```typescript +// frontend/app/types/testimonial.ts +export interface Testimonial { + id: number + name: string + role: string + company: string | null + avatar: string | null + text: string + personality: 'sage' | 'sarcastique' | 'enthousiaste' | 'professionnel' + displayOrder: number + project?: { + id: number + slug: string + title: string + } | null +} +``` + +### Composant TestimonialCard + +```vue + + + + +``` + +### Page temoignages.vue + +```vue + + + + + + +``` + +### Clés i18n + +**fr.json :** +```json +{ + "testimonials": { + "title": "Témoignages", + "pageTitle": "Témoignages | Skycel", + "pageDescription": "Découvrez ce que disent les personnes qui ont travaillé avec Célian.", + "loadError": "Impossible de charger les témoignages...", + "relatedProject": "Projet associé", + "personality": { + "sage": "Sage", + "sarcastique": "Sarcastique", + "enthousiaste": "Enthousiaste", + "professionnel": "Professionnel" + } + } +} +``` + +**en.json :** +```json +{ + "testimonials": { + "title": "Testimonials", + "pageTitle": "Testimonials | Skycel", + "pageDescription": "Discover what people who worked with Célian have to say.", + "loadError": "Unable to load testimonials...", + "relatedProject": "Related project", + "personality": { + "sage": "Wise", + "sarcastique": "Sarcastic", + "enthousiaste": "Enthusiastic", + "professionnel": "Professional" + } + } +} +``` + +### Dépendances + +**Cette story nécessite :** +- Story 1.2 : Table projects pour la FK +- Story 1.3 : Système i18n configuré + +**Cette story prépare pour :** +- Story 2.7 : Composant DialoguePNJ + +### Project Structure Notes + +**Fichiers à créer :** +``` +api/ +├── app/Models/ +│ └── Testimonial.php # CRÉER +├── app/Http/Controllers/Api/ +│ └── TestimonialController.php # CRÉER +├── app/Http/Resources/ +│ └── TestimonialResource.php # CRÉER +└── database/ + ├── migrations/ + │ └── 2026_02_04_000001_create_testimonials_table.php # CRÉER + └── seeders/ + └── TestimonialSeeder.php # CRÉER + +frontend/app/ +├── pages/ +│ └── temoignages.vue # CRÉER +├── components/feature/ +│ └── TestimonialCard.vue # CRÉER +├── composables/ +│ └── useFetchTestimonials.ts # CRÉER +└── types/ + └── testimonial.ts # CRÉER +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-2.6] +- [Source: docs/planning-artifacts/architecture.md#API-&-Communication-Patterns] +- [Source: docs/planning-artifacts/ux-design-specification.md#DialoguePNJ] +- [Source: docs/brainstorming-gamification-2026-01-26.md#Personnalites-PNJ] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Table | testimonials avec personality ENUM | Epics | +| API endpoint | GET /api/testimonials | Architecture | +| Personnalités | sage, sarcastique, enthousiaste, professionnel | Brainstorming | +| FK project_id | Nullable, ON DELETE SET NULL | Architecture | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/2-7-composant-dialogue-pnj.md b/docs/implementation-artifacts/2-7-composant-dialogue-pnj.md new file mode 100644 index 0000000..297285f --- /dev/null +++ b/docs/implementation-artifacts/2-7-composant-dialogue-pnj.md @@ -0,0 +1,662 @@ +# Story 2.7: Composant Dialogue PNJ + +Status: ready-for-dev + +## Story + +As a visiteur, +I want lire les témoignages comme des dialogues de personnages style Zelda, +so that l'expérience est immersive et mémorable. + +## Acceptance Criteria + +1. **Given** le composant `DialoguePNJ` est implémenté **When** il reçoit les données d'un témoignage en props **Then** l'avatar du PNJ s'affiche à gauche avec un style illustratif +2. **And** une bulle de dialogue s'affiche à droite avec le texte +3. **And** l'effet typewriter fait apparaître le texte lettre par lettre +4. **And** un clic ou appui sur Espace accélère l'animation typewriter (x3-x5) +5. **And** la personnalité du PNJ influence le style visuel de la bulle (sage, sarcastique, enthousiaste, professionnel) +6. **And** la police serif narrative est utilisée pour le texte du dialogue +7. **And** `prefers-reduced-motion` affiche le texte complet instantanément +8. **And** le texte complet est accessible via `aria-label` pour les screen readers +9. **And** une navigation entre témoignages est disponible (précédent/suivant) +10. **And** une transition animée s'effectue entre les PNJ +11. **And** un indicateur du témoignage actuel est visible (ex: 2/5) +12. **And** la navigation au clavier est fonctionnelle (flèches gauche/droite) + +## Tasks / Subtasks + +- [ ] **Task 1: Créer le composant DialoguePNJ** (AC: #1, #2, #5, #6) + - [ ] Créer `frontend/app/components/feature/DialoguePNJ.vue` + - [ ] Props : testimonials (array), initialIndex (number) + - [ ] Layout : avatar à gauche, bulle de dialogue à droite + - [ ] Styles différents selon personality + +- [ ] **Task 2: Implémenter l'effet typewriter** (AC: #3, #4) + - [ ] Créer un composable `useTypewriter` pour l'animation + - [ ] Afficher le texte lettre par lettre (vitesse ~30-50ms) + - [ ] Clic ou Espace accélère l'animation (x3-x5) + - [ ] État : "typing" ou "complete" + +- [ ] **Task 3: Gérer prefers-reduced-motion** (AC: #7) + - [ ] Détecter la préférence via media query + - [ ] Si activé, afficher le texte complet instantanément + - [ ] Créer un composable `useReducedMotion()` + +- [ ] **Task 4: Accessibilité** (AC: #8) + - [ ] Ajouter `aria-label` avec le texte complet + - [ ] `role="article"` sur le conteneur de dialogue + - [ ] `aria-live="polite"` pour annoncer les changements + +- [ ] **Task 5: Navigation entre témoignages** (AC: #9, #10, #11, #12) + - [ ] Boutons précédent/suivant + - [ ] Indicateur de position (2/5) + - [ ] Transition animée entre les PNJ (fade/slide) + - [ ] Navigation clavier : flèches gauche/droite + - [ ] Focus trap sur le composant + +- [ ] **Task 6: Intégrer dans la page Témoignages** (AC: tous) + - [ ] Remplacer les TestimonialCards par DialoguePNJ + - [ ] Mode "dialogue" pour l'expérience immersive + - [ ] Option pour revenir à la vue "liste" + +- [ ] **Task 7: Styles visuels par personnalité** (AC: #5) + - [ ] sage : bulle bleutée, bordure calme + - [ ] sarcastique : bulle violacée, italique + - [ ] enthousiaste : bulle orange accent, texte dynamique + - [ ] professionnel : bulle grise, sobre + +- [ ] **Task 8: Tests et validation** + - [ ] Tester l'effet typewriter + - [ ] Valider l'accélération au clic/Espace + - [ ] Tester prefers-reduced-motion + - [ ] Valider la navigation clavier + - [ ] Vérifier l'accessibilité avec screen reader + +## Dev Notes + +### Composable useTypewriter + +```typescript +// frontend/app/composables/useTypewriter.ts +export interface UseTypewriterOptions { + text: string + speed?: number // ms entre chaque caractère + speedMultiplier?: number // facteur d'accélération +} + +export function useTypewriter(options: UseTypewriterOptions) { + const { text, speed = 40, speedMultiplier = 5 } = options + + const displayedText = ref('') + const isTyping = ref(true) + const isAccelerated = ref(false) + let timeoutId: NodeJS.Timeout | null = null + let currentIndex = 0 + + const reducedMotion = useReducedMotion() + + function typeNextChar() { + if (currentIndex < text.length) { + displayedText.value += text[currentIndex] + currentIndex++ + + const currentSpeed = isAccelerated.value ? speed / speedMultiplier : speed + timeoutId = setTimeout(typeNextChar, currentSpeed) + } else { + isTyping.value = false + } + } + + function start() { + if (reducedMotion.value) { + // Afficher tout le texte immédiatement + displayedText.value = text + isTyping.value = false + return + } + + displayedText.value = '' + currentIndex = 0 + isTyping.value = true + isAccelerated.value = false + typeNextChar() + } + + function accelerate() { + isAccelerated.value = true + } + + function skip() { + if (timeoutId) clearTimeout(timeoutId) + displayedText.value = text + isTyping.value = false + } + + function reset() { + if (timeoutId) clearTimeout(timeoutId) + displayedText.value = '' + currentIndex = 0 + isTyping.value = true + isAccelerated.value = false + } + + onMounted(() => { + start() + }) + + onUnmounted(() => { + if (timeoutId) clearTimeout(timeoutId) + }) + + return { + displayedText: readonly(displayedText), + isTyping: readonly(isTyping), + accelerate, + skip, + reset, + start, + } +} +``` + +### Composable useReducedMotion + +```typescript +// frontend/app/composables/useReducedMotion.ts +export function useReducedMotion() { + const reducedMotion = ref(false) + + onMounted(() => { + const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)') + reducedMotion.value = mediaQuery.matches + + const handler = (e: MediaQueryListEvent) => { + reducedMotion.value = e.matches + } + + mediaQuery.addEventListener('change', handler) + + onUnmounted(() => { + mediaQuery.removeEventListener('change', handler) + }) + }) + + return readonly(reducedMotion) +} +``` + +### Composant DialoguePNJ + +```vue + + + + + + +``` + +### Modification de la page Témoignages + +```vue + + + + +``` + +### Clés i18n nécessaires + +**fr.json :** +```json +{ + "testimonials": { + "clickToContinue": "Cliquez ou appuyez sur Espace pour continuer...", + "previous": "Précédent", + "next": "Suivant", + "finish": "Terminer", + "keyboardHint": "Utilisez les flèches ← → pour naviguer, Espace pour accélérer", + "dialogueMode": "Dialogue", + "listMode": "Liste" + } +} +``` + +**en.json :** +```json +{ + "testimonials": { + "clickToContinue": "Click or press Space to continue...", + "previous": "Previous", + "next": "Next", + "finish": "Finish", + "keyboardHint": "Use ← → arrows to navigate, Space to speed up", + "dialogueMode": "Dialogue", + "listMode": "List" + } +} +``` + +### Dépendances + +**Cette story nécessite :** +- Story 2.6 : Table testimonials, API, type Testimonial + +**Cette story prépare pour :** +- Story 3.2 : NarratorBubble (pattern similaire typewriter) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── components/feature/ +│ └── DialoguePNJ.vue # CRÉER +└── composables/ + ├── useTypewriter.ts # CRÉER + └── useReducedMotion.ts # CRÉER +``` + +**Fichiers à modifier :** +``` +frontend/app/pages/temoignages.vue # MODIFIER pour intégrer DialoguePNJ +frontend/i18n/fr.json # AJOUTER clés +frontend/i18n/en.json # AJOUTER clés +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-2.7] +- [Source: docs/planning-artifacts/ux-design-specification.md#DialoguePNJ] +- [Source: docs/planning-artifacts/ux-design-specification.md#Accessibility-Strategy] +- [Source: docs/planning-artifacts/ux-design-specification.md#Typography-System] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Typewriter speed | 30-50ms par caractère | UX Spec | +| Accélération | x3-x5 | Epics | +| Police | font-narrative (serif) | UX Spec | +| prefers-reduced-motion | Texte instantané | NFR6 | +| Accessibilité | aria-label, keyboard nav | WCAG AA | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/2-8-page-parcours-timeline-narrative.md b/docs/implementation-artifacts/2-8-page-parcours-timeline-narrative.md new file mode 100644 index 0000000..dab1ff2 --- /dev/null +++ b/docs/implementation-artifacts/2-8-page-parcours-timeline-narrative.md @@ -0,0 +1,540 @@ +# Story 2.8: Page Parcours - Timeline narrative + +Status: ready-for-dev + +## Story + +As a visiteur, +I want découvrir le parcours professionnel du développeur sous forme de timeline, +so that je comprends son évolution et son expérience. + +## Acceptance Criteria + +1. **Given** le visiteur accède à `/parcours` (FR) ou `/en/journey` (EN) **When** la page se charge **Then** une timeline verticale affiche les étapes chronologiques du parcours +2. **And** chaque étape affiche : date, titre, description narrative traduite +3. **And** sur desktop : les étapes alternent gauche/droite pour un effet visuel dynamique +4. **And** sur mobile : les étapes sont linéaires (toutes du même côté) +5. **And** une animation d'apparition au scroll est présente (respectant `prefers-reduced-motion`) +6. **And** des icônes ou images illustrent les étapes clés +7. **And** le contenu est bilingue (FR/EN) et chargé depuis l'API ou fichiers i18n +8. **And** les meta tags SEO sont dynamiques pour cette page +9. **And** la police serif narrative est utilisée pour les descriptions + +## Tasks / Subtasks + +- [ ] **Task 1: Décider de la source de données** (AC: #7) + - [ ] Option A : Fichiers i18n (données statiques) + - [ ] Option B : Table BDD + API (données dynamiques) + - [ ] Recommandation : Fichiers i18n (le parcours change rarement, pas besoin de CRUD) + +- [ ] **Task 2: Créer les données du parcours dans i18n** (AC: #2, #7) + - [ ] Ajouter les clés `journey.milestones` dans fr.json et en.json + - [ ] Structure : date, title, description, icon + - [ ] 5-8 étapes du parcours professionnel + +- [ ] **Task 3: Créer le composant TimelineItem** (AC: #2, #6, #9) + - [ ] Créer `frontend/app/components/feature/TimelineItem.vue` + - [ ] Props : milestone (date, title, description, icon) + - [ ] Afficher l'icône/image, la date, le titre et la description + - [ ] Utiliser font-narrative pour la description + +- [ ] **Task 4: Créer la page parcours.vue** (AC: #1, #3, #4) + - [ ] Créer `frontend/app/pages/parcours.vue` + - [ ] Charger les milestones depuis i18n + - [ ] Layout timeline vertical avec ligne centrale + - [ ] Desktop : alternance gauche/droite + - [ ] Mobile : toutes les étapes à droite + +- [ ] **Task 5: Implémenter l'animation au scroll** (AC: #5) + - [ ] Utiliser IntersectionObserver pour détecter l'entrée dans le viewport + - [ ] Animation fade-in + slide-up pour chaque étape + - [ ] Respecter prefers-reduced-motion + - [ ] Créer un composable `useIntersectionObserver()` + +- [ ] **Task 6: Design de la timeline** (AC: #3, #4) + - [ ] Ligne centrale verticale (sky-dark-100) + - [ ] Points de connexion sur la ligne (circles sky-accent) + - [ ] Cards avec flèche vers la ligne centrale + - [ ] Responsive : adaptation mobile + +- [ ] **Task 7: Meta tags SEO** (AC: #8) + - [ ] Titre : "Mon Parcours | Skycel" + - [ ] Description du parcours + +- [ ] **Task 8: Tests et validation** + - [ ] Tester en FR et EN + - [ ] Valider l'alternance desktop + - [ ] Vérifier le layout mobile + - [ ] Tester l'animation au scroll + - [ ] Valider prefers-reduced-motion + +## Dev Notes + +### Structure des données dans i18n + +**fr.json :** +```json +{ + "journey": { + "title": "Mon Parcours", + "pageTitle": "Parcours | Skycel", + "pageDescription": "Découvrez le parcours professionnel de Célian, de ses débuts à aujourd'hui.", + "milestones": [ + { + "date": "2018", + "title": "Premiers pas en développement", + "description": "Découverte du code à travers des projets personnels. HTML, CSS, JavaScript deviennent mes nouveaux compagnons de route. L'étincelle est là.", + "icon": "🚀" + }, + { + "date": "2019", + "title": "Formation intensive", + "description": "Plongée dans le monde du développement web professionnel. Apprentissage de frameworks modernes, bonnes pratiques, et méthodologies agiles.", + "icon": "📚" + }, + { + "date": "2020", + "title": "Premiers clients", + "description": "Lancement en freelance. Premiers projets concrets, premiers défis réels. Chaque client m'apprend quelque chose de nouveau.", + "icon": "💼" + }, + { + "date": "2021", + "title": "Spécialisation Vue.js & Laravel", + "description": "Le duo qui change tout. Vue.js côté front, Laravel côté back. Une stack qui me permet de créer des expériences web complètes et performantes.", + "icon": "⚡" + }, + { + "date": "2022", + "title": "Création de la micro-entreprise", + "description": "Officialisation de l'aventure entrepreneuriale. L'araignée devient la mascotte, le Bug devient le guide. L'identité Skycel prend forme.", + "icon": "🕷️" + }, + { + "date": "2023-2024", + "title": "Projets ambitieux", + "description": "Des applications web complexes aux sites e-commerce, chaque projet repousse les limites. TypeScript, Nuxt 4, et une obsession pour la qualité.", + "icon": "🎯" + }, + { + "date": "2025", + "title": "Aujourd'hui", + "description": "Ce portfolio que vous explorez. Une aventure en soi, qui reflète ma passion pour créer des expériences web mémorables. Et ce n'est que le début...", + "icon": "✨" + } + ] + } +} +``` + +**en.json :** +```json +{ + "journey": { + "title": "My Journey", + "pageTitle": "Journey | Skycel", + "pageDescription": "Discover Célian's professional journey, from the beginning to today.", + "milestones": [ + { + "date": "2018", + "title": "First steps in development", + "description": "Discovering code through personal projects. HTML, CSS, JavaScript became my new travel companions. The spark was there.", + "icon": "🚀" + }, + { + "date": "2019", + "title": "Intensive training", + "description": "Deep dive into professional web development. Learning modern frameworks, best practices, and agile methodologies.", + "icon": "📚" + }, + { + "date": "2020", + "title": "First clients", + "description": "Starting as a freelancer. First real projects, first real challenges. Each client teaches me something new.", + "icon": "💼" + }, + { + "date": "2021", + "title": "Specialization in Vue.js & Laravel", + "description": "The game-changing duo. Vue.js on the front, Laravel on the back. A stack that allows me to create complete, performant web experiences.", + "icon": "⚡" + }, + { + "date": "2022", + "title": "Creating the micro-enterprise", + "description": "Making the entrepreneurial adventure official. The spider becomes the mascot, the Bug becomes the guide. The Skycel identity takes shape.", + "icon": "🕷️" + }, + { + "date": "2023-2024", + "title": "Ambitious projects", + "description": "From complex web applications to e-commerce sites, each project pushes boundaries. TypeScript, Nuxt 4, and an obsession with quality.", + "icon": "🎯" + }, + { + "date": "2025", + "title": "Today", + "description": "This portfolio you're exploring. An adventure in itself, reflecting my passion for creating memorable web experiences. And this is just the beginning...", + "icon": "✨" + } + ] + } +} +``` + +### Composable useIntersectionObserver + +```typescript +// frontend/app/composables/useIntersectionObserver.ts +export interface UseIntersectionObserverOptions { + threshold?: number + rootMargin?: string + once?: boolean +} + +export function useIntersectionObserver( + target: Ref, + options: UseIntersectionObserverOptions = {} +) { + const { threshold = 0.1, rootMargin = '0px', once = true } = options + + const isVisible = ref(false) + + let observer: IntersectionObserver | null = null + + onMounted(() => { + if (!target.value) return + + observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + isVisible.value = true + if (once && observer) { + observer.unobserve(entry.target) + } + } else if (!once) { + isVisible.value = false + } + }) + }, + { threshold, rootMargin } + ) + + observer.observe(target.value) + }) + + onUnmounted(() => { + if (observer) { + observer.disconnect() + } + }) + + return { isVisible } +} +``` + +### Composant TimelineItem + +```vue + + + + + + +``` + +### Page parcours.vue + +```vue + + + + +``` + +### Clés i18n supplémentaires + +**fr.json :** +```json +{ + "journey": { + "endMessage": "L'aventure continue... Qui sait où le code me mènera demain ?" + } +} +``` + +**en.json :** +```json +{ + "journey": { + "endMessage": "The adventure continues... Who knows where code will take me tomorrow?" + } +} +``` + +### Design de la timeline + +``` +DESKTOP (alternance gauche/droite) : + + ┌─────────────────┐ + │ 2018 │ + │ Description │──●── + └─────────────────┘ │ + │ + ──●────┼────┌─────────────────┐ + │ │ 2019 │ + │ │ Description │ + │ └─────────────────┘ + │ + ┌─────────────────┐ │ + │ 2020 │──●── + │ Description │ │ + └─────────────────┘ │ + +MOBILE (linéaire à droite) : + + │ ┌─────────────────┐ + ●──│ 2018 │ + │ │ Description │ + │ └─────────────────┘ + │ + │ ┌─────────────────┐ + ●──│ 2019 │ + │ │ Description │ + │ └─────────────────┘ +``` + +### Dépendances + +**Cette story nécessite :** +- Story 1.3 : Système i18n configuré +- Story 1.4 : Layouts et routing + +**Cette story prépare pour :** +- Aucune dépendance directe (dernière story de l'Epic 2) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── pages/ +│ └── parcours.vue # CRÉER +├── components/feature/ +│ └── TimelineItem.vue # CRÉER +└── composables/ + └── useIntersectionObserver.ts # CRÉER +``` + +**Fichiers à modifier :** +``` +frontend/i18n/fr.json # AJOUTER journey.* +frontend/i18n/en.json # AJOUTER journey.* +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-2.8] +- [Source: docs/planning-artifacts/ux-design-specification.md#Screen-Architecture-Summary] +- [Source: docs/planning-artifacts/ux-design-specification.md#Typography-System] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Source données | Fichiers i18n | Décision technique | +| Layout desktop | Alternance gauche/droite | Epics | +| Layout mobile | Linéaire à droite | Epics | +| Animation | IntersectionObserver + fade-in | Epics | +| Police | font-narrative pour descriptions | UX Spec | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/3-1-table-narrator-texts-api-narrateur.md b/docs/implementation-artifacts/3-1-table-narrator-texts-api-narrateur.md new file mode 100644 index 0000000..f2e39e3 --- /dev/null +++ b/docs/implementation-artifacts/3-1-table-narrator-texts-api-narrateur.md @@ -0,0 +1,465 @@ +# Story 3.1: Table narrator_texts et API narrateur + +Status: ready-for-dev + +## Story + +As a développeur, +I want une infrastructure pour stocker et servir les textes du narrateur, +so that le narrateur peut afficher des messages contextuels variés. + +## Acceptance Criteria + +1. **Given** les migrations Laravel sont exécutées **When** `php artisan migrate` est lancé **Then** la table `narrator_texts` est créée (id, context, text_key, variant, timestamps) +2. **And** les contextes définis incluent : intro, transition_projects, transition_skills, transition_testimonials, transition_journey, hint, encouragement_25, encouragement_50, encouragement_75, contact_unlocked, welcome_back +3. **And** plusieurs variantes par contexte permettent une sélection aléatoire +4. **And** les seeders insèrent les textes de base en FR et EN dans la table `translations` +5. **Given** l'API `/api/narrator/{context}` est appelée **When** un contexte valide est fourni **Then** un texte aléatoire parmi les variantes de ce contexte est retourné +6. **And** le texte est traduit selon le header `Accept-Language` +7. **And** le ton est adapté au héros (vouvoiement pour Recruteur, tutoiement pour Client/Dev) + +## Tasks / Subtasks + +- [ ] **Task 1: Créer la migration table narrator_texts** (AC: #1, #2, #3) + - [ ] Créer migration `create_narrator_texts_table` + - [ ] Colonnes : id, context (string), text_key (string), variant (integer), hero_type (enum nullable: recruteur, client, dev), timestamps + - [ ] Index sur context pour le filtrage + - [ ] Index composite sur (context, hero_type) pour les requêtes + +- [ ] **Task 2: Créer le Model NarratorText** (AC: #3) + - [ ] Créer `app/Models/NarratorText.php` + - [ ] Définir les fillable : context, text_key, variant, hero_type + - [ ] Scope `scopeForContext($query, $context)` pour filtrer par contexte + - [ ] Scope `scopeForHero($query, $heroType)` pour filtrer par héros + - [ ] Méthode statique `getRandomText($context, $heroType = null)` pour récupérer un texte aléatoire + +- [ ] **Task 3: Créer le Seeder des textes narrateur** (AC: #4) + - [ ] Créer `database/seeders/NarratorTextSeeder.php` + - [ ] Créer les textes pour chaque contexte avec 2-3 variantes + - [ ] Créer des variantes spécifiques par héros quand nécessaire (vouvoiement/tutoiement) + - [ ] Ajouter les traductions FR et EN dans TranslationSeeder + +- [ ] **Task 4: Créer l'endpoint API narrateur** (AC: #5, #6, #7) + - [ ] Créer `app/Http/Controllers/Api/NarratorController.php` + - [ ] Méthode `getText($context)` pour récupérer un texte aléatoire + - [ ] Paramètre query optionnel `?hero=recruteur|client|dev` + - [ ] Joindre les traductions selon `Accept-Language` + - [ ] Retourner 404 si contexte invalide + +- [ ] **Task 5: Créer le composable useFetchNarratorText** (AC: #5) + - [ ] Créer `frontend/app/composables/useFetchNarratorText.ts` + - [ ] Accepter le contexte et le type de héros en paramètres + - [ ] Gérer les états loading, error, data + +- [ ] **Task 6: Tests et validation** + - [ ] Exécuter les migrations + - [ ] Vérifier le seeding des données + - [ ] Tester l'API avec différents contextes + - [ ] Vérifier le vouvoiement/tutoiement selon le héros + - [ ] Tester les variantes aléatoires + +## Dev Notes + +### Migration narrator_texts + +```php +id(); + $table->string('context'); + $table->string('text_key'); + $table->integer('variant')->default(1); + $table->enum('hero_type', ['recruteur', 'client', 'dev'])->nullable(); + $table->timestamps(); + + $table->index('context'); + $table->index(['context', 'hero_type']); + }); + } + + public function down(): void + { + Schema::dropIfExists('narrator_texts'); + } +}; +``` + +### Model NarratorText + +```php +where('context', $context); + } + + public function scopeForHero($query, ?string $heroType) + { + if ($heroType) { + return $query->where(function ($q) use ($heroType) { + $q->where('hero_type', $heroType) + ->orWhereNull('hero_type'); + }); + } + return $query->whereNull('hero_type'); + } + + public static function getRandomText(string $context, ?string $heroType = null): ?self + { + $query = static::forContext($context); + + if ($heroType) { + // Priorité aux textes spécifiques au héros, sinon textes génériques + $heroSpecific = (clone $query)->where('hero_type', $heroType)->inRandomOrder()->first(); + if ($heroSpecific) { + return $heroSpecific; + } + } + + return $query->whereNull('hero_type')->inRandomOrder()->first(); + } +} +``` + +### Contextes du narrateur + +| Contexte | Description | Variantes | +|----------|-------------|-----------| +| `intro` | Message d'accueil initial | 3 par héros | +| `transition_projects` | Arrivée sur la page Projets | 2 génériques | +| `transition_skills` | Arrivée sur la page Compétences | 2 génériques | +| `transition_testimonials` | Arrivée sur la page Témoignages | 2 génériques | +| `transition_journey` | Arrivée sur la page Parcours | 2 génériques | +| `hint` | Indices si inactif > 30s | 3 génériques | +| `encouragement_25` | Progression à 25% | 2 génériques | +| `encouragement_50` | Progression à 50% | 2 génériques | +| `encouragement_75` | Progression à 75% | 2 génériques | +| `contact_unlocked` | Déblocage du contact | 2 génériques | +| `welcome_back` | Retour d'un visiteur | 2 génériques | + +### Seeder des textes narrateur + +```php + 'intro', 'text_key' => 'narrator.intro.recruteur.1', 'variant' => 1, 'hero_type' => 'recruteur'], + ['context' => 'intro', 'text_key' => 'narrator.intro.recruteur.2', 'variant' => 2, 'hero_type' => 'recruteur'], + + // INTRO - Client/Dev (tutoiement) + ['context' => 'intro', 'text_key' => 'narrator.intro.casual.1', 'variant' => 1, 'hero_type' => 'client'], + ['context' => 'intro', 'text_key' => 'narrator.intro.casual.1', 'variant' => 1, 'hero_type' => 'dev'], + ['context' => 'intro', 'text_key' => 'narrator.intro.casual.2', 'variant' => 2, 'hero_type' => 'client'], + ['context' => 'intro', 'text_key' => 'narrator.intro.casual.2', 'variant' => 2, 'hero_type' => 'dev'], + + // TRANSITIONS + ['context' => 'transition_projects', 'text_key' => 'narrator.transition.projects.1', 'variant' => 1, 'hero_type' => null], + ['context' => 'transition_projects', 'text_key' => 'narrator.transition.projects.2', 'variant' => 2, 'hero_type' => null], + ['context' => 'transition_skills', 'text_key' => 'narrator.transition.skills.1', 'variant' => 1, 'hero_type' => null], + ['context' => 'transition_skills', 'text_key' => 'narrator.transition.skills.2', 'variant' => 2, 'hero_type' => null], + ['context' => 'transition_testimonials', 'text_key' => 'narrator.transition.testimonials.1', 'variant' => 1, 'hero_type' => null], + ['context' => 'transition_journey', 'text_key' => 'narrator.transition.journey.1', 'variant' => 1, 'hero_type' => null], + + // HINTS + ['context' => 'hint', 'text_key' => 'narrator.hint.1', 'variant' => 1, 'hero_type' => null], + ['context' => 'hint', 'text_key' => 'narrator.hint.2', 'variant' => 2, 'hero_type' => null], + ['context' => 'hint', 'text_key' => 'narrator.hint.3', 'variant' => 3, 'hero_type' => null], + + // ENCOURAGEMENTS + ['context' => 'encouragement_25', 'text_key' => 'narrator.encouragement.25.1', 'variant' => 1, 'hero_type' => null], + ['context' => 'encouragement_50', 'text_key' => 'narrator.encouragement.50.1', 'variant' => 1, 'hero_type' => null], + ['context' => 'encouragement_75', 'text_key' => 'narrator.encouragement.75.1', 'variant' => 1, 'hero_type' => null], + + // CONTACT UNLOCKED + ['context' => 'contact_unlocked', 'text_key' => 'narrator.contact_unlocked.1', 'variant' => 1, 'hero_type' => null], + + // WELCOME BACK + ['context' => 'welcome_back', 'text_key' => 'narrator.welcome_back.1', 'variant' => 1, 'hero_type' => null], + ['context' => 'welcome_back', 'text_key' => 'narrator.welcome_back.2', 'variant' => 2, 'hero_type' => null], + ]; + + foreach ($texts as $data) { + NarratorText::create($data); + } + + // Traductions + $translations = [ + // Intro Recruteur (vouvoiement) + ['key' => 'narrator.intro.recruteur.1', 'fr' => "Bienvenue, voyageur... Vous voilà arrivé en terre inconnue. Un développeur mystérieux se cache quelque part ici. Saurez-vous le trouver ?", 'en' => "Welcome, traveler... You have arrived in unknown lands. A mysterious developer hides somewhere here. Will you be able to find them?"], + ['key' => 'narrator.intro.recruteur.2', 'fr' => "Ah, un visiteur distingué... Je sens que vous cherchez quelqu'un de particulier. Laissez-moi vous guider dans cette aventure.", 'en' => "Ah, a distinguished visitor... I sense you're looking for someone special. Let me guide you through this adventure."], + + // Intro Client/Dev (tutoiement) + ['key' => 'narrator.intro.casual.1', 'fr' => "Tiens tiens... Un nouveau venu ! Tu tombes bien, j'ai quelqu'un à te présenter. Mais d'abord, un peu d'exploration s'impose...", 'en' => "Well well... A newcomer! You're just in time, I have someone to introduce you to. But first, a bit of exploration is in order..."], + ['key' => 'narrator.intro.casual.2', 'fr' => "Salut l'ami ! Bienvenue dans mon monde. Tu cherches le développeur qui a créé tout ça ? Suis-moi, je connais le chemin...", 'en' => "Hey friend! Welcome to my world. Looking for the developer who created all this? Follow me, I know the way..."], + + // Transitions + ['key' => 'narrator.transition.projects.1', 'fr' => "Voici les créations du développeur... Chaque projet raconte une histoire. Laquelle vas-tu explorer ?", 'en' => "Here are the developer's creations... Each project tells a story. Which one will you explore?"], + ['key' => 'narrator.transition.projects.2', 'fr' => "Bienvenue dans la galerie des projets. C'est ici que le code prend vie...", 'en' => "Welcome to the project gallery. This is where code comes to life..."], + ['key' => 'narrator.transition.skills.1', 'fr' => "L'arbre des compétences... Chaque branche représente un savoir acquis au fil du temps.", 'en' => "The skill tree... Each branch represents knowledge acquired over time."], + ['key' => 'narrator.transition.skills.2', 'fr' => "Voici les outils de notre ami développeur. Impressionnant, n'est-ce pas ?", 'en' => "Here are our developer friend's tools. Impressive, isn't it?"], + ['key' => 'narrator.transition.testimonials.1', 'fr' => "D'autres voyageurs sont passés par ici avant toi. Écoute leurs histoires...", 'en' => "Other travelers have passed through here before you. Listen to their stories..."], + ['key' => 'narrator.transition.journey.1', 'fr' => "Le chemin parcouru... Chaque étape a façonné le développeur que tu cherches.", 'en' => "The path traveled... Each step has shaped the developer you're looking for."], + + // Hints + ['key' => 'narrator.hint.1', 'fr' => "Tu sembles perdu... N'hésite pas à explorer les différentes zones !", 'en' => "You seem lost... Don't hesitate to explore the different areas!"], + ['key' => 'narrator.hint.2', 'fr' => "Psst... Il reste encore tant de choses à découvrir ici...", 'en' => "Psst... There's still so much to discover here..."], + ['key' => 'narrator.hint.3', 'fr' => "La carte peut t'aider à naviguer. Clique dessus !", 'en' => "The map can help you navigate. Click on it!"], + + // Encouragements + ['key' => 'narrator.encouragement.25.1', 'fr' => "Beau début ! Tu as exploré un quart du territoire. Continue comme ça...", 'en' => "Great start! You've explored a quarter of the territory. Keep it up..."], + ['key' => 'narrator.encouragement.50.1', 'fr' => "À mi-chemin ! Tu commences vraiment à connaître cet endroit.", 'en' => "Halfway there! You're really starting to know this place."], + ['key' => 'narrator.encouragement.75.1', 'fr' => "Impressionnant ! Plus que quelques zones et tu auras tout vu...", 'en' => "Impressive! Just a few more areas and you'll have seen everything..."], + + // Contact unlocked + ['key' => 'narrator.contact_unlocked.1', 'fr' => "Tu as assez exploré pour mériter une rencontre... Le chemin vers le développeur est maintenant ouvert !", 'en' => "You've explored enough to deserve a meeting... The path to the developer is now open!"], + + // Welcome back + ['key' => 'narrator.welcome_back.1', 'fr' => "Te revoilà ! Tu m'avais manqué... On reprend là où on s'était arrêtés ?", 'en' => "You're back! I missed you... Shall we pick up where we left off?"], + ['key' => 'narrator.welcome_back.2', 'fr' => "Tiens, un visage familier ! Content de te revoir, voyageur.", 'en' => "Well, a familiar face! Good to see you again, traveler."], + ]; + + foreach ($translations as $t) { + Translation::firstOrCreate( + ['lang' => 'fr', 'key_name' => $t['key']], + ['value' => $t['fr']] + ); + Translation::firstOrCreate( + ['lang' => 'en', 'key_name' => $t['key']], + ['value' => $t['en']] + ); + } + } +} +``` + +### Controller API + +```php +json([ + 'error' => [ + 'code' => 'INVALID_CONTEXT', + 'message' => 'Invalid narrator context', + 'valid_contexts' => self::VALID_CONTEXTS, + ] + ], 404); + } + + $lang = $request->header('Accept-Language', 'fr'); + $heroType = $request->query('hero'); + + // Valider hero_type + if ($heroType && !in_array($heroType, ['recruteur', 'client', 'dev'])) { + $heroType = null; + } + + $narratorText = NarratorText::getRandomText($context, $heroType); + + if (!$narratorText) { + return response()->json([ + 'error' => [ + 'code' => 'NO_TEXT_FOUND', + 'message' => 'No narrator text found for this context', + ] + ], 404); + } + + $text = Translation::getTranslation($narratorText->text_key, $lang); + + return response()->json([ + 'data' => [ + 'context' => $context, + 'text' => $text, + 'variant' => $narratorText->variant, + 'heroType' => $narratorText->hero_type, + ], + 'meta' => [ + 'lang' => $lang, + ], + ]); + } +} +``` + +```php +// api/routes/api.php +Route::get('/narrator/{context}', [NarratorController::class, 'getText']); +``` + +### Composable useFetchNarratorText + +```typescript +// frontend/app/composables/useFetchNarratorText.ts +type NarratorContext = + | 'intro' + | 'transition_projects' + | 'transition_skills' + | 'transition_testimonials' + | 'transition_journey' + | 'hint' + | 'encouragement_25' + | 'encouragement_50' + | 'encouragement_75' + | 'contact_unlocked' + | 'welcome_back' + +type HeroType = 'recruteur' | 'client' | 'dev' + +interface NarratorTextResponse { + data: { + context: string + text: string + variant: number + heroType: HeroType | null + } + meta: { lang: string } +} + +export function useFetchNarratorText() { + const config = useRuntimeConfig() + const { locale } = useI18n() + + async function fetchText(context: NarratorContext, heroType?: HeroType) { + const url = heroType + ? `/narrator/${context}?hero=${heroType}` + : `/narrator/${context}` + + return await $fetch(url, { + baseURL: config.public.apiUrl, + headers: { + 'X-API-Key': config.public.apiKey, + 'Accept-Language': locale.value, + }, + }) + } + + return { fetchText } +} +``` + +### Dépendances + +**Cette story nécessite :** +- Story 1.2 : Table translations et système de traduction + +**Cette story prépare pour :** +- Story 3.2 : Composant NarratorBubble (consomme l'API) +- Story 3.3 : Textes contextuels (utilise les contextes) + +### Project Structure Notes + +**Fichiers à créer :** +``` +api/ +├── app/Models/ +│ └── NarratorText.php # CRÉER +├── app/Http/Controllers/Api/ +│ └── NarratorController.php # CRÉER +└── database/ + ├── migrations/ + │ └── 2026_02_04_000002_create_narrator_texts_table.php # CRÉER + └── seeders/ + └── NarratorTextSeeder.php # CRÉER + +frontend/app/composables/ +└── useFetchNarratorText.ts # CRÉER +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-3.1] +- [Source: docs/planning-artifacts/ux-design-specification.md#NarratorBubble] +- [Source: docs/planning-artifacts/ux-design-specification.md#Hero-System] +- [Source: docs/brainstorming-gamification-2026-01-26.md#Narrateur] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Contextes | 11 types différents | Epics | +| Variantes | 2-3 par contexte | Epics | +| Ton héros | vouvoiement/tutoiement | UX Spec | +| API endpoint | GET /api/narrator/{context} | Architecture | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/3-2-composant-narratorbubble-le-bug.md b/docs/implementation-artifacts/3-2-composant-narratorbubble-le-bug.md new file mode 100644 index 0000000..18f65fc --- /dev/null +++ b/docs/implementation-artifacts/3-2-composant-narratorbubble-le-bug.md @@ -0,0 +1,494 @@ +# Story 3.2: Composant NarratorBubble (Le Bug) + +Status: ready-for-dev + +## Story + +As a visiteur, +I want voir un narrateur-guide qui m'accompagne dans mon exploration, +so that je me sens guidé et l'expérience est immersive. + +## Acceptance Criteria + +1. **Given** le composant `NarratorBubble` est implémenté **When** le narrateur doit afficher un message **Then** une bulle apparaît en bas de l'écran (desktop) ou au-dessus de la bottom bar (mobile) +2. **And** l'avatar du Bug (araignée) s'affiche avec son apparence selon le `narratorStage` du store +3. **And** le texte apparaît avec effet typewriter (lettre par lettre) +4. **And** un clic ou Espace accélère l'animation typewriter +5. **And** la bulle peut être fermée/minimisée sans bloquer la navigation +6. **And** le composant utilise `aria-live="polite"` et `role="status"` pour l'accessibilité +7. **And** `prefers-reduced-motion` affiche le texte instantanément +8. **And** la police serif narrative est utilisée pour le texte +9. **And** l'animation d'apparition/disparition est fluide et non-bloquante + +## Tasks / Subtasks + +- [ ] **Task 1: Créer le composable useTypewriter** (AC: #3, #4, #7) + - [ ] Créer `frontend/app/composables/useTypewriter.ts` + - [ ] Accepter le texte en paramètre + - [ ] Afficher lettre par lettre (30-50ms par lettre) + - [ ] Exposer une méthode `skip()` pour afficher tout le texte instantanément + - [ ] Respecter `prefers-reduced-motion` + +- [ ] **Task 2: Créer les assets du Bug par stage** (AC: #2) + - [ ] Préparer 5 images SVG ou PNG pour les 5 stades du Bug + - [ ] Stage 1 : silhouette sombre floue + - [ ] Stage 2 : forme vague avec yeux + - [ ] Stage 3 : pattes visibles + - [ ] Stage 4 : araignée reconnaissable + - [ ] Stage 5 : mascotte complète révélée + - [ ] Placer dans `frontend/public/images/bug/` + +- [ ] **Task 3: Créer le composant NarratorBubble** (AC: #1, #2, #3, #4, #5, #8, #9) + - [ ] Créer `frontend/app/components/feature/NarratorBubble.vue` + - [ ] Props : message (string), visible (boolean) + - [ ] Emit : close, skip + - [ ] Afficher l'avatar du Bug selon `narratorStage` du store + - [ ] Intégrer le composable useTypewriter + - [ ] Bouton de fermeture/minimisation + - [ ] Utiliser font-narrative pour le texte + +- [ ] **Task 4: Implémenter l'accessibilité** (AC: #6, #7) + - [ ] Ajouter `aria-live="polite"` sur le conteneur + - [ ] Ajouter `role="status"` pour signaler les mises à jour + - [ ] S'assurer que le texte complet est accessible même pendant l'animation + - [ ] Tester avec prefers-reduced-motion + +- [ ] **Task 5: Animation d'apparition/disparition** (AC: #9) + - [ ] Slide-up pour l'apparition + - [ ] Fade-out pour la disparition + - [ ] Utiliser CSS transitions pour fluidité + - [ ] Non-bloquante : ne pas empêcher les interactions avec le reste de la page + +- [ ] **Task 6: Responsive design** (AC: #1) + - [ ] Desktop : bulle en bas de l'écran (position fixed) + - [ ] Mobile : au-dessus de la bottom bar (variable CSS pour le spacing) + - [ ] Taille adaptée à l'écran + +- [ ] **Task 7: Tests et validation** + - [ ] Tester l'effet typewriter + - [ ] Tester le skip au clic/Espace + - [ ] Vérifier les 5 stades du Bug + - [ ] Valider l'accessibilité (screen reader) + - [ ] Tester prefers-reduced-motion + - [ ] Valider responsive (desktop/mobile) + +## Dev Notes + +### Composable useTypewriter + +```typescript +// frontend/app/composables/useTypewriter.ts +export interface UseTypewriterOptions { + speed?: number // ms par caractère + onComplete?: () => void +} + +export function useTypewriter(options: UseTypewriterOptions = {}) { + const { speed = 40, onComplete } = options + + const text = ref('') + const displayedText = ref('') + const isTyping = ref(false) + const isComplete = ref(false) + + const reducedMotion = useReducedMotion() + + let intervalId: ReturnType | null = null + let currentIndex = 0 + + function start(newText: string) { + text.value = newText + displayedText.value = '' + currentIndex = 0 + isTyping.value = true + isComplete.value = false + + // Si prefers-reduced-motion, afficher tout instantanément + if (reducedMotion.value) { + skip() + return + } + + intervalId = setInterval(() => { + if (currentIndex < text.value.length) { + displayedText.value += text.value[currentIndex] + currentIndex++ + } else { + complete() + } + }, speed) + } + + function skip() { + if (intervalId) { + clearInterval(intervalId) + intervalId = null + } + displayedText.value = text.value + complete() + } + + function complete() { + if (intervalId) { + clearInterval(intervalId) + intervalId = null + } + isTyping.value = false + isComplete.value = true + onComplete?.() + } + + function reset() { + if (intervalId) { + clearInterval(intervalId) + intervalId = null + } + text.value = '' + displayedText.value = '' + currentIndex = 0 + isTyping.value = false + isComplete.value = false + } + + onUnmounted(() => { + if (intervalId) { + clearInterval(intervalId) + } + }) + + return { + text, + displayedText, + isTyping, + isComplete, + start, + skip, + reset, + } +} +``` + +### Composable useReducedMotion + +```typescript +// frontend/app/composables/useReducedMotion.ts +export function useReducedMotion() { + const reducedMotion = ref(false) + + onMounted(() => { + const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)') + reducedMotion.value = mediaQuery.matches + + const handler = (e: MediaQueryListEvent) => { + reducedMotion.value = e.matches + } + + mediaQuery.addEventListener('change', handler) + + onUnmounted(() => { + mediaQuery.removeEventListener('change', handler) + }) + }) + + return reducedMotion +} +``` + +### Composant NarratorBubble + +```vue + + + + + + +``` + +### Clés i18n à ajouter + +**fr.json :** +```json +{ + "narrator": { + "clickToSkip": "Cliquez ou appuyez sur Espace pour passer" + } +} +``` + +**en.json :** +```json +{ + "narrator": { + "clickToSkip": "Click or press Space to skip" + } +} +``` + +### Structure des assets du Bug + +``` +frontend/public/images/bug/ +├── bug-stage-1.svg # Silhouette sombre floue +├── bug-stage-2.svg # Forme vague avec yeux +├── bug-stage-3.svg # Pattes visibles +├── bug-stage-4.svg # Araignée reconnaissable +└── bug-stage-5.svg # Mascotte complète révélée +``` + +### Utilisation du composant + +```vue + + + + +``` + +### Dépendances + +**Cette story nécessite :** +- Story 3.1 : API narrateur pour les textes +- Story 1.6 : Store Pinia (pour narratorStage) + +**Cette story prépare pour :** +- Story 3.3 : Textes contextuels (utilise ce composant) +- Story 3.5 : Logique de progression (déclenche le narrateur) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── components/feature/ +│ └── NarratorBubble.vue # CRÉER +├── composables/ +│ ├── useTypewriter.ts # CRÉER +│ └── useReducedMotion.ts # CRÉER +└── public/images/bug/ + ├── bug-stage-1.svg # CRÉER (asset) + ├── bug-stage-2.svg # CRÉER (asset) + ├── bug-stage-3.svg # CRÉER (asset) + ├── bug-stage-4.svg # CRÉER (asset) + └── bug-stage-5.svg # CRÉER (asset) +``` + +**Fichiers à modifier :** +``` +frontend/i18n/fr.json # AJOUTER narrator.clickToSkip +frontend/i18n/en.json # AJOUTER narrator.clickToSkip +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-3.2] +- [Source: docs/planning-artifacts/ux-design-specification.md#NarratorBubble] +- [Source: docs/planning-artifacts/ux-design-specification.md#Narrator-Revelation-Arc] +- [Source: docs/brainstorming-gamification-2026-01-26.md#Mascotte-Le-Bug] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Effect typewriter | 30-50ms par lettre | Epics | +| Stades du Bug | 5 apparences distinctes | UX Spec | +| Position desktop | Bottom fixed | Epics | +| Position mobile | Au-dessus bottom bar | Epics | +| Accessibilité | aria-live + role="status" | Epics | +| Police | font-narrative | UX Spec | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/3-3-textes-narrateur-contextuels-arc-revelation.md b/docs/implementation-artifacts/3-3-textes-narrateur-contextuels-arc-revelation.md new file mode 100644 index 0000000..817c441 --- /dev/null +++ b/docs/implementation-artifacts/3-3-textes-narrateur-contextuels-arc-revelation.md @@ -0,0 +1,461 @@ +# Story 3.3: Textes narrateur contextuels et arc de révélation + +Status: ready-for-dev + +## Story + +As a visiteur, +I want que le narrateur réagisse à mes actions et évolue visuellement, +so that l'expérience est personnalisée et le narrateur devient familier. + +## Acceptance Criteria + +1. **Given** le visiteur navigue sur le site **When** il effectue des actions clés **Then** le narrateur affiche un message d'accueil à l'arrivée (adapté au héros choisi) +2. **And** des messages de transition s'affichent entre les zones +3. **And** des encouragements apparaissent à 25%, 50%, 75% de progression +4. **And** des indices s'affichent si le visiteur semble inactif (> 30s sans action) +5. **And** un message spécial "Bienvenue à nouveau" s'affiche si progression existante détectée +6. **And** le message de déblocage du contact s'affiche après 2 zones visitées +7. **Given** le visiteur progresse dans l'exploration **When** le `completionPercent` atteint certains seuils **Then** le `narratorStage` du store est mis à jour (1→5) +8. **And** l'apparence du Bug évolue : silhouette sombre (1) → forme vague (2) → pattes visibles (3) → araignée reconnaissable (4) → mascotte complète révélée (5) +9. **And** le ton du narrateur évolue de mystérieux à complice + +## Tasks / Subtasks + +- [ ] **Task 1: Créer le composable useNarrator** (AC: #1, #2, #3, #4, #5, #6) + - [ ] Créer `frontend/app/composables/useNarrator.ts` + - [ ] Centraliser la logique d'affichage du narrateur + - [ ] Exposer les méthodes : showIntro, showTransition, showEncouragement, showHint, showWelcomeBack, showContactUnlocked + - [ ] Gérer la queue de messages (ne pas interrompre un message en cours) + - [ ] Intégrer le composable useFetchNarratorText + +- [ ] **Task 2: Implémenter les déclencheurs de transition** (AC: #2) + - [ ] Déclencher sur navigation vers /projets (transition_projects) + - [ ] Déclencher sur navigation vers /competences (transition_skills) + - [ ] Déclencher sur navigation vers /temoignages (transition_testimonials) + - [ ] Déclencher sur navigation vers /parcours (transition_journey) + - [ ] Utiliser un plugin Nuxt ou watcher sur la route + +- [ ] **Task 3: Implémenter la détection d'inactivité** (AC: #4) + - [ ] Créer `frontend/app/composables/useIdleDetection.ts` + - [ ] Détecter l'absence d'interaction > 30 secondes + - [ ] Écouter mouse, keyboard, touch, scroll + - [ ] Déclencher `showHint()` quand idle détecté + - [ ] Ne pas répéter les hints trop souvent (cooldown de 2min) + +- [ ] **Task 4: Implémenter les encouragements basés sur la progression** (AC: #3) + - [ ] Watcher sur `completionPercent` du store + - [ ] Déclencher à 25%, 50%, 75% + - [ ] Garder en mémoire les seuils déjà atteints (ne pas répéter) + +- [ ] **Task 5: Implémenter l'arc de révélation du Bug** (AC: #7, #8, #9) + - [ ] Définir les seuils de progression pour chaque stage : + - Stage 1 : 0-19% + - Stage 2 : 20-39% + - Stage 3 : 40-59% + - Stage 4 : 60-79% + - Stage 5 : 80-100% + - [ ] Mettre à jour `narratorStage` dans le store + - [ ] L'image du Bug se met à jour automatiquement via NarratorBubble + +- [ ] **Task 6: Implémenter le message "Bienvenue à nouveau"** (AC: #5) + - [ ] Détecter au chargement si `visitedSections` n'est pas vide (progression existante) + - [ ] Afficher le message `welcome_back` dans ce cas + - [ ] Sinon afficher le message `intro` normal + +- [ ] **Task 7: Implémenter le message de déblocage contact** (AC: #6) + - [ ] Watcher sur `contactUnlocked` du store + - [ ] Quand passe à `true`, afficher `contact_unlocked` + +- [ ] **Task 8: Intégrer dans le layout principal** + - [ ] Ajouter le NarratorBubble dans default.vue ou adventure.vue + - [ ] Initialiser useNarrator dans le layout + - [ ] Gérer l'état visible/hidden du narrateur + +- [ ] **Task 9: Tests et validation** + - [ ] Tester le message d'accueil adapté au héros + - [ ] Tester les transitions entre pages + - [ ] Vérifier les encouragements à 25/50/75% + - [ ] Tester la détection d'inactivité + - [ ] Valider l'évolution du Bug (5 stages) + - [ ] Tester le "Bienvenue à nouveau" + +## Dev Notes + +### Composable useNarrator + +```typescript +// frontend/app/composables/useNarrator.ts +interface NarratorMessage { + context: string + priority: number +} + +export function useNarrator() { + const { fetchText } = useFetchNarratorText() + const progressionStore = useProgressionStore() + + const isVisible = ref(false) + const currentMessage = ref('') + const messageQueue = ref([]) + const isProcessing = ref(false) + + // Seuils d'encouragement déjà affichés + const shownEncouragements = ref>(new Set()) + + // Cooldown pour les hints + const lastHintTime = ref(0) + const HINT_COOLDOWN = 120000 // 2 minutes + + async function queueMessage(context: string, priority: number = 5) { + messageQueue.value.push({ context, priority }) + messageQueue.value.sort((a, b) => b.priority - a.priority) + + if (!isProcessing.value) { + processQueue() + } + } + + async function processQueue() { + if (messageQueue.value.length === 0) { + isProcessing.value = false + return + } + + isProcessing.value = true + const next = messageQueue.value.shift()! + + try { + const response = await fetchText(next.context, progressionStore.heroType) + currentMessage.value = response.data.text + isVisible.value = true + } catch (error) { + console.error('Failed to fetch narrator text:', error) + processQueue() // Passer au suivant en cas d'erreur + } + } + + function hide() { + isVisible.value = false + // Attendre la fin de l'animation avant de traiter le suivant + setTimeout(() => { + processQueue() + }, 300) + } + + // === Méthodes publiques === + + async function showIntro() { + // Vérifier si le visiteur revient + if (progressionStore.visitedSections.length > 0) { + await queueMessage('welcome_back', 10) + } else { + await queueMessage('intro', 10) + } + } + + async function showTransition(zone: 'projects' | 'skills' | 'testimonials' | 'journey') { + const contextMap = { + projects: 'transition_projects', + skills: 'transition_skills', + testimonials: 'transition_testimonials', + journey: 'transition_journey', + } + await queueMessage(contextMap[zone], 7) + } + + async function showEncouragement(percent: number) { + // Ne pas répéter les encouragements + if (shownEncouragements.value.has(percent)) return + + let context: string | null = null + if (percent >= 75 && !shownEncouragements.value.has(75)) { + context = 'encouragement_75' + shownEncouragements.value.add(75) + } else if (percent >= 50 && !shownEncouragements.value.has(50)) { + context = 'encouragement_50' + shownEncouragements.value.add(50) + } else if (percent >= 25 && !shownEncouragements.value.has(25)) { + context = 'encouragement_25' + shownEncouragements.value.add(25) + } + + if (context) { + await queueMessage(context, 5) + } + } + + async function showHint() { + const now = Date.now() + if (now - lastHintTime.value < HINT_COOLDOWN) return + + lastHintTime.value = now + await queueMessage('hint', 3) + } + + async function showContactUnlocked() { + await queueMessage('contact_unlocked', 8) + } + + async function showWelcomeBack() { + await queueMessage('welcome_back', 10) + } + + return { + isVisible, + currentMessage, + hide, + showIntro, + showTransition, + showEncouragement, + showHint, + showContactUnlocked, + showWelcomeBack, + } +} +``` + +### Composable useIdleDetection + +```typescript +// frontend/app/composables/useIdleDetection.ts +export interface UseIdleDetectionOptions { + timeout?: number // ms avant de considérer comme idle + onIdle?: () => void +} + +export function useIdleDetection(options: UseIdleDetectionOptions = {}) { + const { timeout = 30000, onIdle } = options + + const isIdle = ref(false) + let timeoutId: ReturnType | null = null + + function resetTimer() { + isIdle.value = false + if (timeoutId) { + clearTimeout(timeoutId) + } + timeoutId = setTimeout(() => { + isIdle.value = true + onIdle?.() + }, timeout) + } + + const events = ['mousedown', 'mousemove', 'keydown', 'scroll', 'touchstart'] + + onMounted(() => { + events.forEach(event => { + window.addEventListener(event, resetTimer, { passive: true }) + }) + resetTimer() // Démarrer le timer + }) + + onUnmounted(() => { + events.forEach(event => { + window.removeEventListener(event, resetTimer) + }) + if (timeoutId) { + clearTimeout(timeoutId) + } + }) + + return { isIdle } +} +``` + +### Logique de l'arc de révélation (dans useProgressionStore) + +```typescript +// Ajouter dans frontend/app/stores/progression.ts + +// Seuils pour les stages du Bug +const NARRATOR_STAGE_THRESHOLDS = [0, 20, 40, 60, 80] // 5 stages + +function calculateNarratorStage(percent: number): number { + for (let i = NARRATOR_STAGE_THRESHOLDS.length - 1; i >= 0; i--) { + if (percent >= NARRATOR_STAGE_THRESHOLDS[i]) { + return i + 1 // Stages 1-5 + } + } + return 1 +} + +// Dans le store +export const useProgressionStore = defineStore('progression', () => { + // ... autres propriétés existantes ... + + const narratorStage = computed(() => { + return calculateNarratorStage(completionPercent.value) + }) + + return { + // ... autres exports ... + narratorStage, + } +}) +``` + +### Plugin de navigation pour les transitions + +```typescript +// frontend/app/plugins/narrator-transitions.client.ts +export default defineNuxtPlugin((nuxtApp) => { + const narrator = useNarrator() + const router = useRouter() + const progressionStore = useProgressionStore() + + // Map des routes vers les contextes de transition + const routeContextMap: Record = { + '/projets': 'projects', + '/en/projects': 'projects', + '/competences': 'skills', + '/en/skills': 'skills', + '/temoignages': 'testimonials', + '/en/testimonials': 'testimonials', + '/parcours': 'journey', + '/en/journey': 'journey', + } + + // Sections déjà annoncées (pour ne pas répéter) + const announcedSections = new Set() + + router.afterEach((to) => { + const zone = routeContextMap[to.path] + if (zone && !announcedSections.has(zone)) { + announcedSections.add(zone) + narrator.showTransition(zone) + } + }) + + // Watcher sur completionPercent pour les encouragements + watch( + () => progressionStore.completionPercent, + (percent) => { + narrator.showEncouragement(percent) + } + ) + + // Watcher sur contactUnlocked + watch( + () => progressionStore.contactUnlocked, + (unlocked, wasUnlocked) => { + if (unlocked && !wasUnlocked) { + narrator.showContactUnlocked() + } + } + ) +}) +``` + +### Intégration dans le layout + +```vue + + + + +``` + +### Tableau des stages du Bug + +| Stage | Progression | Apparence | Ton du narrateur | +|-------|-------------|-----------|------------------| +| 1 | 0-19% | Silhouette sombre floue | Mystérieux, énigmatique | +| 2 | 20-39% | Forme vague avec yeux brillants | Curieux, observateur | +| 3 | 40-59% | Pattes visibles, forme d'araignée | Encourageant, guide | +| 4 | 60-79% | Araignée reconnaissable | Amical, complice | +| 5 | 80-100% | Mascotte complète révélée | Chaleureux, félicitations | + +### Dépendances + +**Cette story nécessite :** +- Story 3.1 : API narrateur (contextes et textes) +- Story 3.2 : Composant NarratorBubble +- Story 1.6 : Store Pinia (pour progression et heroType) + +**Cette story prépare pour :** +- Story 3.5 : Logique de progression (déclenche les messages) +- Story 4.2 : Intro narrative (utilise useNarrator) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── composables/ +│ ├── useNarrator.ts # CRÉER +│ └── useIdleDetection.ts # CRÉER +├── plugins/ +│ └── narrator-transitions.client.ts # CRÉER +└── layouts/ + └── adventure.vue # CRÉER ou MODIFIER +``` + +**Fichiers à modifier :** +``` +frontend/app/stores/progression.ts # AJOUTER narratorStage computed +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-3.3] +- [Source: docs/planning-artifacts/ux-design-specification.md#Narrator-Revelation-Arc] +- [Source: docs/planning-artifacts/ux-design-specification.md#Narrator-Contexts] +- [Source: docs/brainstorming-gamification-2026-01-26.md#Arc-Revelation] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Stages du Bug | 5 (silhouette → mascotte) | UX Spec | +| Seuils progression | 0/20/40/60/80% | Décision technique | +| Timeout inactivité | 30 secondes | Epics | +| Cooldown hints | 2 minutes | Décision technique | +| Contextes transitions | 4 zones principales | Epics | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/3-4-barre-progression-globale-xp-bar.md b/docs/implementation-artifacts/3-4-barre-progression-globale-xp-bar.md new file mode 100644 index 0000000..27a01bc --- /dev/null +++ b/docs/implementation-artifacts/3-4-barre-progression-globale-xp-bar.md @@ -0,0 +1,526 @@ +# Story 3.4: Barre de progression globale (XP bar) + +Status: ready-for-dev + +## Story + +As a visiteur, +I want voir ma progression dans l'exploration du site, +so that je sais combien il me reste à découvrir. + +## Acceptance Criteria + +1. **Given** le visiteur est en mode Aventure **When** il navigue sur le site **Then** une barre de progression discrète s'affiche dans le header +2. **And** le pourcentage est calculé selon les sections visitées (Projets, Compétences, Témoignages, Parcours) +3. **And** l'animation de la barre est fluide lors des mises à jour +4. **And** un tooltip au hover indique les sections visitées et restantes +5. **And** le design évoque une barre XP style RPG (cohérent avec `sky-accent`) +6. **And** la barre respecte `prefers-reduced-motion` (pas d'animation si activé) +7. **And** sur mobile, la progression est accessible via la bottom bar +8. **And** la barre n'est pas visible en mode Express/Résumé + +## Tasks / Subtasks + +- [ ] **Task 1: Créer le composant ProgressBar** (AC: #1, #3, #5, #6) + - [ ] Créer `frontend/app/components/feature/ProgressBar.vue` + - [ ] Props : percent (number), showTooltip (boolean) + - [ ] Design XP bar style RPG avec sky-accent + - [ ] Animation fluide de remplissage (CSS transition) + - [ ] Respecter prefers-reduced-motion + +- [ ] **Task 2: Implémenter le tooltip des sections** (AC: #4) + - [ ] Afficher au hover la liste des sections + - [ ] Indiquer le statut : visitée (✓) ou à découvrir + - [ ] Utiliser Headless UI Popover ou tooltip custom + - [ ] Traductions FR/EN + +- [ ] **Task 3: Intégrer dans le header** (AC: #1, #8) + - [ ] Ajouter la ProgressBar dans le composant Header + - [ ] Conditionner l'affichage : visible uniquement en mode Aventure + - [ ] Masquer si `expressMode === true` dans le store + - [ ] Position : à droite du header, avant le language switcher + +- [ ] **Task 4: Calculer le pourcentage** (AC: #2) + - [ ] Définir les 4 sections : projets, competences, temoignages, parcours + - [ ] Chaque section visitée = 25% + - [ ] Lire depuis `visitedSections` du store + - [ ] Le calcul est fait dans le store (completionPercent) + +- [ ] **Task 5: Version mobile** (AC: #7) + - [ ] Sur mobile, la barre est masquée du header + - [ ] La progression est accessible via l'icône dans la bottom bar + - [ ] Un tap affiche un mini-modal ou drawer avec le détail + +- [ ] **Task 6: Effets visuels RPG** (AC: #5) + - [ ] Effet de brillance/glow au survol + - [ ] Particules optionnelles quand la barre augmente + - [ ] Bordure stylisée évoquant un cadre de jeu + - [ ] Graduation subtile sur la barre + +- [ ] **Task 7: Tests et validation** + - [ ] Tester l'animation de remplissage + - [ ] Vérifier le tooltip (desktop) + - [ ] Valider la version mobile (bottom bar) + - [ ] Tester prefers-reduced-motion + - [ ] Vérifier que la barre est masquée en mode Express + +## Dev Notes + +### Composant ProgressBar + +```vue + + + + + + +``` + +### Clés i18n + +**fr.json :** +```json +{ + "progress": { + "label": "Progression : {percent}%", + "title": "Exploration du portfolio", + "sections": { + "projects": "Projets", + "skills": "Compétences", + "testimonials": "Témoignages", + "journey": "Parcours" + }, + "summary": "{visited} visité(s), {remaining} à découvrir" + } +} +``` + +**en.json :** +```json +{ + "progress": { + "label": "Progress: {percent}%", + "title": "Portfolio exploration", + "sections": { + "projects": "Projects", + "skills": "Skills", + "testimonials": "Testimonials", + "journey": "Journey" + }, + "summary": "{visited} visited, {remaining} to discover" + } +} +``` + +### Intégration dans le Header + +```vue + + + + +``` + +### Composant ProgressIcon pour mobile (Bottom Bar) + +```vue + + + + + + +``` + +### Calcul du pourcentage dans le store + +```typescript +// frontend/app/stores/progression.ts (extrait) + +// Sections disponibles pour la progression +const AVAILABLE_SECTIONS = ['projets', 'competences', 'temoignages', 'parcours'] as const +type Section = typeof AVAILABLE_SECTIONS[number] + +export const useProgressionStore = defineStore('progression', () => { + const visitedSections = ref([]) + + const completionPercent = computed(() => { + const visitedCount = visitedSections.value.length + return Math.round((visitedCount / AVAILABLE_SECTIONS.length) * 100) + }) + + function visitSection(section: Section) { + if (!visitedSections.value.includes(section)) { + visitedSections.value.push(section) + } + } + + return { + visitedSections, + completionPercent, + visitSection, + } +}) +``` + +### Dépendances + +**Cette story nécessite :** +- Story 1.6 : Store Pinia (visitedSections, completionPercent, expressMode) +- Story 3.2 : useReducedMotion composable + +**Cette story prépare pour :** +- Story 3.5 : Logique de progression (complète le store) +- Story 3.7 : Navigation mobile (utilise ProgressIcon) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/components/feature/ +├── ProgressBar.vue # CRÉER +└── ProgressIcon.vue # CRÉER (version mobile) +``` + +**Fichiers à modifier :** +``` +frontend/app/components/layout/AppHeader.vue # AJOUTER ProgressBar +frontend/i18n/fr.json # AJOUTER progress.* +frontend/i18n/en.json # AJOUTER progress.* +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-3.4] +- [Source: docs/planning-artifacts/ux-design-specification.md#XP-Bar] +- [Source: docs/planning-artifacts/ux-design-specification.md#Design-Tokens] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Sections | 4 (25% chacune) | Epics | +| Couleur | sky-accent (#fa784f) | UX Spec | +| Animation | CSS transition 500ms | Décision technique | +| Position desktop | Header, à droite | Epics | +| Position mobile | Bottom bar (icône) | Epics | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/3-5-logique-progression-deblocage-contact.md b/docs/implementation-artifacts/3-5-logique-progression-deblocage-contact.md new file mode 100644 index 0000000..88bef7e --- /dev/null +++ b/docs/implementation-artifacts/3-5-logique-progression-deblocage-contact.md @@ -0,0 +1,485 @@ +# Story 3.5: Logique de progression et déblocage contact + +Status: ready-for-dev + +## Story + +As a visiteur, +I want que ma progression débloque l'accès au contact, +so that l'exploration est récompensée sans être frustrante. + +## Acceptance Criteria + +1. **Given** le store `useProgressionStore` est actif **When** le visiteur visite une nouvelle zone **Then** la zone est ajoutée à `visitedSections` +2. **And** le `completionPercent` est recalculé automatiquement +3. **And** la progression est persistée en LocalStorage (si consentement RGPD donné) +4. **Given** le visiteur a visité 2 zones ou plus **When** la condition est atteinte **Then** `contactUnlocked` passe à `true` +5. **And** le narrateur annonce le déblocage avec un message spécial +6. **And** la zone Contact s'illumine sur la carte (si visible) +7. **And** le visiteur peut continuer à explorer ou aller au contact +8. **Given** le visiteur revient sur le site **When** une progression existe en LocalStorage **Then** le store est réhydraté avec l'état sauvegardé +9. **And** le narrateur affiche "Bienvenue à nouveau" +10. **And** la carte affiche l'état correct des zones visitées + +## Tasks / Subtasks + +- [ ] **Task 1: Compléter le store useProgressionStore** (AC: #1, #2, #4) + - [ ] État : visitedSections, completionPercent, contactUnlocked, heroType, expressMode, narratorStage, choices + - [ ] Action : visitSection(section) pour enregistrer une visite + - [ ] Getter : contactUnlocked = visitedSections.length >= 2 + - [ ] Getter : narratorStage basé sur completionPercent + +- [ ] **Task 2: Implémenter la persistance LocalStorage** (AC: #3, #8) + - [ ] Créer `frontend/app/composables/useProgressionPersistence.ts` + - [ ] Vérifier le consentement RGPD avant de persister + - [ ] Clé LocalStorage : `skycel_progression` + - [ ] Sérialiser : visitedSections, heroType, choices + - [ ] Réhydrater au chargement + +- [ ] **Task 3: Détecter les visites de sections** (AC: #1) + - [ ] Créer un plugin ou middleware qui détecte la route actuelle + - [ ] Mapper les routes aux sections : /projets → projets, etc. + - [ ] Appeler `visitSection()` automatiquement + +- [ ] **Task 4: Implémenter le déblocage du contact** (AC: #4, #5, #6, #7) + - [ ] Le contact est débloqué après 2 sections visitées + - [ ] Émettre un événement ou watcher pour déclencher le narrateur + - [ ] Permettre l'accès au contact même si bloqué (UX non frustrante) + - [ ] Marquer visuellement sur la carte + +- [ ] **Task 5: Réhydratation au retour** (AC: #8, #9, #10) + - [ ] Au montage de l'app, vérifier LocalStorage + - [ ] Si progression existante, réhydrater le store + - [ ] Déclencher le message "Bienvenue à nouveau" via useNarrator + - [ ] La carte reflète l'état correct + +- [ ] **Task 6: Gestion du consentement RGPD** (AC: #3) + - [ ] Lire l'état du consentement depuis le store ou cookie + - [ ] Si pas de consentement, ne pas persister + - [ ] Si consentement retiré, supprimer les données + +- [ ] **Task 7: Tests et validation** + - [ ] Tester l'ajout de sections visitées + - [ ] Vérifier le calcul automatique du pourcentage + - [ ] Tester le déblocage à 2 sections + - [ ] Valider la persistance LocalStorage + - [ ] Tester la réhydratation au rechargement + - [ ] Vérifier le comportement sans consentement RGPD + +## Dev Notes + +### Store useProgressionStore complet + +```typescript +// frontend/app/stores/progression.ts +import { defineStore } from 'pinia' + +// Types +export type Section = 'projets' | 'competences' | 'temoignages' | 'parcours' +export type HeroType = 'recruteur' | 'client' | 'dev' | null +export type Choice = { id: string; value: string; timestamp: number } + +// Constantes +const AVAILABLE_SECTIONS: Section[] = ['projets', 'competences', 'temoignages', 'parcours'] +const CONTACT_UNLOCK_THRESHOLD = 2 +const NARRATOR_STAGE_THRESHOLDS = [0, 20, 40, 60, 80] // 5 stages + +export const useProgressionStore = defineStore('progression', () => { + // === État === + const visitedSections = ref([]) + const heroType = ref(null) + const expressMode = ref(false) + const choices = ref([]) + const hasReturned = ref(false) // Pour savoir si c'est un retour + + // === Getters === + const completionPercent = computed(() => { + return Math.round((visitedSections.value.length / AVAILABLE_SECTIONS.length) * 100) + }) + + const contactUnlocked = computed(() => { + return visitedSections.value.length >= CONTACT_UNLOCK_THRESHOLD + }) + + const narratorStage = computed(() => { + const percent = completionPercent.value + for (let i = NARRATOR_STAGE_THRESHOLDS.length - 1; i >= 0; i--) { + if (percent >= NARRATOR_STAGE_THRESHOLDS[i]) { + return i + 1 // Stages 1-5 + } + } + return 1 + }) + + const remainingSections = computed(() => { + return AVAILABLE_SECTIONS.filter(s => !visitedSections.value.includes(s)) + }) + + // === Actions === + function visitSection(section: Section) { + if (!visitedSections.value.includes(section)) { + visitedSections.value.push(section) + } + } + + function setHeroType(type: HeroType) { + heroType.value = type + } + + function setExpressMode(enabled: boolean) { + expressMode.value = enabled + } + + function addChoice(id: string, value: string) { + choices.value.push({ + id, + value, + timestamp: Date.now(), + }) + } + + function markAsReturned() { + hasReturned.value = true + } + + function reset() { + visitedSections.value = [] + heroType.value = null + expressMode.value = false + choices.value = [] + hasReturned.value = false + } + + // === Sérialisation pour persistance === + function getSerializableState() { + return { + visitedSections: visitedSections.value, + heroType: heroType.value, + choices: choices.value, + } + } + + function hydrateFromState(state: ReturnType) { + if (state.visitedSections?.length) { + visitedSections.value = state.visitedSections + markAsReturned() + } + if (state.heroType) { + heroType.value = state.heroType + } + if (state.choices?.length) { + choices.value = state.choices + } + } + + return { + // État + visitedSections, + heroType, + expressMode, + choices, + hasReturned, + // Getters + completionPercent, + contactUnlocked, + narratorStage, + remainingSections, + // Actions + visitSection, + setHeroType, + setExpressMode, + addChoice, + markAsReturned, + reset, + // Sérialisation + getSerializableState, + hydrateFromState, + } +}) +``` + +### Composable useProgressionPersistence + +```typescript +// frontend/app/composables/useProgressionPersistence.ts +const STORAGE_KEY = 'skycel_progression' + +export function useProgressionPersistence() { + const progressionStore = useProgressionStore() + const consentStore = useConsentStore() // Supposé existant depuis Story 1.6 + + // Sauvegarder dans LocalStorage + function persist() { + // Vérifier le consentement RGPD + if (!consentStore.hasConsent) { + return + } + + try { + const state = progressionStore.getSerializableState() + localStorage.setItem(STORAGE_KEY, JSON.stringify(state)) + } catch (error) { + console.warn('Failed to persist progression:', error) + } + } + + // Charger depuis LocalStorage + function hydrate() { + try { + const stored = localStorage.getItem(STORAGE_KEY) + if (stored) { + const state = JSON.parse(stored) + progressionStore.hydrateFromState(state) + return true // Retourne true si des données ont été trouvées + } + } catch (error) { + console.warn('Failed to hydrate progression:', error) + } + return false + } + + // Supprimer les données + function clear() { + try { + localStorage.removeItem(STORAGE_KEY) + } catch (error) { + console.warn('Failed to clear progression:', error) + } + } + + // Watcher pour persister automatiquement + watch( + () => progressionStore.getSerializableState(), + () => { + persist() + }, + { deep: true } + ) + + // Watcher sur le consentement pour supprimer si retiré + watch( + () => consentStore.hasConsent, + (hasConsent) => { + if (!hasConsent) { + clear() + } + } + ) + + return { + persist, + hydrate, + clear, + } +} +``` + +### Plugin de détection des visites + +```typescript +// frontend/app/plugins/progression-tracker.client.ts +export default defineNuxtPlugin((nuxtApp) => { + const progressionStore = useProgressionStore() + const router = useRouter() + + // Map des routes vers les sections + const routeSectionMap: Record = { + '/projets': 'projets', + '/en/projects': 'projets', + '/competences': 'competences', + '/en/skills': 'competences', + '/temoignages': 'temoignages', + '/en/testimonials': 'temoignages', + '/parcours': 'parcours', + '/en/journey': 'parcours', + } + + // Détecter les changements de route + router.afterEach((to) => { + const section = routeSectionMap[to.path] + if (section) { + progressionStore.visitSection(section) + } + }) +}) +``` + +### Plugin d'initialisation de la progression + +```typescript +// frontend/app/plugins/progression-init.client.ts +export default defineNuxtPlugin(async (nuxtApp) => { + const { hydrate } = useProgressionPersistence() + const progressionStore = useProgressionStore() + const narrator = useNarrator() + + // Attendre que l'app soit montée + nuxtApp.hook('app:mounted', () => { + // Réhydrater la progression + const hasExistingProgress = hydrate() + + // Si le visiteur revient avec une progression existante + if (hasExistingProgress && progressionStore.hasReturned) { + // Le message "Bienvenue à nouveau" sera déclenché via useNarrator + // dans le layout adventure.vue + } + }) +}) +``` + +### Intégration avec le narrateur + +```typescript +// Dans frontend/app/layouts/adventure.vue ou composable useNarrator +// Déclencher le message de déblocage du contact + +// Watcher sur contactUnlocked +const unwatchContact = watch( + () => progressionStore.contactUnlocked, + (isUnlocked, wasUnlocked) => { + if (isUnlocked && !wasUnlocked) { + narrator.showContactUnlocked() + // Notification visuelle optionnelle + } + } +) + +// Au montage, vérifier si c'est un retour +onMounted(async () => { + if (progressionStore.hasReturned) { + await narrator.showWelcomeBack() + } else if (progressionStore.heroType) { + await narrator.showIntro() + } +}) +``` + +### Interface du consentement (référence) + +```typescript +// frontend/app/stores/consent.ts (supposé existant depuis Story 1.6) +export const useConsentStore = defineStore('consent', () => { + const hasConsent = ref(false) + const consentDate = ref(null) + + function giveConsent() { + hasConsent.value = true + consentDate.value = Date.now() + } + + function revokeConsent() { + hasConsent.value = false + consentDate.value = null + } + + return { + hasConsent, + consentDate, + giveConsent, + revokeConsent, + } +}) +``` + +### Schéma du flux de progression + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ FLUX DE PROGRESSION │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ 1. PREMIÈRE VISITE │ +│ └─> Landing page │ +│ └─> Choix du héros (recruteur/client/dev) │ +│ └─> heroType = 'recruteur' | 'client' | 'dev' │ +│ │ +│ 2. NAVIGATION │ +│ └─> Visite /projets │ +│ └─> visitSection('projets') │ +│ └─> visitedSections = ['projets'] │ +│ └─> completionPercent = 25% │ +│ └─> narratorStage = 2 (>= 20%) │ +│ │ +│ 3. DÉBLOCAGE CONTACT │ +│ └─> Visite /competences (2ème section) │ +│ └─> visitedSections = ['projets', 'competences'] │ +│ └─> completionPercent = 50% │ +│ └─> contactUnlocked = true (>= 2 sections) │ +│ └─> Trigger: narrator.showContactUnlocked() │ +│ │ +│ 4. PERSISTANCE │ +│ └─> Si consentement RGPD │ +│ └─> localStorage.setItem('skycel_progression', {...}) │ +│ │ +│ 5. RETOUR DU VISITEUR │ +│ └─> Au chargement │ +│ └─> Lire localStorage │ +│ └─> hydrateFromState() │ +│ └─> hasReturned = true │ +│ └─> Trigger: narrator.showWelcomeBack() │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +### Dépendances + +**Cette story nécessite :** +- Story 1.6 : Store Pinia de base + consentement RGPD +- Story 3.3 : useNarrator pour les messages de déblocage et retour + +**Cette story prépare pour :** +- Story 3.6 : Carte interactive (affiche l'état des zones) +- Story 3.7 : Navigation mobile (même logique) +- Story 4.3 : Chemins narratifs (utilise choices) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── stores/ +│ └── progression.ts # CRÉER (complet) +├── composables/ +│ └── useProgressionPersistence.ts # CRÉER +└── plugins/ + ├── progression-tracker.client.ts # CRÉER + └── progression-init.client.ts # CRÉER +``` + +**Fichiers à modifier :** +``` +frontend/app/layouts/adventure.vue # INTÉGRER la logique de retour +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-3.5] +- [Source: docs/planning-artifacts/ux-design-specification.md#Progression-System] +- [Source: docs/planning-artifacts/architecture.md#State-Management] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Sections pour progression | 4 (projets, competences, temoignages, parcours) | Epics | +| Seuil déblocage contact | 2 sections visitées | Epics | +| Clé LocalStorage | skycel_progression | Décision technique | +| Condition persistance | Consentement RGPD | RGPD | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/3-6-carte-interactive-desktop-konvajs.md b/docs/implementation-artifacts/3-6-carte-interactive-desktop-konvajs.md new file mode 100644 index 0000000..d815bb6 --- /dev/null +++ b/docs/implementation-artifacts/3-6-carte-interactive-desktop-konvajs.md @@ -0,0 +1,660 @@ +# Story 3.6: Carte interactive desktop (Konva.js) + +Status: ready-for-dev + +## Story + +As a visiteur desktop, +I want naviguer via une carte interactive visuelle, +so that j'explore librement le portfolio comme un monde. + +## Acceptance Criteria + +1. **Given** le visiteur est sur desktop (>= 1024px) et accède à la carte **When** la carte se charge **Then** un canvas Konva.js affiche une carte stylisée avec les zones (Projets, Compétences, Parcours, Témoignages, Contact) +2. **And** le composant est chargé en lazy-loading (`.client.vue`) pour respecter le budget JS +3. **And** chaque zone a une apparence distincte (teinte unique, icône) +4. **And** les zones visitées ont une apparence différente des zones non visitées +5. **And** la zone Contact est verrouillée visuellement si `contactUnlocked` est `false` +6. **And** la position actuelle du visiteur est marquée sur la carte +7. **And** au hover sur une zone : le nom et le statut s'affichent (tooltip) +8. **And** au clic sur une zone : navigation vers la section correspondante avec transition +9. **And** un curseur personnalisé indique les zones cliquables +10. **And** la navigation au clavier est fonctionnelle (Tab entre zones, Enter pour naviguer) +11. **And** les zones ont des labels ARIA descriptifs + +## Tasks / Subtasks + +- [ ] **Task 1: Installer et configurer Konva.js** (AC: #2) + - [ ] Installer `konva` et `vue-konva` + - [ ] Configurer pour Nuxt (SSR-safe) + - [ ] Créer le wrapper `.client.vue` pour lazy-loading + +- [ ] **Task 2: Définir la structure des zones** (AC: #1, #3) + - [ ] Créer les données des 5 zones : projets, competences, parcours, temoignages, contact + - [ ] Pour chaque zone : position (x, y), couleur, icône, label, route + - [ ] Design en forme d'île/territoire stylisé + +- [ ] **Task 3: Créer le composant InteractiveMap** (AC: #1, #2) + - [ ] Créer `frontend/app/components/feature/InteractiveMap.client.vue` + - [ ] Initialiser le Stage et Layer Konva + - [ ] Dessiner le fond de carte (texture, grille, etc.) + - [ ] Placer les zones selon les positions définies + +- [ ] **Task 4: Implémenter les états visuels des zones** (AC: #3, #4, #5) + - [ ] Zone non visitée : couleur atténuée, opacité réduite + - [ ] Zone visitée : couleur vive, checkmark ou brillance + - [ ] Zone Contact verrouillée : effet grisé + icône cadenas + - [ ] Zone Contact débloquée : brillance, invitation visuelle + +- [ ] **Task 5: Implémenter le marqueur de position** (AC: #6) + - [ ] Créer un marqueur animé (pulsation) + - [ ] Positionner sur la zone actuelle (basé sur la route) + - [ ] Animer le déplacement entre zones + +- [ ] **Task 6: Implémenter les interactions hover** (AC: #7, #9) + - [ ] Détecter le hover sur chaque zone + - [ ] Afficher un tooltip avec nom + statut + - [ ] Changer le curseur en pointer + - [ ] Effet de surbrillance sur la zone + +- [ ] **Task 7: Implémenter les interactions clic** (AC: #8) + - [ ] Détecter le clic sur une zone + - [ ] Si zone accessible : naviguer avec router.push() + - [ ] Si zone Contact verrouillée : afficher message ou shake + - [ ] Animation de transition (zoom ou fade) + +- [ ] **Task 8: Implémenter l'accessibilité** (AC: #10, #11) + - [ ] Rendre les zones focusables (tabindex) + - [ ] Gérer Tab pour naviguer entre zones + - [ ] Gérer Enter/Space pour cliquer + - [ ] Ajouter aria-label descriptif à chaque zone + - [ ] Ajouter role="button" aux zones cliquables + +- [ ] **Task 9: Responsive et performance** + - [ ] Masquer la carte sous 1024px (afficher alternative mobile) + - [ ] Optimiser les redessins (cache les images) + - [ ] Lazy-load les images des zones + +- [ ] **Task 10: Tests et validation** + - [ ] Tester le chargement lazy + - [ ] Vérifier les 5 zones distinctes + - [ ] Tester les états (visité/non visité/verrouillé) + - [ ] Valider hover et clic + - [ ] Tester navigation clavier + - [ ] Vérifier accessibilité (screen reader) + +## Dev Notes + +### Installation de Konva + +```bash +# Dans le dossier frontend +pnpm add konva vue-konva +``` + +### Nuxt Config (Konva SSR-safe) + +```typescript +// nuxt.config.ts +export default defineNuxtConfig({ + // ... + build: { + transpile: ['konva', 'vue-konva'], + }, +}) +``` + +### Définition des zones + +```typescript +// frontend/app/data/mapZones.ts +import type { Section } from '~/stores/progression' + +export interface MapZone { + id: Section | 'contact' + label: { + fr: string + en: string + } + route: { + fr: string + en: string + } + position: { x: number; y: number } + color: string + icon: string // URL ou emoji + size: number // rayon ou taille +} + +export const mapZones: MapZone[] = [ + { + id: 'projets', + label: { fr: 'Projets', en: 'Projects' }, + route: { fr: '/projets', en: '/en/projects' }, + position: { x: 200, y: 150 }, + color: '#3b82f6', // blue-500 + icon: '/images/map/icon-projects.svg', + size: 80, + }, + { + id: 'competences', + label: { fr: 'Compétences', en: 'Skills' }, + route: { fr: '/competences', en: '/en/skills' }, + position: { x: 450, y: 120 }, + color: '#10b981', // emerald-500 + icon: '/images/map/icon-skills.svg', + size: 80, + }, + { + id: 'temoignages', + label: { fr: 'Témoignages', en: 'Testimonials' }, + route: { fr: '/temoignages', en: '/en/testimonials' }, + position: { x: 350, y: 280 }, + color: '#f59e0b', // amber-500 + icon: '/images/map/icon-testimonials.svg', + size: 80, + }, + { + id: 'parcours', + label: { fr: 'Parcours', en: 'Journey' }, + route: { fr: '/parcours', en: '/en/journey' }, + position: { x: 550, y: 300 }, + color: '#8b5cf6', // violet-500 + icon: '/images/map/icon-journey.svg', + size: 80, + }, + { + id: 'contact', + label: { fr: 'Contact', en: 'Contact' }, + route: { fr: '/contact', en: '/en/contact' }, + position: { x: 650, y: 180 }, + color: '#fa784f', // sky-accent + icon: '/images/map/icon-contact.svg', + size: 80, + }, +] +``` + +### Composant InteractiveMap + +```vue + + + + + + +``` + +### Clés i18n + +**fr.json :** +```json +{ + "map": { + "ariaLabel": "Carte interactive du portfolio. Utilisez Tab pour naviguer entre les zones et Entrée pour explorer.", + "instructions": "Utilisez les touches Tab pour naviguer entre les zones et Entrée ou Espace pour explorer une zone.", + "locked": "Zone verrouillée - Explorez davantage pour débloquer", + "visited": "Déjà visité", + "clickToExplore": "Cliquez pour explorer", + "legend": { + "notVisited": "Non visité", + "visited": "Visité", + "locked": "Verrouillé" + } + } +} +``` + +**en.json :** +```json +{ + "map": { + "ariaLabel": "Interactive portfolio map. Use Tab to navigate between zones and Enter to explore.", + "instructions": "Use Tab keys to navigate between zones and Enter or Space to explore a zone.", + "locked": "Locked zone - Explore more to unlock", + "visited": "Already visited", + "clickToExplore": "Click to explore", + "legend": { + "notVisited": "Not visited", + "visited": "Visited", + "locked": "Locked" + } + } +} +``` + +### Utilisation dans une page + +```vue + + + + +``` + +### Dépendances + +**Cette story nécessite :** +- Story 3.5 : Store de progression (visitedSections, contactUnlocked) +- Nuxt/Vue 3 avec support Konva + +**Cette story prépare pour :** +- Story 3.7 : Navigation mobile (alternative à la carte) +- Story 4.2 : Intro narrative (peut utiliser la carte) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/ +├── app/ +│ ├── components/feature/ +│ │ └── InteractiveMap.client.vue # CRÉER +│ └── data/ +│ └── mapZones.ts # CRÉER +└── public/images/map/ + ├── icon-projects.svg # CRÉER (optionnel) + ├── icon-skills.svg # CRÉER (optionnel) + ├── icon-testimonials.svg # CRÉER (optionnel) + ├── icon-journey.svg # CRÉER (optionnel) + └── icon-contact.svg # CRÉER (optionnel) +``` + +**Fichiers à modifier :** +``` +frontend/package.json # AJOUTER konva, vue-konva +frontend/nuxt.config.ts # AJOUTER transpile konva +frontend/i18n/fr.json # AJOUTER map.* +frontend/i18n/en.json # AJOUTER map.* +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-3.6] +- [Source: docs/planning-artifacts/ux-design-specification.md#Interactive-Map] +- [Source: docs/planning-artifacts/architecture.md#JS-Budget] +- [Konva.js Documentation](https://konvajs.org/) + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Breakpoint desktop | >= 1024px | Epics | +| Bibliothèque canvas | Konva.js + vue-konva | Architecture | +| Chargement | Lazy (.client.vue) | JS Budget | +| Zones | 5 (projets, competences, temoignages, parcours, contact) | Epics | +| Accessibilité | Tab + Enter/Space, ARIA | Epics | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/3-7-navigation-mobile-chemin-libre-bottom-bar.md b/docs/implementation-artifacts/3-7-navigation-mobile-chemin-libre-bottom-bar.md new file mode 100644 index 0000000..9ce34d0 --- /dev/null +++ b/docs/implementation-artifacts/3-7-navigation-mobile-chemin-libre-bottom-bar.md @@ -0,0 +1,800 @@ +# Story 3.7: Navigation mobile - Chemin Libre et Bottom Bar + +Status: ready-for-dev + +## Story + +As a visiteur mobile, +I want naviguer facilement avec une interface adaptée au tactile, +so that l'expérience reste immersive sur petit écran. + +## Acceptance Criteria + +1. **Given** le visiteur est sur mobile (< 768px) **When** il accède à la navigation **Then** le "Chemin Libre" affiche les zones en cards verticales scrollables (`ZoneCard`) +2. **And** chaque `ZoneCard` affiche : illustration, nom de la zone, statut (visité/nouveau/verrouillé) +3. **And** une ligne décorative relie les cards visuellement (effet chemin) +4. **And** un tap sur une zone navigue vers la section correspondante +5. **And** la zone Contact affiche un cadenas si `contactUnlocked` est `false` +6. **Given** la bottom bar mobile est affichée **When** le visiteur interagit **Then** 3 icônes sont accessibles : Carte (ouvre le Chemin Libre), Progression (affiche le %), Paramètres +7. **And** les touch targets font au minimum 48x48px +8. **And** la bottom bar est fixe et toujours visible +9. **And** le narrateur s'affiche au-dessus de la bottom bar quand actif + +## Tasks / Subtasks + +- [ ] **Task 1: Créer le composant ZoneCard** (AC: #1, #2, #5) + - [ ] Créer `frontend/app/components/feature/ZoneCard.vue` + - [ ] Props : zone (MapZone), isVisited, isLocked, isCurrent + - [ ] Afficher illustration, nom traduit, statut visuel + - [ ] Icône cadenas si verrouillé + - [ ] Badge "Nouveau" si non visité + - [ ] Checkmark si visité + +- [ ] **Task 2: Créer le composant CheminLibre** (AC: #1, #3, #4) + - [ ] Créer `frontend/app/components/feature/CheminLibre.vue` + - [ ] Afficher les 5 zones en cards verticales + - [ ] Ligne décorative reliant les cards (SVG ou CSS) + - [ ] Scroll vertical natif + - [ ] Gestion du tap pour navigation + +- [ ] **Task 3: Créer le composant BottomBar** (AC: #6, #7, #8) + - [ ] Créer `frontend/app/components/layout/BottomBar.vue` + - [ ] 3 boutons : Carte, Progression, Paramètres + - [ ] Touch targets minimum 48x48px + - [ ] Position fixe en bas + - [ ] Variable CSS --bottom-bar-height pour le spacing + +- [ ] **Task 4: Intégrer le drawer Chemin Libre** (AC: #1) + - [ ] Au tap sur Carte dans BottomBar, ouvrir le CheminLibre + - [ ] Le CheminLibre s'affiche en slide-up depuis le bas + - [ ] Overlay pour fermer en tapant à l'extérieur + - [ ] Handle de glissement pour fermer + +- [ ] **Task 5: Intégrer le modal Progression** (AC: #6) + - [ ] Au tap sur Progression, afficher le détail + - [ ] Réutiliser le composant ProgressIcon de Story 3.4 + - [ ] Afficher la liste des sections visitées/restantes + +- [ ] **Task 6: Intégrer les paramètres** (AC: #6) + - [ ] Au tap sur Paramètres, ouvrir un drawer + - [ ] Options : langue, mode Express/Aventure, réinitialiser + - [ ] Consentement RGPD accessible + +- [ ] **Task 7: Gérer le positionnement du narrateur** (AC: #9) + - [ ] Variable CSS --bottom-bar-height définie + - [ ] Le NarratorBubble utilise cette variable pour son bottom + - [ ] Pas de chevauchement entre narrateur et bottom bar + +- [ ] **Task 8: Responsive design** + - [ ] BottomBar visible uniquement < 768px + - [ ] CheminLibre adapté aux petits écrans + - [ ] Safe-area-inset pour les appareils avec notch + +- [ ] **Task 9: Tests et validation** + - [ ] Tester sur mobile réel ou émulateur + - [ ] Vérifier les touch targets (48px minimum) + - [ ] Tester navigation entre zones + - [ ] Valider le drawer Chemin Libre + - [ ] Tester le positionnement du narrateur + +## Dev Notes + +### Composant ZoneCard + +```vue + + + + + + +``` + +### Composant CheminLibre + +```vue + + + + + + +``` + +### Composant BottomBar + +```vue + + + + + + +``` + +### Composant ProgressDetail (pour le modal) + +```vue + + + + +``` + +### Composant SettingsDrawer + +```vue + + + + +``` + +### Clés i18n + +**fr.json :** +```json +{ + "zone": { + "locked": "Verrouillé", + "visited": "Visité", + "new": "À découvrir", + "newBadge": "Nouveau" + }, + "cheminLibre": { + "title": "Chemin Libre" + }, + "bottomBar": { + "map": "Carte", + "progress": "Progression", + "settings": "Options" + }, + "settings": { + "title": "Paramètres", + "language": "Langue", + "expressMode": "Mode Express", + "expressModeDesc": "Navigation rapide sans aventure", + "saveProgress": "Sauvegarder ma progression", + "saveProgressDesc": "Permet de reprendre là où vous vous êtes arrêté", + "reset": "Réinitialiser ma progression", + "confirmReset": "Êtes-vous sûr de vouloir réinitialiser votre progression ?" + } +} +``` + +**en.json :** +```json +{ + "zone": { + "locked": "Locked", + "visited": "Visited", + "new": "To discover", + "newBadge": "New" + }, + "cheminLibre": { + "title": "Free Path" + }, + "bottomBar": { + "map": "Map", + "progress": "Progress", + "settings": "Settings" + }, + "settings": { + "title": "Settings", + "language": "Language", + "expressMode": "Express Mode", + "expressModeDesc": "Quick navigation without adventure", + "saveProgress": "Save my progress", + "saveProgressDesc": "Allows you to resume where you left off", + "reset": "Reset my progress", + "confirmReset": "Are you sure you want to reset your progress?" + } +} +``` + +### Variable CSS pour la Bottom Bar + +```css +/* frontend/app/assets/css/main.css ou variables.css */ +:root { + --bottom-bar-height: 64px; +} + +/* Padding bottom pour le contenu principal sur mobile */ +@media (max-width: 767px) { + .main-content { + padding-bottom: calc(var(--bottom-bar-height) + 1rem); + } +} +``` + +### Dépendances + +**Cette story nécessite :** +- Story 3.4 : ProgressBar composant +- Story 3.5 : Store de progression +- Story 3.2 : NarratorBubble (pour le positionnement) + +**Cette story prépare pour :** +- Story 4.2 : Intro narrative (navigation mobile) +- Epic 4 : Chemins narratifs (utilise la navigation) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/components/ +├── feature/ +│ ├── ZoneCard.vue # CRÉER +│ ├── CheminLibre.vue # CRÉER +│ ├── ProgressDetail.vue # CRÉER +│ └── SettingsDrawer.vue # CRÉER +└── layout/ + └── BottomBar.vue # CRÉER +``` + +**Fichiers à modifier :** +``` +frontend/app/layouts/default.vue # AJOUTER BottomBar +frontend/app/assets/css/main.css # AJOUTER variables CSS +frontend/i18n/fr.json # AJOUTER traductions +frontend/i18n/en.json # AJOUTER traductions +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-3.7] +- [Source: docs/planning-artifacts/ux-design-specification.md#Mobile-Navigation] +- [Source: docs/planning-artifacts/ux-design-specification.md#Bottom-Bar] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Breakpoint mobile | < 768px | Epics | +| Touch targets | 48x48px minimum | WCAG | +| Bottom bar height | 64px | Décision technique | +| Safe area | env(safe-area-inset-bottom) | iOS | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/4-1-composant-choicecards-choix-narratifs.md b/docs/implementation-artifacts/4-1-composant-choicecards-choix-narratifs.md new file mode 100644 index 0000000..553d585 --- /dev/null +++ b/docs/implementation-artifacts/4-1-composant-choicecards-choix-narratifs.md @@ -0,0 +1,442 @@ +# Story 4.1: Composant ChoiceCards et choix narratifs + +Status: ready-for-dev + +## Story + +As a visiteur, +I want faire des choix qui influencent mon parcours, +so that mon expérience est unique et personnalisée. + +## Acceptance Criteria + +1. **Given** le composant `ChoiceCards` est implémenté **When** le narrateur propose un choix **Then** 2 cards s'affichent côte à côte (desktop) ou empilées (mobile) +2. **And** chaque card affiche : icône, texte narratif du choix +3. **And** un hover/focus highlight la card sélectionnable +4. **And** un clic enregistre le choix dans `choices` du store Pinia +5. **And** une transition animée mène vers la destination choisie +6. **And** le composant est accessible (`role="radiogroup"`, navigation clavier, focus visible) +7. **And** `prefers-reduced-motion` simplifie les animations +8. **And** le style est cohérent avec l'univers narratif (police serif, couleurs des zones) + +## Tasks / Subtasks + +- [ ] **Task 1: Définir les types de choix** (AC: #2, #4) + - [ ] Créer `frontend/app/types/choice.ts` + - [ ] Interface Choice : id, textFr, textEn, icon, destination, zoneColor + - [ ] Interface ChoicePoint : id, choices (2 options), context + +- [ ] **Task 2: Créer le composant ChoiceCard** (AC: #2, #3, #8) + - [ ] Créer `frontend/app/components/feature/ChoiceCard.vue` + - [ ] Props : choice (Choice), selected (boolean), disabled (boolean) + - [ ] Afficher icône + texte narratif + - [ ] Effet hover/focus avec highlight + - [ ] Police serif narrative pour le texte + +- [ ] **Task 3: Créer le composant ChoiceCards** (AC: #1, #4, #5, #6) + - [ ] Créer `frontend/app/components/feature/ChoiceCards.vue` + - [ ] Props : choicePoint (ChoicePoint) + - [ ] Emit : select (choice) + - [ ] Layout côte à côte desktop, empilé mobile + - [ ] Gérer la sélection et enregistrer dans le store + - [ ] Animation de transition vers la destination + +- [ ] **Task 4: Implémenter l'accessibilité** (AC: #6) + - [ ] role="radiogroup" sur le conteneur + - [ ] role="radio" sur chaque card + - [ ] aria-checked pour indiquer la sélection + - [ ] Navigation clavier (flèches gauche/droite) + - [ ] Focus visible conforme WCAG + +- [ ] **Task 5: Gérer les animations** (AC: #5, #7) + - [ ] Animation de sélection (scale + glow) + - [ ] Transition vers la destination (fade-out) + - [ ] Respecter prefers-reduced-motion + +- [ ] **Task 6: Intégrer avec le store** (AC: #4) + - [ ] Appeler `progressionStore.addChoice(id, value)` à la sélection + - [ ] Les choix sont persistés avec le reste de la progression + +- [ ] **Task 7: Tests et validation** + - [ ] Tester le layout desktop et mobile + - [ ] Valider hover/focus + - [ ] Tester navigation clavier + - [ ] Vérifier l'enregistrement du choix + - [ ] Tester prefers-reduced-motion + +## Dev Notes + +### Types des choix + +```typescript +// frontend/app/types/choice.ts +export interface Choice { + id: string + textFr: string + textEn: string + icon: string // emoji ou URL d'image + destination: string // route vers laquelle naviguer + zoneColor: string // couleur de la zone associée +} + +export interface ChoicePoint { + id: string + questionFr: string + questionEn: string + choices: [Choice, Choice] // Toujours 2 choix binaires + context: string // contexte narratif (intro, after_projects, etc.) +} + +// Exemple de point de choix +export const CHOICE_POINTS: Record = { + intro_first_choice: { + id: 'intro_first_choice', + questionFr: 'Par où veux-tu commencer ton exploration ?', + questionEn: 'Where do you want to start your exploration?', + choices: [ + { + id: 'choice_projects_first', + textFr: 'Découvrir les créations', + textEn: 'Discover the creations', + icon: '💻', + destination: '/projets', + zoneColor: '#3b82f6', + }, + { + id: 'choice_skills_first', + textFr: 'Explorer les compétences', + textEn: 'Explore the skills', + icon: '⚡', + destination: '/competences', + zoneColor: '#10b981', + }, + ], + context: 'intro', + }, + after_projects: { + id: 'after_projects', + questionFr: 'Quelle sera ta prochaine étape ?', + questionEn: 'What will be your next step?', + choices: [ + { + id: 'choice_testimonials', + textFr: "Écouter ceux qui l'ont rencontré", + textEn: 'Listen to those who met him', + icon: '💬', + destination: '/temoignages', + zoneColor: '#f59e0b', + }, + { + id: 'choice_journey', + textFr: 'Suivre son parcours', + textEn: 'Follow his journey', + icon: '📍', + destination: '/parcours', + zoneColor: '#8b5cf6', + }, + ], + context: 'after_projects', + }, +} +``` + +### Composant ChoiceCard + +```vue + + + + + + +``` + +### Composant ChoiceCards + +```vue + + + + + + +``` + +### Utilisation dans une page/composant + +```vue + + + + +``` + +### Dépendances + +**Cette story nécessite :** +- Story 3.5 : Store de progression (addChoice) +- Story 3.2 : useReducedMotion composable + +**Cette story prépare pour :** +- Story 4.2 : Intro narrative (utilise ChoiceCards) +- Story 4.3 : Chemins narratifs (points de choix multiples) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── types/ +│ └── choice.ts # CRÉER +└── components/feature/ + ├── ChoiceCard.vue # CRÉER + └── ChoiceCards.vue # CRÉER +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-4.1] +- [Source: docs/planning-artifacts/ux-design-specification.md#Choice-System] +- [Source: docs/brainstorming-gamification-2026-01-26.md#Parcours-Narratifs] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Choix par point | 2 (binaire) | Epics | +| Layout desktop | Côte à côte | Epics | +| Layout mobile | Empilé | Epics | +| Accessibilité | role="radiogroup", clavier | Epics | +| Police | font-narrative | UX Spec | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/4-2-intro-narrative-premier-choix.md b/docs/implementation-artifacts/4-2-intro-narrative-premier-choix.md new file mode 100644 index 0000000..19adb57 --- /dev/null +++ b/docs/implementation-artifacts/4-2-intro-narrative-premier-choix.md @@ -0,0 +1,477 @@ +# Story 4.2: Intro narrative et premier choix + +Status: ready-for-dev + +## Story + +As a visiteur aventurier, +I want une introduction narrative captivante suivie d'un premier choix, +so that je suis immergé dès le début de l'aventure. + +## Acceptance Criteria + +1. **Given** le visiteur a sélectionné son héros sur la landing page **When** il commence l'aventure **Then** une séquence d'intro narrative s'affiche avec le narrateur (Le Bug) +2. **And** le texte présente le "héros mystérieux" (le développeur) à découvrir +3. **And** l'effet typewriter anime le texte (skippable par clic/Espace) +4. **And** l'ambiance visuelle est immersive (fond sombre, illustrations) +5. **And** un bouton "Continuer" permet d'avancer +6. **And** à la fin de l'intro, le premier choix binaire s'affiche via `ChoiceCards` +7. **And** le choix propose deux zones à explorer en premier (ex: Projets vs Compétences) +8. **And** le contenu est bilingue (FR/EN) et adapté au héros (vouvoiement/tutoiement) +9. **And** la durée de l'intro est courte (15-30s max, skippable) + +## Tasks / Subtasks + +- [ ] **Task 1: Créer les textes d'intro dans l'API** (AC: #2, #8) + - [ ] Ajouter les contextes `intro_sequence_1`, `intro_sequence_2`, `intro_sequence_3` dans narrator_texts + - [ ] Variantes pour chaque type de héros (vouvoiement/tutoiement) + - [ ] Textes mystérieux présentant le développeur + +- [ ] **Task 2: Créer la page intro** (AC: #1, #4, #9) + - [ ] Créer `frontend/app/pages/intro.vue` + - [ ] Rediriger automatiquement depuis landing après choix du héros + - [ ] Fond sombre avec ambiance mystérieuse + - [ ] Structure en étapes (séquences de texte) + +- [ ] **Task 3: Implémenter la séquence narrative** (AC: #2, #3, #5) + - [ ] Créer composant `IntroSequence.vue` + - [ ] Afficher le Bug avec le texte en typewriter + - [ ] Bouton "Continuer" pour passer à l'étape suivante + - [ ] Clic/Espace pour skip le typewriter + - [ ] 3-4 séquences de texte courtes + +- [ ] **Task 4: Ajouter les illustrations d'ambiance** (AC: #4) + - [ ] Illustrations de fond (toiles d'araignée, ombres, code flottant) + - [ ] Animation subtile sur les éléments de fond + - [ ] Cohérence avec l'univers de Le Bug + +- [ ] **Task 5: Intégrer le premier choix** (AC: #6, #7) + - [ ] Après la dernière séquence, afficher ChoiceCards + - [ ] Choix : Projets vs Compétences + - [ ] La sélection navigue vers la zone choisie + +- [ ] **Task 6: Gérer le skip global** (AC: #9) + - [ ] Bouton discret "Passer l'intro" visible en permanence + - [ ] Navigation directe vers le choix si skip + - [ ] Enregistrer dans le store que l'intro a été vue/skip + +- [ ] **Task 7: Tests et validation** + - [ ] Tester le flow complet + - [ ] Vérifier les 3 types de héros (textes adaptés) + - [ ] Tester FR et EN + - [ ] Valider la durée (< 30s) + - [ ] Tester le skip intro + +## Dev Notes + +### Textes d'intro (exemples) + +```php +// À ajouter dans NarratorTextSeeder.php + +// Intro séquence 1 - Recruteur (vouvoiement) +['context' => 'intro_sequence_1', 'text_key' => 'narrator.intro_seq.1.recruteur', 'variant' => 1, 'hero_type' => 'recruteur'], + +// Intro séquence 1 - Client/Dev (tutoiement) +['context' => 'intro_sequence_1', 'text_key' => 'narrator.intro_seq.1.casual', 'variant' => 1, 'hero_type' => 'client'], +['context' => 'intro_sequence_1', 'text_key' => 'narrator.intro_seq.1.casual', 'variant' => 1, 'hero_type' => 'dev'], + +// Traductions +['key' => 'narrator.intro_seq.1.recruteur', 'fr' => "Bienvenue dans mon domaine, voyageur... Je suis Le Bug, et je vais vous guider dans cette aventure.", 'en' => "Welcome to my domain, traveler... I am The Bug, and I will guide you through this adventure."], +['key' => 'narrator.intro_seq.1.casual', 'fr' => "Hey ! Bienvenue chez moi. Je suis Le Bug, ton guide pour cette aventure.", 'en' => "Hey! Welcome to my place. I'm The Bug, your guide for this adventure."], + +['key' => 'narrator.intro_seq.2', 'fr' => "Il y a quelqu'un ici que tu cherches... Un développeur mystérieux qui a créé tout ce que tu vois autour de toi.", 'en' => "There's someone here you're looking for... A mysterious developer who created everything you see around you."], + +['key' => 'narrator.intro_seq.3', 'fr' => "Pour le trouver, tu devras explorer ce monde. Chaque zone cache une partie de son histoire. Es-tu prêt ?", 'en' => "To find them, you'll have to explore this world. Each zone hides a part of their story. Are you ready?"], +``` + +### Page intro.vue + +```vue + + + + +``` + +### Composant IntroSequence + +```vue + + + + + + +``` + +### Composant IntroBackground + +```vue + + + + + + +``` + +### Clés i18n + +**fr.json :** +```json +{ + "intro": { + "continue": "Continuer", + "startExploring": "Commencer l'exploration", + "skip": "Passer l'intro" + } +} +``` + +**en.json :** +```json +{ + "intro": { + "continue": "Continue", + "startExploring": "Start exploring", + "skip": "Skip intro" + } +} +``` + +### Dépendances + +**Cette story nécessite :** +- Story 3.1 : API narrateur (contextes intro_sequence_*) +- Story 3.2 : NarratorBubble et useTypewriter +- Story 4.1 : ChoiceCards pour le premier choix +- Story 1.5 : Landing page (choix du héros) + +**Cette story prépare pour :** +- Story 4.3 : Chemins narratifs (suite de l'aventure) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── pages/ +│ └── intro.vue # CRÉER +└── components/feature/ + ├── IntroSequence.vue # CRÉER + └── IntroBackground.vue # CRÉER +``` + +**Fichiers à modifier :** +``` +api/database/seeders/NarratorTextSeeder.php # AJOUTER intro_sequence_* +frontend/i18n/fr.json # AJOUTER intro.* +frontend/i18n/en.json # AJOUTER intro.* +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-4.2] +- [Source: docs/planning-artifacts/ux-design-specification.md#Intro-Sequence] +- [Source: docs/brainstorming-gamification-2026-01-26.md#Onboarding] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Durée intro | 15-30s max (skippable) | Epics | +| Séquences | 3-4 textes courts | Décision technique | +| Premier choix | Projets vs Compétences | Epics | +| Adaptation héros | Vouvoiement/tutoiement | UX Spec | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/4-3-chemins-narratifs-differencies.md b/docs/implementation-artifacts/4-3-chemins-narratifs-differencies.md new file mode 100644 index 0000000..35bbfe5 --- /dev/null +++ b/docs/implementation-artifacts/4-3-chemins-narratifs-differencies.md @@ -0,0 +1,423 @@ +# Story 4.3: Chemins narratifs différenciés + +Status: ready-for-dev + +## Story + +As a visiteur, +I want que mes choix aient un impact visible sur mon parcours, +so that je sens que mon expérience est vraiment personnalisée. + +## Acceptance Criteria + +1. **Given** le visiteur fait des choix tout au long de l'aventure **When** il navigue entre les zones **Then** 2-3 points de choix binaires créent 4-8 parcours possibles +2. **And** chaque choix est enregistré dans `choices` du store +3. **And** l'ordre suggéré des zones varie selon le chemin choisi +4. **And** les textes du narrateur s'adaptent au chemin (transitions contextuelles) +5. **And** tous les chemins permettent de visiter tout le contenu +6. **And** tous les chemins mènent au contact (pas de "mauvais" choix) +7. **And** le `currentPath` du store reflète le chemin actuel +8. **And** à la fin de chaque zone, le narrateur propose un choix vers la suite + +## Tasks / Subtasks + +- [ ] **Task 1: Définir l'arbre des chemins** (AC: #1, #5, #6) + - [ ] Créer `frontend/app/data/narrativePaths.ts` + - [ ] Définir 2-3 points de choix créant 4-8 parcours + - [ ] S'assurer que tous les chemins visitent toutes les zones + - [ ] S'assurer que tous les chemins mènent au contact + +- [ ] **Task 2: Créer le composable useNarrativePath** (AC: #2, #3, #7) + - [ ] Créer `frontend/app/composables/useNarrativePath.ts` + - [ ] Calculer le chemin actuel basé sur les choix + - [ ] Exposer la prochaine zone suggérée + - [ ] Exposer les zones restantes dans l'ordre + +- [ ] **Task 3: Ajouter les textes de transition contextuels** (AC: #4) + - [ ] Créer des contextes spécifiques : `transition_after_projects_to_skills`, etc. + - [ ] Variantes selon le chemin pris + - [ ] Commentaires du narrateur sur les choix précédents + +- [ ] **Task 4: Intégrer les choix après chaque zone** (AC: #8) + - [ ] Composant `ZoneEndChoice.vue` affiché à la fin de chaque page de zone + - [ ] Proposer les options de destination selon le chemin + - [ ] Utiliser ChoiceCards pour la présentation + +- [ ] **Task 5: Mettre à jour le store** (AC: #2, #7) + - [ ] Ajouter `currentPath` computed au store + - [ ] Ajouter `suggestedNextZone` computed + - [ ] Méthode pour obtenir le choix à un point donné + +- [ ] **Task 6: Créer l'API pour les transitions contextuelles** (AC: #4) + - [ ] Endpoint `/api/narrator/transition-contextual` + - [ ] Paramètres : from_zone, to_zone, path_choices + - [ ] Retourner un texte adapté au contexte + +- [ ] **Task 7: Tests et validation** + - [ ] Tester tous les chemins possibles (4-8) + - [ ] Vérifier que tous mènent au contact + - [ ] Valider les textes contextuels + - [ ] Tester la suggestion de zone suivante + +## Dev Notes + +### Arbre des chemins narratifs + +```typescript +// frontend/app/data/narrativePaths.ts + +// Points de choix dans l'aventure +export const NARRATIVE_CHOICE_POINTS = { + // Point 1 : Après l'intro + intro: { + id: 'intro', + options: ['projects', 'skills'], + }, + // Point 2 : Après la première zone + after_first_zone: { + id: 'after_first_zone', + options: ['testimonials', 'journey'], + }, + // Point 3 : Après la deuxième zone + after_second_zone: { + id: 'after_second_zone', + // Les options dépendent de ce qui reste + }, +} + +// Chemins possibles (4-8 combinaisons) +// Format : intro_choice -> after_first -> after_second -> contact +export const NARRATIVE_PATHS = [ + // Chemin 1 : Projets → Témoignages → Compétences → Parcours → Contact + ['projects', 'testimonials', 'skills', 'journey', 'contact'], + // Chemin 2 : Projets → Témoignages → Parcours → Compétences → Contact + ['projects', 'testimonials', 'journey', 'skills', 'contact'], + // Chemin 3 : Projets → Parcours → Témoignages → Compétences → Contact + ['projects', 'journey', 'testimonials', 'skills', 'contact'], + // Chemin 4 : Projets → Parcours → Compétences → Témoignages → Contact + ['projects', 'journey', 'skills', 'testimonials', 'contact'], + // Chemin 5 : Compétences → Témoignages → Projets → Parcours → Contact + ['skills', 'testimonials', 'projects', 'journey', 'contact'], + // Chemin 6 : Compétences → Témoignages → Parcours → Projets → Contact + ['skills', 'testimonials', 'journey', 'projects', 'contact'], + // Chemin 7 : Compétences → Parcours → Témoignages → Projets → Contact + ['skills', 'journey', 'testimonials', 'projects', 'contact'], + // Chemin 8 : Compétences → Parcours → Projets → Témoignages → Contact + ['skills', 'journey', 'projects', 'testimonials', 'contact'], +] + +// Mapper zone key -> route +export const ZONE_ROUTES: Record = { + projects: { fr: '/projets', en: '/en/projects' }, + skills: { fr: '/competences', en: '/en/skills' }, + testimonials: { fr: '/temoignages', en: '/en/testimonials' }, + journey: { fr: '/parcours', en: '/en/journey' }, + contact: { fr: '/contact', en: '/en/contact' }, +} +``` + +### Composable useNarrativePath + +```typescript +// frontend/app/composables/useNarrativePath.ts +import { NARRATIVE_PATHS, ZONE_ROUTES } from '~/data/narrativePaths' + +export function useNarrativePath() { + const progressionStore = useProgressionStore() + const { locale } = useI18n() + + // Déterminer le chemin actuel basé sur les choix + const currentPath = computed(() => { + const choices = progressionStore.choices + + // Trouver le premier choix (intro) + const introChoice = choices.find(c => c.id === 'intro_first_choice') + if (!introChoice) return null + + const startZone = introChoice.value === 'choice_projects_first' ? 'projects' : 'skills' + + // Filtrer les chemins qui commencent par cette zone + let possiblePaths = NARRATIVE_PATHS.filter(path => path[0] === startZone) + + // Affiner avec les choix suivants + const afterFirstChoice = choices.find(c => c.id === 'after_first_zone') + if (afterFirstChoice && possiblePaths.length > 1) { + const secondZone = afterFirstChoice.value.includes('testimonials') ? 'testimonials' : 'journey' + possiblePaths = possiblePaths.filter(path => path[1] === secondZone) + } + + return possiblePaths[0] || null + }) + + // Zone actuelle basée sur la route + const currentZone = computed(() => { + const route = useRoute() + const path = route.path.toLowerCase() + + for (const [zone, routes] of Object.entries(ZONE_ROUTES)) { + if (path.includes(routes.fr.slice(1)) || path.includes(routes.en.slice(4))) { + return zone + } + } + return null + }) + + // Index de la zone actuelle dans le chemin + const currentZoneIndex = computed(() => { + if (!currentPath.value || !currentZone.value) return -1 + return currentPath.value.indexOf(currentZone.value) + }) + + // Prochaine zone suggérée + const suggestedNextZone = computed(() => { + if (!currentPath.value || currentZoneIndex.value === -1) return null + + const nextIndex = currentZoneIndex.value + 1 + if (nextIndex >= currentPath.value.length) return null + + return currentPath.value[nextIndex] + }) + + // Zones restantes à visiter + const remainingZones = computed(() => { + if (!currentPath.value) return [] + + const visited = progressionStore.visitedSections + return currentPath.value.filter(zone => + zone !== 'contact' && !visited.includes(zone as any) + ) + }) + + // Obtenir la route pour une zone + function getZoneRoute(zone: string): string { + const routes = ZONE_ROUTES[zone] + if (!routes) return '/' + return locale.value === 'fr' ? routes.fr : routes.en + } + + // Générer le choix pour après la zone actuelle + function getNextChoicePoint() { + if (!remainingZones.value.length) { + // Plus de zones, aller au contact + return { + id: 'go_to_contact', + choices: [ + { + id: 'contact', + textFr: 'Rencontrer le développeur', + textEn: 'Meet the developer', + icon: '📧', + destination: getZoneRoute('contact'), + zoneColor: '#fa784f', + }, + ], + } + } + + // Proposer les 2 prochaines zones + const nextTwo = remainingZones.value.slice(0, 2) + + return { + id: `after_${currentZone.value}`, + questionFr: 'Où vas-tu ensuite ?', + questionEn: 'Where to next?', + choices: nextTwo.map(zone => ({ + id: `choice_${zone}`, + textFr: getZoneLabel(zone, 'fr'), + textEn: getZoneLabel(zone, 'en'), + icon: getZoneIcon(zone), + destination: getZoneRoute(zone), + zoneColor: getZoneColor(zone), + })), + } + } + + return { + currentPath, + currentZone, + suggestedNextZone, + remainingZones, + getZoneRoute, + getNextChoicePoint, + } +} + +// Helpers +function getZoneLabel(zone: string, locale: string): string { + const labels: Record = { + projects: { fr: 'Découvrir les créations', en: 'Discover the creations' }, + skills: { fr: 'Explorer les compétences', en: 'Explore the skills' }, + testimonials: { fr: 'Écouter les témoignages', en: 'Listen to testimonials' }, + journey: { fr: 'Suivre le parcours', en: 'Follow the journey' }, + } + return labels[zone]?.[locale] || zone +} + +function getZoneIcon(zone: string): string { + const icons: Record = { + projects: '💻', + skills: '⚡', + testimonials: '💬', + journey: '📍', + } + return icons[zone] || '?' +} + +function getZoneColor(zone: string): string { + const colors: Record = { + projects: '#3b82f6', + skills: '#10b981', + testimonials: '#f59e0b', + journey: '#8b5cf6', + } + return colors[zone] || '#fa784f' +} +``` + +### Composant ZoneEndChoice + +```vue + + + + +``` + +### Schéma des chemins narratifs + +``` + ┌─────────────┐ + │ INTRO │ + └──────┬──────┘ + │ + ┌────────────┴────────────┐ + ▼ ▼ + ┌──────────┐ ┌──────────┐ + │ PROJETS │ │ COMPÉT. │ + └────┬─────┘ └────┬─────┘ + │ │ + ┌───────┴───────┐ ┌───────┴───────┐ + ▼ ▼ ▼ ▼ +┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ +│TÉMOIGN.│ │PARCOURS│ │TÉMOIGN.│ │PARCOURS│ +└───┬────┘ └───┬────┘ └───┬────┘ └───┬────┘ + │ │ │ │ + ▼ ▼ ▼ ▼ + (suite) (suite) (suite) (suite) + │ │ │ │ + └──────┬──────┴───────────┴──────┬──────┘ + │ │ + ▼ ▼ + ┌──────────────────────────────────────┐ + │ CONTACT │ + │ (tous les chemins y mènent) │ + └──────────────────────────────────────┘ +``` + +### Dépendances + +**Cette story nécessite :** +- Story 4.1 : ChoiceCards +- Story 4.2 : Intro narrative (premier choix) +- Story 3.5 : Store de progression (choices) + +**Cette story prépare pour :** +- Story 4.7 : Révélation (fin des chemins) +- Story 4.8 : Page contact (destination finale) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── data/ +│ └── narrativePaths.ts # CRÉER +├── composables/ +│ └── useNarrativePath.ts # CRÉER +└── components/feature/ + └── ZoneEndChoice.vue # CRÉER +``` + +**Fichiers à modifier :** +``` +frontend/app/pages/projets.vue # AJOUTER ZoneEndChoice +frontend/app/pages/competences.vue # AJOUTER ZoneEndChoice +frontend/app/pages/temoignages.vue # AJOUTER ZoneEndChoice +frontend/app/pages/parcours.vue # AJOUTER ZoneEndChoice +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-4.3] +- [Source: docs/planning-artifacts/ux-design-specification.md#Narrative-Paths] +- [Source: docs/brainstorming-gamification-2026-01-26.md#Parcours-Narratifs] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Points de choix | 2-3 | Epics | +| Parcours possibles | 4-8 | Epics | +| Toutes zones visitables | Oui | Epics | +| Tous chemins → contact | Oui | Epics | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/4-4-table-easter-eggs-systeme-detection.md b/docs/implementation-artifacts/4-4-table-easter-eggs-systeme-detection.md new file mode 100644 index 0000000..3f44980 --- /dev/null +++ b/docs/implementation-artifacts/4-4-table-easter-eggs-systeme-detection.md @@ -0,0 +1,532 @@ +# Story 4.4: Table easter_eggs et système de détection + +Status: ready-for-dev + +## Story + +As a développeur, +I want une infrastructure pour gérer les easter eggs cachés, +so that je peux ajouter des surprises récompensant l'exploration. + +## Acceptance Criteria + +1. **Given** les migrations Laravel sont exécutées **When** `php artisan migrate` est lancé **Then** la table `easter_eggs` est créée (id, slug, location, trigger_type ENUM, reward_type ENUM, reward_key, difficulty, is_active, timestamps) +2. **And** les trigger_types incluent : click, hover, konami, scroll, sequence +3. **And** les reward_types incluent : snippet, anecdote, image, badge +4. **And** les seeders insèrent 5-10 easter eggs avec leurs récompenses traduites +5. **Given** l'API `/api/easter-eggs` est appelée **When** la requête est faite **Then** les métadonnées des easter eggs actifs sont retournées (slug, location, trigger_type) +6. **And** les réponses/récompenses ne sont PAS incluses (pour éviter la triche) +7. **Given** l'API `/api/easter-eggs/{slug}/validate` est appelée **When** un slug valide est fourni **Then** la récompense traduite est retournée +8. **And** l'easter egg est marqué comme trouvé côté client (store) + +## Tasks / Subtasks + +- [ ] **Task 1: Créer la migration table easter_eggs** (AC: #1, #2, #3) + - [ ] Créer migration `create_easter_eggs_table` + - [ ] Colonnes : id, slug (unique), location, trigger_type (ENUM), reward_type (ENUM), reward_key, difficulty (1-5), is_active (boolean), timestamps + - [ ] ENUMs pour trigger_type et reward_type + +- [ ] **Task 2: Créer le Model EasterEgg** (AC: #1) + - [ ] Créer `app/Models/EasterEgg.php` + - [ ] Définir les fillable et casts + - [ ] Scope `active()` pour les easter eggs actifs + - [ ] Relation avec translations pour reward_key + +- [ ] **Task 3: Créer le Seeder des easter eggs** (AC: #4) + - [ ] Créer `database/seeders/EasterEggSeeder.php` + - [ ] 5-10 easter eggs avec variété de triggers et récompenses + - [ ] Ajouter les traductions FR et EN pour les récompenses + +- [ ] **Task 4: Créer l'endpoint liste des easter eggs** (AC: #5, #6) + - [ ] Créer `app/Http/Controllers/Api/EasterEggController.php` + - [ ] Méthode `index()` retournant slug, location, trigger_type + - [ ] NE PAS inclure reward_key ou détails de la récompense + +- [ ] **Task 5: Créer l'endpoint validation** (AC: #7) + - [ ] Méthode `validate($slug)` retournant la récompense + - [ ] Traduire selon Accept-Language + - [ ] Retourner 404 si slug invalide + +- [ ] **Task 6: Créer le store côté client** (AC: #8) + - [ ] Ajouter `easterEggsFound: string[]` dans useProgressionStore + - [ ] Méthode `markEasterEggFound(slug)` + - [ ] Getter `easterEggsCount` (trouvés/total) + +- [ ] **Task 7: Créer le composable useFetchEasterEggs** + - [ ] Créer `frontend/app/composables/useFetchEasterEggs.ts` + - [ ] Méthode `fetchList()` pour récupérer les métadonnées + - [ ] Méthode `validate(slug)` pour valider un easter egg trouvé + +- [ ] **Task 8: Tests et validation** + - [ ] Exécuter les migrations + - [ ] Vérifier le seeding + - [ ] Tester l'API liste (sans récompenses) + - [ ] Tester l'API validation (avec récompenses) + +## Dev Notes + +### Migration easter_eggs + +```php +id(); + $table->string('slug')->unique(); + $table->string('location'); // Page ou zone où se trouve l'easter egg + $table->enum('trigger_type', ['click', 'hover', 'konami', 'scroll', 'sequence']); + $table->enum('reward_type', ['snippet', 'anecdote', 'image', 'badge']); + $table->string('reward_key'); // Clé de traduction pour la récompense + $table->unsignedTinyInteger('difficulty')->default(1); // 1-5 + $table->boolean('is_active')->default(true); + $table->timestamps(); + + $table->index('is_active'); + $table->index('location'); + }); + } + + public function down(): void + { + Schema::dropIfExists('easter_eggs'); + } +}; +``` + +### Model EasterEgg + +```php + 'integer', + 'is_active' => 'boolean', + ]; + + public function scopeActive($query) + { + return $query->where('is_active', true); + } + + public function scopeByLocation($query, string $location) + { + return $query->where('location', $location); + } + + public function getReward(string $lang = 'fr'): ?string + { + return Translation::getTranslation($this->reward_key, $lang); + } +} +``` + +### Seeder des easter eggs + +```php + 'konami-master', + 'location' => 'landing', + 'trigger_type' => 'konami', + 'reward_type' => 'badge', + 'reward_key' => 'easter.konami.reward', + 'difficulty' => 3, + ], + // 2. Clic sur l'araignée cachée (header) + [ + 'slug' => 'hidden-spider', + 'location' => 'header', + 'trigger_type' => 'click', + 'reward_type' => 'anecdote', + 'reward_key' => 'easter.spider.reward', + 'difficulty' => 2, + ], + // 3. Hover sur un caractère spécial dans le code (page projets) + [ + 'slug' => 'secret-comment', + 'location' => 'projects', + 'trigger_type' => 'hover', + 'reward_type' => 'snippet', + 'reward_key' => 'easter.comment.reward', + 'difficulty' => 2, + ], + // 4. Scroll jusqu'en bas de la page parcours + [ + 'slug' => 'journey-end', + 'location' => 'journey', + 'trigger_type' => 'scroll', + 'reward_type' => 'anecdote', + 'reward_key' => 'easter.journey_end.reward', + 'difficulty' => 1, + ], + // 5. Séquence de clics sur les compétences (Vue, Laravel, TypeScript) + [ + 'slug' => 'tech-sequence', + 'location' => 'skills', + 'trigger_type' => 'sequence', + 'reward_type' => 'snippet', + 'reward_key' => 'easter.tech_seq.reward', + 'difficulty' => 4, + ], + // 6. Clic sur le logo Skycel 5 fois + [ + 'slug' => 'logo-clicks', + 'location' => 'global', + 'trigger_type' => 'click', + 'reward_type' => 'image', + 'reward_key' => 'easter.logo.reward', + 'difficulty' => 2, + ], + // 7. Hover sur la date "2022" dans le parcours + [ + 'slug' => 'founding-date', + 'location' => 'journey', + 'trigger_type' => 'hover', + 'reward_type' => 'anecdote', + 'reward_key' => 'easter.founding.reward', + 'difficulty' => 2, + ], + // 8. Console.log dans les devtools + [ + 'slug' => 'dev-console', + 'location' => 'global', + 'trigger_type' => 'sequence', + 'reward_type' => 'badge', + 'reward_key' => 'easter.console.reward', + 'difficulty' => 3, + ], + ]; + + foreach ($easterEggs as $egg) { + EasterEgg::create($egg); + } + + // Traductions des récompenses + $translations = [ + // Konami + ['key' => 'easter.konami.reward', 'fr' => "🎮 Badge 'Gamer' débloqué ! Tu connais les classiques.", 'en' => "🎮 'Gamer' badge unlocked! You know the classics."], + + // Spider + ['key' => 'easter.spider.reward', 'fr' => "🕷️ Tu m'as trouvé ! Je me cache partout sur ce site... Le Bug te surveille toujours.", 'en' => "🕷️ You found me! I hide everywhere on this site... The Bug is always watching."], + + // Comment + ['key' => 'easter.comment.reward', 'fr' => "// Premier code écrit : console.log('Hello World'); // Tout a commencé là...", 'en' => "// First code written: console.log('Hello World'); // It all started there..."], + + // Journey end + ['key' => 'easter.journey_end.reward', 'fr' => "Tu as lu jusqu'au bout ? Respect. Le prochain chapitre s'écrit peut-être avec toi.", 'en' => "You read all the way? Respect. The next chapter might be written with you."], + + // Tech sequence + ['key' => 'easter.tech_seq.reward', 'fr' => "const stack = ['Vue', 'Laravel', 'TypeScript'];\n// La sainte trinité du dev moderne ⚡", 'en' => "const stack = ['Vue', 'Laravel', 'TypeScript'];\n// The holy trinity of modern dev ⚡"], + + // Logo + ['key' => 'easter.logo.reward', 'fr' => "🖼️ Image secrète débloquée : La première version du logo Skycel (spoiler: c'était moche)", 'en' => "🖼️ Secret image unlocked: The first version of the Skycel logo (spoiler: it was ugly)"], + + // Founding + ['key' => 'easter.founding.reward', 'fr' => "2022 : l'année où Le Bug est né. Littéralement un bug dans le code qui m'a donné l'idée de la mascotte.", 'en' => "2022: the year The Bug was born. Literally a bug in the code that gave me the mascot idea."], + + // Console + ['key' => 'easter.console.reward', 'fr' => "🔧 Badge 'Développeur' débloqué ! Tu as vérifié la console comme un vrai dev.", 'en' => "🔧 'Developer' badge unlocked! You checked the console like a real dev."], + ]; + + foreach ($translations as $t) { + Translation::firstOrCreate( + ['lang' => 'fr', 'key_name' => $t['key']], + ['value' => $t['fr']] + ); + Translation::firstOrCreate( + ['lang' => 'en', 'key_name' => $t['key']], + ['value' => $t['en']] + ); + } + } +} +``` + +### Controller API + +```php +select('slug', 'location', 'trigger_type', 'difficulty') + ->get(); + + return response()->json([ + 'data' => $easterEggs, + 'meta' => [ + 'total' => $easterEggs->count(), + ], + ]); + } + + /** + * Valide un easter egg et retourne la récompense + */ + public function validate(Request $request, string $slug) + { + $easterEgg = EasterEgg::active()->where('slug', $slug)->first(); + + if (!$easterEgg) { + return response()->json([ + 'error' => [ + 'code' => 'EASTER_EGG_NOT_FOUND', + 'message' => 'Easter egg not found or inactive', + ], + ], 404); + } + + $lang = $request->header('Accept-Language', 'fr'); + $reward = $easterEgg->getReward($lang); + + return response()->json([ + 'data' => [ + 'slug' => $easterEgg->slug, + 'reward_type' => $easterEgg->reward_type, + 'reward' => $reward, + 'difficulty' => $easterEgg->difficulty, + ], + ]); + } +} +``` + +### Routes API + +```php +// api/routes/api.php +Route::get('/easter-eggs', [EasterEggController::class, 'index']); +Route::post('/easter-eggs/{slug}/validate', [EasterEggController::class, 'validate']); +``` + +### Extension du store progression + +```typescript +// À ajouter dans frontend/app/stores/progression.ts + +// État +const easterEggsFound = ref([]) + +// Actions +function markEasterEggFound(slug: string) { + if (!easterEggsFound.value.includes(slug)) { + easterEggsFound.value.push(slug) + } +} + +// Getters +const easterEggsFoundCount = computed(() => easterEggsFound.value.length) + +// Export +return { + // ... existing ... + easterEggsFound, + easterEggsFoundCount, + markEasterEggFound, +} +``` + +### Composable useFetchEasterEggs + +```typescript +// frontend/app/composables/useFetchEasterEggs.ts +interface EasterEggMeta { + slug: string + location: string + trigger_type: 'click' | 'hover' | 'konami' | 'scroll' | 'sequence' + difficulty: number +} + +interface EasterEggReward { + slug: string + reward_type: 'snippet' | 'anecdote' | 'image' | 'badge' + reward: string + difficulty: number +} + +export function useFetchEasterEggs() { + const config = useRuntimeConfig() + const { locale } = useI18n() + + // Cache des easter eggs disponibles + const availableEasterEggs = ref([]) + const isLoaded = ref(false) + + async function fetchList(): Promise { + if (isLoaded.value) return availableEasterEggs.value + + const response = await $fetch<{ data: EasterEggMeta[] }>('/easter-eggs', { + baseURL: config.public.apiUrl, + headers: { + 'X-API-Key': config.public.apiKey, + }, + }) + + availableEasterEggs.value = response.data + isLoaded.value = true + return response.data + } + + async function validate(slug: string): Promise { + try { + const response = await $fetch<{ data: EasterEggReward }>(`/easter-eggs/${slug}/validate`, { + method: 'POST', + baseURL: config.public.apiUrl, + headers: { + 'X-API-Key': config.public.apiKey, + 'Accept-Language': locale.value, + }, + }) + return response.data + } catch (error) { + console.error('Failed to validate easter egg:', error) + return null + } + } + + function getByLocation(location: string): EasterEggMeta[] { + return availableEasterEggs.value.filter(e => e.location === location || e.location === 'global') + } + + return { + availableEasterEggs, + fetchList, + validate, + getByLocation, + } +} +``` + +### Tableau des easter eggs + +| Slug | Location | Trigger | Type | Difficulté | +|------|----------|---------|------|------------| +| konami-master | landing | konami | badge | 3/5 | +| hidden-spider | header | click | anecdote | 2/5 | +| secret-comment | projects | hover | snippet | 2/5 | +| journey-end | journey | scroll | anecdote | 1/5 | +| tech-sequence | skills | sequence | snippet | 4/5 | +| logo-clicks | global | click | image | 2/5 | +| founding-date | journey | hover | anecdote | 2/5 | +| dev-console | global | sequence | badge | 3/5 | + +### Dépendances + +**Cette story nécessite :** +- Story 1.2 : Table translations +- Story 3.5 : Store de progression + +**Cette story prépare pour :** +- Story 4.5 : Implémentation UI des easter eggs + +### Project Structure Notes + +**Fichiers à créer :** +``` +api/ +├── app/Models/ +│ └── EasterEgg.php # CRÉER +├── app/Http/Controllers/Api/ +│ └── EasterEggController.php # CRÉER +└── database/ + ├── migrations/ + │ └── 2026_02_04_000003_create_easter_eggs_table.php # CRÉER + └── seeders/ + └── EasterEggSeeder.php # CRÉER + +frontend/app/composables/ +└── useFetchEasterEggs.ts # CRÉER +``` + +**Fichiers à modifier :** +``` +api/routes/api.php # AJOUTER routes easter-eggs +api/database/seeders/DatabaseSeeder.php # APPELER EasterEggSeeder +frontend/app/stores/progression.ts # AJOUTER easterEggsFound +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-4.4] +- [Source: docs/planning-artifacts/ux-design-specification.md#Easter-Eggs] +- [Source: docs/brainstorming-gamification-2026-01-26.md#Easter-Eggs] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Nombre d'easter eggs | 5-10 | Epics | +| Trigger types | click, hover, konami, scroll, sequence | Epics | +| Reward types | snippet, anecdote, image, badge | Epics | +| API sans spoil | Liste sans récompenses | Epics | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/4-5-easter-eggs-implementation-ui-collection.md b/docs/implementation-artifacts/4-5-easter-eggs-implementation-ui-collection.md new file mode 100644 index 0000000..4cddc46 --- /dev/null +++ b/docs/implementation-artifacts/4-5-easter-eggs-implementation-ui-collection.md @@ -0,0 +1,662 @@ +# Story 4.5: Easter eggs - Implémentation UI et collection + +Status: ready-for-dev + +## Story + +As a visiteur curieux, +I want découvrir des surprises cachées et voir ma collection, +so that l'exploration est récompensée. + +## Acceptance Criteria + +1. **Given** des easter eggs sont placés sur différentes pages **When** le visiteur déclenche un easter egg (clic, hover, konami, scroll, sequence) **Then** une animation de découverte s'affiche (popup, effet visuel) +2. **And** la récompense est affichée (snippet de code, anecdote, image, badge) +3. **And** le narrateur réagit avec enthousiasme +4. **And** une notification "Easter egg trouvé ! (X/Y)" s'affiche +5. **And** le slug est ajouté à `easterEggsFound` dans le store +6. **And** un bouton permet de fermer et continuer +7. **Given** le visiteur accède à sa collection (via paramètres ou zone dédiée) **When** la collection s'affiche **Then** une grille montre les easter eggs trouvés et des silhouettes mystère pour les non-trouvés +8. **And** les détails sont visibles pour les découverts +9. **And** un compteur X/Y indique la progression +10. **And** un badge spécial s'affiche si 100% trouvés + +## Tasks / Subtasks + +- [ ] **Task 1: Créer le composable useEasterEggDetection** (AC: #1) + - [ ] Créer `frontend/app/composables/useEasterEggDetection.ts` + - [ ] Détecter les différents types de triggers + - [ ] Hook pour écouter le Konami code + - [ ] Hook pour séquences de clics + - [ ] Détecter scroll en bas de page + +- [ ] **Task 2: Créer le composant EasterEggPopup** (AC: #1, #2, #6) + - [ ] Créer `frontend/app/components/feature/EasterEggPopup.vue` + - [ ] Modal avec animation de découverte + - [ ] Afficher la récompense selon le type (snippet, anecdote, image, badge) + - [ ] Bouton fermer + +- [ ] **Task 3: Créer le composant EasterEggNotification** (AC: #4) + - [ ] Créer `frontend/app/components/feature/EasterEggNotification.vue` + - [ ] Toast notification "Easter egg trouvé ! (X/Y)" + - [ ] Animation d'apparition/disparition + - [ ] Position non-bloquante + +- [ ] **Task 4: Intégrer le narrateur** (AC: #3) + - [ ] Ajouter contexte `easter_egg_found` dans l'API narrateur + - [ ] Le narrateur réagit avec enthousiasme + - [ ] Message différent selon le type de récompense + +- [ ] **Task 5: Créer le composant EasterEggCollection** (AC: #7, #8, #9, #10) + - [ ] Créer `frontend/app/components/feature/EasterEggCollection.vue` + - [ ] Grille d'easter eggs (trouvés vs mystères) + - [ ] Compteur X/Y + - [ ] Badge spécial si 100% + +- [ ] **Task 6: Placer les détecteurs sur les pages** (AC: #1) + - [ ] Header : araignée cachée (click) + - [ ] Landing : Konami code + - [ ] Projets : commentaire secret (hover) + - [ ] Parcours : scroll bottom + hover date + - [ ] Compétences : séquence tech + - [ ] Global : clics logo + +- [ ] **Task 7: Intégrer dans les paramètres/settings** (AC: #7) + - [ ] Ajouter un onglet ou section "Collection" + - [ ] Accessible depuis le drawer des paramètres mobile + - [ ] Accessible depuis le menu desktop + +- [ ] **Task 8: Tests et validation** + - [ ] Tester chaque type de trigger + - [ ] Vérifier l'affichage des récompenses + - [ ] Tester la collection + - [ ] Valider le compteur + - [ ] Tester le badge 100% + +## Dev Notes + +### Composable useEasterEggDetection + +```typescript +// frontend/app/composables/useEasterEggDetection.ts +import type { EasterEggMeta } from './useFetchEasterEggs' + +interface UseEasterEggDetectionOptions { + onFound: (slug: string) => void +} + +// Konami Code : ↑↑↓↓←→←→BA +const KONAMI_CODE = ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight', 'KeyB', 'KeyA'] + +export function useEasterEggDetection(options: UseEasterEggDetectionOptions) { + const { fetchList, getByLocation } = useFetchEasterEggs() + const progressionStore = useProgressionStore() + + // État + const konamiIndex = ref(0) + const clickSequence = ref([]) + + // Charger les easter eggs au montage + onMounted(() => { + fetchList() + initKonamiListener() + }) + + // === Konami Code === + function initKonamiListener() { + window.addEventListener('keydown', handleKonamiKey) + } + + function handleKonamiKey(e: KeyboardEvent) { + if (e.code === KONAMI_CODE[konamiIndex.value]) { + konamiIndex.value++ + if (konamiIndex.value === KONAMI_CODE.length) { + triggerEasterEgg('konami-master') + konamiIndex.value = 0 + } + } else { + konamiIndex.value = 0 + } + } + + // === Click Detection === + function detectClick(elementId: string, targetSlug: string, requiredClicks: number = 1) { + const clicks = ref(0) + + function handleClick() { + clicks.value++ + if (clicks.value >= requiredClicks) { + triggerEasterEgg(targetSlug) + clicks.value = 0 + } + } + + return { handleClick, clicks } + } + + // === Hover Detection === + function detectHover(targetSlug: string, hoverTime: number = 2000) { + let timeoutId: ReturnType | null = null + + function handleMouseEnter() { + timeoutId = setTimeout(() => { + triggerEasterEgg(targetSlug) + }, hoverTime) + } + + function handleMouseLeave() { + if (timeoutId) { + clearTimeout(timeoutId) + timeoutId = null + } + } + + return { handleMouseEnter, handleMouseLeave } + } + + // === Scroll Detection === + function detectScrollBottom(targetSlug: string) { + function checkScroll() { + const scrollTop = window.scrollY + const windowHeight = window.innerHeight + const docHeight = document.documentElement.scrollHeight + + if (scrollTop + windowHeight >= docHeight - 50) { + triggerEasterEgg(targetSlug) + } + } + + onMounted(() => { + window.addEventListener('scroll', checkScroll, { passive: true }) + }) + + onUnmounted(() => { + window.removeEventListener('scroll', checkScroll) + }) + } + + // === Sequence Detection === + function detectSequence(expectedSequence: string[], targetSlug: string) { + function addToSequence(item: string) { + clickSequence.value.push(item) + + // Garder seulement les N derniers + if (clickSequence.value.length > expectedSequence.length) { + clickSequence.value.shift() + } + + // Vérifier si la séquence correspond + if (clickSequence.value.length === expectedSequence.length) { + const match = clickSequence.value.every((val, idx) => val === expectedSequence[idx]) + if (match) { + triggerEasterEgg(targetSlug) + clickSequence.value = [] + } + } + } + + return { addToSequence } + } + + // === Trigger Easter Egg === + async function triggerEasterEgg(slug: string) { + // Vérifier si déjà trouvé + if (progressionStore.easterEggsFound.includes(slug)) { + return + } + + // Marquer comme trouvé + progressionStore.markEasterEggFound(slug) + + // Notifier + options.onFound(slug) + } + + onUnmounted(() => { + window.removeEventListener('keydown', handleKonamiKey) + }) + + return { + detectClick, + detectHover, + detectScrollBottom, + detectSequence, + triggerEasterEgg, + } +} +``` + +### Composant EasterEggPopup + +```vue + + + + + + +``` + +### Composant EasterEggCollection + +```vue + + + + + + +``` + +### Clés i18n + +**fr.json :** +```json +{ + "easterEgg": { + "found": "Easter Egg trouvé !", + "count": "{found} / {total} découverts", + "difficulty": "Difficulté", + "collection": "Ma Collection", + "allFound": "Collection complète ! Tu es un vrai explorateur !", + "hint": "Continue d'explorer... des surprises sont cachées partout !" + } +} +``` + +**en.json :** +```json +{ + "easterEgg": { + "found": "Easter Egg found!", + "count": "{found} / {total} discovered", + "difficulty": "Difficulty", + "collection": "My Collection", + "allFound": "Collection complete! You're a true explorer!", + "hint": "Keep exploring... surprises are hidden everywhere!" + } +} +``` + +### Intégration dans une page (exemple) + +```vue + + + + +``` + +### Dépendances + +**Cette story nécessite :** +- Story 4.4 : API et store des easter eggs +- Story 3.3 : useNarrator (réaction du narrateur) + +**Cette story prépare pour :** +- Story 4.8 : Page contact (statistiques de collection) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── composables/ +│ └── useEasterEggDetection.ts # CRÉER +└── components/feature/ + ├── EasterEggPopup.vue # CRÉER + ├── EasterEggNotification.vue # CRÉER + └── EasterEggCollection.vue # CRÉER +``` + +**Fichiers à modifier :** +``` +frontend/app/pages/projets.vue # AJOUTER détecteurs +frontend/app/pages/parcours.vue # AJOUTER détecteurs +frontend/app/pages/competences.vue # AJOUTER détecteurs +frontend/app/components/layout/AppHeader.vue # AJOUTER araignée cachée +frontend/app/components/feature/SettingsDrawer.vue # AJOUTER collection +frontend/i18n/fr.json # AJOUTER easterEgg.* +frontend/i18n/en.json # AJOUTER easterEgg.* +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-4.5] +- [Source: docs/planning-artifacts/ux-design-specification.md#Easter-Eggs-UI] +- [Source: docs/brainstorming-gamification-2026-01-26.md#Easter-Eggs] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Types de triggers | click, hover, konami, scroll, sequence | Epics | +| Types de récompenses | snippet, anecdote, image, badge | Epics | +| Collection | Grille avec mystères | Epics | +| Badge 100% | Affiché si complet | Epics | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/4-6-page-challenge-structure-puzzle.md b/docs/implementation-artifacts/4-6-page-challenge-structure-puzzle.md new file mode 100644 index 0000000..0fd7dcb --- /dev/null +++ b/docs/implementation-artifacts/4-6-page-challenge-structure-puzzle.md @@ -0,0 +1,608 @@ +# Story 4.6: Page Challenge - Structure et puzzle + +Status: ready-for-dev + +## Story + +As a visiteur, +I want relever un défi optionnel avant d'accéder au contact, +so that l'accès au développeur est une récompense méritée (mais pas bloquante). + +## Acceptance Criteria + +1. **Given** le visiteur accède à `/challenge` (après avoir débloqué le contact) **When** la page se charge **Then** une introduction narrative "Une dernière épreuve..." s'affiche +2. **And** un puzzle logique/code simple est présenté (réordonner, compléter, décoder) +3. **And** la difficulté est calibrée : 1-3 minutes pour résoudre +4. **And** le thème est lié au développement/code +5. **And** un système d'indices est disponible (bouton "Besoin d'aide ?") +6. **And** 3 niveaux d'indices progressifs sont proposés +7. **And** après 3 indices, une option "Passer" apparaît +8. **And** le challenge est TOUJOURS skippable (bouton discret "Passer directement au contact") +9. **And** une validation avec feedback clair indique succès/échec +10. **And** une animation de succès célèbre la réussite +11. **And** `challengeCompleted` est mis à `true` dans le store si réussi + +## Tasks / Subtasks + +- [ ] **Task 1: Créer la page challenge** (AC: #1, #8) + - [ ] Créer `frontend/app/pages/challenge.vue` + - [ ] Vérifier que le contact est débloqué + - [ ] Introduction narrative avec Le Bug + - [ ] Bouton discret "Passer" visible en permanence + +- [ ] **Task 2: Concevoir le puzzle** (AC: #2, #3, #4) + - [ ] Puzzle type "réordonner les lignes de code" + - [ ] Code simple : une fonction qui affiche un message + - [ ] 5-7 lignes à réordonner dans le bon ordre + - [ ] Thème : débloquer l'accès au développeur + +- [ ] **Task 3: Créer le composant CodePuzzle** (AC: #2, #9) + - [ ] Créer `frontend/app/components/feature/CodePuzzle.vue` + - [ ] Drag & drop des lignes de code + - [ ] Support tactile (mobile) + - [ ] Validation visuelle (vert/rouge) + +- [ ] **Task 4: Implémenter le système d'indices** (AC: #5, #6, #7) + - [ ] Bouton "Besoin d'aide ?" + - [ ] 3 indices progressifs (révèlent de plus en plus) + - [ ] Après 3 indices : bouton "Passer" plus visible + - [ ] Indices traduits FR/EN + +- [ ] **Task 5: Implémenter l'animation de succès** (AC: #10, #11) + - [ ] Confettis ou effet visuel de célébration + - [ ] Message du narrateur + - [ ] Mettre `challengeCompleted = true` dans le store + - [ ] Navigation vers la révélation + +- [ ] **Task 6: Gérer le skip** (AC: #8) + - [ ] Skip visible en permanence (discret mais accessible) + - [ ] Skip après indices (plus visible) + - [ ] Dans les deux cas : navigation vers révélation + +- [ ] **Task 7: Accessibilité** + - [ ] Navigation clavier pour le drag & drop + - [ ] aria-labels descriptifs + - [ ] Instructions claires + +- [ ] **Task 8: Tests et validation** + - [ ] Tester le puzzle complet + - [ ] Tester les 3 indices + - [ ] Vérifier le skip + - [ ] Tester sur mobile (drag & drop tactile) + - [ ] Valider l'animation de succès + +## Dev Notes + +### Puzzle : Réordonner le code + +Le puzzle consiste à remettre dans l'ordre les lignes d'une fonction JavaScript qui "débloque" l'accès au développeur. + +```javascript +// Solution correcte +function unlockDeveloper() { + const secret = "SKYCEL"; + const key = decode(secret); + if (key === "ACCESS_GRANTED") { + return showDeveloper(); + } + return "Keep exploring..."; +} +``` + +Les lignes sont mélangées et le visiteur doit les réordonner. + +### Page challenge.vue + +```vue + + + + +``` + +### Composant CodePuzzle + +```vue + + + + + + +``` + +### Composant ChallengeSuccess + +```vue + + + + +``` + +### Clés i18n + +**fr.json :** +```json +{ + "challenge": { + "title": "Une dernière épreuve...", + "intro": "Avant de rencontrer le développeur, prouve que tu maîtrises les bases du code. Rien de bien méchant, promis.", + "accept": "Relever le défi", + "skip": "Passer directement au contact", + "puzzleTitle": "Remets le code dans l'ordre", + "puzzleInstruction": "Glisse les lignes pour reconstituer la fonction qui débloque l'accès au développeur.", + "hint1": "La fonction commence par 'function unlockDeveloper() {'", + "hint2": "La variable 'secret' est définie juste après l'accolade ouvrante", + "hint3": "La dernière ligne avant l'accolade fermante est 'return \"Keep exploring...\";'", + "hintLabel": "Indice", + "needHint": "Besoin d'aide ?", + "validate": "Vérifier", + "validating": "Vérification...", + "wrongOrder": "Ce n'est pas le bon ordre... Essaie encore !", + "moveUp": "Monter", + "moveDown": "Descendre", + "success": "Bravo !", + "successMessage": "Tu as prouvé ta valeur. Le chemin vers le développeur est maintenant ouvert...", + "redirecting": "Redirection en cours..." + } +} +``` + +**en.json :** +```json +{ + "challenge": { + "title": "One last challenge...", + "intro": "Before meeting the developer, prove you understand the basics of code. Nothing too hard, I promise.", + "accept": "Accept the challenge", + "skip": "Skip to contact", + "puzzleTitle": "Put the code in order", + "puzzleInstruction": "Drag the lines to reconstruct the function that unlocks access to the developer.", + "hint1": "The function starts with 'function unlockDeveloper() {'", + "hint2": "The 'secret' variable is defined right after the opening brace", + "hint3": "The last line before the closing brace is 'return \"Keep exploring...\";'", + "hintLabel": "Hint", + "needHint": "Need help?", + "validate": "Check", + "validating": "Checking...", + "wrongOrder": "That's not the right order... Try again!", + "moveUp": "Move up", + "moveDown": "Move down", + "success": "Well done!", + "successMessage": "You've proven your worth. The path to the developer is now open...", + "redirecting": "Redirecting..." + } +} +``` + +### Dépendances + +**Cette story nécessite :** +- Story 3.5 : Store de progression (contactUnlocked, challengeCompleted) +- Story 3.3 : useNarrator + +**Cette story prépare pour :** +- Story 4.7 : Révélation (destination après le challenge) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── pages/ +│ └── challenge.vue # CRÉER +└── components/feature/ + ├── CodePuzzle.vue # CRÉER + └── ChallengeSuccess.vue # CRÉER +``` + +**Fichiers à modifier :** +``` +frontend/app/stores/progression.ts # AJOUTER challengeCompleted +frontend/package.json # AJOUTER canvas-confetti +frontend/i18n/fr.json # AJOUTER challenge.* +frontend/i18n/en.json # AJOUTER challenge.* +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-4.6] +- [Source: docs/planning-artifacts/ux-design-specification.md#Challenge] +- [Source: docs/brainstorming-gamification-2026-01-26.md#Challenge] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Durée puzzle | 1-3 minutes | Epics | +| Indices | 3 niveaux progressifs | Epics | +| Skip | Toujours disponible | Epics | +| Thème | Code/développement | Epics | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/4-7-revelation-monde-de-code.md b/docs/implementation-artifacts/4-7-revelation-monde-de-code.md new file mode 100644 index 0000000..92b9721 --- /dev/null +++ b/docs/implementation-artifacts/4-7-revelation-monde-de-code.md @@ -0,0 +1,493 @@ +# Story 4.7: Révélation "Monde de Code" + +Status: ready-for-dev + +## Story + +As a visiteur ayant complété le parcours, +I want vivre un moment waouh de révélation finale, +so that la découverte du développeur est mémorable. + +## Acceptance Criteria + +1. **Given** le visiteur accède à la zone Contact (après challenge ou skip) **When** la révélation se déclenche **Then** une transition immersive mène vers le "Monde de Code" +2. **And** un paysage composé de blocs de code ASCII art s'affiche (montagnes, arbres, ville en code) +3. **And** le code scroll/apparaît progressivement (animation) +4. **And** l'avatar illustré de Célian est révélé au centre du monde de code +5. **And** le narrateur (Le Bug) commente : "Tu l'as trouvé !" +6. **And** le message "Tu m'as trouvé !" s'affiche avec effet de célébration +7. **And** sur mobile, une version allégée mais émotionnellement équivalente s'affiche +8. **And** `prefers-reduced-motion` affiche une version statique +9. **And** une description alternative est disponible pour les screen readers +10. **And** un bouton permet de continuer vers le formulaire de contact + +## Tasks / Subtasks + +- [ ] **Task 1: Créer la page révélation** (AC: #1, #10) + - [ ] Créer `frontend/app/pages/revelation.vue` + - [ ] Vérifier que le contact est débloqué + - [ ] Structure en phases : transition → monde de code → avatar → message + +- [ ] **Task 2: Créer le composant CodeWorld** (AC: #2, #3) + - [ ] Créer `frontend/app/components/feature/CodeWorld.vue` + - [ ] ASCII art représentant un paysage (montagnes, arbres, soleil) + - [ ] Animation de révélation ligne par ligne + - [ ] Couleurs syntaxiques (comme du code) + +- [ ] **Task 3: Créer l'ASCII art du paysage** + - [ ] Montagnes en caractères (`/\`, `^`, etc.) + - [ ] Arbres stylisés (`{}`, `[]`) + - [ ] Soleil ou étoiles + - [ ] Personnage au centre + +- [ ] **Task 4: Révéler l'avatar de Célian** (AC: #4) + - [ ] Image illustrée de Célian + - [ ] Animation d'apparition (fade + scale) + - [ ] Position centrale sur le monde de code + +- [ ] **Task 5: Message du narrateur** (AC: #5) + - [ ] Le Bug s'exclame "Tu l'as trouvé !" + - [ ] Utiliser NarratorBubble ou message intégré + - [ ] Ton enthousiaste et célébratoire + +- [ ] **Task 6: Message de Célian** (AC: #6) + - [ ] "Tu m'as trouvé !" avec effet typewriter + - [ ] Animation de célébration autour + - [ ] Signature de Célian + +- [ ] **Task 7: Version mobile** (AC: #7) + - [ ] ASCII art simplifié ou image de remplacement + - [ ] Mêmes éléments clés : avatar, message, émotion + - [ ] Performance optimisée + +- [ ] **Task 8: Accessibilité** (AC: #8, #9) + - [ ] Respecter prefers-reduced-motion (version statique) + - [ ] Description alternative pour screen readers + - [ ] aria-label descriptif + +- [ ] **Task 9: Tests et validation** + - [ ] Tester l'animation complète + - [ ] Vérifier la version mobile + - [ ] Tester prefers-reduced-motion + - [ ] Valider l'accessibilité + +## Dev Notes + +### ASCII Art du Monde de Code + +``` + * . * + * . . * + . ___ . + * . / \ * + . / ^ \ . * + * / /^\ \ * + . /____/ \____\ . + * | | | | * + . | | | | . + _______| |_____| |_______ + / | | | | \ +{ Vue }| TS |{PHP}| DB |{Nuxt} + \_______________________/ + || || || + { } { } { } + || || || + ___||_____||_____||___ +| YOU | +| FOUND ME! 🎉 | +|_____________________| +``` + +### Page revelation.vue + +```vue + + + + + + +``` + +### Composant CodeWorld + +```vue + + + + + + +``` + +### Clés i18n + +**fr.json :** +```json +{ + "revelation": { + "transition": "Le voilà...", + "foundMe": "Tu m'as trouvé !", + "greeting": "Bienvenue dans mon monde de code. Je suis Célian, le développeur que tu cherchais depuis le début.", + "title": "Développeur Web Fullstack", + "contactMe": "Me contacter", + "codeWorldAlt": "Un paysage stylisé composé de caractères de code, représentant l'univers du développeur", + "srDescription": "Vous avez découvert le développeur ! Célian vous accueille dans son monde de code." + } +} +``` + +**en.json :** +```json +{ + "revelation": { + "transition": "There he is...", + "foundMe": "You found me!", + "greeting": "Welcome to my world of code. I'm Célian, the developer you've been looking for all along.", + "title": "Fullstack Web Developer", + "contactMe": "Contact me", + "codeWorldAlt": "A stylized landscape made of code characters, representing the developer's universe", + "srDescription": "You discovered the developer! Célian welcomes you to his world of code." + } +} +``` + +### Dépendances + +**Cette story nécessite :** +- Story 3.5 : Store de progression (contactUnlocked) +- Story 3.2 : useReducedMotion +- Story 3.3 : useNarrator (révélation) + +**Cette story prépare pour :** +- Story 4.8 : Page contact (destination finale) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── pages/ +│ └── revelation.vue # CRÉER +├── components/feature/ +│ └── CodeWorld.vue # CRÉER +└── public/images/ + └── avatar-celian.svg # CRÉER (asset) +``` + +**Fichiers à modifier :** +``` +frontend/i18n/fr.json # AJOUTER revelation.* +frontend/i18n/en.json # AJOUTER revelation.* +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-4.7] +- [Source: docs/planning-artifacts/ux-design-specification.md#Revelation] +- [Source: docs/brainstorming-gamification-2026-01-26.md#Revelation] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| ASCII Art | Paysage stylisé | Epics | +| Avatar | Image de Célian | Epics | +| Message | "Tu m'as trouvé !" | Epics | +| Accessibilité | prefers-reduced-motion, aria | Epics | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/4-8-page-contact-formulaire-celebration.md b/docs/implementation-artifacts/4-8-page-contact-formulaire-celebration.md new file mode 100644 index 0000000..880a373 --- /dev/null +++ b/docs/implementation-artifacts/4-8-page-contact-formulaire-celebration.md @@ -0,0 +1,654 @@ +# Story 4.8: Page Contact - Formulaire et célébration + +Status: ready-for-dev + +## Story + +As a visiteur ayant trouvé le développeur, +I want le contacter facilement avec une célébration, +so that l'envoi du message est une conclusion satisfaisante. + +## Acceptance Criteria + +1. **Given** le visiteur est sur la page Contact après la révélation **When** la page s'affiche **Then** un message de félicitations avec stats du parcours est visible (zones visitées, easter eggs trouvés, temps passé) +2. **And** un formulaire de contact s'affiche : nom (requis), email (requis), message (requis) +3. **And** la validation temps réel est effectuée côté frontend (champs requis, format email) +4. **And** les erreurs sont communiquées par le narrateur (pas de messages d'erreur classiques) +5. **And** un champ honeypot invisible est présent (anti-spam) +6. **And** reCAPTCHA v3 est intégré de manière invisible +7. **And** le bouton d'envoi utilise la couleur accent (`sky-accent`) +8. **Given** le formulaire est soumis **When** les données sont envoyées à l'API **Then** la validation backend Laravel (Form Request) vérifie les données +9. **And** le rate limiting (5 req/min par IP) est appliqué +10. **And** l'email est envoyé via Laravel Mail +11. **And** une animation de célébration s'affiche (confettis ou similaire) +12. **And** le narrateur confirme l'envoi avec un message personnalisé +13. **And** en cas d'erreur, le narrateur explique le problème avec bienveillance + +## Tasks / Subtasks + +- [ ] **Task 1: Créer la page contact** (AC: #1, #2) + - [ ] Créer `frontend/app/pages/contact.vue` + - [ ] Afficher les stats du parcours (zones, easter eggs, temps) + - [ ] Formulaire avec nom, email, message + +- [ ] **Task 2: Implémenter la validation frontend** (AC: #3, #4) + - [ ] Validation en temps réel avec Vuelidate ou Vee-Validate + - [ ] Format email valide + - [ ] Champs requis + - [ ] Erreurs via le narrateur (pas de messages classiques) + +- [ ] **Task 3: Ajouter les protections anti-spam** (AC: #5, #6) + - [ ] Champ honeypot invisible + - [ ] Intégrer reCAPTCHA v3 (invisible) + - [ ] Obtenir token reCAPTCHA avant envoi + +- [ ] **Task 4: Créer l'API de contact** (AC: #8, #9, #10) + - [ ] Créer `app/Http/Controllers/Api/ContactController.php` + - [ ] Form Request pour validation backend + - [ ] Rate limiting : 5 requêtes/min par IP + - [ ] Envoi email via Laravel Mail + - [ ] Vérification reCAPTCHA côté serveur + +- [ ] **Task 5: Créer le template d'email** + - [ ] Template Blade pour l'email de contact + - [ ] Inclure : nom, email, message + - [ ] Design sobre et professionnel + +- [ ] **Task 6: Animation de succès** (AC: #11, #12) + - [ ] Confettis après envoi réussi + - [ ] Message du narrateur confirmant l'envoi + - [ ] Transition vers le challenge post-formulaire + +- [ ] **Task 7: Gestion des erreurs** (AC: #13) + - [ ] Erreur réseau : narrateur explique + - [ ] Rate limit : narrateur demande de patienter + - [ ] reCAPTCHA : narrateur suggère de réessayer + +- [ ] **Task 8: Tests et validation** + - [ ] Tester la validation frontend + - [ ] Tester l'envoi complet (API + email) + - [ ] Vérifier le rate limiting + - [ ] Tester le honeypot + - [ ] Valider reCAPTCHA + +## Dev Notes + +### Page contact.vue + +```vue + + + + +``` + +### Controller API Laravel + +```php +post('https://www.google.com/recaptcha/api/siteverify', [ + 'secret' => config('services.recaptcha.secret'), + 'response' => $request->input('recaptcha_token'), + 'remoteip' => $request->ip(), + ]); + + $recaptchaData = $recaptchaResponse->json(); + + if (!$recaptchaData['success'] || $recaptchaData['score'] < 0.5) { + return response()->json([ + 'error' => [ + 'code' => 'RECAPTCHA_FAILED', + 'message' => 'reCAPTCHA verification failed', + ], + ], 422); + } + + // Envoyer l'email + Mail::to(config('mail.contact_to')) + ->send(new ContactMail( + $request->input('name'), + $request->input('email'), + $request->input('message') + )); + + return response()->json([ + 'success' => true, + 'message' => 'Message sent successfully', + ]); + } +} +``` + +### Form Request + +```php + ['required', 'string', 'max:100'], + 'email' => ['required', 'email', 'max:255'], + 'message' => ['required', 'string', 'max:5000'], + 'recaptcha_token' => ['required', 'string'], + ]; + } +} +``` + +### Rate Limiting + +```php +// api/routes/api.php +Route::middleware(['throttle:contact'])->group(function () { + Route::post('/contact', [ContactController::class, 'store']); +}); + +// api/app/Providers/RouteServiceProvider.php +protected function configureRateLimiting(): void +{ + RateLimiter::for('contact', function (Request $request) { + return Limit::perMinute(5)->by($request->ip()); + }); +} +``` + +### Mail Template + +```php +name} via Skycel", + replyTo: [$this->email], + ); + } + + public function content(): Content + { + return new Content( + view: 'emails.contact', + ); + } +} +``` + +```blade + + + + + + + +

Nouveau message via Skycel

+ +

De : {{ $name }}

+

Email : {{ $email }}

+ +
+ +

Message :

+

{!! nl2br(e($message)) !!}

+ +
+

+ Ce message a été envoyé depuis le portfolio Skycel. +

+ + +``` + +### Clés i18n + +**fr.json :** +```json +{ + "contact": { + "yourJourney": "Ton parcours", + "zones": "Zones explorées", + "easterEggs": "Easter eggs", + "challenge": "Challenge", + "explorer": "Explorateur", + "title": "Contacte-moi", + "subtitle": "Tu m'as trouvé ! Maintenant, écris-moi. Je lis chaque message.", + "name": "Ton nom", + "namePlaceholder": "Comment dois-je t'appeler ?", + "email": "Ton email", + "emailPlaceholder": "Pour que je puisse te répondre", + "message": "Ton message", + "messagePlaceholder": "Dis-moi tout...", + "send": "Envoyer le message", + "sending": "Envoi en cours...", + "recaptchaNote": "Ce site est protégé par reCAPTCHA.", + "successTitle": "Message envoyé !", + "successMessage": "Je l'ai bien reçu et je te réponds dès que possible. En attendant, un petit défi bonus ?", + "redirecting": "Redirection vers le challenge bonus..." + } +} +``` + +**en.json :** +```json +{ + "contact": { + "yourJourney": "Your journey", + "zones": "Zones explored", + "easterEggs": "Easter eggs", + "challenge": "Challenge", + "explorer": "Explorer", + "title": "Contact me", + "subtitle": "You found me! Now, write to me. I read every message.", + "name": "Your name", + "namePlaceholder": "What should I call you?", + "email": "Your email", + "emailPlaceholder": "So I can reply to you", + "message": "Your message", + "messagePlaceholder": "Tell me everything...", + "send": "Send message", + "sending": "Sending...", + "recaptchaNote": "This site is protected by reCAPTCHA.", + "successTitle": "Message sent!", + "successMessage": "I received it and will reply as soon as possible. In the meantime, a bonus challenge?", + "redirecting": "Redirecting to bonus challenge..." + } +} +``` + +### Dépendances + +**Cette story nécessite :** +- Story 3.5 : Store de progression (stats) +- Story 3.3 : useNarrator (messages d'erreur) +- Story 4.7 : Révélation (page précédente) + +**Cette story prépare pour :** +- Story 4.9 : Challenge post-formulaire + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/pages/ +└── contact.vue # CRÉER + +api/ +├── app/Http/Controllers/Api/ +│ └── ContactController.php # CRÉER +├── app/Http/Requests/ +│ └── ContactRequest.php # CRÉER +├── app/Mail/ +│ └── ContactMail.php # CRÉER +└── resources/views/emails/ + └── contact.blade.php # CRÉER +``` + +**Fichiers à modifier :** +``` +api/routes/api.php # AJOUTER route contact +api/config/services.php # AJOUTER recaptcha config +frontend/nuxt.config.ts # AJOUTER reCAPTCHA +frontend/i18n/fr.json # AJOUTER contact.* +frontend/i18n/en.json # AJOUTER contact.* +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-4.8] +- [Source: docs/planning-artifacts/ux-design-specification.md#Contact-Form] +- [Source: docs/planning-artifacts/architecture.md#Security] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Validation | Frontend + Backend | Epics | +| Anti-spam | Honeypot + reCAPTCHA v3 | Epics | +| Rate limiting | 5 req/min/IP | Epics | +| Envoi email | Laravel Mail | Architecture | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/4-9-challenge-post-formulaire.md b/docs/implementation-artifacts/4-9-challenge-post-formulaire.md new file mode 100644 index 0000000..8397124 --- /dev/null +++ b/docs/implementation-artifacts/4-9-challenge-post-formulaire.md @@ -0,0 +1,558 @@ +# Story 4.9: Challenge post-formulaire + +Status: ready-for-dev + +## Story + +As a visiteur ayant envoyé un message, +I want m'amuser en attendant la réponse, +so that le temps d'attente est transformé en moment de jeu. + +## Acceptance Criteria + +1. **Given** le formulaire de contact a été envoyé avec succès **When** la confirmation s'affiche **Then** un message "En attendant que le développeur retrouve le chemin vers sa boîte mail..." est affiché +2. **And** un challenge optionnel bonus est proposé +3. **And** le challenge est différent du challenge principal (mini-jeu, quiz, exploration) +4. **And** le visiteur peut fermer et quitter à tout moment +5. **And** la participation est totalement optionnelle +6. **And** le résultat n'impacte rien (juste pour le fun) +7. **And** le narrateur commente avec humour + +## Tasks / Subtasks + +- [ ] **Task 1: Créer la page challenge-bonus** (AC: #1, #2, #4) + - [ ] Créer `frontend/app/pages/challenge-bonus.vue` + - [ ] Message d'attente humoristique + - [ ] Présentation du mini-jeu + - [ ] Bouton "Quitter" visible en permanence + +- [ ] **Task 2: Concevoir le mini-jeu** (AC: #3, #6) + - [ ] Quiz sur le développement web (5 questions) + - [ ] OU : Memory avec des technos (Vue, Laravel, TypeScript, etc.) + - [ ] OU : Snake simplifié thème code + - [ ] Résultat juste pour le fun, pas de récompense + +- [ ] **Task 3: Créer le composant BonusQuiz** (AC: #3) + - [ ] 5 questions aléatoires sur le dev + - [ ] Choix multiples (4 options) + - [ ] Feedback immédiat (correct/incorrect) + - [ ] Score à la fin + +- [ ] **Task 4: Commentaires du narrateur** (AC: #7) + - [ ] Message d'intro humoristique + - [ ] Réactions aux réponses + - [ ] Message de fin selon le score + +- [ ] **Task 5: Navigation de sortie** (AC: #4, #5) + - [ ] Bouton "Retour à l'accueil" visible + - [ ] Confirmation que le message est envoyé + - [ ] Remerciement final + +- [ ] **Task 6: Tests et validation** + - [ ] Tester le quiz complet + - [ ] Vérifier que le résultat n'impacte rien + - [ ] Tester la sortie à tout moment + +## Dev Notes + +### Page challenge-bonus.vue + +```vue + + + + +``` + +### Composant BonusQuiz + +```vue + + + + +``` + +### Clés i18n + +**fr.json :** +```json +{ + "bonus": { + "exit": "Quitter", + "waitingTitle": "Message envoyé !", + "waitingMessage": "En attendant que le développeur retrouve le chemin vers sa boîte mail... un petit quiz pour passer le temps ?", + "playQuiz": "Jouer au quiz", + "noThanks": "Non merci, j'ai terminé", + "question": "Question", + "correct": "Bonne réponse ! 🎉", + "incorrect": "Pas tout à fait... 😅", + "resultTitle": "Quiz terminé !", + "perfectMessage": "Score parfait ! Tu connais vraiment bien le développement web... et Célian !", + "goodMessage": "Bien joué ! Tu as de bonnes bases en développement web.", + "tryMessage": "Continue d'apprendre ! Le développement web est un voyage sans fin.", + "playAgain": "Rejouer", + "backHome": "Retour à l'accueil", + "messageConfirm": "Ton message a bien été envoyé. Célian te répondra bientôt !" + } +} +``` + +**en.json :** +```json +{ + "bonus": { + "exit": "Exit", + "waitingTitle": "Message sent!", + "waitingMessage": "While the developer finds their way to the inbox... a little quiz to pass the time?", + "playQuiz": "Play the quiz", + "noThanks": "No thanks, I'm done", + "question": "Question", + "correct": "Correct! 🎉", + "incorrect": "Not quite... 😅", + "resultTitle": "Quiz completed!", + "perfectMessage": "Perfect score! You really know web development... and Célian!", + "goodMessage": "Well done! You have solid web development basics.", + "tryMessage": "Keep learning! Web development is an endless journey.", + "playAgain": "Play again", + "backHome": "Back to home", + "messageConfirm": "Your message was sent successfully. Célian will reply soon!" + } +} +``` + +### Dépendances + +**Cette story nécessite :** +- Story 4.8 : Page contact (redirection après envoi) +- Story 3.3 : useNarrator + +**Cette story prépare pour :** +- Aucune (dernière story de l'Epic 4) + +### Project Structure Notes + +**Fichiers à créer :** +``` +frontend/app/ +├── pages/ +│ └── challenge-bonus.vue # CRÉER +└── components/feature/ + └── BonusQuiz.vue # CRÉER +``` + +**Fichiers à modifier :** +``` +frontend/i18n/fr.json # AJOUTER bonus.* +frontend/i18n/en.json # AJOUTER bonus.* +``` + +### References + +- [Source: docs/planning-artifacts/epics.md#Story-4.9] +- [Source: docs/planning-artifacts/ux-design-specification.md#Bonus-Challenge] +- [Source: docs/brainstorming-gamification-2026-01-26.md#Post-Contact] + +### Technical Requirements + +| Requirement | Value | Source | +|-------------|-------|--------| +| Type de mini-jeu | Quiz (5 questions) | Décision technique | +| Impact sur progression | Aucun | Epics | +| Sortie | Toujours possible | Epics | +| Ambiance | Humoristique | Epics | + +## Dev Agent Record + +### Agent Model Used + +{{agent_model_name_version}} + +### Debug Log References + +### Completion Notes List + +### Change Log +| Date | Change | Author | +|------|--------|--------| +| 2026-02-04 | Story créée avec contexte complet | SM Agent | + +### File List + diff --git a/docs/implementation-artifacts/sprint-status.yaml b/docs/implementation-artifacts/sprint-status.yaml new file mode 100644 index 0000000..6685b05 --- /dev/null +++ b/docs/implementation-artifacts/sprint-status.yaml @@ -0,0 +1,96 @@ +# generated: 2026-02-03 +# project: skycel +# project_key: skycel-portfolio +# tracking_system: file-system +# story_location: docs/implementation-artifacts + +# STATUS DEFINITIONS: +# ================== +# Epic Status: +# - backlog: Epic not yet started +# - in-progress: Epic actively being worked on +# - done: All stories in epic completed +# +# Epic Status Transitions: +# - backlog → in-progress: Automatically when first story is created (via create-story) +# - in-progress → done: Manually when all stories reach 'done' status +# +# Story Status: +# - backlog: Story only exists in epic file +# - ready-for-dev: Story file created in stories folder +# - in-progress: Developer actively working on implementation +# - review: Ready for code review (via Dev's code-review workflow) +# - done: Story completed +# +# Retrospective Status: +# - optional: Can be completed but not required +# - done: Retrospective has been completed +# +# WORKFLOW NOTES: +# =============== +# - Epic transitions to 'in-progress' automatically when first story is created +# - Stories can be worked in parallel if team capacity allows +# - SM typically creates next story after previous one is 'done' to incorporate learnings +# - Dev moves story to 'review', then runs code-review (fresh context, different LLM recommended) + +generated: 2026-02-03 +project: skycel +project_key: skycel-portfolio +tracking_system: file-system +story_location: docs/implementation-artifacts + +development_status: + # ═══════════════════════════════════════════════════════════════════════════ + # EPIC 1: Fondations & Double Entrée + # ═══════════════════════════════════════════════════════════════════════════ + epic-1: in-progress + 1-1-initialisation-monorepo-infrastructure: review + 1-2-base-donnees-migrations-initiales: ready-for-dev + 1-3-systeme-i18n-frontend-api-bilingue: ready-for-dev + 1-4-layouts-routing-transitions-page: ready-for-dev + 1-5-landing-page-choix-heros: ready-for-dev + 1-6-store-pinia-progression-bandeau-rgpd: ready-for-dev + 1-7-page-resume-express-mode-presse: ready-for-dev + epic-1-retrospective: optional + + # ═══════════════════════════════════════════════════════════════════════════ + # EPIC 2: Contenu & Découverte + # ═══════════════════════════════════════════════════════════════════════════ + epic-2: in-progress + 2-1-composant-projectcard: ready-for-dev + 2-2-page-projets-galerie: ready-for-dev + 2-3-page-projet-detail: ready-for-dev + 2-4-page-competences-affichage-categories: ready-for-dev + 2-5-competences-cliquables-projets-lies: ready-for-dev + 2-6-page-temoignages-migrations-bdd: ready-for-dev + 2-7-composant-dialogue-pnj: ready-for-dev + 2-8-page-parcours-timeline-narrative: ready-for-dev + epic-2-retrospective: optional + + # ═══════════════════════════════════════════════════════════════════════════ + # EPIC 3: Navigation Gamifiée & Progression + # ═══════════════════════════════════════════════════════════════════════════ + epic-3: in-progress + 3-1-table-narrator-texts-api-narrateur: ready-for-dev + 3-2-composant-narratorbubble-le-bug: ready-for-dev + 3-3-textes-narrateur-contextuels-arc-revelation: ready-for-dev + 3-4-barre-progression-globale-xp-bar: ready-for-dev + 3-5-logique-progression-deblocage-contact: ready-for-dev + 3-6-carte-interactive-desktop-konvajs: ready-for-dev + 3-7-navigation-mobile-chemin-libre-bottom-bar: ready-for-dev + epic-3-retrospective: optional + + # ═══════════════════════════════════════════════════════════════════════════ + # EPIC 4: Chemins Narratifs, Challenge & Contact + # ═══════════════════════════════════════════════════════════════════════════ + epic-4: in-progress + 4-1-composant-choicecards-choix-narratifs: ready-for-dev + 4-2-intro-narrative-premier-choix: ready-for-dev + 4-3-chemins-narratifs-differencies: ready-for-dev + 4-4-table-easter-eggs-systeme-detection: ready-for-dev + 4-5-easter-eggs-implementation-ui-collection: ready-for-dev + 4-6-page-challenge-structure-puzzle: ready-for-dev + 4-7-revelation-monde-de-code: ready-for-dev + 4-8-page-contact-formulaire-celebration: ready-for-dev + 4-9-challenge-post-formulaire: ready-for-dev + epic-4-retrospective: optional diff --git a/docs/planning-artifacts/architecture.md b/docs/planning-artifacts/architecture.md new file mode 100644 index 0000000..86dfc66 --- /dev/null +++ b/docs/planning-artifacts/architecture.md @@ -0,0 +1,439 @@ +--- +stepsCompleted: [1, 2, 3, 4] +inputDocuments: + - docs/prd-gamification.md + - docs/planning-artifacts/ux-design-specification.md + - docs/brainstorming-gamification-2026-01-26.md +workflowType: 'architecture' +project_name: 'skycel' +user_name: 'Célian' +date: '2026-02-01' +--- + +# Architecture Decision Document + +_This document builds collaboratively through step-by-step discovery. Sections are appended as we work through each architectural decision together._ + +## Project Context Analysis + +### Requirements Overview + +**Functional Requirements:** +14 FRs couvrant : double entrée visiteur (FR1), transitions animées seamless (FR2), narrateur-guide contextuel (FR3), carte interactive Konva.js (FR4), arbre de compétences vis.js (FR5), compétences cliquables → projets (FR6), dialogues PNJ typewriter (FR7), barre de progression globale (FR8), chemins narratifs multiples 4-8 parcours (FR9), challenge/puzzle avant contact (FR10), easter eggs cachés (FR11), sauvegarde LocalStorage (FR12), bilingue FR/EN avec détection URL (FR13), contact comme récompense narrative (FR14). + +Architecturalement, ces FRs dessinent un système à **forte interactivité côté client** avec un **backend API relativement simple** (CRUD + contact + progression). La complexité réside dans l'orchestration frontend : état de progression, navigation narrative adaptative, et composants lourds en lazy-loading. + +**Non-Functional Requirements:** +- **NFR1** : Bundle JS ≤ 170kb gzip (Nuxt + Konva + vis.js) avec lazy-loading +- **NFR2** : LCP < 2.5s sur 3G +- **NFR3** : Responsive avec expérience mobile adaptée (carte simplifiée) +- **NFR4** : Navigateurs modernes (Chrome, Firefox, Safari, Edge — 2 dernières versions) +- **NFR5** : URLs SEO-friendly, contenu accessible aux crawlers (SSR) +- **NFR6** : Respect `prefers-reduced-motion` (accessibilité animations) +- **NFR7** : i18n SSR via @nuxtjs/i18n avec fichiers JSON +- **NFR8** : Images WebP avec lazy loading + +Les NFRs les plus structurants pour l'architecture sont le budget JS (NFR1), le SSR pour SEO (NFR5/NFR7), et le responsive avec deux paradigmes de navigation (NFR3). + +**Scale & Complexity:** + +- Domaine principal : Full-stack web (Nuxt 4 SSR + Laravel 12 API REST) +- Niveau de complexité : **Moyenne-haute** — richesse des interactions frontend, faible volume de données +- Composants architecturaux estimés : ~15-20 (pages, composants custom, stores, composables, API endpoints, modèles) + +### Technical Constraints & Dependencies + +- **Nuxt 4 SSR** : Impose une architecture hybride serveur/client avec nouvelle structure `app/`. Les composants Konva.js et vis.js doivent être exclusivement client-side (`.client.vue`) +- **Laravel 12 API-only** : Backend découplé, communication via API REST JSON. CORS requis. Upgrade vers Laravel 13 prévu dès sa sortie stable (Q1 2026) +- **MariaDB** : Schéma relationnel défini dans le brainstorming (7 tables). Migration vers Eloquent ORM +- **Budget JS 170kb** : Konva (~50kb) + vis-network (~50kb) + Nuxt (~50kb) = marge très faible. Stratégie de lazy-loading critique +- **Monorepo** : `/frontend` (Nuxt) + `/api` (Laravel) dans le même repo — décision validée pour un projet solo avec frontend/backend fortement couplés +- **Hébergement dual** : Node.js pour Nuxt SSR + PHP 8.2+ pour Laravel — deux runtimes distincts + +### Cross-Cutting Concerns Identified + +1. **Gestion d'état & progression** : Le store Pinia `useProgressionStore` irrigue toute l'application — carte, narrateur, barre XP, déblocage contact, easter eggs. Doit être persisté (LocalStorage) et compatible SSR +2. **Internationalisation (i18n)** : Bilingue FR/EN à travers toutes les couches — SSR, API responses, textes narrateur, dialogues PNJ, challenges. Stratégie `prefix_except_default` pour URLs +3. **Système de héros** : Le choix du personnage (Recruteur/Client/Dev) impacte le vouvoiement, le ton du narrateur, le contenu des challenges, et potentiellement l'ordre des suggestions. Transversal à toute la couche de présentation +4. **Accessibilité (WCAG AA)** : Contraste, navigation clavier, `prefers-reduced-motion`, screen readers, skip links. Impacte chaque composant custom (carte, PNJ, narrateur, skill tree) +5. **Performance & lazy-loading** : Composants lourds (Konva, vis.js) chargés à la demande. Images WebP, fonts variables, SSR pour le premier rendu. Budget strict + +## Starter Template Evaluation + +### Primary Technology Domain + +Full-stack web (Nuxt 4 SSR + Laravel API REST) basé sur l'analyse des exigences projet. + +### Starter Options Considered + +| Option | Version | Statut | Notes | +|--------|---------|--------|-------| +| **Nuxt 4** | 4.3+ | Stable (juillet 2025) | Nouvelle structure `app/`, TypeScript strict, data fetching amélioré | +| ~~Nuxt 3~~ | 3.21 | EOL juillet 2026 | Écarté — fin de vie trop proche pour un nouveau projet | +| **Laravel 12** | 12.x | Stable (février 2025) | Release de maintenance, support bugs jusqu'en août 2026 | +| Laravel 13 | 13.x | Imminent (Q1 2026) | PHP 8.3+, support jusqu'en 2028. Upgrade depuis 12 attendu facile | + +### Selected Starters + +**Frontend : Nuxt 4** + +**Rationale :** Version stable et actuelle. Structure `app/` plus propre, meilleur TypeScript, Nuxt 3 en fin de vie. Tous les modules clés (@nuxtjs/i18n, @pinia/nuxt, @nuxtjs/tailwindcss, nuxt/image, @nuxtjs/sitemap) sont compatibles Nuxt 4. + +**Initialization Command :** + +```bash +npx nuxi@latest init frontend +``` + +**Backend : Laravel 12 (upgrade vers 13 dès sa sortie)** + +**Rationale :** Stable et maintenu. Laravel 13 est imminent mais pas encore sorti. Démarrer sur 12 avec PHP 8.2+ permet de commencer immédiatement. L'upgrade vers 13 sera minimal. + +```bash +composer create-project laravel/laravel api +``` + +### Architectural Decisions Provided by Starters + +**Nuxt 4 fournit :** +- Structure `app/` avec auto-imports (components, composables, utils) +- SSR natif avec hydration client +- Routing fichier-based (`app/pages/`) +- Nitro comme serveur (build optimisé) +- TypeScript par défaut +- DevTools intégrés + +**Laravel 12 fournit :** +- Structure MVC avec Eloquent ORM +- Routing API (`routes/api.php`) +- Migration system pour le schéma BDD +- Form Requests pour la validation +- API Resources pour les transformations JSON +- Rate limiting, CORS, middleware stack +- Pest/PHPUnit pour les tests + +### Structure Monorepo (Nuxt 4) + +``` +skycel/ +├── frontend/ # Application Nuxt 4 +│ ├── app/ # Code applicatif (structure Nuxt 4) +│ │ ├── pages/ +│ │ ├── components/ +│ │ ├── composables/ +│ │ ├── stores/ +│ │ ├── layouts/ +│ │ ├── plugins/ +│ │ ├── assets/ +│ │ └── app.vue +│ ├── server/ # Server routes/API Nuxt (si besoin) +│ ├── public/ +│ ├── i18n/ +│ ├── nuxt.config.ts +│ └── package.json +├── api/ # Backend Laravel 12 +│ ├── app/ +│ ├── database/ +│ ├── routes/ +│ ├── config/ +│ ├── tests/ +│ └── composer.json +├── docs/ # Documentation projet +└── README.md +``` + +### Third-Party Services + +| Service | Solution | Intégration | +|---------|----------|-------------| +| **Email** | PHPMailer via Laravel Mail | Backend | +| **Anti-spam** | Google reCAPTCHA v3 | Frontend + Backend validation | +| **Images** | `nuxt/image` + Sharp | Frontend (local) | +| **Sitemap** | `@nuxtjs/sitemap` | Frontend | +| **Analytics** | Matomo (self-hosted) | Frontend script | +| **Error tracking** | Sentry | Frontend + Backend | +| **Monitoring** | Uptime Kuma | Externe (existant) | +| **Backups BDD** | Script cron mysqldump | Serveur | + +## Core Architectural Decisions + +### Decision Priority Analysis + +**Critical Decisions (Block Implementation) :** +- Stratégie i18n hybride (JSON statique + table translations centralisée) +- Architecture API REST avec API Key + CORS strict +- Structure composants frontend (ui / feature / layout) +- Stratégie lazy-loading pour respecter le budget JS ≤ 170kb +- Store Pinia de progression avec persistance LocalStorage + +**Important Decisions (Shape Architecture) :** +- Abandon Swup.js → transitions Nuxt natives + GSAP +- Double validation frontend + backend +- Format de réponse API Resources avec enveloppe standard +- Bandeau RGPD intégré à l'immersion narrative +- Environnement staging avec sous-domaine + +**Deferred Decisions (Post-MVP) :** +- Endpoints CRUD admin protégés par tokens exclusifs (après MVP) +- Upgrade Laravel 12 → 13 (dès sortie stable) +- Sauvegarde cloud de progression via email (Phase 2) + +### Data Architecture + +**Stratégie i18n : Hybride** +- **Contenu statique UI** : Fichiers JSON via @nuxtjs/i18n (`i18n/fr.json`, `i18n/en.json`). Labels, boutons, messages d'interface, textes de navigation +- **Contenu dynamique** : Table `translations` centralisée en MariaDB. Les tables métier (projects, skills, testimonials, narrator_texts, easter_eggs) stockent des clés i18n (`title_key`, `text_key`). La table `translations` contient les valeurs par langue +- **Rationale** : Flexibilité pour ajouter une langue sans modifier le schéma. Séparation claire entre UI (déployée avec le frontend) et contenu (géré via API/BDD) + +**Schéma table translations :** + +```sql +CREATE TABLE translations ( + id INT AUTO_INCREMENT PRIMARY KEY, + lang VARCHAR(5) NOT NULL, + key_name VARCHAR(255) NOT NULL, + value TEXT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + UNIQUE KEY unique_translation (lang, key_name), + INDEX idx_lang (lang) +); +``` + +**Cache : File cache Laravel** +- Driver : `file` (config `CACHE_DRIVER=file`) +- Suffisant pour la volumétrie d'un portfolio (faible nombre de requêtes, peu de données) +- Pas de dépendance externe (Redis non requis) + +**Validation : Double validation** +- **Frontend (Nuxt)** : Validation légère en temps réel pour l'UX (champs requis, format email, longueur). Via les composables Vue ou VeeValidate +- **Backend (Laravel)** : Validation complète via Form Requests. Source de vérité pour la sécurité. Rejette toute donnée invalide avec réponse 422 + +### Authentication & Security + +**Protection formulaire de contact :** +- Google reCAPTCHA v3 (invisible, score-based) côté frontend +- Honeypot field (champ caché) comme seconde couche +- Rate limiting Laravel : 5 requêtes/minute par IP sur `POST /api/contact` + +**Sécurité API :** +- **API Key** : Token partagé entre Nuxt et Laravel via header `X-API-Key`. Stocké dans les `.env` des deux applications. Middleware Laravel vérifie la présence et validité du token sur chaque requête +- **CORS strict** : N'accepte que le domaine du frontend (`Access-Control-Allow-Origin: https://skycel.fr`) +- **Endpoints CRUD admin** (post-MVP) : Protégés par tokens exclusifs différents de l'API Key publique. Middleware dédié avec permissions granulaires + +**Protection des données visiteur :** +- Session ID : UUID v4 généré côté client, stocké en LocalStorage +- Email : Optionnel, uniquement pour la sauvegarde cloud de progression +- Pas de tracking sans consentement + +**RGPD :** +- Bandeau de consentement intégré à l'immersion narrative (dialogue PNJ ou narrateur araignée, style "pacte d'aventurier") +- Consentement requis avant activation de Matomo et stockage LocalStorage de progression +- État du consentement stocké dans le store Pinia (`consentGiven`) et persisté en LocalStorage + +### API & Communication Patterns + +**Design pattern : REST classique** + +Endpoints publics (lecture) : + +| Méthode | Endpoint | Description | +|---------|----------|-------------| +| `GET` | `/api/projects` | Liste des projets | +| `GET` | `/api/projects/{slug}` | Détail d'un projet | +| `GET` | `/api/skills` | Arbre de compétences | +| `GET` | `/api/testimonials` | Témoignages PNJ | +| `GET` | `/api/narrator/{context}` | Textes narrateur par contexte | +| `GET` | `/api/easter-eggs` | Métadonnées easter eggs (pas les réponses) | +| `GET` | `/api/progress/{session_id}` | Récupérer progression | +| `POST` | `/api/progress` | Sauvegarder progression | +| `POST` | `/api/contact` | Formulaire contact (rate limited + reCAPTCHA) | + +Endpoints admin CRUD (post-MVP, tokens exclusifs) : + +| Méthode | Endpoint | Description | +|---------|----------|-------------| +| `POST` | `/api/admin/projects` | Créer un projet | +| `PUT` | `/api/admin/projects/{id}` | Modifier un projet | +| `DELETE` | `/api/admin/projects/{id}` | Supprimer un projet | +| _idem_ | _pour skills, testimonials, narrator, easter-eggs_ | _CRUD complet_ | + +**Gestion de la langue : Header `Accept-Language`** +- Le frontend Nuxt envoie `Accept-Language: fr` ou `Accept-Language: en` dans chaque requête API +- Middleware Laravel extrait la langue et la passe au query builder pour joindre la table `translations` +- Fallback : `fr` si header absent ou langue non supportée + +**Format de réponse : Laravel API Resources** + +Réponse standard : +```json +{ + "data": [ + { "id": 1, "slug": "skycel", "title": "Skycel Portfolio", "..." : "..." } + ], + "meta": { + "total": 5, + "lang": "fr" + } +} +``` + +**Gestion d'erreurs : Format standard** + +```json +{ + "error": { + "code": "VALIDATION_ERROR", + "message": "Le champ email est requis", + "details": {} + } +} +``` + +Codes HTTP : 400 (bad request), 401 (API key invalide), 404 (not found), 422 (validation), 429 (rate limit), 500 (erreur serveur) + +### Frontend Architecture + +**Architecture des composants :** + +``` +app/components/ +├── ui/ # Composants atomiques réutilisables +│ ├── BaseButton.vue +│ ├── BaseBadge.vue +│ ├── BaseModal.vue +│ └── ... +├── feature/ # Composants métier +│ ├── NarratorDialogue.vue +│ ├── PnjCard.vue +│ ├── SkillTree.client.vue # Client-only (vis-network) +│ ├── InteractiveMap.client.vue # Client-only (Konva.js) +│ ├── ProgressBar.vue +│ ├── HeroSelector.vue +│ ├── ChallengePanel.vue +│ └── EasterEgg.vue +├── layout/ # Structure de page +│ ├── AppHeader.vue +│ ├── AppFooter.vue +│ ├── ConsentBanner.vue # RGPD immersif +│ └── NarratorOverlay.vue +``` + +**Stratégie lazy-loading :** + +| Couche | Chargement | Poids estimé (gzip) | +|--------|------------|---------------------| +| Nuxt core + Vue + Pinia | Immédiat | ~50kb | +| TailwindCSS (purgé) | Immédiat | ~10kb | +| Pages | Lazy (navigation) | ~5-10kb/page | +| Konva.js | Lazy (page carte desktop uniquement) | ~50kb | +| vis-network | Lazy (page skills uniquement) | ~50kb | +| GSAP | Lazy (première animation complexe) | ~25kb | +| reCAPTCHA v3 | Lazy (page contact uniquement) | Externe | + +Budget initial (premier chargement) : **~60-70kb gzip** — bien sous le budget de 170kb. Les librairies lourdes ne se chargent qu'à la demande. + +**Store Pinia `useProgressionStore` :** + +```typescript +interface ProgressionState { + sessionId: string // UUID v4 + hero: 'recruteur' | 'client' | 'dev' | null + currentPath: string // Chemin narratif actuel + visitedSections: string[] // Sections visitées + completionPercent: number // 0-100 + easterEggsFound: string[] // Slugs des easter eggs trouvés + challengeCompleted: boolean + contactUnlocked: boolean + narratorStage: number // 1-5 (évolution de l'araignée) + choices: Record // Choix narratifs + consentGiven: boolean // RGPD +} +``` + +- Persistance : `pinia-plugin-persistedstate` → LocalStorage +- Synchronisation API : `POST /api/progress` déclenché quand le visiteur fournit son email (sauvegarde cloud optionnelle) +- Compatibilité SSR : Le store s'initialise vide côté serveur, se réhydrate côté client depuis LocalStorage + +**Transitions et animations :** +- **Transitions de page** : Système natif Nuxt/Vue (`` + ``) avec CSS animations +- **Animations complexes** : GSAP (narrateur araignée, révélation progressive, transitions de zone immersives) +- **Swup.js** : Abandonné — redondant avec les transitions Nuxt natives et potentiellement conflictuel +- **`prefers-reduced-motion`** : Respecté via media query, animations réduites ou désactivées + +### Infrastructure & Deployment + +**Architecture serveur :** + +``` + ┌─────────────────────────┐ + │ Nginx (port 80/443) │ + │ SSL + gzip + cache │ + └─────────┬───────────────┘ + │ + ┌─────────────┴─────────────┐ + │ │ + ▼ ▼ + ┌───────────────────┐ ┌───────────────────┐ + │ Node.js :3000 │ │ PHP-FPM :9000 │ + │ Nuxt 4 SSR │ │ Laravel 12 API │ + └───────────────────┘ └───────────────────┘ + │ + ▼ + ┌───────────────────┐ + │ MariaDB :3306 │ + └───────────────────┘ +``` + +- Nginx dispatch : `/api/*` → PHP-FPM, tout le reste → Node.js (Nuxt SSR) +- SSL via Let's Encrypt (certbot) +- Compression gzip activée +- Headers de cache pour les assets statiques + +**Gestion des environnements :** +- **Production** : `skycel.fr` — branche `prod` +- **Staging** : `staging.skycel.fr` — branche `staging` ou `main` +- Fichiers `.env` distincts par environnement et par application (`frontend/.env.production`, `frontend/.env.staging`, `api/.env.production`, `api/.env.staging`) + +**CI/CD : Script `deploy.sh` manuel** + +```bash +# Déploiement déclenché manuellement +# Se base sur la branche 'prod' +./deploy.sh [production|staging] +``` + +Le script automatise : +1. `git pull origin prod` (ou staging) +2. `cd frontend && npm install && npm run build` +3. `cd api && composer install --no-dev && php artisan migrate --force` +4. `php artisan config:cache && php artisan route:cache` +5. Restart du process Node.js (PM2 ou systemd) +6. Notification de succès/échec + +**Backups BDD :** +- Cron quotidien à 3h00 : `mysqldump` complet de la base skycel +- Rétention locale : 7 jours (rotation automatique, suppression des dumps > 7j) +- Réplication : Copie automatique vers un serveur distant via `rsync` ou `scp` après chaque dump +- Nommage : `skycel_backup_YYYY-MM-DD_HH-MM.sql.gz` (compressé) + +### Decision Impact Analysis + +**Séquence d'implémentation recommandée :** +1. Initialisation monorepo (Nuxt 4 + Laravel 12) +2. Configuration Nginx + environnements (.env, staging) +3. Schéma BDD + migrations + table translations +4. API endpoints publics (lecture) + middleware API Key + CORS +5. Store Pinia progression + persistance LocalStorage +6. Composants layout + transitions Nuxt natives +7. Pages et composants feature (par epic) +8. Intégrations tierces (reCAPTCHA, Matomo, Sentry) +9. Script deploy.sh + cron backup +10. Endpoints CRUD admin (post-MVP) + +**Dépendances inter-composants :** +- Le store Pinia dépend du schéma de progression (BDD + API) +- Les composants feature dépendent de l'API (endpoints + format de réponse) +- L'i18n frontend dépend de la table translations (contenu dynamique) +- Le bandeau RGPD doit être en place avant l'activation de Matomo +- Le lazy-loading des composants lourds dépend de la structure de routing Nuxt diff --git a/docs/planning-artifacts/epics.md b/docs/planning-artifacts/epics.md new file mode 100644 index 0000000..e891909 --- /dev/null +++ b/docs/planning-artifacts/epics.md @@ -0,0 +1,801 @@ +--- +stepsCompleted: [1, 2, 3, 4] +status: complete +validatedAt: '2026-02-03' +inputDocuments: + - docs/prd-gamification.md + - docs/planning-artifacts/architecture.md + - docs/planning-artifacts/ux-design-specification.md + - docs/brainstorming-gamification-2026-01-26.md +--- + +# skycel - Epic Breakdown + +## Overview + +This document provides the complete epic and story breakdown for skycel, decomposing the requirements from the PRD, UX Design if it exists, and Architecture requirements into implementable stories. + +## Requirements Inventory + +### Functional Requirements + +- **FR1** : Le système offre une double entrée au visiteur : "Partir à l'aventure" (expérience complète) ou "Je n'ai pas le temps" (mode express avec roadmap) +- **FR2** : Les transitions entre pages sont animées de manière seamless via Nuxt transitions, créant une impression de "changement de zone" immersive +- **FR3** : Un narrateur-guide accompagne le visiteur avec des textes contextuels tout au long de l'expérience +- **FR4** : Une carte interactive (Konva.js) permet la navigation non-linéaire et affiche la progression du visiteur +- **FR5** : Un arbre de compétences interactif (vis.js) visualise les skills avec niveaux évoluant selon les projets +- **FR6** : Les compétences sont cliquables et mènent directement aux projets qui les utilisent +- **FR7** : Les témoignages s'affichent sous forme de dialogues PNJ style Zelda avec avatar, bulles, effet typewriter et personnalités variées +- **FR8** : Une barre de progression globale indique l'avancement dans l'exploration du site +- **FR9** : Le système propose 2-3 choix binaires créant 4-8 parcours narratifs différents, tous menant au contact +- **FR10** : Un challenge/puzzle accessible doit être résolu pour accéder au formulaire de contact (avec système d'indices) +- **FR11** : Des easter eggs cachés récompensent l'exploration avec des snippets de code ou anecdotes +- **FR12** : La progression est sauvegardée automatiquement en LocalStorage pour permettre la reprise +- **FR13** : Le site supporte deux langues (FR par défaut + EN) avec détection par URL (/en/...) +- **FR14** : Le formulaire de contact est présenté comme la récompense finale "Tu m'as trouvé !" avec célébration + +### NonFunctional Requirements + +- **NFR1** : Le bundle JS total (Nuxt + Konva + vis.js) ne doit pas dépasser 170kb gzippé, avec lazy-loading des composants lourds +- **NFR2** : Le temps de chargement initial (LCP) doit rester sous 2.5 secondes sur connexion 3G +- **NFR3** : Le site doit être responsive et offrir une expérience adaptée mobile (carte simplifiée en Chemin Libre vertical) +- **NFR4** : Le site doit fonctionner sur les navigateurs modernes (Chrome, Firefox, Safari, Edge — 2 dernières versions) +- **NFR5** : Les URLs doivent être SEO-friendly et le contenu principal accessible aux crawlers (SSR Nuxt 4) +- **NFR6** : Les animations doivent respecter `prefers-reduced-motion` pour l'accessibilité +- **NFR7** : Le système i18n utilise @nuxtjs/i18n avec fichiers JSON, rendu SSR pour SEO optimal +- **NFR8** : Les images sont optimisées en WebP avec lazy loading + +### Additional Requirements + +**Architecture :** +- Starter template : Nuxt 4 (`npx nuxi@latest init`) + Laravel 12 (`composer create-project`) — impacte Epic 1 Story 1 +- Structure monorepo `frontend/` (Nuxt 4 avec structure `app/`) + `api/` (Laravel 12) +- Table `translations` centralisée en MariaDB pour i18n du contenu dynamique (clés i18n dans les tables métier) +- API REST avec API Key (`X-API-Key`) + CORS strict (domaine frontend uniquement) +- Store Pinia `useProgressionStore` avec persistance LocalStorage via `pinia-plugin-persistedstate` + compatibilité SSR +- Architecture composants frontend : `ui/` (atomiques réutilisables), `feature/` (métier), `layout/` (structure page) +- GSAP pour animations complexes (Swup.js abandonné — redondant avec transitions Nuxt natives) +- Transitions Nuxt natives (`pageTransition` + ``) + CSS animations +- Sécurité contact : reCAPTCHA v3 (invisible) + honeypot + rate limiting Laravel (5 req/min par IP) +- Bandeau RGPD intégré à l'immersion narrative (dialogue PNJ/narrateur, style "pacte d'aventurier") +- Déploiement : Nginx → Node.js :3000 (Nuxt SSR) + PHP-FPM :9000 (Laravel API) + MariaDB :3306 +- CI/CD : Script `deploy.sh` manuel (git pull, build, migrate, restart) +- Backups BDD : cron quotidien mysqldump + réplication distante rsync/scp, rétention 7 jours +- Environnements : production (`skycel.fr`, branche `prod`) + staging (`staging.skycel.fr`) +- Cache : File cache Laravel (driver `file`, pas de Redis) +- Double validation : frontend (UX temps réel) + backend (Form Requests Laravel, source de vérité) +- Format réponse API : Laravel API Resources avec enveloppe `{ data, meta }` +- Gestion langue API : header `Accept-Language` → middleware Laravel → jointure table translations + +**UX :** +- Système de héros : 3 personnages (Recruteur/Client/Dev) impactant vouvoiement, ton narrateur, type de challenges +- Narrateur = "Le Bug" (araignée, mascotte micro-entreprise) avec arc de révélation progressive (silhouette sombre → araignée complète en 5 étapes liées à la progression) +- Page résumé 30s (`/resume`) : URL directe pour candidatures, accès sans passer par la landing +- Déblocage contact après 2 zones visitées (pas de blocage excessif) +- Challenge final optionnel (jamais bloquant l'accès au contact) +- Challenge post-formulaire ("En attendant que le dev retrouve sa boîte mail...") +- "Monde de Code" : révélation finale — paysage en blocs de code ASCII art, avatar Célian au centre +- Navigation mobile : "Chemin Libre" vertical (ZoneCards scrollables) au lieu de Konva.js +- Bottom bar mobile fixe : Carte, Progression, Paramètres (thumb zone) +- Tous les feedbacks système passent par le narrateur (pas de toasts/notifications classiques) +- Headless UI / Radix UI pour composants standards accessibles (modals, tooltips, toggles, menus) +- Design tokens Tailwind : `sky-dark` (noir→bleu), `sky-accent` (#fa784f orange), `sky-text` (blanc cassé→jaune) +- Polices : serif élégante (narrateur/PNJ/narration) + sans-serif moderne (interface/UI) +- Approche Mobile First CSS +- WCAG AA : contraste ≥ 4.5:1, touch targets 44x44px min, skip links, `aria-live="polite"` narrateur, navigation clavier complète +- Sortie de zone par choix narratif du narrateur (pas de bouton "retour" froid) +- Couleurs par zone sur la carte (teintes uniques par section) +- Espacement aéré : spacing scale de 4px à 128px + +**Brainstorming :** +- Schéma BDD détaillé : 8 tables (projects, skills, skill_project, testimonials, narrator_texts, easter_eggs, user_progress, translations) +- Personnalités PNJ : sage, sarcastique, enthousiaste, professionnel +- Easter eggs : triggers variés (click, hover, konami, scroll, sequence) +- Rewards easter eggs : snippet, anecdote, image, badge +- Sauvegarde cloud progression par email (optionnel, phase 2) +- Rappel email narratif après X jours (hors scope MVP) + +### FR Coverage Map + +| FR | Epic | Description | +|---|---|---| +| FR1 | Epic 1 | Double entrée Aventure / Mode Express | +| FR2 | Epic 1 | Transitions de page animées seamless | +| FR3 | Epic 3 | Narrateur-guide contextuel | +| FR4 | Epic 3 | Carte interactive navigation non-linéaire | +| FR5 | Epic 2 | Arbre de compétences interactif | +| FR6 | Epic 2 | Compétences cliquables → projets liés | +| FR7 | Epic 2 | Témoignages dialogues PNJ | +| FR8 | Epic 3 | Barre de progression globale | +| FR9 | Epic 4 | Choix binaires créant parcours multiples | +| FR10 | Epic 4 | Challenge/puzzle avant contact | +| FR11 | Epic 4 | Easter eggs cachés | +| FR12 | Epic 3 | Sauvegarde progression LocalStorage | +| FR13 | Epic 1 | Bilingue FR/EN | +| FR14 | Epic 4 | Contact comme récompense finale | + +## Epic List + +### Epic 1 : Fondations & Double Entrée +Le visiteur arrive sur le site, choisit son héros et son mode (Aventure ou Express), et peut naviguer entre les pages avec des transitions immersives. Le site est bilingue et fonctionnel en SSR. +**FRs couverts :** FR1, FR2, FR13 + +### Epic 2 : Contenu & Découverte +Le visiteur explore les zones de contenu : projets (galerie + détail), compétences organisées par catégories avec liens vers les projets associés, témoignages en dialogues PNJ, et parcours en timeline narrative. +**FRs couverts :** FR5, FR6, FR7 + +### Epic 3 : Navigation Gamifiée & Progression +Le visiteur navigue via la carte interactive (Konva.js desktop / Chemin Libre mobile), est accompagné par le narrateur-guide (Le Bug), et voit sa progression sauvegardée automatiquement avec une barre XP. +**FRs couverts :** FR3, FR4, FR8, FR12 + +### Epic 4 : Chemins Narratifs, Challenge & Contact +Le visiteur fait des choix qui créent son parcours unique, relève un challenge optionnel, et accède à la révélation finale "Monde de Code" + formulaire de contact comme récompense narrative. Les easter eggs récompensent l'exploration. +**FRs couverts :** FR9, FR10, FR11, FR14 + +--- + +## Epic 1 : Fondations & Double Entrée + +Le visiteur arrive sur le site, choisit son héros et son mode (Aventure ou Express), et peut naviguer entre les pages avec des transitions immersives. Le site est bilingue et fonctionnel en SSR. + +### Story 1.1 : Initialisation du monorepo et infrastructure + +As a développeur, +I want un projet monorepo Nuxt 4 + Laravel 12 initialisé avec les configurations de base, +So that le développement peut commencer sur des fondations solides. + +**Acceptance Criteria:** + +**Given** un nouveau repository Git +**When** le projet est initialisé +**Then** la structure monorepo `frontend/` (Nuxt 4) + `api/` (Laravel 12) est en place +**And** Nuxt 4 est configuré avec SSR activé, TypeScript, et les modules `@nuxtjs/i18n`, `@nuxtjs/tailwindcss`, `@pinia/nuxt`, `nuxt/image`, `@nuxtjs/sitemap` +**And** Laravel 12 est configuré en mode API-only avec CORS autorisant le domaine frontend +**And** le middleware API Key (`X-API-Key`) est en place sur les routes API +**And** les fichiers `.env.example` existent pour frontend et backend +**And** TailwindCSS est configuré avec les design tokens (`sky-dark`, `sky-accent` #fa784f, `sky-text`) +**And** les polices sont définies (serif narrateur + sans-serif UI) +**And** le `.gitignore` est approprié pour les deux applications + +### Story 1.2 : Base de données et migrations initiales + +As a développeur, +I want le schéma de base de données MariaDB avec les tables nécessaires à l'Epic 1, +So that l'API peut servir du contenu bilingue. + +**Acceptance Criteria:** + +**Given** une connexion MariaDB configurée dans Laravel +**When** `php artisan migrate` est exécuté +**Then** la table `translations` est créée (id, lang, key_name, value, timestamps) avec index unique (lang, key_name) +**And** la table `projects` est créée (id, slug, title_key, description_key, short_description_key, image, url, github_url, date_completed, is_featured, display_order, timestamps) +**And** la table `skills` est créée (id, slug, name_key, description_key, icon, category, max_level, display_order) +**And** la table `skill_project` est créée (id, skill_id, project_id, level_before, level_after, level_description_key) avec foreign keys +**And** les Models Eloquent sont définis avec leurs relations (Project belongsToMany Skill, etc.) +**And** des Seeders de base sont disponibles avec données de test en FR et EN +**And** `php artisan db:seed` fonctionne correctement + +### Story 1.3 : Système i18n frontend + API bilingue + +As a visiteur, +I want voir le site dans ma langue (FR ou EN), +So that je comprends le contenu. + +**Acceptance Criteria:** + +**Given** le module `@nuxtjs/i18n` configuré avec stratégie `prefix_except_default` +**When** le visiteur accède à `/` ou `/en` +**Then** le contenu statique UI est affiché dans la langue correspondante via fichiers JSON (`i18n/fr.json`, `i18n/en.json`) +**And** les URLs FR sont par défaut (`/`, `/projets`, `/competences`, `/contact`) +**And** les URLs EN sont préfixées (`/en`, `/en/projects`, `/en/skills`, `/en/contact`) +**And** `useI18n()`, `$t()`, `localePath()`, `switchLocalePath()` fonctionnent en SSR +**And** les tags `hreflang` sont générés automatiquement dans le `` +**And** l'attribut `lang` du `` est dynamique (fr/en) +**And** le middleware Laravel extrait `Accept-Language` et joint la table `translations` pour le contenu dynamique +**And** les API Resources Laravel renvoient le contenu traduit selon la langue demandée +**And** le fallback est FR si langue non supportée + +### Story 1.4 : Layouts, routing et transitions de page + +As a visiteur, +I want une navigation fluide entre les pages avec des transitions immersives, +So that l'expérience ressemble à un changement de zone, pas à un rechargement. + +**Acceptance Criteria:** + +**Given** la structure de pages Nuxt 4 (`app/pages/`) +**When** le visiteur navigue entre les pages +**Then** les transitions de page sont animées (fade + slide) via `pageTransition` dans `nuxt.config.ts` +**And** la navigation utilise `` pour l'hydration SPA (pas de rechargement) +**And** le layout par défaut (`default.vue`) inclut le header avec barre de progression (placeholder) et sélecteur de langue +**And** un layout `minimal.vue` existe pour le mode express +**And** le `scrollBehavior` est personnalisé (smooth scroll, retour position sauvegardée) +**And** `prefers-reduced-motion` désactive les animations de transition via media query CSS +**And** une page 404 (`error.vue`) bilingue est en place +**And** les meta tags SEO dynamiques fonctionnent via `useHead()` et `useSeoMeta()` +**And** le favicon est configuré + +### Story 1.5 : Landing page et choix du héros + +As a visiteur, +I want choisir entre l'aventure et le mode express, puis sélectionner mon héros, +So that mon expérience est adaptée à mon profil et mon temps disponible. + +**Acceptance Criteria:** + +**Given** le visiteur arrive sur la landing page (`/`) +**When** la page se charge +**Then** deux CTA distincts sont visibles : "Partir à l'aventure" et "Mode express" +**And** un texte d'accroche intrigant bilingue est affiché +**And** une animation d'entrée subtile est présente (respectant `prefers-reduced-motion`) +**And** le design est responsive (mobile + desktop) +**And** au clic sur "Partir à l'aventure", le composant `HeroSelector` s'affiche avec 3 cards illustrées (Recruteur, Client, Développeur) avec nom et description courte +**And** le héros sélectionné est stocké dans le store Pinia `useProgressionStore` (champ `hero`) +**And** au clic sur "Mode express", le visiteur est redirigé vers la page résumé +**And** le `HeroSelector` est accessible au clavier (`role="radiogroup"`, flèches pour naviguer, Enter pour sélectionner) + +### Story 1.6 : Store Pinia progression et bandeau RGPD + +As a visiteur, +I want que ma progression soit sauvegardée et que mon consentement soit respecté, +So that je peux reprendre mon exploration et mes données sont protégées. + +**Acceptance Criteria:** + +**Given** le visiteur accède au site +**When** le consentement RGPD n'a pas encore été donné +**Then** un bandeau de consentement immersif s'affiche (style narratif/dialogue, pas un bandeau classique) +**And** le store Pinia `useProgressionStore` est initialisé avec : sessionId (UUID v4), hero, currentPath, visitedSections, completionPercent, easterEggsFound, challengeCompleted, contactUnlocked, narratorStage, choices, consentGiven +**And** la persistance LocalStorage est activée via `pinia-plugin-persistedstate` (uniquement après consentement) +**And** le store est compatible SSR (initialisation vide côté serveur, réhydratation client) +**And** si une progression existante est détectée, un message "Bienvenue à nouveau" est affiché +**And** l'action `$reset()` permet de réinitialiser la progression + +### Story 1.7 : Page résumé express et mode pressé + +As a visiteur pressé ou recruteur, +I want une vue condensée de toutes les informations essentielles, +So that je peux évaluer le développeur en 30 secondes. + +**Acceptance Criteria:** + +**Given** le visiteur accède à `/resume` (FR) ou `/en/resume` (EN) directement ou via "Mode express" +**When** la page se charge +**Then** le contenu affiché comprend : nom, titre, photo/avatar, accroche (5s) +**And** les compétences clés avec stack technique sont visibles (10s) +**And** 3-4 projets highlights avec liens sont affichés (10s) +**And** un CTA de contact direct est visible (5s) +**And** un bouton discret "Voir l'aventure" invite à l'expérience complète +**And** la page est fonctionnelle en FR et EN +**And** les données sont chargées depuis l'API (projets, skills) +**And** les meta tags SEO sont optimisés pour cette page +**And** le layout `minimal.vue` est utilisé + +--- + +## Epic 2 : Contenu & Découverte + +Le visiteur explore les zones de contenu : projets (galerie + détail), compétences organisées par catégories avec liens vers les projets associés, témoignages en dialogues PNJ, et parcours en timeline narrative. + +### Story 2.1 : Composant ProjectCard + +As a développeur, +I want un composant réutilisable de card de projet, +So that je peux afficher les projets de manière cohérente sur la galerie et ailleurs dans le site. + +**Acceptance Criteria:** + +**Given** le composant `ProjectCard` est implémenté +**When** il reçoit les données d'un projet en props +**Then** il affiche l'image du projet (WebP, lazy loading) +**And** il affiche le titre traduit selon la langue courante +**And** il affiche la description courte traduite +**And** un hover effect révèle un CTA "Découvrir" avec animation subtile +**And** le composant est cliquable et navigue vers `/projets/{slug}` (ou `/en/projects/{slug}`) +**And** le composant respecte `prefers-reduced-motion` pour les animations +**And** le composant est responsive (adaptation mobile/desktop) +**And** le composant est accessible (focus visible, `role` approprié) + +### Story 2.2 : Page Projets - Galerie + +As a visiteur, +I want voir la liste des projets réalisés par le développeur, +So that je peux évaluer son expérience et choisir lesquels explorer en détail. + +**Acceptance Criteria:** + +**Given** le visiteur accède à `/projets` (FR) ou `/en/projects` (EN) +**When** la page se charge +**Then** une grille responsive de `ProjectCard` s'affiche +**And** les projets sont triés par date avec les "featured" en tête +**And** une animation d'entrée progressive des cards est présente (respectant `prefers-reduced-motion`) +**And** les données sont chargées depuis l'API `/api/projects` avec le contenu traduit +**And** les meta tags SEO sont dynamiques pour cette page +**And** le layout s'adapte : grille sur desktop, cards empilées sur mobile + +### Story 2.3 : Page Projet - Détail + +As a visiteur, +I want voir les détails d'un projet spécifique, +So that je comprends le travail réalisé et les technologies utilisées. + +**Acceptance Criteria:** + +**Given** le visiteur accède à `/projets/{slug}` (FR) ou `/en/projects/{slug}` (EN) +**When** la page se charge +**Then** le titre, la description complète et l'image principale du projet s'affichent +**And** la date de réalisation est visible +**And** la liste des compétences utilisées s'affiche avec leurs niveaux (avant/après le projet) +**And** les liens externes sont présents : URL du projet live (si existe), repository GitHub (si existe) +**And** une navigation "Projet précédent / Projet suivant" permet de parcourir les projets +**And** un bouton retour vers la galerie est visible +**And** les meta tags SEO sont dynamiques (titre, description, image Open Graph) +**And** si le slug n'existe pas, une page 404 appropriée s'affiche +**And** le design est responsive (adaptation mobile/desktop) + +### Story 2.4 : Page Compétences - Affichage par catégories + +As a visiteur, +I want voir les compétences du développeur organisées par catégorie, +So that je comprends son profil technique global. + +**Acceptance Criteria:** + +**Given** le visiteur accède à `/competences` (FR) ou `/en/skills` (EN) +**When** la page se charge +**Then** les compétences sont affichées groupées par catégorie (Frontend, Backend, Tools, Soft skills) +**And** chaque compétence affiche : icône, nom traduit, niveau actuel (représentation visuelle) +**And** les données sont chargées depuis l'API `/api/skills` avec le contenu traduit +**And** une animation d'entrée des éléments est présente (respectant `prefers-reduced-motion`) +**And** sur desktop : préparé pour accueillir le skill tree vis.js (Epic 3) +**And** sur mobile : liste groupée par catégorie avec design adapté +**And** les meta tags SEO sont dynamiques pour cette page +**And** chaque compétence est visuellement cliquable (affordance) + +### Story 2.5 : Compétences cliquables → Projets liés + +As a visiteur, +I want cliquer sur une compétence pour voir les projets qui l'utilisent, +So that je peux voir des preuves concrètes de maîtrise. + +**Acceptance Criteria:** + +**Given** le visiteur est sur la page Compétences +**When** il clique sur une compétence +**Then** un panneau/modal s'ouvre avec la liste des projets liés à cette compétence +**And** pour chaque projet lié : titre, description courte, lien vers le détail +**And** l'indication du niveau avant/après chaque projet est visible (progression) +**And** une animation d'ouverture/fermeture fluide est présente (respectant `prefers-reduced-motion`) +**And** la fermeture est possible par clic extérieur, bouton close, ou touche Escape +**And** le panneau/modal utilise Headless UI pour l'accessibilité +**And** la navigation au clavier est fonctionnelle (Tab, Escape, Enter) +**And** le focus est piégé dans le modal quand ouvert (`focus trap`) +**And** les données viennent de la relation `skill_project` via l'API + +### Story 2.6 : Page Témoignages et migrations BDD + +As a visiteur, +I want voir les témoignages des personnes ayant travaillé avec le développeur, +So that j'ai une validation sociale de ses compétences. + +**Acceptance Criteria:** + +**Given** les migrations Laravel sont exécutées +**When** `php artisan migrate` est lancé +**Then** la table `testimonials` est créée (id, name, role, company, avatar, text_key, personality ENUM, project_id FK nullable, display_order, is_active, timestamps) +**And** les seeders de test sont disponibles avec des témoignages en FR et EN + +**Given** le visiteur accède à `/temoignages` (FR) ou `/en/testimonials` (EN) +**When** la page se charge +**Then** la liste des témoignages s'affiche depuis l'API `/api/testimonials` +**And** chaque témoignage affiche : nom, rôle, entreprise, avatar, texte traduit +**And** la personnalité de chaque PNJ est indiquée visuellement (style différent selon personality) +**And** un lien vers le projet associé est présent si pertinent +**And** l'ordre d'affichage respecte `display_order` +**And** le design est préparé pour accueillir le composant DialoguePNJ (story suivante) +**And** les meta tags SEO sont dynamiques pour cette page + +### Story 2.7 : Composant Dialogue PNJ + +As a visiteur, +I want lire les témoignages comme des dialogues de personnages style Zelda, +So that l'expérience est immersive et mémorable. + +**Acceptance Criteria:** + +**Given** le composant `DialoguePNJ` est implémenté +**When** il reçoit les données d'un témoignage en props +**Then** l'avatar du PNJ s'affiche à gauche avec un style illustratif +**And** une bulle de dialogue s'affiche à droite avec le texte +**And** l'effet typewriter fait apparaître le texte lettre par lettre +**And** un clic ou appui sur Espace accélère l'animation typewriter (x3-x5) +**And** la personnalité du PNJ influence le style visuel de la bulle (sage, sarcastique, enthousiaste, professionnel) +**And** la police serif narrative est utilisée pour le texte du dialogue +**And** `prefers-reduced-motion` affiche le texte complet instantanément +**And** le texte complet est accessible via `aria-label` pour les screen readers +**And** une navigation entre témoignages est disponible (précédent/suivant) +**And** une transition animée s'effectue entre les PNJ +**And** un indicateur du témoignage actuel est visible (ex: 2/5) +**And** la navigation au clavier est fonctionnelle (flèches gauche/droite) + +### Story 2.8 : Page Parcours - Timeline narrative + +As a visiteur, +I want découvrir le parcours professionnel du développeur sous forme de timeline, +So that je comprends son évolution et son expérience. + +**Acceptance Criteria:** + +**Given** le visiteur accède à `/parcours` (FR) ou `/en/journey` (EN) +**When** la page se charge +**Then** une timeline verticale affiche les étapes chronologiques du parcours +**And** chaque étape affiche : date, titre, description narrative traduite +**And** sur desktop : les étapes alternent gauche/droite pour un effet visuel dynamique +**And** sur mobile : les étapes sont linéaires (toutes du même côté) +**And** une animation d'apparition au scroll est présente (respectant `prefers-reduced-motion`) +**And** des icônes ou images illustrent les étapes clés +**And** le contenu est bilingue (FR/EN) et chargé depuis l'API ou fichiers i18n +**And** les meta tags SEO sont dynamiques pour cette page +**And** la police serif narrative est utilisée pour les descriptions + +--- + +## Epic 3 : Navigation Gamifiée & Progression + +Le visiteur navigue via la carte interactive (Konva.js desktop / Chemin Libre mobile), est accompagné par le narrateur-guide (Le Bug), et voit sa progression sauvegardée automatiquement avec une barre XP. + +### Story 3.1 : Table narrator_texts et API narrateur + +As a développeur, +I want une infrastructure pour stocker et servir les textes du narrateur, +So that le narrateur peut afficher des messages contextuels variés. + +**Acceptance Criteria:** + +**Given** les migrations Laravel sont exécutées +**When** `php artisan migrate` est lancé +**Then** la table `narrator_texts` est créée (id, context, text_key, variant, timestamps) +**And** les contextes définis incluent : intro, transition_projects, transition_skills, transition_testimonials, transition_journey, hint, encouragement_25, encouragement_50, encouragement_75, contact_unlocked, welcome_back +**And** plusieurs variantes par contexte permettent une sélection aléatoire +**And** les seeders insèrent les textes de base en FR et EN dans la table `translations` + +**Given** l'API `/api/narrator/{context}` est appelée +**When** un contexte valide est fourni +**Then** un texte aléatoire parmi les variantes de ce contexte est retourné +**And** le texte est traduit selon le header `Accept-Language` +**And** le ton est adapté au héros (vouvoiement pour Recruteur, tutoiement pour Client/Dev) + +### Story 3.2 : Composant NarratorBubble (Le Bug) + +As a visiteur, +I want voir un narrateur-guide qui m'accompagne dans mon exploration, +So that je me sens guidé et l'expérience est immersive. + +**Acceptance Criteria:** + +**Given** le composant `NarratorBubble` est implémenté +**When** le narrateur doit afficher un message +**Then** une bulle apparaît en bas de l'écran (desktop) ou au-dessus de la bottom bar (mobile) +**And** l'avatar du Bug (araignée) s'affiche avec son apparence selon le `narratorStage` du store +**And** le texte apparaît avec effet typewriter (lettre par lettre) +**And** un clic ou Espace accélère l'animation typewriter +**And** la bulle peut être fermée/minimisée sans bloquer la navigation +**And** le composant utilise `aria-live="polite"` et `role="status"` pour l'accessibilité +**And** `prefers-reduced-motion` affiche le texte instantanément +**And** la police serif narrative est utilisée pour le texte +**And** l'animation d'apparition/disparition est fluide et non-bloquante + +### Story 3.3 : Textes narrateur contextuels et arc de révélation + +As a visiteur, +I want que le narrateur réagisse à mes actions et évolue visuellement, +So that l'expérience est personnalisée et le narrateur devient familier. + +**Acceptance Criteria:** + +**Given** le visiteur navigue sur le site +**When** il effectue des actions clés +**Then** le narrateur affiche un message d'accueil à l'arrivée (adapté au héros choisi) +**And** des messages de transition s'affichent entre les zones +**And** des encouragements apparaissent à 25%, 50%, 75% de progression +**And** des indices s'affichent si le visiteur semble inactif (> 30s sans action) +**And** un message spécial "Bienvenue à nouveau" s'affiche si progression existante détectée +**And** le message de déblocage du contact s'affiche après 2 zones visitées + +**Given** le visiteur progresse dans l'exploration +**When** le `completionPercent` atteint certains seuils +**Then** le `narratorStage` du store est mis à jour (1→5) +**And** l'apparence du Bug évolue : silhouette sombre (1) → forme vague (2) → pattes visibles (3) → araignée reconnaissable (4) → mascotte complète révélée (5) +**And** le ton du narrateur évolue de mystérieux à complice + +### Story 3.4 : Barre de progression globale (XP bar) + +As a visiteur, +I want voir ma progression dans l'exploration du site, +So that je sais combien il me reste à découvrir. + +**Acceptance Criteria:** + +**Given** le visiteur est en mode Aventure +**When** il navigue sur le site +**Then** une barre de progression discrète s'affiche dans le header +**And** le pourcentage est calculé selon les sections visitées (Projets, Compétences, Témoignages, Parcours) +**And** l'animation de la barre est fluide lors des mises à jour +**And** un tooltip au hover indique les sections visitées et restantes +**And** le design évoque une barre XP style RPG (cohérent avec `sky-accent`) +**And** la barre respecte `prefers-reduced-motion` (pas d'animation si activé) +**And** sur mobile, la progression est accessible via la bottom bar +**And** la barre n'est pas visible en mode Express/Résumé + +### Story 3.5 : Logique de progression et déblocage contact + +As a visiteur, +I want que ma progression débloque l'accès au contact, +So that l'exploration est récompensée sans être frustrante. + +**Acceptance Criteria:** + +**Given** le store `useProgressionStore` est actif +**When** le visiteur visite une nouvelle zone +**Then** la zone est ajoutée à `visitedSections` +**And** le `completionPercent` est recalculé automatiquement +**And** la progression est persistée en LocalStorage (si consentement RGPD donné) + +**Given** le visiteur a visité 2 zones ou plus +**When** la condition est atteinte +**Then** `contactUnlocked` passe à `true` +**And** le narrateur annonce le déblocage avec un message spécial +**And** la zone Contact s'illumine sur la carte (si visible) +**And** le visiteur peut continuer à explorer ou aller au contact + +**Given** le visiteur revient sur le site +**When** une progression existe en LocalStorage +**Then** le store est réhydraté avec l'état sauvegardé +**And** le narrateur affiche "Bienvenue à nouveau" +**And** la carte affiche l'état correct des zones visitées + +### Story 3.6 : Carte interactive desktop (Konva.js) + +As a visiteur desktop, +I want naviguer via une carte interactive visuelle, +So that j'explore librement le portfolio comme un monde. + +**Acceptance Criteria:** + +**Given** le visiteur est sur desktop (≥ 1024px) et accède à la carte +**When** la carte se charge +**Then** un canvas Konva.js affiche une carte stylisée avec les zones (Projets, Compétences, Parcours, Témoignages, Contact) +**And** le composant est chargé en lazy-loading (`.client.vue`) pour respecter le budget JS +**And** chaque zone a une apparence distincte (teinte unique, icône) +**And** les zones visitées ont une apparence différente des zones non visitées +**And** la zone Contact est verrouillée visuellement si `contactUnlocked` est `false` +**And** la position actuelle du visiteur est marquée sur la carte +**And** au hover sur une zone : le nom et le statut s'affichent (tooltip) +**And** au clic sur une zone : navigation vers la section correspondante avec transition +**And** un curseur personnalisé indique les zones cliquables +**And** la navigation au clavier est fonctionnelle (Tab entre zones, Enter pour naviguer) +**And** les zones ont des labels ARIA descriptifs + +### Story 3.7 : Navigation mobile - Chemin Libre et Bottom Bar + +As a visiteur mobile, +I want naviguer facilement avec une interface adaptée au tactile, +So that l'expérience reste immersive sur petit écran. + +**Acceptance Criteria:** + +**Given** le visiteur est sur mobile (< 768px) +**When** il accède à la navigation +**Then** le "Chemin Libre" affiche les zones en cards verticales scrollables (`ZoneCard`) +**And** chaque `ZoneCard` affiche : illustration, nom de la zone, statut (visité/nouveau/verrouillé) +**And** une ligne décorative relie les cards visuellement (effet chemin) +**And** un tap sur une zone navigue vers la section correspondante +**And** la zone Contact affiche un cadenas si `contactUnlocked` est `false` + +**Given** la bottom bar mobile est affichée +**When** le visiteur interagit +**Then** 3 icônes sont accessibles : Carte (ouvre le Chemin Libre), Progression (affiche le %), Paramètres +**And** les touch targets font au minimum 48x48px +**And** la bottom bar est fixe et toujours visible +**And** le narrateur s'affiche au-dessus de la bottom bar quand actif + +--- + +## Epic 4 : Chemins Narratifs, Challenge & Contact + +Le visiteur fait des choix qui créent son parcours unique, relève un challenge optionnel, et accède à la révélation finale "Monde de Code" + formulaire de contact comme récompense narrative. Les easter eggs récompensent l'exploration. + +### Story 4.1 : Composant ChoiceCards et choix narratifs + +As a visiteur, +I want faire des choix qui influencent mon parcours, +So that mon expérience est unique et personnalisée. + +**Acceptance Criteria:** + +**Given** le composant `ChoiceCards` est implémenté +**When** le narrateur propose un choix +**Then** 2 cards s'affichent côte à côte (desktop) ou empilées (mobile) +**And** chaque card affiche : icône, texte narratif du choix +**And** un hover/focus highlight la card sélectionnable +**And** un clic enregistre le choix dans `choices` du store Pinia +**And** une transition animée mène vers la destination choisie +**And** le composant est accessible (`role="radiogroup"`, navigation clavier, focus visible) +**And** `prefers-reduced-motion` simplifie les animations +**And** le style est cohérent avec l'univers narratif (police serif, couleurs des zones) + +### Story 4.2 : Intro narrative et premier choix + +As a visiteur aventurier, +I want une introduction narrative captivante suivie d'un premier choix, +So that je suis immergé dès le début de l'aventure. + +**Acceptance Criteria:** + +**Given** le visiteur a sélectionné son héros sur la landing page +**When** il commence l'aventure +**Then** une séquence d'intro narrative s'affiche avec le narrateur (Le Bug) +**And** le texte présente le "héros mystérieux" (le développeur) à découvrir +**And** l'effet typewriter anime le texte (skippable par clic/Espace) +**And** l'ambiance visuelle est immersive (fond sombre, illustrations) +**And** un bouton "Continuer" permet d'avancer +**And** à la fin de l'intro, le premier choix binaire s'affiche via `ChoiceCards` +**And** le choix propose deux zones à explorer en premier (ex: Projets vs Compétences) +**And** le contenu est bilingue (FR/EN) et adapté au héros (vouvoiement/tutoiement) +**And** la durée de l'intro est courte (15-30s max, skippable) + +### Story 4.3 : Chemins narratifs différenciés + +As a visiteur, +I want que mes choix aient un impact visible sur mon parcours, +So that je sens que mon expérience est vraiment personnalisée. + +**Acceptance Criteria:** + +**Given** le visiteur fait des choix tout au long de l'aventure +**When** il navigue entre les zones +**Then** 2-3 points de choix binaires créent 4-8 parcours possibles +**And** chaque choix est enregistré dans `choices` du store +**And** l'ordre suggéré des zones varie selon le chemin choisi +**And** les textes du narrateur s'adaptent au chemin (transitions contextuelles) +**And** tous les chemins permettent de visiter tout le contenu +**And** tous les chemins mènent au contact (pas de "mauvais" choix) +**And** le `currentPath` du store reflète le chemin actuel +**And** à la fin de chaque zone, le narrateur propose un choix vers la suite + +### Story 4.4 : Table easter_eggs et système de détection + +As a développeur, +I want une infrastructure pour gérer les easter eggs cachés, +So that je peux ajouter des surprises récompensant l'exploration. + +**Acceptance Criteria:** + +**Given** les migrations Laravel sont exécutées +**When** `php artisan migrate` est lancé +**Then** la table `easter_eggs` est créée (id, slug, location, trigger_type ENUM, reward_type ENUM, reward_key, difficulty, is_active, timestamps) +**And** les trigger_types incluent : click, hover, konami, scroll, sequence +**And** les reward_types incluent : snippet, anecdote, image, badge +**And** les seeders insèrent 5-10 easter eggs avec leurs récompenses traduites + +**Given** l'API `/api/easter-eggs` est appelée +**When** la requête est faite +**Then** les métadonnées des easter eggs actifs sont retournées (slug, location, trigger_type) +**And** les réponses/récompenses ne sont PAS incluses (pour éviter la triche) + +**Given** l'API `/api/easter-eggs/{slug}/validate` est appelée +**When** un slug valide est fourni +**Then** la récompense traduite est retournée +**And** l'easter egg est marqué comme trouvé côté client (store) + +### Story 4.5 : Easter eggs - Implémentation UI et collection + +As a visiteur curieux, +I want découvrir des surprises cachées et voir ma collection, +So that l'exploration est récompensée. + +**Acceptance Criteria:** + +**Given** des easter eggs sont placés sur différentes pages +**When** le visiteur déclenche un easter egg (clic, hover, konami, scroll, sequence) +**Then** une animation de découverte s'affiche (popup, effet visuel) +**And** la récompense est affichée (snippet de code, anecdote, image, badge) +**And** le narrateur réagit avec enthousiasme +**And** une notification "Easter egg trouvé ! (X/Y)" s'affiche +**And** le slug est ajouté à `easterEggsFound` dans le store +**And** un bouton permet de fermer et continuer + +**Given** le visiteur accède à sa collection (via paramètres ou zone dédiée) +**When** la collection s'affiche +**Then** une grille montre les easter eggs trouvés et des silhouettes mystère pour les non-trouvés +**And** les détails sont visibles pour les découverts +**And** un compteur X/Y indique la progression +**And** un badge spécial s'affiche si 100% trouvés + +### Story 4.6 : Page Challenge - Structure et puzzle + +As a visiteur, +I want relever un défi optionnel avant d'accéder au contact, +So that l'accès au développeur est une récompense méritée (mais pas bloquante). + +**Acceptance Criteria:** + +**Given** le visiteur accède à `/challenge` (après avoir débloqué le contact) +**When** la page se charge +**Then** une introduction narrative "Une dernière épreuve..." s'affiche +**And** un puzzle logique/code simple est présenté (réordonner, compléter, décoder) +**And** la difficulté est calibrée : 1-3 minutes pour résoudre +**And** le thème est lié au développement/code +**And** un système d'indices est disponible (bouton "Besoin d'aide ?") +**And** 3 niveaux d'indices progressifs sont proposés +**And** après 3 indices, une option "Passer" apparaît +**And** le challenge est TOUJOURS skippable (bouton discret "Passer directement au contact") +**And** une validation avec feedback clair indique succès/échec +**And** une animation de succès célèbre la réussite +**And** `challengeCompleted` est mis à `true` dans le store si réussi + +### Story 4.7 : Révélation "Monde de Code" + +As a visiteur ayant complété le parcours, +I want vivre un moment waouh de révélation finale, +So that la découverte du développeur est mémorable. + +**Acceptance Criteria:** + +**Given** le visiteur accède à la zone Contact (après challenge ou skip) +**When** la révélation se déclenche +**Then** une transition immersive mène vers le "Monde de Code" +**And** un paysage composé de blocs de code ASCII art s'affiche (montagnes, arbres, ville en code) +**And** le code scroll/apparaît progressivement (animation) +**And** l'avatar illustré de Célian est révélé au centre du monde de code +**And** le narrateur (Le Bug) commente : "Tu l'as trouvé !" +**And** le message "Tu m'as trouvé !" s'affiche avec effet de célébration +**And** sur mobile, une version allégée mais émotionnellement équivalente s'affiche +**And** `prefers-reduced-motion` affiche une version statique +**And** une description alternative est disponible pour les screen readers +**And** un bouton permet de continuer vers le formulaire de contact + +### Story 4.8 : Page Contact - Formulaire et célébration + +As a visiteur ayant trouvé le développeur, +I want le contacter facilement avec une célébration, +So that l'envoi du message est une conclusion satisfaisante. + +**Acceptance Criteria:** + +**Given** le visiteur est sur la page Contact après la révélation +**When** la page s'affiche +**Then** un message de félicitations avec stats du parcours est visible (zones visitées, easter eggs trouvés, temps passé) +**And** un formulaire de contact s'affiche : nom (requis), email (requis), message (requis) +**And** la validation temps réel est effectuée côté frontend (champs requis, format email) +**And** les erreurs sont communiquées par le narrateur (pas de messages d'erreur classiques) +**And** un champ honeypot invisible est présent (anti-spam) +**And** reCAPTCHA v3 est intégré de manière invisible +**And** le bouton d'envoi utilise la couleur accent (`sky-accent`) + +**Given** le formulaire est soumis +**When** les données sont envoyées à l'API +**Then** la validation backend Laravel (Form Request) vérifie les données +**And** le rate limiting (5 req/min par IP) est appliqué +**And** l'email est envoyé via Laravel Mail +**And** une animation de célébration s'affiche (confettis ou similaire) +**And** le narrateur confirme l'envoi avec un message personnalisé +**And** en cas d'erreur, le narrateur explique le problème avec bienveillance + +### Story 4.9 : Challenge post-formulaire + +As a visiteur ayant envoyé un message, +I want m'amuser en attendant la réponse, +So that le temps d'attente est transformé en moment de jeu. + +**Acceptance Criteria:** + +**Given** le formulaire de contact a été envoyé avec succès +**When** la confirmation s'affiche +**Then** un message "En attendant que le développeur retrouve le chemin vers sa boîte mail..." est affiché +**And** un challenge optionnel bonus est proposé +**And** le challenge est différent du challenge principal (mini-jeu, quiz, exploration) +**And** le visiteur peut fermer et quitter à tout moment +**And** la participation est totalement optionnelle +**And** le résultat n'impacte rien (juste pour le fun) +**And** le narrateur commente avec humour diff --git a/docs/planning-artifacts/ux-design-specification.md b/docs/planning-artifacts/ux-design-specification.md new file mode 100644 index 0000000..d030a0c --- /dev/null +++ b/docs/planning-artifacts/ux-design-specification.md @@ -0,0 +1,1466 @@ +--- +stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] +lastStep: 14 +inputDocuments: + - docs/prd-gamification.md + - docs/brainstorming-gamification-2026-01-26.md +userPreferences: + styleComplexity: simple + visualStyle: illustrative + assetFormat: SVG + inspirations: + - source: Zelda + applyTo: [narrative, features] + excludeFrom: [visual-style] + colorPalette: + background: black-to-blue + accent: "#fa784f" + feel: airy + heroSystem: true + narratorEvolution: mysterious-to-playful +--- + +# UX Design Specification - Skycel (Portfolio Gamifié) + +**Author:** Célian +**Date:** 2026-01-27 + +--- + +## Design Direction (User Input) + +### Style Preferences +- **Complexité visuelle :** Simple, pas trop chargé +- **Direction artistique :** Illustratif avec illustrations custom +- **Format assets :** SVG (vectoriel, léger, scalable) + +### Inspirations +| Source | S'applique à | Ne s'applique PAS à | +|--------|--------------|---------------------| +| **Zelda** | Direction narrative, fonctionnalités gamifiées | Style visuel | + +### Notes créatives +> L'inspiration Zelda guide la structure de l'aventure (quêtes, PNJ, exploration) mais le style visuel sera original et illustratif, pas une copie de l'esthétique Zelda. + +--- + +## Executive Summary + +### Project Vision + +Skycel est un portfolio-aventure où le visiteur ne consulte pas un CV — il part à la découverte d'un développeur. L'expérience s'adapte à qui vous êtes : recruteur, client, ou développeur pair. Chaque profil a son propre "héros", son ton narratif, et ses défis adaptés. Le point d'arrivée est le même pour tous : la rencontre avec le développeur, présentée comme l'aboutissement d'une quête. + +### Target Users + +#### Persona 1 : Le Recruteur Pressé +- **Besoin** : Évaluer rapidement les compétences +- **Temps disponible** : 30 secondes à 2 minutes +- **Entrée privilégiée** : URL directe `/resume` partagée dans candidature +- **Expérience** : Vouvoiement, ton professionnel, challenges accessibles (culture info + conseils sécu) +- **Ce qui le convainc** : Maîtrise des outils actuels + portfolio immersif comme preuve de compétence + +#### Persona 2 : Le Client Potentiel +- **Besoin** : Évaluer la fiabilité et le professionnalisme +- **Temps disponible** : 5-10 minutes +- **Entrée privilégiée** : Landing standard avec choix aventure +- **Expérience** : Tutoiement, narrateur mystérieux→complice, challenges accessibles +- **Ce qui le convainc** : Qualité de l'expérience = preuve de qualité du travail + +#### Persona 3 : Le Développeur Pair +- **Besoin** : Être impressionné techniquement +- **Temps disponible** : 10-15 minutes (exploration complète) +- **Entrée privilégiée** : Landing standard, mode aventure +- **Expérience** : Tutoiement, challenges techniques (code, quiz stack, analyse output) +- **Ce qui le convainc** : Prouesses techniques + easter eggs + dialogue entre pairs + +### Key Design Challenges + +1. **Personnalisation triple** : Adapter ton, vouvoiement, et challenges selon le héros choisi sans créer 3 sites différents +2. **Page résumé 30 secondes** : Synthétiser compétences, projets, et personnalité en un écran convaincant +3. **Évolution narrative du ton** : Transition naturelle mystérieux → complice au fil de la progression +4. **Challenges adaptatifs** : Différencier la difficulté par profil tout en gardant l'accessibilité + +### Design Opportunities + +1. **Expérience mémorable par la personnalisation** : Chaque visiteur a "son" portfolio +2. **Éducation comme valeur ajoutée** : Conseils sécurité pour non-devs = différenciation positive +3. **Avatar reveal** : La découverte de l'avatar personnalisé comme moment émotionnel fort +4. **Preuve par l'expérience** : L'immersion elle-même démontre les compétences + +--- + +## Visual Identity + +### Color Palette + +| Rôle | Couleur | Usage | +|------|---------|-------| +| **Background** | Noir tirant vers le bleu | Fond principal, immersion | +| **Accent** | `#fa784f` (orange chaud) | CTAs, highlights, progression | +| **Feel** | Aéré | Espacement généreux, respiration visuelle | + +### Scene Composition + +``` +┌─────────────────────────────────────────────────────────────┐ +│ FOND DE SCÈNE (formes abstraites = environnement) │ +│ ┌─────────────────────────────────────────────────────┐ │ +│ │ │ │ +│ │ [Assets illustratifs superposés] │ │ +│ │ │ │ +│ │ ┌───────┐ │ │ +│ │ │ Héros │ ← Style illustratif unifié │ │ +│ │ └───────┘ │ │ +│ │ │ │ +│ └─────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────┘ +``` + +### Character Design + +| Type | Style | Source | +|------|-------|--------| +| **Avatar dev (Célian)** | Illustratif personnalisé | Custom | +| **Héros jouables** | Même style illustratif | Custom | +| **PNJ témoignages** | Photo/image fournie | Authentique (choix du témoin) | + +--- + +## Hero System + +### Hero Selection Impact + +| Héros | Vouvoiement | Challenges | Narrateur | +|-------|-------------|------------|-----------| +| **Recruteur** | Oui | Culture info générale, conseils sécurité | Respectueux → Complice | +| **Client** | Non | Culture info générale, conseils sécurité | Mystérieux → Joueur | +| **Développeur** | Non | Code simple, quiz stack, analyse output | Mystérieux → Joueur | + +### Narrator Tone Evolution + +``` +DÉBUT FIN + │ │ + ▼ ▼ +Mystérieux/Distant Complice/Joueur +"Une silhouette se "Pas mal ! Tu commences +dessine au loin..." à me connaître..." +``` + +--- + +## Entry Points Architecture + +``` + ┌─────────────────────┐ + │ skycel.dev/resume │ ← URL pour candidatures + │ (Page Résumé 30s) │ + └──────────┬──────────┘ + │ + [Bouton "Voir l'aventure"] + │ + ▼ +┌──────────────────────────────────────────────────────────────┐ +│ skycel.dev │ +│ (Landing Page) │ +├──────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────┐ ┌─────────────────┐ │ +│ │ "Partir à │ │ "Mode express" │ │ +│ │ l'aventure" │ │ (visible) │ │ +│ └────────┬────────┘ └────────┬────────┘ │ +│ │ │ │ +│ ▼ ▼ │ +│ ┌─────────────────┐ ┌─────────────────┐ │ +│ │ Choix du Héros │ │ Page Résumé │ │ +│ │ ┌───┐ ┌───┐ ┌───┐ │ (30 secondes) │ │ +│ │ │ R │ │ C │ │ D │ └─────────────────┘ │ +│ │ └───┘ └───┘ └───┘ │ +│ └─────────────────┘ │ +│ │ +└──────────────────────────────────────────────────────────────┘ +``` + +--- + +## Core User Experience + +### Defining Experience + +**Objectif fondamental :** Chaque élément de l'expérience doit contribuer à un seul but — donner envie au visiteur de contacter Célian. + +Le portfolio n'est pas une vitrine passive. C'est une aventure de **découverte progressive** où le visiteur construit une relation avec le développeur avant même de le rencontrer. La carte, les projets, les compétences, les témoignages — tout raconte l'histoire d'une personne, pas d'un CV. + +**Core Loop :** +``` +Explorer → Découvrir une facette de Célian → Progresser → Envie d'en savoir plus → ... → Contact +``` + +### Platform Strategy + +| Plateforme | Expérience | Immersion | +|------------|------------|-----------| +| **Desktop** | Complète | Carte interactive, animations riches, skill tree complet | +| **Mobile** | Allégée mais immersive | Navigation adaptée, interactions touch, même engagement émotionnel | + +**Principe clé :** L'allègement mobile concerne la complexité technique, jamais l'immersion narrative. + +### Seamless Interactions + +**Zéro friction visible :** +- Transitions animées entre toutes les zones (pas de chargement apparent) +- Premier chargement = seul moment d'attente acceptable (avec animation narrative) +- Navigation fluide = le visiteur ne "quitte" jamais l'univers + +**Continuité cross-device :** +- ID unique de session généré au premier accès +- URL partageable avec ID (`skycel.dev?session=abc123`) +- Reprise exacte de la progression sur n'importe quel appareil +- "Bienvenue à nouveau, voyageur..." si retour détecté + +### Critical Success Moments + +| Moment | Impact | Ce qui doit se passer | +|--------|--------|----------------------| +| **Premier écran** | Curiosité | "C'est quoi ce site ?" → intrigue immédiate | +| **Choix du héros** | Engagement | "C'est MON aventure" → personnalisation | +| **Premier dialogue PNJ** | Surprise | "Les témoignages parlent !" → différenciation | +| **Challenge réussi** | Fierté | "J'ai mérité la suite" → investissement | +| **Révélation finale** | Émotion | "Je l'ai trouvé" → connexion humaine | + +### The "Code World" Revelation (Moment Waouh) + +**Concept narratif :** Le climax de l'aventure se déroule dans un "monde de code" — un environnement visuel où le code devient paysage. Le héros choisi par le visiteur traverse ce monde et découvre Célian, littéralement perdu/immergé dans son élément naturel. + +**Impact émotionnel :** +- Le visiteur "sauve" le dev de son monde de code +- Métaphore : le contact humain sort le dev de son isolement technique +- Moment de révélation de l'avatar personnalisé de Célian +- Transition naturelle vers le formulaire de contact = "Tu m'as trouvé !" + +### Experience Principles + +1. **Tout mène au contact** — Chaque interaction construit l'envie de rencontrer la personne derrière le portfolio +2. **Immersion sans friction** — Zéro chargement visible, transitions seamless, l'univers ne se "casse" jamais +3. **Mobile = même émotion** — L'allègement technique ne sacrifie jamais l'engagement narratif +4. **Continuité totale** — La progression suit le visiteur partout, cross-device, cross-session +5. **Révélation méritée** — Le moment final récompense l'investissement du visiteur dans l'aventure + +--- + +## Desired Emotional Response + +### Primary Emotional Goals + +| Émotion | Description | Ce qui la crée | +|---------|-------------|----------------| +| **Émerveillement** | "Waouh, c'était incroyable" | Immersion narrative, révélation finale, qualité visuelle | +| **Amusement** | "C'était fun, j'ai passé un bon moment" | Ton du narrateur, interactions ludiques, surprises | + +**Combinaison cible :** Le visiteur repart avec l'impression d'avoir vécu quelque chose d'unique ET d'avoir passé un bon moment — pas juste consulté un portfolio. + +### Emotional Journey Mapping + +``` +ARRIVÉE MILIEU FIN + │ │ │ + ▼ ▼ ▼ +Curiosité → Engagement → Découverte → Confiance → Fierté → ÉMERVEILLEMENT + │ │ │ │ │ + └── "C'est └── "C'est MON └── Plaisir └── "J'ai └── "Waouh !" + quoi ?" aventure" d'explorer réussi" + Amusé +``` + +| Étape | Émotion visée | Déclencheur UX | +|-------|---------------|----------------| +| **Arrivée** | Curiosité | Design intrigant, pas de portfolio classique | +| **Choix du héros** | Engagement | Personnalisation = investissement personnel | +| **Exploration carte** | Découverte + plaisir | Navigation ludique, récompenses visuelles | +| **Dialogues PNJ** | Confiance + amusement | Témoignages vivants, personnalités variées | +| **Challenge** | Fierté | Difficulté calibrée, succès mérité | +| **Révélation finale** | Émerveillement + connexion | "Monde de code", avatar reveal | +| **Contact** | Envie naturelle | Prolonger la relation, pas corvée | + +### Emotions to Avoid + +| Émotion négative | Cause potentielle | Prévention UX | +|------------------|-------------------|---------------| +| **Frustration** | Perdu, trop difficile, pas clair | Navigation intuitive, indices progressifs, jamais de blocage | +| **Ennui** | Trop long, répétitif, pas de surprise | Rythme varié, contenu condensé, moments de surprise réguliers | + +### Micro-Emotions Design + +| Micro-émotion positive | Où la créer | +|------------------------|-------------| +| **Surprise** | Easter eggs, réactions inattendues du narrateur | +| **Accomplissement** | Progression visible, badges, "zones découvertes" | +| **Complicité** | Évolution du ton du narrateur (mystérieux → joueur) | +| **Anticipation** | "Qu'y a-t-il dans cette zone ?" | + +| Micro-émotion négative | Comment l'éviter | +|------------------------|------------------| +| **Confusion** | Carte toujours accessible, narrateur guide, indicateurs clairs | +| **Impatience** | Pas de chargement visible, contenu dense mais court | +| **Doute** | Feedback immédiat sur les actions, validation visuelle | + +### Emotional Design Principles + +1. **Émerveillement par les détails** — Chaque écran a un élément "waouh" (animation, illustration, interaction) +2. **Amusement sans infantiliser** — Ton ludique mais professionnel, humour subtil +3. **Zéro frustration** — Si le visiteur est perdu, le narrateur l'aide avant qu'il ne le demande +4. **Anti-ennui** — Aucune section ne dure plus de 2-3 minutes, toujours une nouveauté à découvrir +5. **Fierté accessible** — Les challenges sont réussissables par tous, la difficulté = temps, pas blocage + +--- + +## UX Pattern Analysis & Inspiration + +### Primary Inspiration: "Livres dont vous êtes le héros" + +**Concept fondateur :** Le portfolio n'est pas un site web avec des éléments de jeu — c'est un **livre interactif** où le visiteur devient le héros de sa propre exploration. + +**Patterns clés à adopter :** + +| Pattern du livre-jeu | Application Skycel | +|---------------------|-------------------| +| "Tu es le héros" | Choix du personnage (Recruteur/Client/Dev) | +| "Si tu choisis X, va page Y" | Choix binaires créant des chemins différents | +| Tous les chemins ont une fin | Toutes les routes mènent au contact | +| Sentiment de contrôle | Le visiteur décide son parcours | +| Rejouabilité | Envie de refaire avec d'autres choix | + +**Ton narratif inspiré :** +> "Tu arrives devant deux portes. L'une mène vers les projets réalisés, l'autre vers l'arbre des compétences. Laquelle choisis-tu ?" + +### Secondary Inspiration: Zelda BOTW + +**Patterns extraits :** + +| Élément Zelda | Application Skycel | +|---------------|-------------------| +| **Liberté d'exploration** | Pas de chemin unique imposé, carte ouverte | +| **Narration immersive** | Narrateur-guide, dialogues PNJ | +| **Énigmes** | Challenges adaptés au profil du héros | +| **Éléments cachés** | Easter eggs récompensant l'exploration | +| **Chemins multiples → même destination** | Tous les parcours mènent au contact | + +### Transferable UX Patterns + +#### Navigation Pattern: Carte comme Hub Central + +``` +┌─────────────────────────────────────────────────────────────┐ +│ CARTE CENTRALE │ +│ │ +│ Affordance claire : "C'est ICI que je navigue" │ +│ │ +│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ +│ │Zone │────│Zone │────│Zone │────│ ??? │ │ +│ │ A │ │ B │ │ C │ │ │ │ +│ └─────┘ └─────┘ └─────┘ └─────┘ │ +│ │ │ │ │ │ +│ ▼ ▼ ▼ ▼ │ +│ Projets Skills Parcours Contact │ +│ (locked) │ +└─────────────────────────────────────────────────────────────┘ +``` + +**Design requirements :** +- Visiblement interactive (hover states, curseur personnalisé) +- Zones clairement identifiables +- Progression visible (zones visitées vs non visitées) +- Destination finale visible mais "verrouillée" jusqu'à progression suffisante + +#### Interaction Pattern: Choix Narratifs Style Livre-Jeu + +``` +┌─────────────────────────────────────────────────────────────┐ +│ │ +│ "Deux chemins s'offrent à toi..." │ +│ │ +│ ┌───────────────────┐ ┌───────────────────┐ │ +│ │ │ │ │ │ +│ │ 🗡️ Explorer │ │ 📚 Comprendre │ │ +│ │ les projets │ │ les compétences │ │ +│ │ │ │ │ │ +│ └───────────────────┘ └───────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────┘ +``` + +#### Loading Pattern: Narration Pendant l'Attente + +**Si chargement inévitable (premier load) :** + +``` +┌─────────────────────────────────────────────────────────────┐ +│ │ +│ [Barre de progression stylisée] │ +│ │ +│ 💡 "Savais-tu que ce portfolio contient 7 easter eggs │ +│ cachés ? Sauras-tu tous les trouver ?" │ +│ │ +│ ou │ +│ │ +│ 🎮 "Le développeur derrière ce site a bu 847 cafés │ +│ pendant sa création. Probablement." │ +│ │ +└─────────────────────────────────────────────────────────────┘ +``` + +**Types de contenu pendant le chargement :** +- Tips sur l'exploration à venir +- Fun facts sur le développeur +- Teasers narratifs +- Mini-énigmes visuelles + +### Anti-Patterns to Avoid + +| Anti-pattern | Pourquoi l'éviter | Alternative | +|--------------|-------------------|-------------| +| **Navigation confuse** | Frustration immédiate | Carte comme ancre visuelle permanente | +| **Chemin unique imposé** | Contraire à l'esprit livre-jeu | Choix réels avec conséquences visibles | +| **Chargements visibles sans contenu** | Ennui, abandon | Tips/fun facts/micro-narration | +| **Surcharge visuelle** | Distraction de l'essentiel | Style aéré, focus sur le contenu | +| **Animations bloquantes** | Impatience | Animations non-bloquantes, skip possible | + +### Design Inspiration Strategy + +**À ADOPTER directement :** +- Structure narrative "livre dont vous êtes le héros" +- Choix binaires créant des chemins différents +- Carte comme hub central de navigation +- Éléments cachés récompensant l'exploration +- Tips/fun facts pendant les chargements + +**À ADAPTER pour Skycel :** +- Dialogues PNJ Zelda → Témoignages interactifs avec personnalités +- Énigmes Zelda → Challenges adaptés au profil (code pour devs, culture info pour autres) +- Carte Zelda → Carte stylisée illustrative (pas réaliste) + +**À ÉVITER absolument :** +- Navigation classique type "menu burger" +- Parcours linéaire sans choix +- Temps morts sans contenu narratif +- Complexité visuelle excessive + +--- + +## Design System Foundation + +### Design System Choice + +**Approche hybride : TailwindCSS + Headless Components + Custom** + +| Couche | Technologie | Rôle | +|--------|-------------|------| +| **Utilitaires CSS** | TailwindCSS | Styling, responsive, animations | +| **Composants accessibles** | Headless UI / Radix UI | Modals, menus, tooltips, formulaires | +| **Composants custom** | From scratch | Carte, dialogues PNJ, narrateur, skill tree | + +### Rationale for Selection + +1. **Unicité préservée** — Les composants clés de l'expérience (carte, PNJ, narrateur) seront 100% custom +2. **Accessibilité garantie** — Les interactions standards (modals, dropdowns) bénéficient de l'a11y native de Headless/Radix +3. **Flexibilité maximale** — Si un composant n'existe pas, création from scratch sans contrainte +4. **Performance** — Headless = pas de CSS inutile, bundle léger +5. **Cohérence Nuxt 3** — Excellente intégration avec Vue 3 Composition API + +### Component Strategy + +#### Composants Headless (accessibilité gérée) + +| Composant | Usage Skycel | +|-----------|--------------| +| `Dialog/Modal` | Détails projets, overlays, confirmations | +| `Menu/Dropdown` | Sélection langue, options | +| `Tooltip` | Infos au survol sur la carte | +| `Tabs` | Navigation dans sections (si besoin) | +| `Switch/Toggle` | Paramètres (son, animations) | + +#### Composants 100% Custom + +| Composant | Raison | +|-----------|--------| +| `InteractiveMap` | Konva.js, navigation unique | +| `DialoguePNJ` | Typewriter, bulles, avatars | +| `Narrator` | Évolution de ton, positionnement | +| `SkillTree` | vis.js, visualisation custom | +| `ProgressBar` | Style RPG gamifié | +| `HeroSelector` | Choix du personnage illustré | +| `ChoiceCards` | Choix narratifs style livre-jeu | +| `CodeWorld` | Révélation finale, effet code | + +### Design Tokens Strategy + +```css +/* tailwind.config.js - tokens custom */ +{ + colors: { + 'sky-dark': /* Noir tirant vers le bleu */, + 'sky-accent': '#fa784f', + 'sky-accent-hover': /* variante hover */, + 'sky-text': /* texte principal */, + 'sky-text-muted': /* texte secondaire */, + }, + fontFamily: { + 'narrative': /* Police pour le narrateur */, + 'ui': /* Police pour l'interface */, + }, + animation: { + 'typewriter': /* effet machine à écrire */, + 'fade-in': /* apparition douce */, + 'zone-transition': /* changement de zone */, + } +} +``` + +### Implementation Approach + +1. **Phase 1** — Setup Tailwind + design tokens + composants de base (boutons, inputs) +2. **Phase 2** — Intégration Headless UI pour modals/tooltips +3. **Phase 3** — Développement composants custom (carte, PNJ, narrateur) +4. **Phase 4** — Polissage animations et transitions + +### Customization Guidelines + +**Règle d'or :** Si le composant impacte l'immersion narrative → custom. Si c'est utilitaire → Headless. + +| Type d'interaction | Approche | +|-------------------|----------| +| Navigation carte | Custom (Konva) | +| Dialogue avec PNJ | Custom (typewriter, bulles) | +| Fermer une modal | Headless (accessible) | +| Formulaire contact | Headless + styling custom | +| Choix narratif | Custom (cartes illustrées) | +| Tooltip info | Headless + styling custom | + +--- + +## Defining Experience + +### The One-Liner + +**"Choisis ton héros et pars à la découverte d'un développeur perdu dans le code."** + +C'est ce que les visiteurs raconteront. Pas "j'ai vu un portfolio", mais "j'ai vécu une aventure". + +### User Mental Model Shift + +Le visiteur arrive avec un modèle mental "portfolio classique". Skycel casse cette attente **immédiatement** dès la landing page. + +| Modèle attendu | Réalité Skycel | +|-----------------|---------------| +| "Je vais lire un CV" | "Je suis dans une aventure" | +| "Menu → Projets" | "Carte → Exploration libre" | +| "Formulaire contact" | "J'ai trouvé le dev !" | +| "Je consulte des infos" | "Je fais des choix qui changent mon parcours" | + +**Rupture immédiate :** La landing page doit communiquer en moins de 3 secondes que ce site n'est pas un portfolio classique — par le design, l'animation d'entrée, et le ton narratif. + +### Core Flow: From Landing to Adventure + +``` +┌─────────────────────────────────────────────────────────────┐ +│ 1. LANDING PAGE │ +│ Rupture immédiate : "Ce n'est pas un portfolio classique"│ +│ ┌──────────────────┐ ┌──────────────────┐ │ +│ │ Partir à │ │ Mode express │ │ +│ │ l'aventure │ │ (30 secondes) │ │ +│ └────────┬─────────┘ └────────┬─────────┘ │ +│ │ │ │ +│ ▼ ▼ │ +│ 2. CHOIX DU HÉROS Page Résumé │ +│ ┌─────┐ ┌─────┐ ┌─────┐ │ +│ │ 🎯 │ │ 💼 │ │ 💻 │ │ +│ │Recr.│ │Cli. │ │Dev. │ │ +│ └──┬──┘ └──┬──┘ └──┬──┘ │ +│ └───────┼───────┘ │ +│ ▼ │ +│ 3. INTRO NARRATEUR │ +│ Ton adapté au héros choisi │ +│ Recruteur → vouvoiement, professionnel │ +│ Client/Dev → tutoiement, mystérieux │ +│ │ │ +│ ▼ │ +│ 4. CARTE / PREMIER CHOIX │ +│ L'aventure commence │ +└─────────────────────────────────────────────────────────────┘ +``` + +### Novel UX Patterns + +**Ce qui est innovant dans Skycel :** + +| Pattern | Familiarité | Comment on l'enseigne | +|---------|-------------|----------------------| +| **Choix du héros** | Familier (jeux vidéo) | Sélection visuelle claire avec descriptions | +| **Carte comme navigation** | Semi-familier | Affordance évidente, zones cliquables, hover states | +| **Choix narratifs livre-jeu** | Familier (concept connu) | Deux options claires, pas de mauvais choix | +| **Dialogues PNJ** | Familier (jeux) | Bulle de dialogue reconnaissable, clic pour interagir | +| **Narrateur-guide** | Nouveau pour un portfolio | Apparition naturelle, non bloquant, utile | + +**Stratégie :** Combiner des patterns **individuellement familiers** (jeux, livres-jeu) dans un contexte **inédit** (portfolio). Le visiteur reconnaît chaque mécanique mais n'a jamais vu ça dans un portfolio. + +### Experience Mechanics + +#### 1. Initiation — Landing Page +- **Déclencheur :** Arrivée sur le site +- **Ce que le visiteur voit :** Design immersif, fond noir-bleu, illustrations SVG +- **Ce qu'il comprend :** "Ce n'est pas un portfolio normal" +- **Action :** Deux choix visibles (Aventure / Express) + +#### 2. Engagement — Choix du Héros +- **Déclencheur :** Clic "Partir à l'aventure" +- **Ce que le visiteur voit :** 3 personnages illustrés avec descriptions courtes +- **Ce qu'il comprend :** "Mon expérience sera personnalisée" +- **Action :** Sélection d'un héros +- **Feedback :** Animation de sélection, transition vers l'intro + +#### 3. Immersion — Intro Narrateur +- **Déclencheur :** Héros sélectionné +- **Ce que le visiteur voit :** Texte narrateur avec typewriter, adapté au héros +- **Ce qu'il comprend :** "On me raconte une histoire, JE suis le héros" +- **Feedback :** Ton adapté (vous/tu), ambiance posée +- **Durée :** Courte (15-30 secondes max, skippable) + +#### 4. Exploration — Carte & Choix +- **Déclencheur :** Fin de l'intro narrateur +- **Ce que le visiteur voit :** Carte interactive avec zones à explorer +- **Ce qu'il comprend :** "Je choisis où aller, c'est MON parcours" +- **Feedback :** Zones visitées marquées, progression visible + +### Success Criteria + +| Critère | Indicateur | +|---------|-----------| +| **Compréhension immédiate** | Le visiteur comprend en < 3s que c'est différent | +| **Engagement héros** | > 70% des visiteurs choisissent un héros (vs mode express) | +| **Intro non-skippée** | > 50% regardent l'intro complète | +| **Exploration libre** | Visiteurs visitent les zones dans des ordres différents | +| **Destination finale** | > 60% atteignent la page contact | + +--- + +## Visual Design Foundation + +### Color System + +#### Core Palette + +| Token | Couleur | Usage | +|-------|---------|-------| +| `sky-bg` | Noir très sombre tirant vers le bleu | Fond principal | +| `sky-accent` | `#fa784f` (orange chaud) | CTAs, highlights, progression, éléments interactifs | +| `sky-text` | Blanc cassé tirant légèrement vers le jaune | Texte principal | +| `sky-text-muted` | Variante atténuée du texte | Texte secondaire, labels | + +#### Zone Colors (Carte Interactive) + +Chaque zone de la carte a sa propre identité chromatique, tout en restant harmonieuse avec la palette globale : + +| Zone | Teinte | Ambiance | +|------|--------|----------| +| **Projets** | Teinte unique (à définir) | Créativité, réalisation | +| **Compétences** | Teinte unique (à définir) | Technique, progression | +| **Parcours** | Teinte unique (à définir) | Temps, évolution | +| **Témoignages** | Teinte unique (à définir) | Humain, confiance | +| **Challenge** | Teinte unique (à définir) | Mystère, défi | +| **Contact (locked)** | Orange accent `#fa784f` | Destination finale, récompense | + +#### State Colors + +Couleurs d'état adaptées à la palette globale (pas les verts/rouges standards purs) : + +| État | Direction | Usage | +|------|-----------|-------| +| **Succès** | Vert harmonisé avec la palette bleu-sombre | Challenge réussi, zone complétée | +| **Erreur** | Rouge-orangé cohérent avec l'accent | Validation formulaire | +| **Warning** | Ambre chaud proche de l'accent | Indices, attention | +| **Info** | Bleu plus clair que le fond | Tips, narrateur | + +### Typography System + +#### Font Pairing + +| Rôle | Type | Direction | Usage | +|------|------|-----------|-------| +| **Narrateur & PNJ** | Serif élégante | Style livre ancien, classique raffinée | Dialogues, textes narratifs, introductions | +| **Interface** | Sans-serif | Moderne sans excès, lisible, intemporelle | Navigation, labels, boutons, contenu UI | + +#### Type Scale + +| Niveau | Usage | Contexte | +|--------|-------|----------| +| **Display** | Titre landing, révélation finale | Serif narrateur, grande taille | +| **H1** | Titre de zone | Sans-serif UI | +| **H2** | Sous-sections | Sans-serif UI | +| **Body** | Contenu principal | Sans-serif UI | +| **Narrative** | Texte du narrateur, dialogues PNJ | Serif narrateur | +| **Caption** | Labels, infos secondaires | Sans-serif UI, taille réduite | + +#### Typography Principles + +1. **Serif = narration** — Tout texte qui raconte une histoire utilise la police serif +2. **Sans-serif = interface** — Tout élément fonctionnel utilise la police sans-serif +3. **Le mélange crée le contraste** — La cohabitation des deux polices renforce la dualité "aventure / portfolio professionnel" + +### Spacing & Layout Foundation + +#### Spacing Philosophy + +**"Aéré mais pas vide"** — Chaque zone respire avec des espaces blancs généreux entre les éléments, sans jamais donner l'impression d'une page creuse. Le contenu est condensé mais bien espacé. + +#### Spacing Scale + +| Token | Valeur | Usage | +|-------|--------|-------| +| `space-xs` | 4px | Espacement intra-composant | +| `space-sm` | 8px | Espacement éléments proches | +| `space-md` | 16px | Espacement standard | +| `space-lg` | 32px | Espacement entre sections | +| `space-xl` | 64px | Espacement entre zones majeures | +| `space-2xl` | 128px | Respiration entre grandes sections | + +#### Layout Principles + +1. **Contenu centré** — Largeur max limitée, marges latérales généreuses +2. **Respiration verticale** — Espaces importants entre les blocs de contenu +3. **Densité adaptative** — Plus dense dans les zones interactives (carte, skills), plus aéré dans les zones narratives +4. **Profondeur par l'espace** — Les éléments importants ont plus d'espace autour d'eux + +#### Zone Density Guidelines + +| Type de zone | Densité | Espace blanc | +|--------------|---------|--------------| +| **Narrative** (intro, transitions) | Faible | Beaucoup — focus sur le texte | +| **Exploration** (carte, choix) | Moyenne | Équilibré — interactions claires | +| **Contenu** (projets, skills) | Moyenne-haute | Structuré — cards bien espacées | +| **Dialogue** (PNJ) | Faible | Focus sur la bulle de dialogue | +| **Challenge** | Moyenne | Focus sur le puzzle | + +### Accessibility Considerations + +#### Contrast Requirements (WCAG AA) + +| Élément | Ratio minimum | Notes | +|---------|---------------|-------| +| Texte blanc cassé sur fond sombre | ≥ 4.5:1 | À valider avec les couleurs exactes | +| Accent orange sur fond sombre | ≥ 3:1 (grands textes) | Boutons, liens | +| Couleurs de zones sur fond sombre | ≥ 3:1 | Labels de carte | + +#### Motion & Animation + +- Respect de `prefers-reduced-motion` sur toutes les animations +- Typewriter effect : option pour afficher le texte directement +- Transitions de zone : réduites ou supprimées si motion réduite +- Carte : navigation simplifiée sans animations si motion réduite + +#### Reading Comfort + +- Taille de texte minimum : 16px pour le corps +- Interligne confortable (1.5-1.7 pour le narratif) +- Largeur de ligne : 60-75 caractères max pour le texte narratif + +--- + +## Design Direction Decision + +### Chosen Direction: "L'Explorateur" (Direction B) + +**Concept :** La carte interactive est l'élément central de navigation. Le monde de Skycel est toujours visible, le visiteur explore librement. + +### Desktop Experience + +``` +┌─────────────────────────────────────────────────────────────┐ +│ [Progression: ████░░░░ 35%] [FR|EN] [⚙] │ +│ │ +│ ┌───────────────────────────────────────────────────┐ │ +│ │ CARTE │ │ +│ │ (Konva.js, illustrée SVG) │ │ +│ │ │ │ +│ │ 🏔️ Projets 🌳 Compétences │ │ +│ │ \ / │ │ +│ │ \ / │ │ +│ │ ──── 🏠 ──── │ │ +│ │ / \ │ │ +│ │ / \ │ │ +│ │ 📜 Parcours 💬 Témoignages │ │ +│ │ │ │ +│ │ 🔒 ??? (Contact) │ │ +│ │ │ │ +│ │ Zones cliquables, hover states, curseur custom │ │ +│ │ Zones visitées vs non-visitées visuellement │ │ +│ │ Contact verrouillé jusqu'à progression │ │ +│ └───────────────────────────────────────────────────┘ │ +│ │ +│ ┌─────────────────────────────────────────┐ │ +│ │ 🎭 Narrateur (adapté au héros choisi) │ │ +│ └─────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────┘ +``` + +### Mobile Experience: "Le Chemin Libre" + +**Concept :** Les zones de la carte deviennent un sentier vertical scrollable. Le chemin est décoratif — toutes les zones sont accessibles dans n'importe quel ordre. + +**Composants clés :** + +| Élément | Fonction | +|---------|----------| +| **Quick-nav** | Barre d'icônes fixe en haut, tap = scroll vers la zone | +| **Zones illustrées** | Cards avec illustration, nom, statut (visité/nouveau) | +| **Chemin décoratif** | Ligne reliant les zones visuellement | +| **Indicateurs** | ● visité / ○ nouveau / 🔒 verrouillé | +| **Narrateur** | Au-dessus de la bottom bar | + +**Principes :** +- **Liberté totale** — Tap sur n'importe quelle zone, dans n'importe quel ordre +- **Quick-nav en haut** — Accès direct sans scroller +- **Progression visible** — Icônes colorées pour zones visitées +- **Seul Contact est verrouillé** — Tout le reste est ouvert + +### Design Rationale + +1. **Carte = identité de Skycel** — C'est ce qui différencie ce portfolio de tous les autres +2. **Liberté d'exploration** — Fidèle aux inspirations Zelda et livres-jeu +3. **Desktop : Konva.js** — Immersion spatiale complète, interactions riches +4. **Mobile : Chemin Libre** — Même liberté, adapté au scroll vertical naturel +5. **Progressivité** — Les zones se "dévoilent" visuellement une fois visitées + +### Screen Architecture Summary + +| Écran | Desktop | Mobile | +|-------|---------|--------| +| **Landing** | Plein écran, illustration, 2 CTAs | Idem, responsive | +| **Choix Héros** | 3 cards illustrées côte à côte | 3 cards empilées | +| **Intro Narrateur** | Texte centré, typewriter | Idem | +| **Carte/Navigation** | Konva.js interactive | Chemin Libre vertical | +| **Zone Projets** | Grille de cards | Cards empilées | +| **Zone Skills** | vis.js skill tree | Liste groupée par catégorie | +| **Zone Parcours** | Timeline alternée G/D | Timeline linéaire | +| **Zone Témoignages** | Dialogues PNJ plein écran | Dialogues adaptés | +| **Challenge** | Puzzle interactif | Puzzle adapté touch | +| **Révélation** | "Monde de code" animé | Version allégée | +| **Contact** | Formulaire + célébration | Idem, responsive | + +### Common UI Elements + +| Élément | Desktop | Mobile | +|---------|---------|--------| +| **Barre de progression** | Header (haut) | Header (haut) | +| **Narrateur** | Bas de l'écran | Au-dessus de la bottom bar | +| **Accès carte** | Header | **Bottom bar (thumb zone)** | +| **Langue** | Header | Header | +| **Paramètres** | Header | Bottom bar | + +### Mobile Bottom Bar + +``` +┌──────────────────────┐ +│ │ +│ (contenu) │ +│ │ +├──────────────────────┤ +│ 🎭 Narrateur │ ← au-dessus de la bar +├──────────────────────┤ +│ 🗺️ 📊 ⚙️ │ ← fixe, toujours accessible +│ Carte Progr. Param. │ pouce = accès direct +└──────────────────────┘ +``` + +--- + +## User Journey Flows + +### Journey 1: Parcours Aventure (Core Journey) + +**Parcours critique — Le cœur de l'expérience Skycel** + +```mermaid +flowchart TD + A[Landing Page] --> B{Choix du visiteur} + B -->|"Partir à l'aventure"| C[Choix du Héros] + B -->|"Mode express"| EXPRESS[Page Résumé] + + C --> D[Intro Narrateur - adapté au héros] + D --> CARTE[Carte Interactive] + + CARTE --> Z1[Zone Projets] + CARTE --> Z2[Zone Compétences] + CARTE --> Z3[Zone Parcours] + CARTE --> Z4[Zone Témoignages] + + Z1 -->|"Narrateur propose choix"| CARTE + Z2 -->|"Narrateur propose choix"| CARTE + Z3 -->|"Narrateur propose choix"| CARTE + Z4 -->|"Narrateur propose choix"| CARTE + + CARTE -->|"2 zones visitées"| UNLOCK["🔓 Contact débloqué + Zone s'illumine + Narrateur annonce"] + + UNLOCK --> CARTE2[Carte - Contact accessible] + CARTE2 --> CHALLENGE_OPT{"Challenge final (optionnel)"} + CARTE2 --> CONTACT[Zone Contact] + CHALLENGE_OPT -->|"Tenter"| CHALLENGE[Challenge] + CHALLENGE_OPT -->|"Passer"| CONTACT + CHALLENGE --> CONTACT + + CONTACT --> REVEAL["Révélation 'Monde de Code' + Avatar Célian découvert"] + REVEAL --> FORM[Formulaire de contact] + FORM -->|"Envoi"| POST_CHALLENGE["Challenge optionnel + 'En attendant que le dev + retrouve sa boite mail...'"] + POST_CHALLENGE --> CONFIRM[Confirmation envoi] +``` + +#### Détail des interactions clés + +**Entrée dans une zone :** +1. Tap/clic sur la zone depuis la carte +2. Transition animée vers le contenu de la zone +3. Le visiteur explore le contenu (projets, skills, etc.) +4. Le narrateur intervient en fin de zone avec un choix : + +``` +┌──────────────────────────────────────────────────────┐ +│ 🎭 Narrateur: │ +│ "Intéressant, n'est-ce pas ? Maintenant..." │ +│ │ +│ ┌────────────────────┐ ┌────────────────────┐ │ +│ │ 🌳 Découvrir ses │ │ 🗺️ Retourner à │ │ +│ │ compétences │ │ la carte │ │ +│ └────────────────────┘ └────────────────────┘ │ +└──────────────────────────────────────────────────────┘ +``` + +**Déblocage du contact (après 2 zones visitées) :** +1. Animation : la zone Contact s'illumine sur la carte +2. Narrateur : *"On dirait que tu as assez exploré pour mériter une rencontre..."* +3. La zone Contact devient cliquable +4. Le visiteur peut continuer à explorer OU aller au contact + +**Challenge final (optionnel) :** +- Apparaît comme une proposition avant d'accéder au contact +- Le visiteur peut le tenter ou le passer +- Ne bloque JAMAIS l'accès au contact + +**Challenge post-formulaire (optionnel) :** +- Après l'envoi du formulaire, au lieu d'un simple "Merci" +- Message : *"En attendant que le développeur retrouve le chemin vers sa boîte mail, vous pouvez tenter ce challenge !"* +- Transforme le temps d'attente en moment de jeu +- Totalement optionnel, le visiteur peut fermer + +### Journey 2: Parcours Express + +```mermaid +flowchart TD + A[Landing Page] -->|"Mode express"| B[Page Résumé] + B --> C[Compétences clés] + B --> D[Projets highlights] + B --> E[Liens rapides] + B --> F[Contact direct] + + B -->|"Voir l'aventure"| G[Choix du Héros] + G --> H[Parcours Aventure...] +``` + +**Durée cible : 30 secondes pour évaluer** + +| Section | Contenu | Temps | +|---------|---------|-------| +| **Hero** | Nom, titre, photo, accroche | 5s | +| **Compétences** | Stack technique, niveaux | 10s | +| **Projets** | 3-4 projets clés avec liens | 10s | +| **Contact** | CTA direct | 5s | + +**CTA vers l'aventure toujours visible :** Un bouton discret mais présent invite à vivre l'expérience complète. + +### Journey 3: Parcours URL Directe (Candidatures) + +```mermaid +flowchart TD + A["skycel.dev/resume"] --> B[Page Résumé] + B --> C{Choix du visiteur} + C -->|"Contacter"| D[Formulaire contact] + C -->|"Voir l'aventure"| E[Landing → Aventure] + C -->|"Parcourir"| F[Scroll page résumé] +``` + +**Contexte :** Célian inclut `skycel.dev/resume` dans ses candidatures. Le recruteur arrive directement sur la page résumé, sans passer par la landing. + +### Journey 4: Parcours Retour (Visiteur qui revient) + +```mermaid +flowchart TD + A[Arrivée sur le site] --> B{Session existante ?} + B -->|"Oui"| C["Narrateur: 'Bienvenue à nouveau, voyageur...'"] + C --> D{Reprendre ?} + D -->|"Oui"| E[Carte avec progression restaurée] + D -->|"Non, recommencer"| F[Reset → Landing] + + B -->|"Non"| G[Landing classique] + + A2["skycel.dev?session=abc123"] --> H[Chargement session cross-device] + H --> C +``` + +**Détection :** Via LocalStorage (même appareil) ou ID session dans l'URL (cross-device) + +### Journey Patterns + +#### Pattern: Sortie de Zone par Choix Narratif + +Chaque zone se termine par une intervention du narrateur qui propose un choix entre deux directions. Ce pattern : +- Maintient l'immersion "livre dont vous êtes le héros" +- Guide sans imposer +- Offre toujours le retour à la carte comme option +- Crée une continuité narrative entre les zones + +#### Pattern: Déblocage Progressif + +| Zones visitées | Ce qui se débloque | +|----------------|-------------------| +| 0 | Toutes les zones sauf Contact | +| 2 | Contact s'illumine + annonce narrateur | +| 3+ | Easter eggs supplémentaires | +| Toutes | Badge "Explorateur complet" | + +#### Pattern: Challenges Non-Bloquants + +Tous les challenges sont **optionnels** : +- Challenge final avant contact → peut être passé +- Challenge post-formulaire → divertissement pendant l'attente +- Challenges en zone (quiz, code) → enrichissement, jamais blocage + +### Flow Optimization Principles + +1. **2 zones = contact** — L'immersion ne doit JAMAIS freiner le contact +2. **Choix du narrateur = navigation** — Pas de bouton "retour" froid, le narrateur guide +3. **Challenges optionnels** — Toujours une porte de sortie, jamais de frustration +4. **Express accessible partout** — Le mode résumé est toujours à un clic +5. **Continuité cross-session** — Jamais de progression perdue + +--- + +## Component Strategy + +### Design System Components (Headless) + +| Composant | Lib | Usage Skycel | +|-----------|-----|-------------| +| `Dialog/Modal` | Headless UI | Détails projets, overlays | +| `Menu/Dropdown` | Headless UI | Sélection langue, options | +| `Tooltip` | Headless UI | Infos au survol carte | +| `Tabs` | Headless UI | Navigation intra-zone | +| `Switch/Toggle` | Headless UI | Paramètres (son, animations) | + +### Custom Components + +#### 🕷️ NarratorBubble — Le Bug (Narrateur) + +**Concept :** Le narrateur est un "bug" — un insecte (l'araignée, mascotte de la micro-entreprise de Célian). Il est venu chercher le visiteur pour l'aider à sortir le développeur de son monde de code. Au début mystérieux, son identité se révèle progressivement. + +**Arc de révélation du narrateur :** + +| Progression | Apparence | Ce qu'on sait | +|-------------|-----------|---------------| +| **Début** | Silhouette sombre, forme vague | "Une voix mystérieuse..." | +| **25%** | Forme plus précise, pattes visibles | "Une petite créature..." | +| **50%** | Araignée reconnaissable, partiellement cachée | "Un insecte... un bug ?" | +| **75%** | Araignée complète, expressive | Le bug se présente | +| **Révélation** | Mascotte complète, identité révélée | Lien avec la micro-entreprise | + +**Spécification :** + +| Attribut | Détail | +|----------|--------| +| **Purpose** | Guider le visiteur, raconter l'histoire, proposer des choix | +| **Position Desktop** | Bas de l'écran, bulle avec avatar progressif | +| **Position Mobile** | Au-dessus de la bottom bar | +| **États** | Caché, Apparition, Parle (typewriter), Attend choix, Disparaît | +| **Variantes ton** | Vouvoiement (recruteur) / Tutoiement (autres) | +| **Évolution** | Mystérieux → Complice (parallèle à la révélation visuelle) | +| **Interaction** | Clic pour accélérer le texte, choix narratifs intégrés | +| **A11y** | `role="status"`, texte accessible, skip possible | + +#### 💬 DialoguePNJ — Témoignages Interactifs + +**Concept :** Les témoignages sont présentés comme des dialogues de jeu — portrait du PNJ + bulle de dialogue avec effet typewriter. + +| Attribut | Détail | +|----------|--------| +| **Purpose** | Afficher les témoignages comme des rencontres de PNJ | +| **Layout** | Portrait (photo/illustration fournie) + bulle de dialogue | +| **Typewriter** | Texte apparaît lettre par lettre, clic pour accélérer | +| **Personnalité** | Chaque PNJ a un style de dialogue (formel, décontracté, enthousiaste) | +| **Navigation** | Clic/tap pour passer au dialogue suivant | +| **Source image** | Photo ou illustration fournie par la personne | +| **A11y** | Texte complet accessible, skip typewriter | + +#### 🗺️ InteractiveMap — Carte Hub (Desktop) + +| Attribut | Détail | +|----------|--------| +| **Purpose** | Navigation centrale, vue d'ensemble de l'aventure | +| **Tech** | Konva.js + illustrations SVG | +| **Zones** | Cliquables, hover states, curseur custom | +| **États zones** | Non visitée, Hover, Visitée, Active, Verrouillée (Contact) | +| **Progression** | Zones visitées changent d'apparence | +| **Déblocage** | Contact s'illumine après 2 zones visitées | +| **Responsive** | Desktop = Konva.js / Mobile = ZoneCard (Chemin Libre) | +| **A11y** | Navigation clavier (Tab entre zones), labels ARIA | + +#### 📱 ZoneCard — Carte Mobile (Chemin Libre) + +| Attribut | Détail | +|----------|--------| +| **Purpose** | Représenter une zone dans le Chemin Libre mobile | +| **Layout** | Card illustrée avec nom, statut, teinte de zone | +| **États** | Non visitée, Visitée, Verrouillée | +| **Interaction** | Tap = entrer dans la zone | +| **Chemin** | Ligne décorative reliant les cards verticalement | +| **A11y** | `role="link"`, labels descriptifs | + +#### 🌳 SkillTree — Arbre de Compétences + +| Attribut | Détail | +|----------|--------| +| **Purpose** | Visualiser les compétences comme un arbre connecté | +| **Tech** | vis.js (graphe de nœuds connectés) | +| **Layout** | Nœuds = compétences, liens = relations, catégories par couleur | +| **Interaction** | Clic sur nœud = détails, zoom/pan | +| **Mobile** | Liste groupée par catégorie (vis.js trop complexe) | +| **A11y** | Version alternative accessible (liste structurée) | + +#### 🎭 HeroSelector — Choix du Personnage + +| Attribut | Détail | +|----------|--------| +| **Purpose** | Permettre au visiteur de choisir son héros | +| **Layout** | 3 cards illustrées (Recruteur, Client, Développeur) | +| **Contenu** | Illustration + nom + courte description | +| **Interaction** | Hover = preview, Clic = sélection avec animation | +| **Mobile** | Cards empilées verticalement | +| **A11y** | `role="radiogroup"`, navigation clavier | + +#### ✋ ChoiceCards — Choix Narratifs + +| Attribut | Détail | +|----------|--------| +| **Purpose** | Présenter les choix style "livre dont vous êtes le héros" | +| **Layout** | 2 cards côte à côte (ou empilées mobile) | +| **Contenu** | Icône + texte narratif du choix | +| **Interaction** | Hover = highlight, Clic = transition animée | +| **Contexte** | Utilisé par le narrateur en fin de zone | +| **A11y** | `role="radiogroup"`, focus visible | + +#### 💻 CodeWorld — Révélation Finale + +**Concept :** Le paysage final est composé de blocs de code formant un décor style ASCII art. Le visiteur traverse ce monde pour trouver l'avatar de Célian perdu au milieu. + +| Attribut | Détail | +|----------|--------| +| **Purpose** | Moment waouh — climax narratif | +| **Visual** | Blocs de code en ASCII art formant un paysage (montagnes, arbres, ville) | +| **Animations** | Code qui scroll/apparaît progressivement, avatar qui se révèle | +| **Avatar** | Illustration custom de Célian au centre du monde de code | +| **Transition** | Vers le formulaire de contact ("Tu m'as trouvé !") | +| **Mobile** | Version allégée mais même impact émotionnel | +| **A11y** | Description alternative du moment, skip possible | + +#### 🎮 ChallengeEngine — Moteur de Challenges + +| Attribut | Détail | +|----------|--------| +| **Purpose** | Gérer les challenges adaptés au héros | +| **Types** | Quiz code (dev), Quiz culture info (autres), Exploration cachée (tous) | +| **Adaptativité** | Contenu différent selon le héros choisi | +| **Bloquant** | JAMAIS — toujours un bouton "Passer" | +| **Post-formulaire** | Mode "en attendant" avec message fun | +| **A11y** | Formulaires accessibles, feedback clair | + +#### ⏳ LoadingNarrative — Chargement Narratif + +| Attribut | Détail | +|----------|--------| +| **Purpose** | Transformer le temps d'attente en moment narratif | +| **Contenu** | Tips, fun facts, teasers, mini-énigmes | +| **Usage** | Premier chargement du site | +| **Rotation** | Contenu aléatoire à chaque chargement | +| **A11y** | `role="status"`, pas d'animation bloquante | + +### Component Implementation Strategy + +| Phase | Composants | Priorité | +|-------|-----------|----------| +| **Phase 1 — Core** | NarratorBubble, HeroSelector, InteractiveMap, ChoiceCards | Critique — sans eux pas d'aventure | +| **Phase 2 — Zones** | DialoguePNJ, SkillTree, ZoneCard, QuickNav, BottomBar | Important — contenu des zones | +| **Phase 3 — Climax** | CodeWorld, ChallengeEngine, LoadingNarrative | Impact — moments forts | +| **Phase 4 — Polish** | SessionBanner, ResumeHero, Easter eggs | Finition — expérience complète | + +--- + +## UX Consistency Patterns + +### Règle Fondamentale : Le Narrateur Est La Voix Unique + +**Tout feedback passe par le narrateur.** Aucun toast, aucune notification système, aucun message d'erreur générique. Le bug est l'unique interface de communication entre le système et le visiteur. + +| Situation | Approche classique | Approche Skycel | +|-----------|-------------------|-----------------| +| Erreur formulaire | Toast rouge "Champ requis" | 🕷️ "Hmm, il manque quelque chose ici..." | +| Challenge réussi | Badge + animation | 🕷️ "Pas mal du tout ! Tu m'impressionnes..." | +| Zone complétée | Notification "Terminé" | 🕷️ "Un mystère de moins... mais il en reste" | +| Contact débloqué | Badge "Débloqué" | 🕷️ "On dirait que tu mérites une rencontre..." | +| Erreur technique | "Une erreur est survenue" | 🕷️ "Oups, même moi je n'ai pas vu ça venir..." | +| Sauvegarde progression | "Progression sauvegardée" | 🕷️ "Ne t'inquiète pas, je me souviens de tout" | +| Retour visiteur | "Bienvenue" | 🕷️ "Te revoilà ! Tu m'avais manqué..." | + +### Action Patterns + +#### Hiérarchie des Actions + +| Type | Style | Contexte | Exemple | +|------|-------|----------|---------| +| **Action narrative** | ChoiceCards illustrées | Choix dans l'aventure | "Explorer les projets" / "Voir les compétences" | +| **Action principale** | Bouton accent `#fa784f` | CTA important hors narration | "Envoyer le message" | +| **Action secondaire** | Bouton outline / ghost | Alternative ou annulation | "Passer le challenge" | +| **Action discrète** | Lien texte | Navigation utilitaire | "Changer de langue", "Mode express" | + +#### Règle de contexte + +``` +DANS L'AVENTURE HORS AVENTURE + │ │ + ▼ ▼ + ChoiceCards Boutons classiques + (narrateur propose) (UI standard stylée) + + Ex: fin de zone, Ex: formulaire contact, + choix de chemin paramètres, langue +``` + +### Feedback Patterns + +#### Feedback Narratif (tout feedback) + +**Tonalité du feedback par type :** + +| Type | Ton narrateur | Exemple | +|------|--------------|---------| +| **Succès** | Complice, fier | "Bien joué ! Tu commences à comprendre..." | +| **Erreur utilisateur** | Bienveillant, guide | "Attends, il manque quelque chose ici..." | +| **Erreur technique** | Humoristique, rassurant | "Même les bugs ont des bugs parfois..." | +| **Information** | Mystérieux, intrigant | "Savais-tu que cette zone cache un secret ?" | +| **Progression** | Encourageant | "Encore un peu et tu y es presque..." | +| **Avertissement** | Prudent | "Attention, tu t'aventures en terrain inconnu..." | + +#### Adaptation au héros + +**Exemples d'une même erreur selon le héros :** +- Recruteur : *"Il semblerait qu'un champ attende votre attention..."* +- Client : *"Hmm, t'as oublié quelque chose ici..."* +- Dev : *"TypeError: missing_field is undefined 😄 Non, je plaisante, il manque juste un champ"* + +### Navigation Patterns + +#### Qui navigue quoi + +| Élément | Rôle navigation | Quand | +|---------|----------------|-------| +| **Narrateur (ChoiceCards)** | Navigation entre zones | Fin de zone, transitions narratives | +| **Carte (Desktop)** | Navigation libre | Depuis la vue carte | +| **Chemin Libre (Mobile)** | Navigation libre | Depuis la vue chemin | +| **Bottom Bar (Mobile)** | Accès carte, progression, paramètres | Toujours visible | +| **Header (Desktop)** | Langue, progression, paramètres | Toujours visible | + +#### Pattern de transition entre zones + +**Règle :** On ne quitte JAMAIS une zone avec un bouton "Retour" froid. Le narrateur accompagne toujours la transition. + +**Exception :** Le bouton Carte dans la bottom bar mobile et le header desktop permettent un retour direct (le narrateur commente quand même : *"Tu veux revoir la carte ? Bonne idée..."*) + +### Form Patterns + +#### Formulaire de Contact + +| Aspect | Pattern | +|--------|---------| +| **Validation** | Temps réel, feedback narrateur | +| **Erreur champ** | Narrateur indique le problème avec humour | +| **Soumission** | Bouton accent, narrateur confirme | +| **Succès** | Narrateur + transition vers challenge post-formulaire | +| **Anti-spam** | Honeypot invisible (pas de CAPTCHA qui casse l'immersion) | + +#### Formulaires de Challenge (quiz) + +| Aspect | Pattern | +|--------|---------| +| **Présentation** | Narrateur introduit le challenge | +| **Réponse correcte** | Narrateur félicite, effet visuel positif | +| **Réponse incorrecte** | Narrateur encourage, indice optionnel | +| **Skip** | Toujours disponible, narrateur commente | + +### State Patterns + +| État | Comportement | Narrateur | +|------|-------------|-----------| +| **Chargement initial** | LoadingNarrative (tips, fun facts) | Introduction du bug | +| **Zone non visitée** | Aspect mystérieux, lueur subtile | "Cette zone t'attend..." | +| **Zone visitée** | Aspect révélé, couleur pleine | "Tu connais déjà cet endroit" | +| **Zone verrouillée** | Aspect grisé + cadenas | "Pas encore... explore d'abord" | +| **Contact débloqué** | Animation illumination | Annonce narrative | +| **Easter egg trouvé** | Animation surprise | Narrateur réagit avec enthousiasme | + +**Règle : Aucun état vide.** Il n'y a JAMAIS d'état vide dans Skycel. Chaque zone a du contenu, le narrateur comble les silences, et les zones non visitées ont une présentation mystérieuse. + +--- + +## Responsive Design & Accessibility + +### Responsive Strategy + +#### Device Behavior Matrix + +| Device | Breakpoint | Carte | Layout | Navigation | +|--------|-----------|-------|--------|------------| +| **Mobile** | < 768px | Chemin Libre vertical | Empilé | Bottom bar (pouce) | +| **Tablette** | 768px - 1023px | Konva.js (comme desktop) | Comme desktop | Header | +| **Desktop** | ≥ 1024px | Konva.js interactive | Multi-colonnes | Header | + +**Règle :** Tablette = desktop. Seul mobile a un comportement différent. + +#### Mobile-Specific Adaptations + +| Composant | Desktop/Tablette | Mobile | +|-----------|-----------------|--------| +| **Carte** | Konva.js interactive | Chemin Libre (ZoneCards) | +| **SkillTree** | vis.js graphe connecté | Liste groupée par catégorie | +| **HeroSelector** | 3 cards côte à côte | 3 cards empilées | +| **ChoiceCards** | 2 cards côte à côte | 2 cards empilées | +| **DialoguePNJ** | Portrait + bulle large | Portrait réduit + bulle pleine largeur | +| **CodeWorld** | Animation complète | Version allégée | +| **Navigation** | Header fixe | Bottom bar + Quick-nav haut | +| **Narrateur** | Bulle en bas | Bulle au-dessus de bottom bar | + +### Breakpoint Strategy + +```css +/* Mobile First */ +/* Base: 0 - 767px (mobile) */ + +/* Tablette + Desktop */ +@media (min-width: 768px) { + /* Carte Konva.js, layouts multi-colonnes */ + /* Header navigation */ +} + +/* Desktop large */ +@media (min-width: 1280px) { + /* Espacement supplémentaire */ + /* Contenu max-width limité */ +} +``` + +**Approche : Mobile First.** Le CSS de base cible mobile, les media queries ajoutent la complexité pour tablette/desktop. + +### Accessibility Strategy (WCAG AA) + +#### Compliance Target: WCAG 2.1 Level AA + +#### Contrast Requirements + +| Élément | Ratio requis | Notes | +|---------|-------------|-------| +| Texte body (blanc cassé / fond sombre) | ≥ 4.5:1 | Vérifier avec les couleurs exactes | +| Grands textes (titres, narrateur) | ≥ 3:1 | Display, H1, texte narratif | +| Accent orange sur fond sombre | ≥ 3:1 | Boutons, liens, CTAs | +| Texte sur couleurs de zone | ≥ 4.5:1 | Labels de carte | +| Focus indicators | ≥ 3:1 | Visible sur fond sombre | + +#### Keyboard Navigation + +| Contexte | Comportement clavier | +|----------|---------------------| +| **Carte (Desktop)** | Tab entre zones, Enter pour entrer | +| **ChoiceCards** | Tab entre options, Enter pour choisir | +| **HeroSelector** | Flèches pour naviguer, Enter pour sélectionner | +| **DialoguePNJ** | Enter pour avancer, Escape pour fermer | +| **Narrateur typewriter** | **Espace = accélérer l'animation** | +| **Challenges** | Tab entre réponses, Enter pour valider | + +#### Narrateur & Animations Accessibles + +**Option paramètres : "Désactiver les animations narratives"** + +| Paramètre | Comportement | +|-----------|-------------| +| Animations ON (défaut) | Typewriter, transitions, animations de zone | +| **Animations OFF** | Texte affiché instantanément, transitions immédiates | + +**Interactions typewriter :** + +| Action | Résultat | +|--------|---------| +| Ne rien faire | Texte apparaît lettre par lettre | +| **Appuyer sur Espace** | Animation accélérée (x3-x5) | +| **Cliquer** | Animation accélérée (x3-x5) | +| Animations OFF | Texte affiché en entier immédiatement | + +**Screen reader :** +- Texte complet toujours disponible via `aria-label` +- ChoiceCards annoncés comme options avec descriptions +- Narrateur utilise `role="status"` + `aria-live="polite"` + +#### `prefers-reduced-motion` Support + +Respecté automatiquement, indépendamment du paramètre utilisateur : +- Typewriter → texte instantané +- Transitions zones → coupes directes +- Animations carte → navigation sans animation +- CodeWorld → version statique + +#### Touch Targets + +| Élément | Taille minimum | +|---------|---------------| +| Boutons | 44x44px | +| Zones carte (mobile) | 48x48px | +| Bottom bar items | 48x48px | +| ChoiceCards | Pleine largeur | +| Liens texte | 44px hauteur min | + +### Screen Reader Experience + +| Écran | Ce que le screen reader annonce | +|-------|-------------------------------| +| **Landing** | "Skycel, portfolio de Célian. Deux options : Partir à l'aventure, ou Mode express" | +| **Choix héros** | "Choisissez votre personnage : Recruteur, Client, ou Développeur" | +| **Narrateur** | Texte complet immédiat (pas typewriter) | +| **Carte** | "Carte d'exploration. Zones disponibles : Projets, Compétences, Parcours, Témoignages. Contact : verrouillé" | +| **CodeWorld** | "Révélation : vous avez trouvé le développeur dans son monde de code" | + +### Testing Strategy + +| Type | Outils | +|------|--------| +| **Responsive** | Chrome DevTools, Safari, appareils réels (iPhone, Android, iPad) | +| **Accessibilité auto** | Lighthouse, axe DevTools | +| **Screen reader** | VoiceOver (macOS/iOS), NVDA (Windows) | +| **Keyboard** | Navigation sans souris | +| **Contraste** | Contrast checker sur toutes les combinaisons | + +### Implementation Guidelines + +1. **HTML sémantique** — `nav`, `main`, `section`, `article`, headings hiérarchiques +2. **Skip link** — "Aller au contenu principal" en premier élément focusable +3. **Focus visible** — Outline custom visible sur fond sombre (accent orange ou blanc) +4. **Unités relatives** — `rem` pour le texte, `%` et `vw/vh` pour les layouts +5. **Images** — `alt` descriptifs sur illustrations, `aria-hidden` sur décoratifs +6. **Langue** — `lang="fr"` / `lang="en"` dynamique sur `` +7. **Animations** — Toujours vérifier `prefers-reduced-motion` avant d'animer + +--- diff --git a/docs/prd-gamification.md b/docs/prd-gamification.md new file mode 100644 index 0000000..55399fe --- /dev/null +++ b/docs/prd-gamification.md @@ -0,0 +1,941 @@ +# Portfolio Gamifié - Product Requirements Document (PRD) + +## 1. Goals and Background Context + +### 1.1 Goals + +- **Différenciation** : Créer un portfolio qui se démarque par une expérience narrative immersive et gamifiée +- **Engagement visiteur** : Transformer la visite en aventure avec quête principale "Trouver le développeur" +- **Respect du temps** : Offrir une double entrée (Mode Aventure vs Mode Pressé) pour s'adapter à chaque visiteur +- **Rejouabilité** : Proposer des chemins multiples (4-8 parcours différents) pour une expérience unique +- **Contact optimisé** : Transformer le formulaire de contact en récompense narrative plutôt qu'en corvée +- **Démonstration technique** : Utiliser des animations avancées et interactions comme preuve de compétences +- **International** : Support FR + EN dès le lancement + +### 1.2 Background Context + +Le portfolio actuel utilise une navigation et présentation classiques. L'analyse des besoins de trois personas (recruteur pressé, client potentiel, développeur pair) révèle une opportunité de différenciation majeure : un portfolio qui raconte une histoire plutôt que de lister des informations. + +Le concept central retenu est de traiter le portfolio comme une aventure narrative inspirée de Zelda BOTW, avec des PNJ (témoignages sous forme de dialogues), un arbre de compétences RPG, une carte interactive, et des easter eggs. La stack technique validée (Nuxt 3 SSR / Laravel API / MariaDB / TailwindCSS / Konva.js / vis.js) permet de réaliser cette vision avec une architecture moderne offrant SEO optimal, navigation fluide et API maintenable. + +### 1.3 Change Log + +| Date | Version | Description | Author | +|------|---------|-------------|--------| +| 2026-01-26 | 0.1 | Création initiale basée sur le brainstorming | John (PM) | +| 2026-01-26 | 1.0 | PRD complet avec 4 epics, 37 stories, checklist validée | John (PM) | +| 2026-01-27 | 1.1 | Migration stack frontend vers Vue 3 + Composition API + Pinia | John (PM) | +| 2026-01-27 | 1.2 | Adoption Nuxt 3 pour SSR + navigation SPA fluide | John (PM) | +| 2026-01-27 | 1.3 | Backend API avec Laravel au lieu de PHP natif | John (PM) | + +## 1.4 Out of Scope (MVP) + +Les éléments suivants sont explicitement **hors du scope MVP** : + +- Application mobile native (iOS/Android) +- Authentification utilisateur / comptes persistants +- CMS / back-office d'administration du contenu +- Analytics avancées (au-delà de Lighthouse et logs basiques) +- Système de commentaires ou blog +- Intégration réseaux sociaux (partage, login social) +- Mode multijoueur ou classements +- Notifications push +- PWA complète (service worker, offline mode) + +### 1.5 Success Metrics (MVP) + +| Métrique | Objectif | Méthode de mesure | +|----------|----------|-------------------| +| Taux de complétion parcours aventure | > 60% | LocalStorage progression + logs serveur | +| Temps moyen sur site | > 3 minutes | Analytics basiques ou logs | +| Taux d'accès au contact | > 40% des visiteurs | Logs page contact | +| Score Lighthouse Performance | > 90 | Audit Lighthouse | +| Easter eggs découverts (moyenne) | > 2/visiteur | LocalStorage stats | + +## 2. Requirements + +### 2.1 Functional Requirements + +- **FR1**: Le système offre une double entrée au visiteur : "Partir à l'aventure" (expérience complète) ou "Je n'ai pas le temps" (mode express avec roadmap) +- **FR2**: Les transitions entre pages sont animées de manière seamless via Vue/Nuxt transitions, créant une impression de "changement de zone" immersive +- **FR3**: Un narrateur-guide accompagne le visiteur avec des textes contextuels tout au long de l'expérience +- **FR4**: Une carte interactive (Konva.js) permet la navigation non-linéaire et affiche la progression du visiteur +- **FR5**: Un arbre de compétences interactif (vis.js) visualise les skills avec niveaux évoluant selon les projets +- **FR6**: Les compétences sont cliquables et mènent directement aux projets qui les utilisent +- **FR7**: Les témoignages s'affichent sous forme de dialogues PNJ style Zelda avec avatar, bulles, effet typewriter et personnalités variées +- **FR8**: Une barre de progression globale indique l'avancement dans l'exploration du site +- **FR9**: Le système propose 2-3 choix binaires créant 4-8 parcours narratifs différents, tous menant au contact +- **FR10**: Un challenge/puzzle accessible doit être résolu pour accéder au formulaire de contact (avec système d'indices) +- **FR11**: Des easter eggs cachés récompensent l'exploration avec des snippets de code ou anecdotes +- **FR12**: La progression est sauvegardée automatiquement en LocalStorage pour permettre la reprise +- **FR13**: Le site supporte deux langues (FR par défaut + EN) avec détection par URL (/en/...) +- **FR14**: Le formulaire de contact est présenté comme la récompense finale "Tu m'as trouvé !" avec célébration + +### 2.2 Non-Functional Requirements + +- **NFR1**: Le bundle JS total (Nuxt + Konva + vis.js) ne doit pas dépasser 170kb gzippé, avec lazy-loading des composants lourds +- **NFR2**: Le temps de chargement initial (LCP) doit rester sous 2.5 secondes sur connexion 3G +- **NFR3**: Le site doit être responsive et offrir une expérience adaptée mobile (carte simplifiée) +- **NFR4**: Le site doit fonctionner sur les navigateurs modernes (Chrome, Firefox, Safari, Edge - 2 dernières versions) +- **NFR5**: Les URLs doivent être SEO-friendly et le contenu principal accessible aux crawlers +- **NFR6**: Les animations doivent respecter `prefers-reduced-motion` pour l'accessibilité +- **NFR7**: Le système i18n utilise @nuxtjs/i18n avec fichiers JSON, rendu SSR pour SEO optimal +- **NFR8**: Les images sont optimisées en WebP avec lazy loading + +## 3. User Interface Design Goals + +### 3.1 Overall UX Vision + +L'expérience utilisateur vise à transformer un portfolio classique en **aventure narrative immersive**. Le visiteur ne consulte pas un CV interactif, il **part à la découverte d'un développeur**. Chaque interaction est pensée pour créer de la surprise, de l'engagement et de la mémorabilité. L'ambiance s'inspire des jeux d'aventure/RPG (notamment Zelda BOTW) tout en restant professionnelle et accessible. + +**Mots-clés UX** : Immersion, Découverte, Surprise, Fluidité, Personnalisation du parcours. + +### 3.2 Key Interaction Paradigms + +| Paradigme | Description | +|-----------|-------------| +| **Navigation narrative** | Pas de menu burger classique - la carte interactive et le narrateur guident le visiteur | +| **Choix binaires** | À plusieurs moments clés, le visiteur choisit son chemin | +| **Dialogues interactifs** | Clic pour "parler" aux PNJ (témoignages), avec effet typewriter progressif | +| **Progression visible** | Barre/indicateur montrant l'avancement dans l'exploration globale | +| **Récompenses cachées** | Easter eggs déclenchés par exploration (clics, hover, scroll, Konami code) | +| **Transitions cinématiques** | Changements de "zone" animés entre chaque section majeure | + +### 3.3 Core Screens and Views + +| Écran | Description | Rôle narratif | +|-------|-------------|---------------| +| **Landing / Choix initial** | Double entrée : Aventure vs Mode Pressé | Point de départ de la quête | +| **Intro narrative** | Présentation du héros mystérieux | Accroche et intrigue | +| **Carte interactive** | Vue globale des zones à explorer, progression visible | Hub de navigation | +| **Zone Projets** | Galerie de projets avec previews et détails | Preuves concrètes | +| **Zone Compétences** | Arbre de skills interactif avec niveaux | Démonstration technique | +| **Zone Parcours/Timeline** | Histoire professionnelle narrative | Contexte et crédibilité | +| **Zone Témoignages** | Dialogues PNJ avec personnalités | Validation sociale | +| **Challenge final** | Puzzle à résoudre avec système d'indices | Climax de l'aventure | +| **Contact / Récompense** | "Tu m'as trouvé !" + formulaire + célébration | Conclusion satisfaisante | +| **Roadmap (Mode Pressé)** | Vue condensée avec accès direct aux sections | Alternative rapide | + +### 3.4 Accessibility: WCAG AA + +- Respect de `prefers-reduced-motion` : animations désactivées ou réduites +- Contraste suffisant sur tous les textes narratifs +- Navigation au clavier possible (focus visible, skip links) +- Alternative textuelle pour la carte interactive +- Le mode pressé sert aussi de fallback accessible + +### 3.5 Branding + +| Élément | Direction | +|---------|-----------| +| **Ton visuel** | Moderne, légèrement fantaisiste, inspiré RPG mais pas cartoon | +| **Palette** | Tons sombres avec accents colorés pour les interactions | +| **Typographie** | Sans-serif moderne pour le corps, display font pour titres narratifs | +| **Iconographie** | SVG custom ou sprite, style cohérent avec l'univers RPG light | +| **Avatars PNJ** | Illustrations stylisées pour les témoignages | + +### 3.6 Target Devices and Platforms: Web Responsive + +| Device | Expérience | +|--------|------------| +| **Desktop (>1024px)** | Expérience complète : carte interactive, animations, skill tree complet | +| **Tablet (768-1024px)** | Expérience adaptée : carte simplifiée, interactions touch | +| **Mobile (<768px)** | Expérience repensée : navigation linéaire, carte en minimap, skill tree scrollable | + +## 4. Technical Assumptions + +### 4.1 Repository Structure: Nouveau Repo Dédié + +Projet standalone en monorepo (Nuxt 3 frontend SSR + API PHP) : + +``` +portfolio-gamifie/ +├── frontend/ # Application Nuxt 3 +│ ├── pages/ # Routes automatiques (fichier-based) +│ │ ├── index.vue # / (landing double entrée) +│ │ ├── aventure.vue # /aventure (intro narrative) +│ │ ├── roadmap.vue # /roadmap (mode pressé) +│ │ ├── projets/ +│ │ │ ├── index.vue # /projets (galerie) +│ │ │ └── [slug].vue # /projets/:slug (détail) +│ │ ├── competences.vue # /competences (skill tree) +│ │ ├── temoignages.vue # /temoignages (dialogues PNJ) +│ │ ├── parcours.vue # /parcours (timeline) +│ │ ├── challenge.vue # /challenge (puzzle) +│ │ └── contact.vue # /contact (récompense finale) +│ ├── components/ # Auto-importés +│ │ ├── DialoguePNJ.vue +│ │ ├── Narrator.vue +│ │ ├── ProgressBar.vue +│ │ ├── InteractiveMap.client.vue # Client-only (Konva) +│ │ └── SkillTree.client.vue # Client-only (vis.js) +│ ├── composables/ # Auto-importés +│ │ ├── useTypewriter.ts +│ │ ├── useNarrator.ts +│ │ └── useEasterEggs.ts +│ ├── stores/ # Pinia stores +│ │ └── progression.ts +│ ├── layouts/ +│ │ ├── default.vue # Layout avec narrateur + progress bar +│ │ └── minimal.vue # Layout mode pressé +│ ├── i18n/ +│ │ ├── fr.json +│ │ └── en.json +│ ├── assets/ +│ ├── public/ +│ ├── nuxt.config.ts +│ ├── tailwind.config.js +│ └── package.json +├── api/ # Backend Laravel API +│ ├── app/ +│ │ ├── Http/ +│ │ │ ├── Controllers/Api/ +│ │ │ │ ├── ProjectController.php +│ │ │ │ ├── SkillController.php +│ │ │ │ ├── TestimonialController.php +│ │ │ │ ├── NarratorController.php +│ │ │ │ └── ContactController.php +│ │ │ ├── Requests/ # Form Request validation +│ │ │ └── Resources/ # API Resources (transformers) +│ │ └── Models/ +│ │ ├── Project.php +│ │ ├── Skill.php +│ │ ├── Testimonial.php +│ │ └── NarratorText.php +│ ├── database/ +│ │ ├── migrations/ +│ │ ├── seeders/ +│ │ └── factories/ +│ ├── routes/ +│ │ └── api.php # Routes API +│ ├── config/ +│ ├── tests/ +│ ├── .env.example +│ └── composer.json +└── README.md +``` + +### 4.2 Service Architecture: Nuxt 3 SSR + Laravel API + +| Composant | Technologie | Justification | +|-----------|-------------|---------------| +| **Frontend SSR** | Nuxt 3 | Rendu serveur SEO + hydration SPA | +| **Backend API** | Laravel 11 | Framework PHP robuste, conventions claires, Eloquent ORM | +| **Base de données** | MariaDB | Relationnel adapté aux données structurées (skills, projets) | +| **ORM** | Eloquent | Relations fluides (belongsToMany, hasMany), query builder | +| **Routing API** | Laravel Router | RESTful, middleware, rate limiting | +| **Validation** | Form Requests | Validation déclarative, messages localisés | +| **Mail** | Laravel Mail | PHPMailer intégré, templates Blade | +| **Cache** | Laravel Cache | Redis ou file driver selon hébergement | + +### 4.3 Frontend Stack + +| Librairie | Version | Poids gzip | Rôle | +|-----------|---------|------------|------| +| **Nuxt 3** | 3.x | ~50kb | Meta-framework Vue avec SSR natif | +| **Vue 3** | 3.5+ | (inclus) | Framework réactif, Composition API | +| **Pinia** | 2.x | ~1kb | Gestion d'état (progression, choix, easter eggs) | +| **@nuxtjs/i18n** | 8.x | ~5kb | Internationalisation avec SSR | +| **TailwindCSS** | 3.x | ~10kb | Styling, animations CSS | +| **Konva.js** | 9.x | ~50kb | Carte interactive (chargé côté client) | +| **vue-konva** | 3.x | ~2kb | Binding Vue pour Konva | +| **vis-network** | 9.x | ~50kb | Arbre de compétences (chargé côté client) | + +**Total estimé** : ~160-170kb gzippé (avec lazy-loading des librairies lourdes) + +#### Justification Nuxt 3 + +- **SSR natif** : HTML complet pour les crawlers, SEO optimal sans configuration +- **Hydration intelligente** : Premier rendu serveur, puis navigation SPA fluide +- **Routing fichier-based** : `pages/projets/[slug].vue` → URL `/projets/mon-projet` automatique +- **Transitions de page** : `` avec `pageTransition` configuration native +- **Auto-imports** : Composables et composants importés automatiquement +- **i18n SSR** : URLs localisées (`/en/projects`) avec contenu traduit côté serveur +- **Lazy components** : `` charge Konva uniquement quand nécessaire + +### 4.4 Testing Requirements: Unit + Integration + +| Type | Scope | Outils | +|------|-------|--------| +| **Unit Tests Laravel** | Models, Services, Form Requests | Pest PHP ou PHPUnit | +| **Feature Tests Laravel** | API endpoints, middleware | Laravel HTTP Tests | +| **Unit Tests Nuxt** | Composants, composables, stores | Vitest + @nuxt/test-utils | +| **E2E Tests** | Parcours utilisateur critiques, SSR | Playwright | +| **Tests manuels** | UX gamification, animations, transitions | Checklist QA | + +### 4.5 Additional Technical Assumptions + +- **Hébergement** : + - Frontend Nuxt : Node.js (Vercel, Netlify, ou serveur Node) + - API Laravel : Serveur PHP 8.2+ avec MariaDB (Laravel Forge, shared hosting, VPS) +- **Mode SSR** : Nuxt en mode `ssr: true` (défaut), rendu serveur + hydration client +- **Versioning** : Git, branches feature, main = production +- **Build Frontend** : Nitro (bundler Nuxt), optimisations automatiques +- **Build API** : Composer, `php artisan optimize` en production +- **Composants client-only** : Konva et vis.js avec suffix `.client.vue` (pas de SSR) +- **Images** : `` avec optimisation automatique (nuxt/image) +- **État global** : Pinia avec `persistedState` plugin, compatible SSR +- **Sécurité Laravel** : CORS middleware, Sanctum (si auth future), rate limiting, validation +- **Sécurité Nuxt** : Headers sécurité via nuxt.config.ts +- **SEO** : `useHead()` et `useSeoMeta()` pour meta tags dynamiques SSR +- **Transitions** : `pageTransition` dans `nuxt.config.ts` + CSS personnalisé +- **API Resources** : Laravel Resources pour transformer les réponses JSON + +## 5. Epic List + +| Epic | Titre | Objectif | +|------|-------|----------| +| **Epic 1** | Setup Projet & Infrastructure i18n | Créer le nouveau repo Nuxt 3, structure projet, schéma BDD MariaDB, système i18n, routing SSR, transitions de page et double entrée (Aventure/Pressé) | +| **Epic 2** | Contenu Interactif | Implémenter les compétences cliquables → projets, les témoignages style dialogue PNJ, et la timeline narrative | +| **Epic 3** | Gamification & Navigation | Créer la carte interactive (Konva.js), l'arbre de compétences (vis.js), la barre de progression et le narrateur-guide | +| **Epic 4** | Expérience Complète & Finalisation | Implémenter les chemins narratifs multiples, le challenge/puzzle final, les easter eggs et la célébration contact | + +## 6. Epic Details + +### Epic 1 : Setup Projet & Infrastructure i18n + +**Objectif** : Créer le nouveau projet Nuxt 3 from scratch avec une infrastructure solide : structure de fichiers, base de données MariaDB, système d'internationalisation SSR (FR/EN), routing avec transitions de pages seamless, et la première fonctionnalité utilisateur visible (double entrée Aventure/Pressé). + +#### Story 1.1 : Initialisation du projet + +**As a** développeur, +**I want** une structure de projet moderne initialisée (Nuxt 3 SSR + Laravel API), +**so that** je peux commencer le développement sur des bases solides. + +**Acceptance Criteria :** +1. Repository Git initialisé avec `.gitignore` approprié +2. Structure monorepo : `/frontend` (Nuxt 3) + `/api` (Laravel) +3. Frontend : `npx nuxi@latest init` avec TypeScript activé +4. Modules Nuxt installés : `@nuxtjs/i18n`, `@nuxtjs/tailwindcss`, `@pinia/nuxt` +5. Backend : `laravel new api` ou `composer create-project laravel/laravel api` +6. Laravel configuré en mode API-only (sans Blade views inutiles) +7. `nuxt.config.ts` configuré avec SSR activé et pageTransition +8. Fichiers `.env.example` pour frontend et backend +9. CORS configuré dans Laravel pour autoriser le frontend Nuxt +10. README.md avec instructions d'installation et déploiement + +#### Story 1.2 : Configuration base de données Laravel + +**As a** développeur, +**I want** une connexion MariaDB fonctionnelle avec Eloquent et migrations Laravel, +**so that** je peux créer et versionner le schéma de données. + +**Acceptance Criteria :** +1. Configuration DB dans `.env` (DB_CONNECTION=mysql, DB_HOST, etc.) +2. `config/database.php` configuré pour MariaDB +3. Commande `php artisan migrate` fonctionnelle +4. Commande `php artisan db:seed` pour données initiales +5. Factories définies pour les tests (`ProjectFactory`, `SkillFactory`, etc.) +6. Connexion testée avec `php artisan tinker` + +#### Story 1.3 : Schéma de données initial (Migrations Laravel) + +**As a** développeur, +**I want** les tables principales créées via migrations Laravel, +**so that** l'application peut stocker projets, compétences et témoignages. + +**Acceptance Criteria :** +1. Migration `create_projects_table` (id, slug, title, description, image, url, github_url, date_completed, is_featured, timestamps) +2. Migration `create_skills_table` (id, slug, name, icon, category, max_level, timestamps) +3. Migration `create_project_skill_table` (pivot avec level_before, level_after) +4. Migration `create_testimonials_table` (id, name, role, company, avatar, content, personality, project_id, timestamps) +5. Migration `create_narrator_texts_table` (id, context, content, variant, timestamps) +6. Models Eloquent avec relations : `Project->belongsToMany(Skill)`, `Skill->belongsToMany(Project)`, `Testimonial->belongsTo(Project)` +7. Seeders : `ProjectSeeder`, `SkillSeeder`, `TestimonialSeeder` avec données de test +8. `DatabaseSeeder` appelant tous les seeders dans le bon ordre + +#### Story 1.4 : Système d'internationalisation (i18n) frontend + +**As a** visiteur, +**I want** voir le site dans ma langue (FR ou EN), +**so that** je comprends le contenu. + +**Acceptance Criteria :** +1. Fichiers JSON de traduction (`i18n/fr.json`, `i18n/en.json`) +2. Composable `useI18n()` avec `t()` pour accéder aux traductions +3. Traductions chargées côté serveur (SSR) pour SEO +4. Fallback vers FR si clé manquante en EN +5. Détection de la langue via URL (`/en/...`) avec `prefix_except_default` +6. Sélecteur de langue avec `switchLocalePath()` +7. Traductions de base définies (navigation, boutons, messages) + +#### Story 1.5 : Configuration @nuxtjs/i18n et URLs localisées + +**As a** visiteur, +**I want** des URLs propres et localisées, +**so that** je peux naviguer et partager des liens. + +**Acceptance Criteria :** +1. Module `@nuxtjs/i18n` configuré avec stratégie `prefix_except_default` +2. URLs FR par défaut : `/`, `/projets`, `/competences`, `/parcours`, `/contact` +3. URLs EN préfixées : `/en`, `/en/projects`, `/en/skills`, `/en/journey`, `/en/contact` +4. Fichiers de traduction JSON dans `i18n/fr.json` et `i18n/en.json` +5. Composable `useI18n()` et `$t()` pour les traductions SSR +6. `` avec `localePath()` pour liens localisés +7. Page 404 (`error.vue`) personnalisée bilingue +8. SEO : `hreflang` automatiques dans le `` + +#### Story 1.6 : Layout de base et intégration TailwindCSS + +**As a** visiteur, +**I want** une interface visuelle cohérente, +**so that** l'expérience est agréable. + +**Acceptance Criteria :** +1. Layout principal dans `src/Views/layouts/main.php` +2. TailwindCSS configuré avec thème custom +3. Build CSS via PostCSS avec minification production +4. Police(s) variable font chargée(s) +5. Meta tags SEO dynamiques par page +6. Favicon configuré +7. Classes utilitaires thème sombre avec accents + +#### Story 1.7 : Configuration Nuxt Routing et Transitions de page + +**As a** visiteur, +**I want** des transitions fluides entre les pages sans rechargement visible, +**so that** l'expérience est immersive comme une application native. + +**Acceptance Criteria :** +1. Routing fichier-based Nuxt avec structure `pages/` définie +2. `pageTransition` configuré dans `nuxt.config.ts` (fade + slide) +3. CSS transitions avec classes `page-enter-active`, `page-leave-active` +4. Navigation via `` pour hydration SPA (pas de rechargement) +5. Middleware de navigation pour tracking progression visiteur +6. `scrollBehavior` personnalisé (smooth, retour position sauvegardée) +7. Respect de `prefers-reduced-motion` via media query CSS +8. Fallback gracieux si JS désactivé (SSR HTML complet) + +#### Story 1.8 : Landing page - Double entrée + +**As a** visiteur, +**I want** choisir entre explorer l'aventure ou aller à l'essentiel, +**so that** mon temps est respecté. + +**Acceptance Criteria :** +1. Landing page avec deux CTA distincts +2. Bouton "Partir à l'aventure" → intro narrative (placeholder) +3. Bouton "Je n'ai pas le temps..." → roadmap express +4. Animation d'entrée subtile +5. Texte d'accroche intrigant bilingue +6. Design responsive + +#### Story 1.9 : Mode Pressé - Roadmap express + +**As a** visiteur pressé, +**I want** une vue condensée de toutes les sections, +**so that** je trouve rapidement ce que je cherche. + +**Acceptance Criteria :** +1. Page roadmap avec liens directs vers chaque section +2. Affichage en grille avec icônes et descriptions +3. Indication visuelle "Partie sauvée" si progression existante +4. Message humoristique sympathique +5. Lien pour "changer d'avis" et partir à l'aventure +6. Fonctionnel en FR et EN + +### Epic 2 : Contenu Interactif + +**Objectif** : Enrichir le site avec les contenus principaux de manière interactive : pages projets avec détails, compétences cliquables menant aux projets associés, témoignages présentés comme des dialogues de PNJ style Zelda, et une timeline narrative du parcours professionnel. + +#### Story 2.1 : Page Projets - Galerie + +**As a** visiteur, +**I want** voir la liste des projets réalisés, +**so that** je peux évaluer les compétences du développeur. + +**Acceptance Criteria :** +1. Page `/projets` (FR) et `/en/projects` (EN) fonctionnelle +2. Affichage en grille responsive des projets (cards) +3. Chaque card affiche : image, titre, description courte +4. Projets triés par date avec option "featured" en tête +5. Animation d'entrée progressive des cards +6. Hover effect révélant un CTA "Découvrir" +7. Données chargées depuis la table `projects` + +#### Story 2.2 : Page Projet - Détail + +**As a** visiteur, +**I want** voir les détails d'un projet spécifique, +**so that** je comprends le travail réalisé et les technologies utilisées. + +**Acceptance Criteria :** +1. Page `/projets/{slug}` dynamique avec routing +2. Affichage : titre, description complète, image(s), date +3. Liste des compétences utilisées avec niveaux +4. Liens externes : URL du projet, repository GitHub +5. Navigation "Projet précédent / suivant" +6. Bouton retour vers la galerie +7. Meta tags SEO dynamiques + +#### Story 2.3 : Page Compétences - Affichage par catégories + +**As a** visiteur, +**I want** voir les compétences du développeur organisées par catégorie, +**so that** je comprends son profil technique. + +**Acceptance Criteria :** +1. Page `/competences` (FR) et `/en/skills` (EN) fonctionnelle +2. Compétences groupées par catégorie (Frontend, Backend, Tools, Soft skills) +3. Chaque compétence affiche : icône, nom, niveau actuel +4. Design en grille ou liste selon la catégorie +5. Animation d'entrée des éléments +6. Données chargées depuis la table `skills` + +#### Story 2.4 : Compétences cliquables → Projets liés + +**As a** visiteur, +**I want** cliquer sur une compétence pour voir les projets qui l'utilisent, +**so that** je peux voir des preuves concrètes. + +**Acceptance Criteria :** +1. Chaque compétence est cliquable +2. Au clic, affichage d'un panneau/modal avec les projets liés +3. Pour chaque projet lié : titre, description courte, lien vers le détail +4. Indication du niveau avant/après chaque projet +5. Animation d'ouverture/fermeture fluide +6. Fermeture par clic extérieur ou bouton close +7. Fonctionne au clavier (accessibilité) + +#### Story 2.5 : Page Témoignages - Structure de base + +**As a** visiteur, +**I want** voir les témoignages des personnes ayant travaillé avec le développeur, +**so that** j'ai une validation sociale de ses compétences. + +**Acceptance Criteria :** +1. Page `/temoignages` (FR) et `/en/testimonials` (EN) fonctionnelle +2. Liste des témoignages depuis la table `testimonials` +3. Chaque témoignage : nom, rôle, entreprise, avatar, texte +4. Design préparé pour le composant dialogue PNJ +5. Lien vers le projet associé si pertinent +6. Ordre d'affichage configurable + +#### Story 2.6 : Composant Dialogue PNJ - Style Zelda + +**As a** visiteur, +**I want** lire les témoignages comme des dialogues de personnages, +**so that** l'expérience est immersive et mémorable. + +**Acceptance Criteria :** +1. Composant réutilisable "DialoguePNJ" avec avatar et bulle +2. Avatar stylisé à gauche, bulle de texte à droite +3. Effet typewriter sur le texte (lettre par lettre) +4. Clic pour accélérer/passer le texte complet +5. Personnalités visuelles selon le champ `personality` +6. Son optionnel "blip" désactivable +7. Respect de `prefers-reduced-motion` + +#### Story 2.7 : Carousel de témoignages avec dialogues + +**As a** visiteur, +**I want** naviguer entre les différents témoignages, +**so that** je peux tous les consulter. + +**Acceptance Criteria :** +1. Navigation entre témoignages (précédent/suivant) +2. Transition animée entre les PNJ +3. Indicateur du témoignage actuel +4. Auto-play optionnel avec pause au hover +5. Navigation au clavier (flèches) +6. Mémoire du témoignage consulté + +#### Story 2.8 : Page Parcours - Timeline narrative + +**As a** visiteur, +**I want** découvrir le parcours professionnel du développeur, +**so that** je comprends son évolution et son expérience. + +**Acceptance Criteria :** +1. Page `/parcours` (FR) et `/en/journey` (EN) fonctionnelle +2. Timeline verticale avec étapes chronologiques +3. Chaque étape : date, titre, description narrative +4. Alternance gauche/droite sur desktop, linéaire sur mobile +5. Animation d'apparition au scroll +6. Icônes ou images pour les étapes clés +7. Contenu bilingue + +### Epic 3 : Gamification & Navigation + +**Objectif** : Implémenter les éléments de gamification et la navigation alternative : narrateur-guide accompagnant le visiteur, barre de progression globale, sauvegarde de la progression, arbre de compétences interactif (vis.js), et carte interactive pour la navigation (Konva.js). + +#### Story 3.1 : Table narrator_texts et système narrateur + +**As a** développeur, +**I want** un système de gestion des textes du narrateur, +**so that** le narrateur peut afficher des messages contextuels. + +**Acceptance Criteria :** +1. Table `narrator_texts` créée (id, context, text_key, variant) +2. Contextes définis : intro, transition_projects, transition_skills, hint, encouragement +3. Support de variantes (sélection aléatoire) +4. Helper PHP `getNarratorText($context, $lang)` +5. Textes de base insérés en FR et EN +6. Migration SQL ajoutée + +#### Story 3.2 : Composant Narrateur UI + +**As a** visiteur, +**I want** voir un narrateur qui me guide à travers le site, +**so that** je me sens accompagné dans mon exploration. + +**Acceptance Criteria :** +1. Composant UI narrateur fixe (coin bas) +2. Avatar/icône du narrateur identifiable +3. Bulle de texte avec message contextuel +4. Effet typewriter similaire aux dialogues PNJ +5. Apparition/disparition animée non intrusive +6. Bouton pour fermer/minimiser +7. Ne bloque pas la navigation + +#### Story 3.3 : Textes narrateur contextuels + +**As a** visiteur, +**I want** que le narrateur réagisse à mes actions, +**so that** l'expérience est personnalisée. + +**Acceptance Criteria :** +1. Message d'accueil à l'arrivée (mode aventure) +2. Messages de transition entre sections +3. Encouragements lors de la progression (25%, 50%, 75%) +4. Indices si visiteur semble perdu +5. Message spécial première visite vs retour +6. Intégration avec hooks de navigation Nuxt (middleware) + +#### Story 3.4 : Barre de progression globale + +**As a** visiteur, +**I want** voir ma progression dans l'exploration du site, +**so that** je sais combien il me reste à découvrir. + +**Acceptance Criteria :** +1. Barre de progression discrète dans le header +2. Pourcentage calculé selon sections visitées +3. Sections trackées : Projets, Compétences, Témoignages, Parcours +4. Animation fluide lors de la mise à jour +5. Tooltip indiquant sections visitées/restantes +6. Design XP bar style RPG + +#### Story 3.5 : Store Pinia Progression avec persistance LocalStorage + +**As a** visiteur, +**I want** que ma progression soit sauvegardée, +**so that** je peux reprendre mon exploration plus tard. + +**Acceptance Criteria :** +1. Store Pinia `useProgressionStore` avec état réactif +2. Données : sections visitées (Set), choix narratifs (Array), easter eggs (Array) +3. Getters : pourcentage completion, sections restantes +4. Plugin `pinia-plugin-persistedstate` pour sync LocalStorage automatique +5. Session ID unique généré au premier accès +6. Détection progression existante → message "Bienvenue à nouveau" +7. Action `$reset()` pour réinitialiser la progression + +#### Story 3.6 : Table user_progress (sauvegarde cloud optionnelle) + +**As a** visiteur, +**I want** optionnellement sauvegarder ma progression en ligne, +**so that** je peux la retrouver sur un autre appareil. + +**Acceptance Criteria :** +1. Table `user_progress` créée +2. Formulaire "Sauvegarder ma progression" (email) +3. Endpoint API POST pour sauvegarder +4. Endpoint API GET pour récupérer (lien magique) +5. Validation email basique +6. RGPD : consentement, possibilité suppression + +#### Story 3.7 : Arbre de compétences interactif (vis.js) + +**As a** visiteur, +**I want** voir mes compétences sous forme d'arbre interactif, +**so that** je visualise les connexions et la progression. + +**Acceptance Criteria :** +1. Intégration vis.js Network sur page compétences +2. Nœuds représentant compétences avec icônes +3. Liens entre compétences liées +4. Taille/couleur des nœuds selon le niveau +5. Clic sur nœud → projets liés +6. Zoom et pan pour naviguer +7. Layout esthétique + +#### Story 3.8 : Carte interactive - Design Konva.js + +**As a** visiteur, +**I want** voir une carte du "monde" du portfolio, +**so that** je comprends la structure et ma position. + +**Acceptance Criteria :** +1. Canvas Konva.js dans page/modal dédiée +2. Design de carte stylisé (îles, régions, chemins) +3. Zones : Projets, Compétences, Parcours, Témoignages, Contact +4. Indicateurs visuels zones visitées +5. Position actuelle marquée +6. Style visuel RPG cohérent +7. Assets graphiques SVG/PNG + +#### Story 3.9 : Carte interactive - Navigation + +**As a** visiteur, +**I want** naviguer vers les sections en cliquant sur la carte, +**so that** j'explore librement. + +**Acceptance Criteria :** +1. Zones cliquables sur la carte +2. Clic → navigation vers section +3. Animation de "voyage" optionnelle +4. Hover → nom et statut de la zone +5. Bouton ouvrir/fermer carte depuis toute page +6. Navigation via `` avec transition intégrée + +#### Story 3.10 : Minimap mobile + +**As a** visiteur mobile, +**I want** une version simplifiée de la carte, +**so that** je peux naviguer sur petit écran. + +**Acceptance Criteria :** +1. Minimap compacte sur mobile +2. Mode "liste visuelle" ou carte schématique +3. Indicateurs de progression visibles +4. Touch-friendly +5. Accessible via bouton flottant +6. Performance optimisée (pas Konva lourd) + +### Epic 4 : Expérience Complète & Finalisation + +**Objectif** : Finaliser l'expérience gamifiée avec les éléments avancés : chemins narratifs multiples, challenge/puzzle final, easter eggs, et célébration de fin avec le formulaire de contact comme récompense narrative. + +#### Story 4.1 : Intro narrative - Mode Aventure + +**As a** visiteur aventurier, +**I want** une introduction narrative captivante, +**so that** je suis immergé dans l'expérience dès le début. + +**Acceptance Criteria :** +1. Page/séquence d'intro après choix "Partir à l'aventure" +2. Présentation du "héros mystérieux" (le développeur) +3. Texte narratif avec effet typewriter +4. Ambiance visuelle immersive +5. Bouton "Continuer" pour avancer +6. Transition fluide vers le premier choix +7. Contenu bilingue FR/EN + +#### Story 4.2 : Système de choix narratifs + +**As a** visiteur, +**I want** faire des choix qui influencent mon parcours, +**so that** mon expérience est unique. + +**Acceptance Criteria :** +1. Structure de données pour les choix (table ou JSON) +2. 2-3 points de choix binaires dans le parcours +3. Chaque choix mène à un chemin différent +4. Choix stockés dans la progression LocalStorage +5. Interface de choix claire (2 options distinctes) +6. Pas de "mauvais" choix - tous mènent au contact + +#### Story 4.3 : Chemins narratifs différenciés + +**As a** visiteur, +**I want** que mes choix aient un impact visible, +**so that** je sens que mon parcours est personnalisé. + +**Acceptance Criteria :** +1. 4-8 parcours possibles selon combinaisons +2. Ordre des sections varie selon le chemin +3. Textes du narrateur adaptés au chemin +4. Transitions contextuelles entre sections +5. Tous les chemins couvrent tout le contenu + +#### Story 4.4 : Page Challenge - Structure + +**As a** visiteur, +**I want** relever un défi avant d'accéder au contact, +**so that** l'accès au développeur est une récompense méritée. + +**Acceptance Criteria :** +1. Page `/challenge` accessible après exploration minimum +2. Introduction narrative "Une dernière épreuve..." +3. Zone de puzzle/challenge visible +4. Système d'indices (bouton "Besoin d'aide ?") +5. Blocage accès direct contact sans challenge complété + +#### Story 4.5 : Puzzle principal + +**As a** visiteur, +**I want** résoudre un puzzle intéressant mais accessible, +**so that** je me sens intelligent sans être frustré. + +**Acceptance Criteria :** +1. Puzzle logique/code simple (réordonner, compléter, décoder) +2. Difficulté calibrée : 1-3 minutes +3. Validation avec feedback clair +4. Animation de succès +5. 3 niveaux d'indices progressifs +6. Option "Passer" après 3 indices +7. Thématique développement/code + +#### Story 4.6 : Page Contact - Célébration finale + +**As a** visiteur ayant complété le parcours, +**I want** une conclusion mémorable et satisfaisante, +**so that** je me souviens de cette expérience. + +**Acceptance Criteria :** +1. Page `/contact` accessible après le challenge +2. Animation célébration "Tu m'as trouvé !" (confettis) +3. Message de félicitations avec stats du parcours +4. Formulaire : nom, email, message +5. Validation côté client et serveur +6. Envoi email via PHPMailer + +#### Story 4.7 : Table easter_eggs et système + +**As a** développeur, +**I want** un système pour gérer les easter eggs, +**so that** je peux ajouter des surprises cachées. + +**Acceptance Criteria :** +1. Table `easter_eggs` (id, slug, location, trigger_type, reward_type, reward_key) +2. Trigger types : click, hover, konami, scroll, sequence +3. Reward types : snippet, anecdote, image, badge +4. Helper `checkEasterEgg($slug)` +5. Stockage easter eggs trouvés dans progression +6. 5-10 easter eggs définis + +#### Story 4.8 : Easter eggs - Implémentation UI + +**As a** visiteur curieux, +**I want** découvrir des surprises cachées dans le site, +**so that** l'exploration est récompensée. + +**Acceptance Criteria :** +1. Easter eggs placés sur différentes pages +2. Déclencheurs variés selon le type +3. Animation de découverte (popup, effet visuel) +4. Affichage de la récompense +5. Notification "Easter egg trouvé ! (X/Y)" +6. Bouton fermer pour continuer + +#### Story 4.9 : Collection d'easter eggs + +**As a** visiteur, +**I want** voir ma collection d'easter eggs trouvés, +**so that** je sais ce qu'il me reste à découvrir. + +**Acceptance Criteria :** +1. Section "Collection" accessible +2. Grille avec easter eggs trouvés et silhouettes mystère +3. Détails visibles pour les découverts +4. Compteur X/Y trouvés +5. Badge spéciale si 100% trouvés + +#### Story 4.10 : Polissage et optimisations finales + +**As a** visiteur, +**I want** une expérience fluide et sans bugs, +**so that** je profite pleinement du site. + +**Acceptance Criteria :** +1. Audit performance (Lighthouse > 90) +2. Test de tous les parcours narratifs +3. Vérification accessibilité WCAG AA +4. Test responsive sur devices réels +5. Corrections bugs identifiés +6. Optimisation assets +7. Génération sitemap.xml et robots.txt + +## 7. Checklist Results Report + +### Executive Summary + +| Critère | Évaluation | +|---------|------------| +| **Complétude PRD** | 87% | +| **Scope MVP** | Approprié | +| **Prêt pour Architecture** | ✅ READY | + +### Category Analysis + +| Category | Status | +|----------|--------| +| 1. Problem Definition & Context | ✅ PASS | +| 2. MVP Scope Definition | ✅ PASS | +| 3. User Experience Requirements | ✅ PASS | +| 4. Functional Requirements | ✅ PASS | +| 5. Non-Functional Requirements | ✅ PASS | +| 6. Epic & Story Structure | ✅ PASS | +| 7. Technical Guidance | ✅ PASS | +| 8. Cross-Functional Requirements | ✅ PASS | +| 9. Clarity & Communication | ✅ PASS | + +### Notes + +- Story 3.6 (sauvegarde cloud) marquée optionnelle - à confirmer post-MVP +- Assets graphiques pour la carte interactive (Story 3.8) nécessitent design +- Puzzle principal (Story 4.5) : type à finaliser avec l'équipe + +## 8. Next Steps + +### 8.1 UX Expert Prompt + +``` +Je suis l'UX Expert. J'ai besoin de créer les wireframes et le design system pour le projet "Portfolio Gamifié". + +Contexte : Portfolio web transformé en aventure narrative immersive avec : +- Double entrée (Aventure vs Mode Pressé) +- Navigation par carte interactive +- Dialogues PNJ style Zelda pour les témoignages +- Arbre de compétences interactif +- Système de progression gamifié +- Challenge/puzzle avant accès au contact + +Documents à consulter : +- PRD : docs/prd-gamification.md +- Brainstorming : docs/brainstorming-gamification-2026-01-26.md + +Livrables attendus : +1. Wireframes des écrans principaux (Landing, Carte, Projets, Skills, Témoignages, Challenge, Contact) +2. Design system (couleurs RPG, typographie, composants) +3. Spécifications du composant Dialogue PNJ +4. Maquettes de la carte interactive +5. Guidelines responsive (desktop → mobile) + +Contraintes : WCAG AA, prefers-reduced-motion, thème sombre avec accents colorés. +``` + +### 8.2 Architect Prompt + +``` +Je suis l'Architecte. J'ai besoin de créer l'architecture technique pour le projet "Portfolio Gamifié". + +Contexte : Nouveau projet avec Nuxt 3 SSR et backend Laravel API. + +Stack validée : +- Frontend : Nuxt 3 (SSR) / Vue 3 / Pinia / @nuxtjs/i18n / TailwindCSS +- Backend : Laravel 11 / Eloquent ORM / MariaDB +- Librairies : Konva.js (vue-konva, client-only) / vis-network (client-only) +- Build : Nitro (Nuxt) + Composer (Laravel) +- Tests : Pest/PHPUnit (Laravel) + Vitest + @nuxt/test-utils + Playwright (E2E) + +Documents à consulter : +- PRD : docs/prd-gamification.md +- Brainstorming (schéma DB détaillé) : docs/brainstorming-gamification-2026-01-26.md + +Livrables attendus : +1. Architecture document avec structure monorepo (frontend Nuxt + api Laravel) +2. Schéma de base de données final (migrations Laravel) +3. Design API REST endpoints avec Laravel Resources +4. Configuration nuxt.config.ts (SSR, i18n, transitions, modules) +5. Structure des stores Pinia avec persistedstate (SSR-compatible) +6. Composables réutilisables (useTypewriter, useNarrator, useEasterEggs) +7. Stratégie composants client-only (*.client.vue) pour Konva/vis.js +8. Configuration @nuxtjs/i18n (stratégie prefix_except_default, SEO hreflang) +9. Configuration Laravel : CORS, Form Requests, API Resources, rate limiting +10. Stratégie déploiement (Node.js pour Nuxt SSR + PHP pour Laravel API) +11. Coding standards et conventions (PSR-12 PHP, ESLint/Prettier Vue) + +Contraintes : Bundle JS < 170kb gzip, LCP < 2.5s, SSR pour SEO, navigation SPA fluide. +``` diff --git a/docs/resources/interface/Accueil Agence CTA - PC.pdf b/docs/resources/interface/Accueil Agence CTA - PC.pdf new file mode 100644 index 0000000..d7da37b Binary files /dev/null and b/docs/resources/interface/Accueil Agence CTA - PC.pdf differ diff --git a/docs/resources/interface/Accueil Hero - PC.pdf b/docs/resources/interface/Accueil Hero - PC.pdf new file mode 100644 index 0000000..a92ff38 --- /dev/null +++ b/docs/resources/interface/Accueil Hero - PC.pdf @@ -0,0 +1,9563 @@ +%PDF-1.7 +% +1 0 obj + << /Length 2 0 R >> +stream +0.655000 0 0.032000 -0.008000 0.623000 0.586000 d1 + +endstream +endobj + +2 0 obj + 51 +endobj + +3 0 obj + << /Length 4 0 R >> +stream +0.631000 0 0.032000 -0.008000 0.599000 0.791000 d1 + +endstream +endobj + +4 0 obj + 51 +endobj + +5 0 obj + << /Length 6 0 R >> +stream +0.387000 0 0.008000 0.000000 0.418000 0.758000 d1 + +endstream +endobj + +6 0 obj + 50 +endobj + +7 0 obj + << /Length 8 0 R >> +stream +0.631000 0 0.032000 -0.008000 0.599000 0.586000 d1 + +endstream +endobj + +8 0 obj + 51 +endobj + +9 0 obj + << /Length 10 0 R >> +stream +0.269000 0 0.099000 0.000000 0.170000 0.841000 d1 + +endstream +endobj + +10 0 obj + 50 +endobj + +11 0 obj + << /Length 12 0 R >> +stream +0.655000 0 0.032000 -0.008000 0.623000 0.586000 d1 + +endstream +endobj + +12 0 obj + 51 +endobj + +13 0 obj + << /Length 14 0 R >> +stream +0.691000 0 0.072000 0.000000 0.622000 0.618000 d1 + +endstream +endobj + +14 0 obj + 50 +endobj + +15 0 obj + << /Length 16 0 R >> +stream +0.604000 0 0.046000 -0.005000 0.558000 0.782000 d1 + +endstream +endobj + +16 0 obj + 51 +endobj + +17 0 obj + << /Length 18 0 R >> +stream +0.879000 0 0.008000 0.000000 0.871000 0.533000 d1 + +endstream +endobj + +18 0 obj + 50 +endobj + +19 0 obj + << /Length 20 0 R >> +stream +0.690000 0 0.072000 -0.194000 0.658000 0.812000 d1 + +endstream +endobj + +20 0 obj + 51 +endobj + +21 0 obj + << /Length 22 0 R >> +stream +0.591000 0 0.032000 -0.008000 0.573000 0.586000 d1 + +endstream +endobj + +22 0 obj + 51 +endobj + +23 0 obj + << /Length 24 0 R >> +stream +0.283000 0 0.000000 0.000000 0.283000 1.000000 d1 + +endstream +endobj + +24 0 obj + 50 +endobj + +25 0 obj + << /Length 26 0 R >> +stream +0.631000 0 0.032000 -0.008000 0.599000 0.586000 d1 + +endstream +endobj + +26 0 obj + 51 +endobj + +27 0 obj + << /Length 28 0 R >> +stream +0.718000 0 0.114000 0.000000 0.662000 0.814000 d1 + +endstream +endobj + +28 0 obj + 50 +endobj + +29 0 obj + << /Length 30 0 R >> +stream +0.600000 0 0.065000 -0.188000 0.562000 0.752000 d1 + +endstream +endobj + +30 0 obj + 51 +endobj + +31 0 obj + << /Length 32 0 R >> +stream +0.700000 0 0.032000 -0.202000 0.627000 0.780000 d1 + +endstream +endobj + +32 0 obj + 51 +endobj + +33 0 obj + << /Length 34 0 R >> +stream +0.600000 0 0.038000 -0.010000 0.535000 0.761000 d1 + +endstream +endobj + +34 0 obj + 51 +endobj + +35 0 obj + << /Length 36 0 R >> +stream +0.547000 0 0.043000 -0.010000 0.485000 0.552000 d1 + +endstream +endobj + +36 0 obj + 51 +endobj + +37 0 obj + << /Length 38 0 R >> +stream +0.609000 0 0.017000 0.000000 0.526000 0.764000 d1 + +endstream +endobj + +38 0 obj + 50 +endobj + +39 0 obj + << /Length 40 0 R >> +stream +0.392000 0 0.065000 -0.008000 0.391000 0.574000 d1 + +endstream +endobj + +40 0 obj + 51 +endobj + +41 0 obj + << /Length 42 0 R >> +stream +0.431000 0 0.072000 0.000000 0.406000 0.618000 d1 + +endstream +endobj + +42 0 obj + 50 +endobj + +43 0 obj + << /Length 44 0 R >> +stream +0.563000 0 0.046000 -0.005000 0.523000 0.581000 d1 + +endstream +endobj + +44 0 obj + 51 +endobj + +45 0 obj + << /Length 46 0 R >> +stream +0.690000 0 0.072000 -0.008000 0.658000 0.822000 d1 + +endstream +endobj + +46 0 obj + 51 +endobj + +47 0 obj + << /Length 48 0 R >> +stream +0.392000 0 0.065000 -0.008000 0.391000 0.574000 d1 + +endstream +endobj + +48 0 obj + 51 +endobj + +49 0 obj + << /Length 50 0 R >> +stream +0.690000 0 0.072000 -0.194000 0.658000 0.812000 d1 + +endstream +endobj + +50 0 obj + 51 +endobj + +51 0 obj + << /Length 52 0 R >> +stream +0.678000 0 0.099000 -0.194000 0.632000 0.823000 d1 + +endstream +endobj + +52 0 obj + 51 +endobj + +53 0 obj + << /Length 54 0 R >> +stream +0.631000 0 0.032000 -0.008000 0.599000 0.586000 d1 + +endstream +endobj + +54 0 obj + 51 +endobj + +55 0 obj + << /Length 56 0 R >> +stream +1.049000 0 0.072000 0.000000 0.981000 0.618000 d1 + +endstream +endobj + +56 0 obj + 50 +endobj + +57 0 obj + << /Length 58 0 R >> +stream +0.685000 0 0.046000 -0.199000 0.586000 0.775000 d1 + +endstream +endobj + +58 0 obj + 51 +endobj + +59 0 obj + << /Length 60 0 R >> +stream +0.435000 0 0.008000 -0.008000 0.419000 0.673000 d1 + +endstream +endobj + +60 0 obj + 51 +endobj + +61 0 obj + << /Length 62 0 R >> +stream +0.691000 0 0.072000 0.000000 0.622000 0.618000 d1 + +endstream +endobj + +62 0 obj + 50 +endobj + +63 0 obj + << /Length 64 0 R >> +stream +0.937000 0 0.001000 0.000000 0.936000 0.539000 d1 + +endstream +endobj + +64 0 obj + 50 +endobj + +65 0 obj + << /Length 66 0 R >> +stream +0.617000 0 0.037000 -0.008000 0.548000 0.591000 d1 + +endstream +endobj + +66 0 obj + 51 +endobj + +67 0 obj + << /Length 68 0 R >> +stream +0.631000 0 0.032000 -0.008000 0.599000 0.791000 d1 + +endstream +endobj + +68 0 obj + 51 +endobj + +69 0 obj + << /Length 70 0 R >> +stream +0.542000 0 0.038000 -0.010000 0.508000 0.547000 d1 + +endstream +endobj + +70 0 obj + 51 +endobj + +71 0 obj + << /Length 72 0 R >> +stream +0.672000 0 0.094000 -0.005000 0.573000 0.624000 d1 + +endstream +endobj + +72 0 obj + 51 +endobj + +73 0 obj + << /Length 74 0 R >> +stream +0.579000 0 0.062000 -0.010000 0.514000 0.569000 d1 + +endstream +endobj + +74 0 obj + 51 +endobj + +75 0 obj + << /Length 76 0 R >> +stream +0.328000 0 0.083000 0.000000 0.245000 0.783000 d1 + +endstream +endobj + +76 0 obj + 50 +endobj + +77 0 obj + << /Length 78 0 R >> +stream +0.826000 0 0.083000 0.000000 0.787000 0.783000 d1 + +endstream +endobj + +78 0 obj + 50 +endobj + +79 0 obj + << /Length 80 0 R >> +stream +0.826000 0 0.083000 0.000000 0.787000 0.783000 d1 + +endstream +endobj + +80 0 obj + 50 +endobj + +81 0 obj + << /Length 82 0 R >> +stream +0.283000 0 0.000000 0.000000 0.283000 1.000000 d1 + +endstream +endobj + +82 0 obj + 50 +endobj + +83 0 obj + << /Length 84 0 R >> +stream +0.301000 0 0.053000 0.000000 0.247000 0.840000 d1 + +endstream +endobj + +84 0 obj + 50 +endobj + +85 0 obj + << /Length 86 0 R >> +stream +0.691000 0 0.072000 0.000000 0.622000 0.814000 d1 + +endstream +endobj + +86 0 obj + 50 +endobj + +87 0 obj + << /Length 88 0 R >> +stream +0.604000 0 0.046000 -0.005000 0.558000 0.782000 d1 + +endstream +endobj + +88 0 obj + 51 +endobj + +89 0 obj + << /Length 90 0 R >> +stream +0.531000 0 0.020000 -0.008000 0.507000 0.574000 d1 + +endstream +endobj + +90 0 obj + 51 +endobj + +91 0 obj + << /Length 92 0 R >> +stream +0.598000 0 -0.008000 0.000000 0.606000 0.530000 d1 + +endstream +endobj + +92 0 obj + 51 +endobj + +93 0 obj + << /Length 94 0 R >> +stream +0.255000 0 0.031000 -0.008000 0.272000 0.760000 d1 + +endstream +endobj + +94 0 obj + 51 +endobj + +95 0 obj + << /Length 96 0 R >> +stream +0.269000 0 0.099000 0.000000 0.170000 0.841000 d1 + +endstream +endobj + +96 0 obj + 50 +endobj + +97 0 obj + << /Length 98 0 R >> +stream +0.255000 0 0.053000 -0.007000 0.201000 0.781000 d1 + +endstream +endobj + +98 0 obj + 51 +endobj + +99 0 obj + << /Length 100 0 R >> +stream +0.691000 0 0.072000 0.000000 0.622000 0.618000 d1 + +endstream +endobj + +100 0 obj + 50 +endobj + +101 0 obj + << /Length 102 0 R >> +stream +0.384000 0 -0.007000 -0.010000 0.390000 0.646000 d1 + +endstream +endobj + +102 0 obj + 52 +endobj + +103 0 obj + << /Length 104 0 R >> +stream +0.384000 0 -0.007000 -0.010000 0.390000 0.646000 d1 + +endstream +endobj + +104 0 obj + 52 +endobj + +105 0 obj + << /Length 106 0 R >> +stream +0.600000 0 0.065000 -0.010000 0.562000 0.788000 d1 + +endstream +endobj + +106 0 obj + 51 +endobj + +107 0 obj + << /Length 108 0 R >> +stream +0.700000 0 0.032000 -0.202000 0.627000 0.780000 d1 + +endstream +endobj + +108 0 obj + 51 +endobj + +109 0 obj + << /Length 110 0 R >> +stream +0.431000 0 0.072000 0.000000 0.406000 0.618000 d1 + +endstream +endobj + +110 0 obj + 50 +endobj + +111 0 obj + << /Length 112 0 R >> +stream +0.547000 0 0.043000 -0.010000 0.485000 0.552000 d1 + +endstream +endobj + +112 0 obj + 51 +endobj + +113 0 obj + << /Length 114 0 R >> +stream +0.472000 0 0.038000 -0.010000 0.461000 0.547000 d1 + +endstream +endobj + +114 0 obj + 51 +endobj + +115 0 obj + << /Length 116 0 R >> +stream +0.617000 0 0.037000 -0.008000 0.548000 0.591000 d1 + +endstream +endobj + +116 0 obj + 51 +endobj + +117 0 obj + << /Length 118 0 R >> +stream +0.687000 0 0.069000 -0.008000 0.614000 0.615000 d1 + +endstream +endobj + +118 0 obj + 51 +endobj + +119 0 obj + << /Length 120 0 R >> +stream +0.676000 0 0.099000 0.000000 0.583000 0.629000 d1 + +endstream +endobj + +120 0 obj + 50 +endobj + +121 0 obj + << /Length 122 0 R >> +stream +0.319000 0 0.065000 -0.010000 0.318000 0.788000 d1 + +endstream +endobj + +122 0 obj + 51 +endobj + +123 0 obj + << /Length 124 0 R >> +stream +0.488000 0 0.038000 -0.010000 0.453000 0.547000 d1 + +endstream +endobj + +124 0 obj + 51 +endobj + +125 0 obj + << /Length 126 0 R >> +stream +0.600000 0 0.038000 -0.188000 0.535000 0.725000 d1 + +endstream +endobj + +126 0 obj + 51 +endobj + +127 0 obj + << /Length 128 0 R >> +stream +0.255000 0 0.053000 -0.007000 0.201000 0.781000 d1 + +endstream +endobj + +128 0 obj + 51 +endobj + +129 0 obj + << /Length 130 0 R >> +stream +0.271000 0 0.000000 0.000000 0.271000 1.000000 d1 + +endstream +endobj + +130 0 obj + 50 +endobj + +131 0 obj + << /Length 132 0 R >> +stream +0.542000 0 0.037000 -0.010000 0.514000 0.546000 d1 + +endstream +endobj + +132 0 obj + 51 +endobj + +133 0 obj + << /Length 134 0 R >> +stream +0.604000 0 0.038000 -0.190000 0.539000 0.727000 d1 + +endstream +endobj + +134 0 obj + 51 +endobj + +135 0 obj + << /Length 136 0 R >> +stream +0.562000 0 0.077000 0.000000 0.551000 0.785000 d1 + +endstream +endobj + +136 0 obj + 50 +endobj + +137 0 obj + << /Length 138 0 R >> +stream +0.542000 0 0.038000 -0.010000 0.508000 0.547000 d1 + +endstream +endobj + +138 0 obj + 51 +endobj + +139 0 obj + << /Length 140 0 R >> +stream +0.259000 0 -0.056000 -0.191000 0.205000 0.856000 d1 + +endstream +endobj + +140 0 obj + 52 +endobj + +141 0 obj + << /Length 142 0 R >> +stream +0.600000 0 0.065000 -0.010000 0.562000 0.788000 d1 + +endstream +endobj + +142 0 obj + 51 +endobj + +143 0 obj + << /Length 144 0 R >> +stream +0.542000 0 0.038000 -0.010000 0.508000 0.547000 d1 + +endstream +endobj + +144 0 obj + 51 +endobj + +145 0 obj + << /Length 146 0 R >> +stream +0.576000 0 0.038000 -0.010000 0.538000 0.547000 d1 + +endstream +endobj + +146 0 obj + 51 +endobj + +147 0 obj + << /Length 148 0 R >> +stream +0.488000 0 0.038000 -0.010000 0.453000 0.547000 d1 + +endstream +endobj + +148 0 obj + 51 +endobj + +149 0 obj + << /Length 150 0 R >> +stream +0.546000 0 0.047000 -0.005000 0.502000 0.549000 d1 + +endstream +endobj + +150 0 obj + 51 +endobj + +151 0 obj + << /Length 152 0 R >> +stream +0.877000 0 0.067000 -0.008000 0.813000 0.574000 d1 + +endstream +endobj + +152 0 obj + 51 +endobj + +153 0 obj + << /Length 154 0 R >> +stream +0.384000 0 0.024000 -0.010000 0.409000 0.677000 d1 + +endstream +endobj + +154 0 obj + 51 +endobj + +155 0 obj + << /Length 156 0 R >> +stream +1.061000 0 0.099000 0.000000 0.967000 0.629000 d1 + +endstream +endobj + +156 0 obj + 50 +endobj + +157 0 obj + << /Length 158 0 R >> +stream +0.579000 0 0.062000 -0.010000 0.514000 0.569000 d1 + +endstream +endobj + +158 0 obj + 51 +endobj + +159 0 obj + << /Length 160 0 R >> +stream +0.542000 0 0.001000 0.000000 0.541000 0.526000 d1 + +endstream +endobj + +160 0 obj + 50 +endobj + +161 0 obj + << /Length 162 0 R >> +stream +0.488000 0 0.023000 -0.010000 0.460000 0.532000 d1 + +endstream +endobj + +162 0 obj + 51 +endobj + +163 0 obj + << /Length 164 0 R >> +stream +0.339000 0 0.017000 0.000000 0.375000 0.764000 d1 + +endstream +endobj + +164 0 obj + 50 +endobj + +165 0 obj + << /Length 166 0 R >> +stream +0.585000 0 0.065000 -0.008000 0.523000 0.572000 d1 + +endstream +endobj + +166 0 obj + 51 +endobj + +167 0 obj + << /Length 168 0 R >> +stream +0.301000 0 0.072000 0.000000 0.228000 0.814000 d1 + +endstream +endobj + +168 0 obj + 50 +endobj + +169 0 obj + << /Length 170 0 R >> +stream +0.590000 0 0.055000 -0.005000 0.496000 0.590000 d1 + +endstream +endobj + +170 0 obj + 51 +endobj + +171 0 obj + << /Length 172 0 R >> +stream +0.690000 0 0.032000 -0.194000 0.618000 0.772000 d1 + +endstream +endobj + +172 0 obj + 51 +endobj + +173 0 obj + << /Length 174 0 R >> +stream +0.717000 0 0.002000 0.000000 0.715000 0.702000 d1 + +endstream +endobj + +174 0 obj + 50 +endobj + +175 0 obj + << /Length 176 0 R >> +stream +0.259000 0 -0.056000 -0.191000 0.205000 0.856000 d1 + +endstream +endobj + +176 0 obj + 52 +endobj + +177 0 obj + << /Length 178 0 R >> +stream +0.678000 0 0.046000 -0.194000 0.579000 0.770000 d1 + +endstream +endobj + +178 0 obj + 51 +endobj + +179 0 obj + << /Length 180 0 R >> +stream +0.248000 0 0.050000 0.440000 0.199000 0.320000 d1 + +endstream +endobj + +180 0 obj + 50 +endobj + +181 0 obj + << /Length 182 0 R >> +stream +0.212000 0 0.054000 -0.146000 0.159000 0.304000 d1 + +endstream +endobj + +182 0 obj + 51 +endobj + +183 0 obj + << /Length 184 0 R >> +stream +0.269000 0 0.083000 0.000000 0.187000 0.825000 d1 + +endstream +endobj + +184 0 obj + 50 +endobj + +185 0 obj + << /Length 186 0 R >> +stream +0.488000 0 0.026000 -0.005000 0.457000 0.561000 d1 + +endstream +endobj + +186 0 obj + 51 +endobj + +187 0 obj + << /Length 188 0 R >> +stream +0.248000 0 0.050000 -0.005000 0.199000 0.768000 d1 + +endstream +endobj + +188 0 obj + 51 +endobj + +189 0 obj + << /Length 190 0 R >> +stream +0.269000 0 0.083000 0.000000 0.187000 0.825000 d1 + +endstream +endobj + +190 0 obj + 50 +endobj + +191 0 obj + << /Length 192 0 R >> +stream +0.678000 0 0.046000 -0.005000 0.579000 0.793000 d1 + +endstream +endobj + +192 0 obj + 51 +endobj + +193 0 obj + << /Length 194 0 R >> +stream +0.853000 0 0.028000 -0.008000 0.825000 0.533000 d1 + +endstream +endobj + +194 0 obj + 51 +endobj + +195 0 obj + << /Length 196 0 R >> +stream +0.406000 0 0.017000 -0.005000 0.376000 0.663000 d1 + +endstream +endobj + +196 0 obj + 51 +endobj + +197 0 obj + << /Length 198 0 R >> +stream +0.627000 0 0.046000 -0.005000 0.581000 0.581000 d1 + +endstream +endobj + +198 0 obj + 51 +endobj + +199 0 obj + << /Length 200 0 R >> +stream +0.274000 0 -0.090000 -0.199000 0.192000 0.851000 d1 + +endstream +endobj + +200 0 obj + 52 +endobj + +201 0 obj + << /Length 202 0 R >> +stream +0.406000 0 0.017000 -0.005000 0.376000 0.663000 d1 + +endstream +endobj + +202 0 obj + 51 +endobj + +203 0 obj + << /Length 204 0 R >> +stream +0.604000 0 0.046000 -0.005000 0.558000 0.581000 d1 + +endstream +endobj + +204 0 obj + 51 +endobj + +205 0 obj + << /Length 206 0 R >> +stream +0.678000 0 0.099000 -0.005000 0.632000 0.846000 d1 + +endstream +endobj + +206 0 obj + 51 +endobj + +207 0 obj + << /Length 208 0 R >> +stream +0.262000 0 0.000000 0.000000 0.262000 1.000000 d1 + +endstream +endobj + +208 0 obj + 50 +endobj + +209 0 obj + << /Length 210 0 R >> +stream +0.260000 0 0.077000 -0.005000 0.182000 0.782000 d1 + +endstream +endobj + +210 0 obj + 51 +endobj + +211 0 obj + << /Length 212 0 R >> +stream +0.401000 0 0.099000 0.000000 0.363000 0.629000 d1 + +endstream +endobj + +212 0 obj + 50 +endobj + +213 0 obj + << /Length 214 0 R >> +stream +0.676000 0 0.099000 0.000000 0.583000 0.629000 d1 + +endstream +endobj + +214 0 obj + 50 +endobj + +215 0 obj + << /Length 216 0 R >> +stream +0.401000 0 0.099000 0.000000 0.363000 0.629000 d1 + +endstream +endobj + +216 0 obj + 50 +endobj + +217 0 obj + << /Length 218 0 R >> +stream +0.488000 0 0.026000 -0.005000 0.457000 0.561000 d1 + +endstream +endobj + +218 0 obj + 51 +endobj + +219 0 obj + << /Length 220 0 R >> +stream +0.262000 0 0.000000 0.000000 0.262000 1.000000 d1 + +endstream +endobj + +220 0 obj + 50 +endobj + +221 0 obj + << /Length 222 0 R >> +stream +0.627000 0 0.046000 -0.005000 0.581000 0.581000 d1 + +endstream +endobj + +222 0 obj + 51 +endobj + +223 0 obj + << /Length 224 0 R >> +stream +0.384000 0 -0.007000 -0.010000 0.390000 0.646000 d1 + +endstream +endobj + +224 0 obj + 52 +endobj + +225 0 obj + << /Length 226 0 R >> +stream +0.698000 0 0.003000 0.000000 0.696000 0.703000 d1 + +endstream +endobj + +226 0 obj + 50 +endobj + +227 0 obj + << /Length 228 0 R >> +stream +0.604000 0 0.046000 -0.005000 0.558000 0.581000 d1 + +endstream +endobj + +228 0 obj + 51 +endobj + +229 0 obj + << /Length 230 0 R >> +stream +0.344000 0 0.051000 0.241000 0.293000 0.293000 d1 + +endstream +endobj + +230 0 obj + 50 +endobj + +231 0 obj + << /Length 232 0 R >> +stream +0.542000 0 0.038000 -0.010000 0.508000 0.547000 d1 + +endstream +endobj + +232 0 obj + 51 +endobj + +233 0 obj + << /Length 234 0 R >> +stream +0.319000 0 0.065000 -0.010000 0.318000 0.788000 d1 + +endstream +endobj + +234 0 obj + 51 +endobj + +235 0 obj + << /Length 236 0 R >> +stream +0.579000 0 0.062000 -0.010000 0.514000 0.569000 d1 + +endstream +endobj + +236 0 obj + 51 +endobj + +237 0 obj + << /Length 238 0 R >> +stream +0.472000 0 0.038000 -0.010000 0.461000 0.547000 d1 + +endstream +endobj + +238 0 obj + 51 +endobj + +239 0 obj + << /Length 240 0 R >> +stream +0.255000 0 0.053000 -0.007000 0.201000 0.781000 d1 + +endstream +endobj + +240 0 obj + 51 +endobj + +241 0 obj + << /Length 242 0 R >> +stream +0.744000 0 0.025000 -0.008000 0.722000 0.746000 d1 + +endstream +endobj + +242 0 obj + 51 +endobj + +243 0 obj + << /Length 244 0 R >> +stream +0.576000 0 0.038000 -0.010000 0.538000 0.547000 d1 + +endstream +endobj + +244 0 obj + 51 +endobj + +245 0 obj + << /Length 246 0 R >> +stream +0.652000 0 0.077000 -0.008000 0.625000 0.790000 d1 + +endstream +endobj + +246 0 obj + 51 +endobj + +247 0 obj + << /Filter /FlateDecode + /Length 248 0 R + >> +stream +xn@F<'BJh5}bTe"o;]*,}<{k˧Sfܽk?1\ocp8v&S{r ~ݼ\x8mWϓ,˦]0_dvao~߶M<~Y}MƾMwޅ˰¸a2|YLBO_٬Wo<1mAL=1ebJLCL-$ILiӬs/F̃cbZ21UbڊubxĴ3`r֞˟Ǒ?9?X,qVȟ5`|9%$ 0bSx0NkqtTkAͱO?= +endstream +endobj + +248 0 obj + 827 +endobj + +249 0 obj + [ 0.631000 0.431000 0.631000 0.700000 0.387000 0.591000 0.328000 0.691000 0.617000 0.655000 0.690000 0.937000 0.631000 0.435000 0.691000 0.690000 0.655000 0.283000 0.826000 0.631000 0.301000 1.049000 0.598000 0.687000 0.690000 0.301000 0.691000 0.431000 0.690000 0.691000 0.283000 0.826000 0.700000 0.631000 0.617000 0.531000 0.248000 0.600000 0.576000 0.488000 0.255000 0.579000 0.384000 0.271000 0.547000 0.472000 0.600000 0.585000 0.853000 0.319000 0.604000 0.600000 0.600000 0.562000 0.259000 0.392000 0.248000 0.542000 0.546000 0.542000 0.384000 0.255000 0.255000 0.600000 0.877000 0.384000 0.547000 0.542000 0.579000 0.488000 0.604000 0.609000 0.339000 1.061000 0.717000 0.678000 0.212000 0.542000 0.269000 0.604000 0.678000 0.627000 0.676000 0.274000 0.678000 0.406000 0.879000 0.678000 0.685000 0.488000 0.672000 0.718000 0.604000 0.590000 0.262000 0.563000 0.269000 0.260000 0.401000 0.676000 0.401000 0.406000 0.488000 0.262000 0.269000 0.269000 0.627000 0.698000 0.604000 0.344000 0.542000 0.319000 0.579000 0.472000 0.255000 0.744000 0.488000 0.384000 0.542000 0.259000 0.576000 0.392000 0.652000 ] +endobj + +250 0 obj + << /CharProcs << /C2 3 0 R + /C16 11 0 R + /C4 5 0 R + /C37 29 0 R + /C3 31 0 R + /C96 9 0 R + /C0 7 0 R + /C91 27 0 R + /C9 1 0 R + /C28 19 0 R + /C7 13 0 R + /C86 17 0 R + /C79 15 0 R + /C33 25 0 R + /C95 43 0 R + /C51 33 0 R + /C71 37 0 R + /C1 41 0 R + /C55 39 0 R + /C66 35 0 R + /C84 51 0 R + /C15 49 0 R + /C5 21 0 R + /C121 47 0 R + /C10 45 0 R + /C30 23 0 R + /C12 53 0 R + /C21 55 0 R + /C88 57 0 R + /C34 65 0 R + /C13 59 0 R + /C11 63 0 R + /C14 61 0 R + /C19 67 0 R + /C59 69 0 R + /C41 73 0 R + /C90 71 0 R + /C18 77 0 R + /C6 75 0 R + /C17 81 0 R + /C31 79 0 R + /C25 83 0 R + /C26 85 0 R + /C70 87 0 R + /C35 89 0 R + /C22 91 0 R + /C61 93 0 R + /C105 95 0 R + /C40 97 0 R + /C29 99 0 R + /C60 101 0 R + /C42 103 0 R + /C46 105 0 R + /C32 107 0 R + /C27 109 0 R + /C44 111 0 R + /C45 113 0 R + /C8 115 0 R + /C23 117 0 R + /C82 119 0 R + /C49 121 0 R + /C39 123 0 R + /C52 125 0 R + /C62 127 0 R + /C43 129 0 R + /C67 131 0 R + /C50 133 0 R + /C53 135 0 R + /C118 137 0 R + /C54 139 0 R + /C63 141 0 R + /C57 143 0 R + /C116 147 0 R + /C38 145 0 R + /C58 149 0 R + /C64 151 0 R + /C65 153 0 R + /C73 155 0 R + /C68 157 0 R + /C77 159 0 R + /C69 161 0 R + /C72 163 0 R + /C47 165 0 R + /C20 167 0 R + /C93 169 0 R + /C24 171 0 R + /C74 173 0 R + /C119 175 0 R + /C75 177 0 R + /C56 179 0 R + /C76 181 0 R + /C104 183 0 R + /C89 185 0 R + /C36 187 0 R + /C78 189 0 R + /C48 193 0 R + /C80 191 0 R + /C101 195 0 R + /C81 197 0 R + /C83 199 0 R + /C85 201 0 R + /C92 203 0 R + /C87 205 0 R + /C94 207 0 R + /C97 209 0 R + /C98 211 0 R + /C99 213 0 R + /C100 215 0 R + /C102 217 0 R + /C103 219 0 R + /C106 221 0 R + /C117 223 0 R + /C107 225 0 R + /C108 227 0 R + /C109 229 0 R + /C110 231 0 R + /C111 233 0 R + /C112 235 0 R + /C113 237 0 R + /C114 239 0 R + /C115 241 0 R + /C120 243 0 R + /C122 245 0 R + >> + /Encoding << /Type /Encoding + /Differences [ 0 /C0 /C1 /C2 /C3 /C4 /C5 /C6 /C7 /C8 /C9 /C10 /C11 /C12 /C13 /C14 /C15 /C16 /C17 /C18 /C19 /C20 /C21 /C22 /C23 /C24 /C25 /C26 /C27 /C28 /C29 /C30 /C31 /C32 /C33 /C34 /C35 /C36 /C37 /C38 /C39 /C40 /C41 /C42 /C43 /C44 /C45 /C46 /C47 /C48 /C49 /C50 /C51 /C52 /C53 /C54 /C55 /C56 /C57 /C58 /C59 /C60 /C61 /C62 /C63 /C64 /C65 /C66 /C67 /C68 /C69 /C70 /C71 /C72 /C73 /C74 /C75 /C76 /C77 /C78 /C79 /C80 /C81 /C82 /C83 /C84 /C85 /C86 /C87 /C88 /C89 /C90 /C91 /C92 /C93 /C94 /C95 /C96 /C97 /C98 /C99 /C100 /C101 /C102 /C103 /C104 /C105 /C106 /C107 /C108 /C109 /C110 /C111 /C112 /C113 /C114 /C115 /C116 /C117 /C118 /C119 /C120 /C121 /C122 ] + >> + /FontBBox [ 0.000000 0.000000 0.000000 0.000000 ] + /FontMatrix [ 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 ] + /Type /Font + /ToUnicode 247 0 R + /FirstChar 0 + /LastChar 122 + /Widths 249 0 R + /Resources << >> + /Subtype /Type3 + /FontDescriptor << /Type /FontDescriptor + /Flags 32 + /FontBBox [ 0.000000 0.000000 0.000000 0.000000 ] + /ItalicAngle 0 + >> + >> +endobj + +251 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +252 0 obj + 2567 +endobj + +253 0 obj + [ /ICCBased 251 0 R ] +endobj + +254 0 obj + << /Type /XObject + /Length 255 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 253 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +1.000000 0.000000 -0.000000 1.000000 1155.000000 785.000000 cm +0.000000 0.000000 0.000000 scn +0.000000 27.000000 m +0.000000 41.911690 12.088312 54.000000 27.000002 54.000000 c +158.000000 54.000000 l +172.911682 54.000000 185.000000 41.911690 185.000000 27.000000 c +185.000000 27.000000 l +185.000000 12.088310 172.911682 0.000000 158.000000 0.000000 c +27.000004 0.000000 l +12.088315 0.000000 0.000000 12.088310 0.000000 27.000000 c +0.000000 27.000000 l +h +f +n +Q + +endstream +endobj + +255 0 obj + 461 +endobj + +256 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +257 0 obj + 2567 +endobj + +258 0 obj + [ /ICCBased 256 0 R ] +endobj + +259 0 obj + << /Type /XObject + /Length 260 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 258 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +1.000000 0.000000 -0.000000 1.000000 325.000000 784.500000 cm +0.000000 0.000000 0.000000 scn +0.000000 27.500000 m +0.000000 42.687828 12.312171 55.000000 27.500002 55.000000 c +746.500000 55.000000 l +761.687805 55.000000 774.000000 42.687828 774.000000 27.500000 c +774.000000 27.500000 l +774.000000 12.312168 761.687805 0.000000 746.500000 0.000000 c +27.500013 0.000000 l +12.312183 0.000000 0.000000 12.312168 0.000000 27.500000 c +0.000000 27.500000 l +h +f +n +Q + +endstream +endobj + +260 0 obj + 460 +endobj + +261 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +262 0 obj + 2567 +endobj + +263 0 obj + [ /ICCBased 261 0 R ] +endobj + +264 0 obj + << /Type /XObject + /Length 265 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 263 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +1.000000 0.000000 -0.000000 1.000000 708.000000 354.000000 cm +0.000000 0.000000 0.000000 scn +0.000000 295.000000 m +512.000000 295.000000 l +512.000000 0.000000 l +0.000000 0.000000 l +0.000000 295.000000 l +h +f +n +Q + +endstream +endobj + +265 0 obj + 213 +endobj + +266 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +267 0 obj + 2567 +endobj + +268 0 obj + [ /ICCBased 266 0 R ] +endobj + +269 0 obj + << /Type /XObject + /Length 270 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 268 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +1.000000 0.000000 -0.000000 1.000000 100.000000 785.000000 cm +0.000000 0.000000 0.000000 scn +0.000000 27.000000 m +0.000000 41.911690 12.088312 54.000000 27.000000 54.000000 c +27.000000 54.000000 l +41.911686 54.000000 54.000000 41.911690 54.000000 27.000000 c +54.000000 27.000000 l +54.000000 12.088314 41.911686 0.000000 27.000000 0.000000 c +27.000000 0.000000 l +12.088312 0.000000 0.000000 12.088314 0.000000 27.000000 c +0.000000 27.000000 l +h +f +n +Q + +endstream +endobj + +270 0 obj + 452 +endobj + +271 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +272 0 obj + 2567 +endobj + +273 0 obj + [ /ICCBased 271 0 R ] +endobj + +274 0 obj + << /Type /XObject + /Length 275 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 273 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +1.000000 0.000000 -0.000000 1.000000 1250.000000 62.000000 cm +0.000000 0.000000 0.000000 scn +0.000000 169.000000 m +173.000000 169.000000 l +173.000000 0.000000 l +0.000000 0.000000 l +0.000000 169.000000 l +h +f +n +Q + +endstream +endobj + +275 0 obj + 213 +endobj + +276 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +277 0 obj + 2567 +endobj + +278 0 obj + [ /ICCBased 276 0 R ] +endobj + +279 0 obj + << /Filter /FlateDecode + /Type /XObject + /Length 280 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 278 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +xM6 ^@Q"A;vl) P&Ezq8J/T?92 Myw^uO^`]|ꀔ#ZumR7HS?cBun;:yX=q @.ZRR*U yu|Z]-n#^a3Qf:TYg]zY5D0p%1 eXb&Z?fΡ(᪅qtxƚwKΓRĒ0 ŋi5R sYS[sE΄ڄnJvq: +u +4R!/0Aˀ N<=8''g jP}gyQ\L9r3j&Ź0Km rcNUǃ 7`-qZR*(-J_ҫ:FСaM䰋⑟j|ZTB b1ϴC)ƕ5W8HqKL.k> q {Lp^Ț>t%fM7 əLh\ BM}|f  Z\ՁENi/t4P/Y55zj#FgDTa4sf8St4xR9 +։¨hf֙LϡlTę6+:B䝿h4H:4m iw< + F(>0`k>"4z'Ӕ &[p%oaA{~;Ӎ@eESRVlgK3V6 4sQJkg\F `(+~ݼ~T+qeldN rfO+CxC0a5T I6V|Iy ˀdvj<Q!>C4he$ZQ9†k`h?Bxz0SCXDt",4d޻KK2(/ B`MCk`$6D"Z4j$]RNX~'"D0Qv^UvC$`ڣbG:svG)MiLe@l1H #榊 +d}L4b8&i +" |TDzt%cu_2HK0Թ2zQiGC"i$Ġh[1Lwl?b +endstream +endobj + +280 0 obj + 1933 +endobj + +281 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +282 0 obj + 2567 +endobj + +283 0 obj + [ /ICCBased 281 0 R ] +endobj + +284 0 obj + << /Filter /FlateDecode + /Type /XObject + /Length 285 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 283 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +x]$ :E] ?Ѐᇙ?? zȔDAz,zzW||(שkef=׾{|5{juq[o_K^wN{~C_Oo^=~~F?wrW%_(m~=|/ۋǿ9zϨ׊=^' {,~=ʈ>B}&V{٬c/OٰVXYr6:gBΙX8ib\Qٰ\s] +[ǹd^gYD-2qfhFO[~eQ +N?X"ľgՒ$fLw!솬dprWq6΅Z5 >$""fvyU =>=&S@q^$4S>قiS_9Q\";FQل}F<|poF*2 *cSP+:1UF7$p ۤ;$ +endstream +endobj + +285 0 obj + 1698 +endobj + +286 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +287 0 obj + 2567 +endobj + +288 0 obj + [ /ICCBased 286 0 R ] +endobj + +289 0 obj + << /Length 290 0 R + /Range [ 0.000000 1.000000 0.000000 1.000000 0.000000 1.000000 ] + /Domain [ 0.000000 1.000000 ] + /FunctionType 4 + >> +stream +{ 0.188235 exch 0.192157 exch 0.207843 exch dup 0.000000 gt { exch pop exch pop exch pop dup 0.000000 sub -0.156863 mul 0.188235 add exch dup 0.000000 sub -0.156863 mul 0.192157 add exch dup 0.000000 sub -0.156863 mul 0.207843 add exch } if dup 1.000000 gt { exch pop exch pop exch pop 0.031373 exch 0.035294 exch 0.050980 exch } if pop } +endstream +endobj + +290 0 obj + 339 +endobj + +291 0 obj + << /Length 292 0 R + /Range [ 0.000000 1.000000 0.000000 1.000000 0.000000 1.000000 ] + /Domain [ 0.000000 1.000000 ] + /FunctionType 4 + >> +stream +{ 0.000000 exch 0.000000 exch 0.000000 exch dup 0.000000 gt { exch pop exch pop exch pop dup 0.000000 sub 3.629706 mul 0.000000 add exch dup 0.000000 sub 3.714118 mul 0.000000 add exch dup 0.000000 sub 3.798530 mul 0.000000 add exch } if dup 0.139373 gt { exch pop exch pop exch pop dup 0.139373 sub 0.000000 mul 0.505882 add exch dup 0.139373 sub 0.000000 mul 0.517647 add exch dup 0.139373 sub 0.000000 mul 0.529412 add exch } if dup 0.860627 gt { exch pop exch pop exch pop dup 0.860627 sub -3.629706 mul 0.505882 add exch dup 0.860627 sub -3.714118 mul 0.517647 add exch dup 0.860627 sub -3.798530 mul 0.529412 add exch } if dup 1.000000 gt { exch pop exch pop exch pop 0.000000 exch 0.000000 exch 0.000000 exch } if pop } +endstream +endobj + +292 0 obj + 727 +endobj + +293 0 obj + << /Filter /FlateDecode + /Length 294 0 R + /Range [ 0.000000 1.000000 0.000000 1.000000 0.000000 1.000000 ] + /Domain [ 0.000000 1.000000 ] + /FunctionType 4 + >> +stream +xin a6ݤVFi4w23YH~{<^lJB@3UB5R}+:?_e^nEQހGbܶX|9_ B6N prx *zD xD`aC226DZhEqq'< +C,<@q@6y1:ϿH!C[@M`ux{yͺmwmxiLP`q8[R ~- ^CΘWRO0TIro/ +endstream +endobj + +294 0 obj + 326 +endobj + +295 0 obj + << /Filter /FlateDecode + /Length 296 0 R + /Range [ 0.000000 1.000000 0.000000 1.000000 0.000000 1.000000 ] + /Domain [ 0.000000 1.000000 ] + /FunctionType 4 + >> +stream +xin a6ݤVFi4w23YH~{<^lJB@3UB5R}+:?_e^nEQހGbܶX|9_ B6N prx *zD xD`aC226DZhEqq'< +C,<@q@6y1:ϿH!C[@M`ux{yͺmwmxiLP`q8[R ~- ^CΘWRO0TIro/ +endstream +endobj + +296 0 obj + 326 +endobj + +297 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +298 0 obj + 2567 +endobj + +299 0 obj + [ /ICCBased 297 0 R ] +endobj + +300 0 obj + << /Length 301 0 R + /Range [ 0.000000 1.000000 ] + /Domain [ 0.000000 1.000000 ] + /FunctionType 4 + >> +stream +{ 0.500000 exch dup 0.000000 gt { exch pop dup 0.000000 sub -3.587500 mul 0.500000 add exch } if dup 0.139373 gt { exch pop dup 0.139373 sub 0.000000 mul 0.000000 add exch } if dup 0.860627 gt { exch pop dup 0.860627 sub 3.587500 mul 0.000000 add exch } if dup 1.000000 gt { exch pop 0.500000 exch } if pop } +endstream +endobj + +301 0 obj + 309 +endobj + +302 0 obj + << /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + /Resources << /Pattern << /P1 << /Matrix [ 28.792206 1.445216 -1.445216 28.792206 1100.380737 360.671051 ] + /Shading << /Coords [ 0.000000 0.000000 1.000000 0.000000 ] + /ColorSpace /DeviceGray + /Function 300 0 R + /Domain [ 0.000000 1.000000 ] + /ShadingType 2 + /Extend [ true true ] + >> + /PatternType 2 + /Type /Pattern + >> >> >> + /Subtype /Form + /Length 303 0 R + /Group << /Type /Group + /S /Transparency + /CS /DeviceGray + >> + /Type /XObject + >> +stream +/DeviceGray CS +/DeviceGray cs +0.998743 0.050132 -0.050132 0.998743 1099.118286 385.821594 cm +2.310295 1.442442 m +26.518160 1.442442 l +27.794100 1.442442 28.828453 2.429116 28.828453 3.646240 c +0.000000 3.646240 l +0.000000 2.429116 1.034355 1.442442 2.310295 1.442442 c +h +/Pattern cs +/P1 scn +f +n + +endstream +endobj + +303 0 obj + 295 +endobj + +304 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 305 0 R + /Height 1075 + /Width 1845 + /ColorSpace /DeviceGray + /Filter [ /FlateDecode ] + >> +stream +x1 g (l{ + +endstream +endobj + +305 0 obj + 1944 +endobj + +306 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +307 0 obj + 2567 +endobj + +308 0 obj + [ /ICCBased 306 0 R ] +endobj + +309 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 310 0 R + /Height 1075 + /SMask 304 0 R + /Width 1845 + /ColorSpace 308 0 R + /Filter [ /DCTDecode ] + >> +stream +JFIFICC_PROFILE0mntrRGB XYZ acsp- desc$rXYZgXYZ(bXYZ<wtptPrTRCd(gTRCd(bTRCd(cprtvR⺓8 I>@3:nuU tY=Z;O~ӣ1EWju\W*Z>=ϯ6]y=GYjOvVkoȁ+Lu}#izf|ǡ_OK`w>`OA3xuf^,,|! p&}L:zzq~,Bb=en1z|CzQR;58ΟNaC(n5<ӽc JkZEaUF .aV|D:v!>S}%_M8 +}Tw5a8?>*0ȝe76{L! .Qi?b͍LEG'ڶ=OP}K%'_L":^ ںP(S3}YӦ8[OSкΖnu:+Gb(Jza Q?cfxnz?[~U)pޖ(CzLcזzMKA}CQuZg5ڙ0AL!@!@!@!@!@!@!@&޵*?go-Ajg +}<:^z߻.hQ8Ϧ}QOYe#;8e'﯌'wv'[:Uce2oZ~eI8~2Oӯ'Z+zGN=?OҵKvCkmQ'K:9E[e9>Cr&`?Ϧgϱ::X}rНSZ#(B~g{nܛx_0 `23ɍgӣWop獻1ct-FzZU4!a ^^tqx%nfk=(VR6O>s6E5j5Zz2PEK|y8^=PucUnT9qd㧕vZݑrT$wu=ZӺmSߧ eUR܎2imW^oVns^~)w23@u''=^_W{7Rj-@8V.o3ۉ!^fm;SPq/A.X`g>VL;-CPY(Ǜ>ђ6Jk*_hWP߬u{]-ba _ 2DvSuZ9fo.IědN灥ռ,>?18s^ԳN=CmF;rxF Ie_So_Y᜗6M~~?liZ-jbsGyWIwpA"t\2eu>'_s<,h.}:BFKPj5 UQY u6V&%>jp 9˴tjߨ{:fMUuvӴwb83}=/O*QN]E{rvӷܜ$u^wJԮWe'S5Ś@;_ ǜE/۪]iΥXV γk:JҦWOZ[U%+QN'a  =BWX*j՝ǻ`\l>`<˿=wJNӾ ]<nc$ ;UnPX; 8? 鴴5?HL ]OLFnul=X>\Z.#XX`qf%/ 5dj*/rKTtސ:OuMu$*Rɨݸ*#:nZ#kFvj}>csrG:nе]yNv#F@}è65WޓgSfGrWnXU!mOmWO:m6[E^-78!Bޣ3v~num.Lm2,Kyu$yg5:+h@uUlgjrq<f~i:mm&Qb}AfcCu}οOngWel=`g# r{/ziu]6ciʊʀNH#2mtu^VK[h/]{80>R JPs Knt=7GuAy;IaEtۗzPYG!s<_[t *jo6nS~m%sy3|Xn;_z=_V2{_8z)9x|ێG=sg]_EKotvٞsO_^Nܿ?>ϋ':s[_Įp xo\j}]_kU[}gSWZ I{֮l^>^g_^gq|z;=s4j릣Mi.o)Mڟl[>5tEFtƤ$RAP݋g{"{5{pO=isXCNEOEz}밮sݫ߷sqn4CwCvjYNX;{r󣏍qt?8weUK+Ԯ}w9R,;&ANӎcO[GѺR4֊4nG ay^tqx36ih*՝^GdۛɎtg7DgnhS#|}cs[C<3G\&¡>Os~xz= ESki4Z83DkFEMΩxyએ 3Q82nO^έv jpax9'j.\Nޗ,rr}9yQӮOh+kgf9$y-/]CR􏭫sk7|9&FpL/B=Sәrw}t>}r[gD:nэm~57!#rD`g4#I6d4!jzYP +Y9f3s/ 6GOѽ^5UK + O򙘅wB˹ >잫Qԩc].mNzՋ9`b?v1S}Mu# yWgݎ^S+kƝ+ ~^B s0ޏԣjFSAOn+lf5Ol]M!l>iq }:Bz^Q^yٕH# +Hqxr^/ 󇈜aמϥjSjzJ(:Kl,06B #Ibh5ڝ_[]E?P-fC-`¯'#q 8,h:-CS]f.% `$hﮎ,YkZJUTl- &ؔNlEf?b;81wyN/]BUhtc G>/Fo%zVg.?y9.eZ=GZ5Svm¶<Ǐ,wt>o{[Y}wlS~'Oǝ=Oϋ=N^50cgc?WzMjj|Gw=sONIm61Ǘ;Θx_S>\o?jhw/9Ok%$%sW>]EGk'|(n}nڧV~Ϫ[kPO3g/J~ +9ߡܦ}{9K{j]35:]WQ5-9WhE>~>Vz[zֵ~ϱNޱ·] bV*OFgߥ~_BQP}N]J;(|4ъ 6G3?OwHhSoa>ŷ?ha~8].f%[)Og/M/}'Si5{ )?=ϜY:vt/NѦ4-H>c'{H;_ֵ(j8K19sk)_:z}y_>8e_kF$1gWuUѮQCd_Q3;wuof_[Vjz6 \OUlxD2ot}\VfyykU:Jݤ nCzOϹH}ZbGf൸?l+#!:!@!@!@!@!@!@!@OꛇNq,! tϫS\O` +0@#L&Ȍr ,iA0e caB  | ȬrF(8 nяLI*` yHQ=BBB.Ui#UE o01ɔBbtr~W[.fn?C(a6ݻF=1&o9|46,@> ++ @01>P݁&#b䝣'"h@P1Ё@=BWc۪vF2g5_Ma3qzMcu m@f$f$!,zg,+QZkzrkLcYm5)H+%59(z7QuѥFЌIR`#d{ +.ï/5j5:FX}_Fed)KrlɄ(Ϯ&_TS4;¢&J{ً1$91B"~P?ЀvP1D9ʎybGjoU? E:K4ZYY<ǼGiFv=+mOF~!-6 [?˫:y.ڏz̈́z_ۧGt4DTV}N,qN_Lt5#DWht-*GSu +HUeص?x?ys'unlu,(h Zː0zTuxM_EO=_ڭjzΧ¥ک__<|#u3!e*{&/5{Oz}Ez'p8[G&Ι'N*ju*Z T;p;/]Vl>嵜> TN7JI loG:Xq[gKK4mzgf`Jy Gh=MemU*P˄T@g:tU/FvY-0~#ukkm-4=9('[Lci?g.[zJ'ӛmhѥ?|g-g|O#OtMGϷwb!@Ro??JS-O{'~)Oܷ)CT#:)C?r9ʄw8GW?r8~[9PG[Ҕ!*_Ҕ!Ro?B;#Ro??JS-G{#uJS-J~忐sdpJ~忐p)Oܷr)Oܷ)CT#:)C?r9ʄw8GW?r8~[9PG[Ҕ!*_Ҕ!Ro?B;#Ro??JS-G{#uJS-J~忐sdpJ~忐p)Oܷr)Oܷ)CT#:)C?r9ʄw8GW?r8~[9PG[Ҕ!*_Ҕ!Ro?B;#Ro??JS-G{#uJS-J~忐sdpJ~忐p)Oܷr)Oܷ)CT#:)C?r9ʄw8GW?r8~[9PG[Ҕ!*_Ҕ!Ro?B;#Ro??JS-G{#uJS-J~忐sdpJ~忐p)Oܷr)Oܷ)CT#:)C?r9ʄw8GW?r8~[9PG[Ҕ!*_Ҕ!Ro?B;#Ro??JS-G{#uJS-J~忐sdpJ~忐p)Oܷr)Oܷ)CT#:)C?r9ʄw8GW?r8~[9PG[Ҕ!*_Ҕ!Ro?B;#Ro??JS-G{#uJS-J~忐sdpJ~忐p)Oܷr)Oܷ)CT#:)C?r9ʄw8GW?r8~[9PG[Ҕ!*_Ҕ!Ro?B;#Ro??JS-G{#uJS-J~忐sdpJ~忐p)Oܷr)Oܷ)CT#:)C?r9ʄw8GW?r8~[9PG[Ҕ!*_Ҕ!Ro?B;#Ro??JS-G{#uJS-J~忐sdpJ~忐p)Oܷr)Oܷ)CT#:)C?r9ʄw8GW?r8~[9PG[Ҕ!*_Ҕ!Ro?B;#Ro??JS-G{#uJS-J~忐sdpJ~忐p)Oܷr)Oܷ)CT#:)C?r9ʄw8GW?r8~[9PG[Ҕ!*_Ҕ!Ro?B;#Ro??JS-G{#uJS-J~忐sdpJ~忐p)Oܷr)Oܷ)CT#:)C?r9ʄw8GW?r8~[9PG[Ҕ!*_Ҕ!Ro?B;#Ro??JS-G{#uJS-J~忐sdpJ~忐p)Oܷr)Oܷ)CT#:)C?r9ʄw8GW?r8~[9PG[Ҕ!*_Ҕ!Ro?B;#Ro??JS-G{#uJS-J~忐sdpJ~忐p)Oܷr)Oܷ)CT#:)C?r9ʄw8GW?r8~[9PG[Ҕ!*_Ҕ!Ro?B;#Ro??JS-G{#uJS-J~忐sdpJ~忐p)Oܷr)Oܷ)CT#:)C?r9ʄw8GW?r8~[9PG[Ҕ!*_Ҕ!Ro?B;#Ro??JS-G{#uJS-J~忐sdpJ~忐p)Oܷr)Oܷ)CT#:)C?r9ʄw8GW?r8NT#Bb:oJ=VhuܨE5c>1{v7}GMPz>=܍DGfz[jV}]9VF|1>i7ѿTONIW^ۜ3|9RxFynL}"2~=N^:C]z_mm U`t^}+?:&QeRaaFw3LN}SP榡 ف=ߴi:UNŬn]٢o7~G|Bf(}izgL_xضj#y#w쏳:nG:fn͎Z7;5u/mz3?FtjDͶjwp;`|` w=j^i^l/}kWǽu D]_ţ~SAQ1y8c`=Y4ӏwR q?{i>}jMW3'6֚QBJAǙ̺ǵ=xv-%>L'&XC^?Bߘ A:wі7v8o?,):7UŇJq^5OIӾ*Y%.yYbz@ݡkUZŚnMKDNs^>z&+{:O[Hǂ?g>pvok}Mn4ʉe+n`g>o]TXՖRQʞt~MoS齞tm㑜w9&Ϥ^Ω4?=1QMu񂤞QO'."qzt]@{gtESさ'~_:FiUuN'GL9> OM]"j}w#gYfH?y;MjzޤnF{ ]~$m[u Wqxa3]Z~6{9=QZGN< |gZ:/WNm^m#1!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@! 5'(:=nբ.rH1Ǭ4!C0ax'Gt=HhοCӲ}Cpy>Bs``o?C'uƎI zNlEGt#BWվk Oݧ3{)rWOixĄHlr ? fQm9F+8]Y:W4r3QۘC˱==t]Y:W4r3QۘC>^CB &.JI#s6p`qǬ  Q{Z`Xgi}IOCiR{*r15X0lgxhzF?u#Z٩Ṥ<!|wMjYtjsA'wMۧ|v$q+Bx?Lj NkMu619|s,#ya!춿3= Z^U!q yES~huz +-ԒEc^pq!{=q@!7?]izVg5O G$L ꚫޖъz! #i7q @r3!'kf5u}-MG{Rr2?EGun誵5:Ԓ|1Ϥ 9Ώ]_s'y}vǞ`s,@b =γuj*4꘭h{Ĝ9leV$Ppd'Gҕkl=GFv5wxf~c| s,YBBBBBBBBB4ޟ]7MnUqURczjz^˒X:T^;En48?e220Zy]>Q[M<+EnTXkcIT紞_hR> +?h4*Ay9<8B>~t?i_z&,Īp?#Z~Jicf]Wҧߖ7RKϨ[Vr8agkBk51Z2gjpu>s޿ O~9oG=5{-:FMO_>XZПK[ںz.٫h\5uhݏ){){o7T4k{˧68?;;;MVi mzzoR3ބr'Wn&َ^j\[-]iB1 >3]m}ǵwƜgYuy7C?[UޛQvOcWgo#;+kON5N2_^҅S+.Tˡd gtyw9U>tںp(M[s~ ltVZV==}5=UQr'< Ogz..=9T5oK*I 􎕬+{PTht(zҹM^Ze>g 9ɁxO]Ist/9[nw} `ǥukW:+L+u_8h&~,H}g7zGOkMKX9!A/ foS2-.R(nM]mS,@ !VoJI lZxрԞ_?֏Yv>o ?97s0 Uf=e?QqI]u=?ZiP. m9b;b|?i^k..cW}٨ %@`2A{N 0>C]Zz^O{8ilPvc>E(@!@CXI?Aqh}K%]kklAΘ>l~@EB=i_@Ϗq8ڍ^w WMON-8|$qؑn>P>XAWLnmFOBmjn.;噣QߧKFΩ餭}f^Ө9*+3g匜@ϲC3G=uG^z+X+.~'ӽ-UtkjWMlVvl yȟoh~hjT 19>u^k}WSFUKYcj7 A'%6v-vW>=:fSӮ V?Zk +xR۳'rGbD@N]zײk#Q?X{GR5[h.`pI/YM]*f}=k:XAUNC q`lYg)Hd8Bg_h&?f:ZSQu1= }Ԋ{^}7zsyն.ow|||ڋuZhFU=k]ЬDi5;bx1HA"Ժ'=Rrj۪;xDTq wlEZl]_ttV+o kF5O#ϑ{3>u'XХVj4J91u/_ﱬ`;NN>V^U:ziU/Vz+ +<: H#/Uzu[S_M\j]2R6k<-y5#ˆ 6~zS+F^Զ}g>0=>Smc~}KuͭmefC>y={Au{;]G-=ݻEr'g~s]ֵ.O]njzf-seNwOg_z=ԣi.^@fj=l9 2q_I5R}4)v +tу3=0B='U螣5%^:FOxKo\>/uK#Y9/ ݠ )cwyc_&٪>ҴV˼_s3Oyc<(v}u}^.-k]ru #T\;qkSNWV{[]_Bmm0*ٜg0Ϝ{!_QUi5>PK6l$3nTqyfgk4!}mEoѫg5#I?2s܏SmHI:VmxB,>|]Q7{7k+Rǹ8<σ~:T}TkhmZgܢwOBB=V?3UF}_ENzCu}I X[~6)O Oں/~R7~1ۇ,m˷j5C]T؝VQv פVw`v|[>YEQ='{8hY3nCX 7lI'Ul=vVm:zC\է;LIaȡ`}Mo`=nzuvWJխ.mxrՕ!qiէViO1N޵a]OQ]׏ i's>"8qH{>_EMt6^:ᦡwk +9#>Ki}j*Q`0 #>1?\{I׵]c\W]iTaB ' ~v{_e~/E:+!<gN39i=t>ֺhYFZh>*}˰b|sڏi5jzS[tR8'$ *tXR[wsٔBBBBBBBBBBB 齐+Yz&Za_[+}OIC[ڠI{@;,]+'OvoS^@d~9؎mG~h[U~[ݨʨ>D#dOuw]je7 +?{%t=}7@iߦTh=[dVH +0s5?g:ާu&jݫb|W9'<佾jzGMioWap*g۴Ok::a셽YY_uLvlH?>F-V{BWc_ӡUmgO1~4 }7hsMImln_gk_6ںMڞku b O6F-S8?m4vhniNvQR}Zø@w`ltW{SԽc٨NMBn%d}Ы5zΩt*565zӸŌB8=viCպ 7[s6_[Reg@2UH '_ESG:3җ#~knVu0=oJi}Sv{ܬs}yM5];]oX[W~ReǎЊy'Pn[:W:FnSr*n!w8q^uEGk-ċ6nY\d>vu}]?gSOz騚m8R6>DX}O}2GUt;=Z-]#?*@'=OH5>׭NJ ;*my-mK ^Y'@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!ci|(cX"voXVD#qd(7!'kߔ6?oI G ( ;[?tP"v1CcDthzdz}GQ|+9[ ?Wm H^ OꞆRUDTpʀ>so)"jXG2v8<@XI}CP"vo7!ó7]En[)l,%(HDݛ+6m~P";?28 +IMHZl$w$ldXGZ~Vo6+3 <> υf&] +?(t1j1S[S m;s𑱾~P"v($oߔ6?(Oe?[+vXI +Dz$q NCkߔo 󍏟L<;?0Vտ> TB?nqYL]9+t`ɀ~Pq(faacߑt[pxao +/'I`WDžf0LqMdUad=2ZCIu(l|gcc!'k}~P"?oq( ;7 ~Rv?oNIqtXF?wF[@FXFEnGOiU`$#n' !5 ٿlߔoLMV&B?nqYL6MPHF> ǃf0 UnXGYLV*M1ڿj>D +>otXGZ{Ua`jwS!L<;?0voXwV[@Iq);TXIq(llcg!hU>dxvf`,$ߔog³ ٿ +< +ܟLo|-ٿ ;wFsLo +Ln{V`,#cgz|XF|7ǮLoL6?0ڛp4;``$#Vd`(E6; oHF?Lc]2E6X~J`$#' +diiw`·+?tHG4\M6kwLoL<+?0+?2<7<7Ϧah5X.BNCc}D#lߔ~Pq( ;7 采go7goOiU`$#7GzL[@Iu(loߔ2|;?0vCk}@I?0}!' O @C1޷526?oBNIq#a'k}ߔoڷLo +L +8? ;7$Wa[&7ٿ>+?tHF(0 f?%&1޷526?{)?; ;Qta ٿwtXF1!0?oF@I*ú!D$o(`@ItPtP"9LoL~Pu( ;7RsZLR`)SCX8w w8Ԉ7+I@>=`w8?)ek\(#T0q&a8w1nak*ڔQz]W=+>>89ri};n\2AaZ@*+9NFb,l|@cTۀ$ *|tjQm9>rlfM2Ej)NRO|5{r R@W*Qz(kϬ +ix ߾cUG23`Z|'%kȺ=;P. w,`F]jX۷ ]Ă|ESA"N.2PUWpDY~y2 v3z{FY_Q!jCa8l(q'V=NIP_^s-EeťAeͣ1V8 DJqP0~>'-Fvp|U6Lt!03=B0"cVlvp/ޢXm|!)Q XY>2Vm`B7p{$'QWvk[{˟w̿QbPH0=Kb:e*oF(T@2»8X۹>RZ]`g22Y.;|BzI6@j`@a#dbXˌȉXpG5J vVmOp I `c-Ժs2wdVFH2ʀvʎwC9 Ԫ +CaF|fһՏ|F-faZy_pm3e6\gQ^@)s&q=]B +&g8bAJVA$sLvcUQJ`vۅXF" ]ҙ "QmJnbr{ʕ;HҹM > JceLm)[bؠH4T5gR011]|Mshk7)ZةVdU}L"ժ֤\o9_S +6#jV]3/.XbOxtӚj#pnMyi\ȋUޫ<A1۶ہ}%M82-=,/s5Z gAϟQj6*FrH%*s'aXOtaİV*g`#ϼ]8@Gwk{-Ѭ@,\ @k$Phf_FVk䟌YT5q+ 2O+J +l@qϬT 䌟A(tZX>U=w)ԻaThkwx9XԐO"1% +`gǔTXl\*D gw]`m.ӪB3Wz_j\o%m7* X2y6=Hy|wE<fy&h1+kP細g`繌H +9ЌG$)^‹Za#8(?9[Ko`}{zoMd*~l?!-{a+u`Ȑ-p@8# lbZ( omqkg ׬ЙAyJRF9<Hpj +?)U +wn Mx^VVek[d>susTS``g`GNGcTy9)+He|Qyu*Awkˌ"dԬhm4{0) Tw)p)H$Ϥ p?-VFa4 q=US+"`0\^qSa.K+dLN@_﯀HF[ |c)%tN[V֖^s&k +(>BWek{-Z0gU_J}*B~r󧿖)|ҀC{P SXp =WE?VV$rY fYExE?sB5:eZ!-R+W2m}Ɲ1h4Y|n5:UF|dLu$yo>K%olA&/]@-eGgcmE- +gSi,gU{] ΉN9wכ71's̞IQ30"M +O| %Or[ +Aɱs)}1dc^U)0adF0#=-*{K/Y +} n6{t<{(i,%wd".ӟt 7eG#'zH _ek qPCEs5`iMmY$ fsPRG{ r͖> C(:ضd.Y+k.ec*u5*`ԧeK[#״H$ehLp +#(-*y]0T{L;Ʃ0,oycK"AkBso8k`B'r{KjOYg%D qaca9B +kq<9PKkl'C+Rx9ګ`/s jT 癒ť4nyu-[ vJ?9d'$br>2Ǭrq*U$ \!8k6in ]g1+XE$?1p2PJ''rYFvroa $޽ &l8(wx)ښ p3Ybp ~cv\ ޲tq}e$#3E6Zʹ ث0[vL6erq)OS[޺7$c,ms7gAuA㱙g6)q/ڶn;%RF_IvӸ.O;^s`P%Q;WUUu;\RQ cx%N=f DRQ^J3ծJTp2s;Qr>Q5VQmjԘ>l~RtJU)'`J&Lr>2dVIiO$K6iru5]DP<9WV?9[^ q6ߨ'؇"&mA Oc5NYwgc`0ј|nq02_8۲U@cX* g +_S@LGeS.S8܃> %ovԥDESai}UT{MawoCDj9*l-zI>e*ܞ? m$>[VvO\r|35 M-jVGO[Sj{kdP621"Of[{#cz0KJѹdgW`iSdYd!:.rS$Px]4U@/ BAu fTWdV*bĖ,{%Vs_~On$wx-Y-HEWHcTON 0s &F03xg1G3N6F.p @A8ݴDSQuFA##=dGF\$ x#v ~ѭ N1+sJV՜}fb᦭ ;0GcXWLMoa>mR~Ks35`EV*09 +|癞`$c6 bc%SmL?yPr16662+jH6Tզ8;nv 2-Y{!lMm5Yp]*T xĎr R +f\3U{ +O^R +Ln r8=]ħs1 s3yc$MeD1(As 8b翔 +C"փFCcĢU8Ĥ<œ$QL=e*<ɽ\ ܜD$v9 ܈\:BKqx1 %]"c( &t6Z, +N<쭝Cs(Z\%e?|V\ +$bFG{z@)4xjF7 wf1]Xe7QrdX0d!Ps"*y(ؖ*=fN1+`{==s6HW! +*k%b1Vp>bKZ߰69řb T꫟+Cq\['/Es3kQ@H0P81Xr>\y9Xk\)RV c>6䟄6<2Xf& `|!1>bCDSzH,=q(;m0`F)e^'v0e1w < +˦K`GM_%vB3d G7Z0lc#m"rO&WY q: Ɔ=U%*k ؎V#&w#r2c9AiӹV `<&-U7z'MgoѤWUbPv)0eg*dTAZ׸1^pGlCQgꑫ-`=yS ]6M +>r]8VcJ" ,`Ue ~2jzP{ѓNYmH(x b`ѕYZN7H`ly Uo.k=ʃ?Tjߐs lod[1+}N~1&{ݼ63ZfUb!4ٷ*GUMFX/V’8@r x8_*O}x<`2zyXQ^[!G2^^i9&ֻЫ6!X8;?hb5mgi9'E|0>2FazE{9=@PLgL3[8"-V߱F%8Qۿ"g3SčIv.#x6%qrWʶ޲ nV9wn͈{"9k5w80yG6>2m30q/s61zD`ZO>3VKr`E$VylgӂcXͩ{ +>&xZ90[Eia2{[WmB،&ࣶ{ m>")Zb`2{/EZ&*2(o\hEF]=O ̢-ow|E/oX~Rh<}ueb91_{$gI*hHeb3 B1\= X`bāÃ'1e[.܅NXyqiܔꌓP1`“p1lێI{fYC i$Fz0e1oΠMM)p$ l ][HVRwh';FKث^Hh*3%imZ隃ϙp@'& @jޮ)>2yʘ$r"[v#; +p{s!$q1+dsE(Lz6C LD&c,E 2Uk$%lkrO-Wm4W~0 Dϸv{_RqUdҴ[p{6j=mɏPl +<Ϝ{V@ `qAbaX>xĶ֡*6Ó,Fa jR᷐4#q#-yNǞAq(f2Ke!XaYHьqH+@֊inb ̶K ^VI9{ lu]ϖxlZ (|7'K s:*R0-3^7uiZl`6qM5Z`lUMP^%..)ɎOWE.a< s5BjU./XRWYݟ[ݖ<|z5w/./8kTʃm-[= lvNLAc mJmX1儕)B>r);LKE9<8㼦永V{7l)lT:5XwW>X`Gf+n?z'o3ͬk,Vs4x,fd 'qK-Q޼ܨ#n+i=ۓ5q +IeBp b54Q=ȌZ͞Y1e[K1lflŕ$!,}}qnehga>DbMTD=x̲ߵ`El{'BVO?2%;ʉ5Y-wO'yO6I]LF`|e6ܑ%8hEqXsmEC} fBֶwbvXB5Y+ܱn>RVHoN6dhv#÷Bπ82cP`࣮N9XÙsǾx2icx=Ij9S"?Pe ) ;W>[u(čĨ'Xv)UUŧeyzIJXEnCcۆ SݛU O`)=0 +V9=ɘiZFÒVXوcq/D^O0/3eVo;RZ-{. M=;L-#B,:z)vE;ڍb#>GƬ:J`l9"z\ FZL+u  e:s+'(̺[1̡N80'#3>aQ[P@| %+Mgr(p +? +;AlDO/GUn\m.rFq(C|-Jm<A ==b*eݬ &m&>7b$9d(v2p1@l ba9oHJ9b8؃F`tvŽ~$_fǤii XxKڻFqP#9U5y9/D}~8%`|A_܀N,+`ST9.)'` +.} R@idmCyc@DH[ XOZ2|Kl%jV͜r= WS<YrVLQ ߈̀`r3@v{L''yĂ>-p8akzT;9oYg9I9HXBջ#eҮbUlcY2' jñSɘuMZmM",jr }-&g8R>g1e2 Eza+V֫^-KNь~=&0ĝfC/b&ZyFLl XYN@$wx6lǜ`~ljSZȕ뮪d<=JQ2}q qJթV/m32mmszŕ>gؖh@Q'2F91ϑϘNkJIKQ{ \CUϡK+9/PtZn# @e'dm}r331 +UcwƷ AzXT9۴pb]ٙİ>c*A##[8TǺ$1H?)4bOh+` ~1|Li%,k-3Ʌ458i.է1~S2!$q Z!@fp1۞÷ҡ!k Gg,9-+~]ޜZm< LSxjwKƱNJCyJXWy]NԈ5j9R7~{L~9/TJ9bOy D籕۷,DwS6v6(=N15 azT8S1CBVe3W]Oq.*U}#QIVP;6* ~?YnYkf555Bwunt]S?+Gq5Rt-R w8% N;nyr x8X'M +ª p$tԵ[GAJϺo'jڿ$`" f\ 24C +LcKCYi#Z\]1MPZuPNBǦ5#VW㙭(61D\ܙEzA-뙙ZVs(}x#LQP /{@ j)(dUSheYFma5EOiU&b +Pk}qkTZܧnF c$N1%}OF:,Pr{]-xr|AfZځ#4>s᷆sV9uZ{Srf2Uz~S9's.2NI *[<4YxN@ng26ZHɘjbȷ@}X N|˽H +-{=fO}9; vr13+\+0oU(ضҧ,L+Ka +?xۛ,f]*SK9El*'^K >q\`ʚխAqsmsڶp26&54o|%wĶ'}O2hj.dr6R=btWRᢱ$bWe7j9w)*jJ{ś1 +X1uz][`esEPĴ":yX1hGylhbJ%ZO ! ͕[^݁9ۼmL6*Ai uiXMo&zxЃzU9-2Ű!UrHd T>݃-Ur6JWhXˉ4-s܎x)+.|̺Nh3f"Pݳ:j e#*Ø;jKFT86]bm*m8-%{V[b+ )ǬR 4K>@`q)X);xO9Ul4gu)5hR2"r*|+j)nI1 ;Y'j*vZ^~ôh E`nĭ,$|eÝ>1/`kSY 3i=y^Ac.LF|4(pZrN%й.s-Q[.q¤癪T%XONHA2 +J{F= A$@7 ɒ*2 ~eRrGt4̺z wyZ*pbs-7 ;K8'` bTϻ8on->@_$"OZ֬>+g:8ק61ˁ?V {c%V0yk I@Q>>}eUԮsKMX # e$yʬ@*;=>쑁%*>RQ~ЁN ygs.fTg88?hllbUvrw;E1)b;v]UIqQr~2yyԽ|cAbdgDS%6awßX"#Z=5lmB1 +s6TI_ G%8zVӊn;/s2x\֐wxa!+e< +eK%G㴳hn9(SȌž U]@G^_v%dSf73# DxajŐSfMՎ;ymV6 E,+!3VxݜM5>&S# {پ;2+܍³>fRX>wMme9(z%$ GW58WK̡4 򽈈lAJA|z.[G'#;J%l*. + İA/WrqFe=-y0pe V<͊*1hM[Zfu%V+հÀ~8!b($>2=ֻGoREiڛ㑟Y}*Ҫ9fZN"YVz+;;rÜgqCb̛HӖEa_AwY]mY`s`0_8?A+ m#2{B.Dlʜ6d]]E>L7I;T  +wFQq8ezڿ 2MG+2f_ E` ba+b" J2]Kd* !nc;{z GSk;gwpȁ}ݽĬ;ܛ2P=fD=,Qmjk*K8y],9$4{gAE1[Ma3qT[ Hj6l9f6vli:H0*xg=X.S ʮ~Qp¬&<=ǑndDrFT.*6OcQߘ$$B%FN$&͍{N}h%aݓ7A#d+ +1)|$"'En[T%YGV*T5b݀P6[x̽Q՛a2SlrZ#T]Oxkd--`9 +_-zE!Y0(^@ v6Y)m"7R8LY@'98N\0켐&b؅,PLЊkc`(XoM(NKK55da/iץzjLۡF0TA-ꭲC`6*ņNfQ}Y+LoȠ'2=`s^|-d<'N8^ss;C78 c-̫RKlm+WǼsD}X*{f-zz+.]K@a}sĻs: +ٝ%L*v P_Ѷ_ +)R?r;|i]d2h+ +zL*As ]>kԩk"6qfF,E |i(|4B %V3nA9#DӷI@N _EXT2,~p8Yj?A\دs40#!"PU_~iE 4*'(d`#ր0]q;K4ayPr=O#;pYsY`hFȱOB2$^ӵ\bTc,"5if5Ug@*;SFb>2]Q%EPs꧃,}1 +5)'IK^Ƶ =&kjEXɩO̻UJsOmUUS!sYUvH\n>Fd6mW6TmbTI̠Ax:<*p;0Zʅ4 URyʩ7V=傒1jm,vJp8@uЎ Udc͞`1k6J|8t\9 }oѧkilmn1<@U`˴ֻ;MY%ʷ1=6;2zZPC(@o=eOJuAko0&עM0| IV}&UO|%X l~RM|!l[X`8 ZYω}v 682*>\5tO9"a[H0q,C]e,N0eliBy>(Q,zİ ǞD>_ux䉍t|x>jxh~CKi`HʌP~nFwD{vGYSc;c8vRw\rsī\[z5QwI``ü)r>S$aO3zFmtdp~KVz?h]u_`seTrpAB8r7+DفI% +1R~{ZE'Rpd#@JzbWJyR+X +Kxy "A}w(v<|F}Jȍ}nM+W񎷸l;栾jnR8Ș*[)%$wi2Yı<*Ÿ)`X`Ym6dHZ*0ϗ;Cԅ@<ߨFKJGyNsd[c`y9܅B}&hV;y,H$*σdcih[S0'D-EGTED[(*q9dЫMNn6e_A(i]ɚ붭::IGح&")۞;Ǯz|.ꬄ'JIQݲl HH4Yyһ_IӰ yLXD/am{c3U(:sGM̀2x>́] lrI' c5)ܜʴn;Av)dl6Qʞ5u>CxexD Es*N"!Fݘ̐1Q =T s^ҩMuH3TӒ;KӖ9D,|3UϊU]Wʯ{g ,5a[~Db-1#\~rFZfB3̰g I}68$fs 1Vwc9ܘpe>+r@2Lw} 7qqǤ9xmǔAd0$kc=@2LɌ#+,`%Dk0+†ez jS?*ʶ x \{Uf x0-mXfGhmj6^Nv?p68s%n+81H9ZX3 |PoRs;H9#+F`pTL(K]_gJgġUN;2>6 u;ͣcW-`0|7 qRe  6Hϔ{YX.=e]B`?T,[Jl84% Bxy[('$s OaFm y͏uAݙQH.栽7V2 +T):-&]cl+R2Prq&XkB6Ш) s%6(ca;)sS('Bps5wjoO`<˴;~;b9ѻPk8?,J3g88e-Yb!9c}O c._xa}c4+~.G%PGfIf'$d žH+ۑl?(b@lo{cbv V~Ba m922AqǬ v0) {vXˈBl|Ă/Bjc-B02+ӳs鈡pK`y ] +iVQ PTlJ)MЛ]Ss'~{^p1ȒO 1-۾|WҴ*WaVPPg H-#qKvn|hd=$30{W7l#[z4mo>ceGWVAFLІ91Ox@b2A1)w.9o=g&i3ZZzhl lϔPel%}J8GϜ[X#%zLAlGcSϖ l6YI(NyΡʆ#&eKl$V_1,9&jUoZchrbhc~=֚z^:YM 9C) N1 .S#bQC[FPMbV'iPJ;Lp@2h*YbtoZ+V]Ϥ^+ r aeZtM( ;|eu1omcO&^ҤT .[a<f¨PCZPڔ&Z9k& _1ݛbq=m)'=& ?HTC jq%в*pY~|;12W[T2ϊYxKux>* ӔoT33*1(<\ꞯ6?ZEW{ڞ! Uv$+k2*`,89CRߩ ykhu5icoƬCnx@<{jU\H-3hF\Rlg# +k3̈皘/~hQ|E!TwYfVZ㏔DUeyiK2^'srfQaV>2y|c/#i5lvoY\[yƃxd>&T|e{$Ias._x~2Tm]̭0FT$r9L snWk֧>bWt +i%;NN+~1`hRQp/]bwr ǜgp܋ۘDZ7bg$%'P_wF~> + +Vv*6РcK}7iYQgWjxS0>k(fb̚љ?!Xvhj8Q;̘qm=0I)=Ҡd~2;I7n"XGbR['V[Vk,q_1}d +yGvSK6O!l}Dn;W1i쉞JPwwi2V 8+6leUL5+d%E T]-ẋIAҬIZf{:?W*/a D +kmOy&J5Zp>f;TҸǬ A@F2ӟ^2h܅FnZQ]WIjCU+P ;i.y EKYsdk>VOx֊P >s-/cqhbZ*bb?/IWkqxʵudsAtl3r^[xa*Ip%C!89} e _ +g΃}yRU3vݼPNx; Uby5I1O V?=ئ!iҧOo+`Y575ѡP >s(R~~2)G*a[b76h.A@Z*C)mhV8ԕ{N|=eG29h.H&;. =#!VBcE MT\wĢЁvh%WEdε:t#_I2QdN2ݎ;ˑq(Rik8n1n8^$Նv(B&8SHl +$ pevŒb 8 +L$G!Eg;OʝG*X];  pbABB\z&T1Y@!/xn#d2Yg8>=a|/kVz }zm3i /c g; q"px\RHrو$>F +p? ֶ:[]rȵwv^.7&o!nX{Yiy޻cDc' G Y>Wp[ou#bv +@61XrDv m-%}PTי[%Z2-BgP3߉٥i; ?je @YmCmiw1@2 8{ #(glH$5CNʹ2$n$ *y +scSoHIk=A 1d>R_`3e5*a 2>ɘ}Hi yzQզ6cuMws9\''J935"ܯ䑃@9seNQ_˷} + b3Hم Qx>|{Y8!;1<- <& +LU# w-z Adg=`1*qWϔ%~(DH".F{Jds Ǹ7|OT ռx`n-a3 َs,}_lg`6CUxV+fݓp(%ͷd:+;^TXk +o9F1vll|$Ћ]VjX )U;Op|ZSi,̤=2ZյeS6Z,PBL 9̟) "N$C<Ȇde۟>xDmy6l.MyTLGXd_}"#0dГ9>r\s}%ḭ EV+`Ke.,}aE7)$q2;1Öߎ$>!ԕ?e%5f͊(;$I|O#AԝV~RovQȚf'x vƑvֱYќt5/vCceꜭӲ`\N~ۛ}0iս.%>;|I0dкbCyȳICy!,e$& Ϡk sǼNCzJr7caSFs}`j"8K +d`35lbNI2I!chc=<{Z[#8lڡTA@Kb+ գ wWx INJBemD;k(^ +/ *+D U8ܝT¦`s%ki >s(j%|N3,^m.xcLF.j_ y̪6 +]PءV{Rpbv9LV&Ve 9+*)n-389a8$b$-A#sNH,M#ܼٗct--]TqĚ!a7 H0SVL}$Hɀ(ld@tFda|6f8|xA+ٱiU7sVɐ=ĔR0$[ Kwmpwdcu7 +'ml J{Wh[|\gA~R~eGe1Ϻ`Lo"g̏YPr=8SԨ4̠18T)ʭ VԹ y 5d. ,uy$463+|LnTg<1=Rŭ78I$n}/LȓdNe0%jג1m9eTmU0AL-ڳe~-E@jTbcdpe?TVUxgl>8Lmɰ ~RO6)`?/㓅1%=O3KlۅeЁ ̭u9*@+*ae{c&VM^OLֲ"i[yKQr>p Q~1%?FU .Osfހb[ӽT ںլgc%PaXJU Mt}ڧu4'ɹ+8:MVww1 `NxS ͦ}e(-0PV&Y}P{zCg"Zr0ӳŭLn^Ȕ_BZt24*cq侔'0P+Beb͛9Yt,q{}IJJe]w1qIW9wr|P7^ VO-J.flCYo-PHŬvZ1ڵ^A혋ve4GcIgMэ{= = -39$J_ јNE{\c3-1\4̥-23A:-7Y +GRis`% uͻ{#08Ri_bkPsDxx3WmH:Yc,e78%C< 0 !,8 e(]+KV{(2wRN>R ( J`A84T!a <,ճѹV~߉25z}:Z>8S1̫i#cЄs ;'²xhE e;@_GW]HnNBO {hF Yj@| s2 KnZWAAJ6V(2Sh'M"&?nnzc +IaT!;VFw6y8Xo}ג~יIYl. iurCÂpeR\7ﰻT="Wc%-lӹ[UPI?8D츕ڤ$~1†*H oZr}cV c&>) +K EJlݰ)>.H] r##'Bk]F@}$RCj/[.@B^AQIa {̀,R0N+Vl,W;0b#+`0BsI|EYeٵHÜJ93]m RYOͲO˙*XHIJːL"ijnW< 0)`"UYk[6O}!2FA,rI"#9e.?gwĪa!A G*<& (8>S`6sX.rdN5h!ce'52E}f><tzu!*;{JP{Mۛu7/a(j|6y`ӭ$#po_OI:]Zh5m ݽ$1 +oXP/Yq# anMkU+/3ڈ= x Al8M@Yįv}%`deO%ٺ 1"M;wbGh]pILg%n$$W=!+Fq@16XsBgTb9Oic[@أ"'2x +;a pHe'9=x'Hr#-gh!TPCW=*# U1-YKVe*c, +aR]ꝉ8g#CiXuۑy67&rAVA^^ |GPBDȩ + \FW)r< +$d$q|HB;AߔjSɜzI`L2œ֫V|*0y?$f/dɀ#&XJ=W,CYObpOǬA X9 l[ϼ p Ip-`!h9x2j**c{:Hqj ,cgcȨf\NEg-79I1r^&rv˹v;S^FdN1=#Җ +YfjȈ5. 58YbU|+[n>RhYٸ>PQw+ v3A.}$ +Ϭl{}`@o e![>r8Y vF`4D̻̑`j!<̥ӂpc+e {'0VK7>"Pfumec(@?< _}"gg?)EaHbW.%9#TϽ!= }LЖSX@fhb IˆU v,NRC;]*1YjdXgPr;+a!`[iAcA>G9yb h1;@ n(-CLE#յq¬b[kPTsK9xEZA&p6R&)v ;Iqjgg&4|̲+n#3 {ZCy &j FbbQ]e\`|.|Jp-ek}Q̟9, TpXsrrw^>SY\ZHa2+)Tg9&Ykm9V1óRI92#GbfU^G=bkAuXRT[A#ef;j) )FOzA5&NMg3-imXfRa0Td'GAdq*rVKyƄ ",ӕ#.R=Xl*=18&J,ZC`[$g8g#oXB3:ϴg3Eum9`TPy̗9lpcbyp3=vXgPR V9Ո\MMvl!%`yj*F rk`Pw?h9co6y<&ش; #f8[{&۴ +}?cCw9=i練n! +>&c^0w1 噕ȐG0-^2ɬn`#^@Ȗ y2egԐ12o$`™+{2ҥ˜`,zp@Q4!<+~ɹR77>U s9P[>B\Vl>p 32p< cfO=#R%Xv~RO1P-)Eb9RqpQ YF{O" *`g[h9!W<%eUeeU㱌Ƨ(>` ]YQJZSc w'i +laQz@Y5*b-SܥsYa's/b>@)% ̪.yKty̔gM)kv3*E,#WXqͧé1%JvT' +sqМA-n칔)-HH5W+M +S*$Po p]b%j;˱ͮqajp:i{R'5}r紲UӹPJmq*\qpr{y45Ε,6Upb~aG ȅiqۏ,}>pMZ+~<kmv XU=vxvjNӎJU5镚z,f*-)J)$̃*'1̐H3 + +#zs*Dan9Al08`%|Dҕr^ ϹGzOCyYQ.r +8)L9"86lsUr%گTsj+TF QKrd dǜG.;I.s&ݟ !wv ,\g.dVVj oP 9k* 8\dII$d4 >PBpXJ +3y1evBbsjb@ + { LR I9[Ų8P0Gpy4LVc فC C#!m&:X=4Pt\K c$rGa3O~ ifuG#e>^^U{NN`Zٴ!9kI89046XZ<'#ȌȀN=3`PG%ۼ$e +A>RQ02Yxl7' {KeAcŤ +|eEGy +f}b y@Aǔi G).p[99@ hJH#-ϫ#PlqBwUcxD8M]\Xb<,f,߸=ʪ m!v9$JFwx02v}%M*ފՖa9ӦJʹAv ͮ +'gf7YSPU +eWa<u}`ue|!SSd"m`L,l0`cZ\6E.dʟ!{bM\Z BzԚB%jx]k+C39UfC?9!|I(]H60Aq꦳S Xe<&,8'h*ALi94>]̒QNJJlQ~Y%'tQHA>|`tA=7J~#ilɜ֢aʰqKu]Bˊ~1MVsn}nP9htRS(3n]R[.IjN9O =@ihwUֵ6Nx`m]5:Ji{իԠ?kp >0+Z׫ڧ?#,^>Dd8m]dxYN{ ?,jJ<-EGD}GeuVAO]H{d YѢ>3`"+ +}YY:'I.Wj Kb&F=eCi'E\ +:;@xMIo5mqvyv.*:Q-ddgI4λ:Tx?i؀fM7Q(,>{pʼn$;^gAw U6#8u!5פOTvݐk9_-ǘ +F_$g#lAC&ʢ+>45j`zӛE,)4OO[USTHiMc49QxlٹI Q{l=,۷V3M ixw|7rϠ3-U!,`146%irK.ȔA{LO"K=*@R L9bP%U*||B25^BշfQETTb#c Jey&$bgp7{vGǩNNJF>v@35VbFX1h;0s^ nUotk ,'hzS*k$0A\Cx-h^N**u Ro9.{mڅU8Mʋ˝&YW&8VS3Vng,>N+k`Jw6OxԡgzWG5S{Pk;Xu*XybO:R<ǜPPĽrej(!}usyz ZղMJ[殢UnKnx>ﯔuuӨ˹>#!1csH zEJZҾ%=UWOx3C[BMlAjlsy˒NQeeR`&0F%M-[xy_1 +ci8 +G9xېy)ePiIYX gGa̵*ɌzJY@9^fkdAA b39'&sC gjPن qSjېG%G2(Urc P ya\2Xe( * `}` 1AU#"Afܙr9qE6QZe&V˸)]#A*(uH&zʫۂ rn`k*>rfvf,ZS~RŰ +Y>rܬLE+\jm1S23ɑIDx~* %Pxw/8Ƀ`&{ܚQ@A1$F Vpǁ@-8ۏXRѱW;F{ǻ*+~Þp@+E.7H-)R޶+w/#hOrf.y]6w̓~QeԼI#fln5]U 9]]*|T&VA̽ivBð8&ŭk= (#`É!*[ +GRd@ +d`F2p$@g9^$-PF;I"@I0 ^<0 D&%d 9 xFӍeK22x91)ԙ:4Qe%VܤMsb->^S0B=|P/&;y$!1AАcao\3,F xv|*BTUs†.+owe/>FntBXYP/L,į8;U83E6%VxC'=KPl߇y flf >+kTQ rBW2 (PdcL '#V76oc[;`;|6$$$XAr 1 dF{~qOx 612Fs+̘ JnEh1A#l ,qg,re[yYUuc:t60!9|fm*Of5x/;*?GR=d[w?)Zcn$vU8i3b O3@a, ձG $zv$~;ǭs>C@OK)_{ d6bl؄ZĕTxRPys B֕g$vMV-.+ܠs:$)2SMYжN8:4S +gQujc=oj~FbՊuQWe,M1uJf͕KJv=?3UUYQaɕ#ڧDFk/c5j%{mZ2k0}f Fʺc21;.K߁]|șUW3%ɧFmx`rm@a1|2bCW$3',FuR?Wdj}*3 +",ā}&k~sgsVVG9𛮆;עHBfmfivrk{++X[Z*Ul$ sCj +&-~X4MU:>u*~j5R'/_MTފA"tfׂoC[b6XO 0wmj뤸U$H2iNA![{gu:zc$s>s6ckFԻc'5kOewiKaW*̠jl +~RRǰ[ddfTf^9tے1ϔ2rڎ۶VXyQ_yvsU em.[wqJq++UZ۪@F̄^CǿgŶ'Lőpc* -%_k d*3]7[cK510ch +(NŬp[".p=c7 jdw>WZp<><~p~P"5.Q_غZg2UB<ckkǸt5l'BR-R]Gyo veIǴ͠dduo3*SOG,=&]z2<M}O+;VOͻNXY6m5=vc[:n2F/B|ɼaɡekY|(ı SYwνq5 uX9,Q5zXo3qFq~XGJUu9aquU;IRn-􁦜զaS{fw9'9`ڋ5)jM24Qf I~PmM9 +_*波Xssۼok.'ö#ݭ +>bа`mP6J4S_R1I휈 3ˠ~0c@$'v8b@nF93MmlSj8t]jت}LRx6ki{[pP|oyQ[ y{yǵp ;dv]$T.>c."#8"Yb*5݌̊]?/4V{|#ۡTBbyF95rq pa4$p\g %pTY}c#gFM <`5=3'ϐY8Ef7ndЍYfYlUf`wv-hF*BTQX0ZUۻ#F}d +ȯv8c\`pd`]]nשm1P- ;xG>qD3n$GHG #owFL aFc@c%vߴx.۷0{>Nʺ÷!7derH9C)Q@s + `Om_Rn2>R8d,"V 98<w+`+N{Ǥ̲̘͝JWN -c/ IjϹQ +ذ9MקӠ|ݖQ8̛t|[\ Z`ԀVN֏;)^ytV;xMnFz` E_^dcU {TXљPv fggfQ̯^!táZOj:>DH׃%n46i1q=6JpӑӫFה`'1Iɖ[K XS@2N$)aʞ0r^gI'l +ǿ9 .;Rm X:R Yʅ\pU抴IA.)eln?!+#<۪ yijjw֘NPEV?#/Z<^3ǜIg'̜ ݬN3)cYP3=s#n!Ic8ĸ.RG 7(W#M:Zu-z-f +B1Sn>J&YjR?҃JVՑ[K.ڗL؝ʼnJVk5勀rI2ِ|n]H:K$37T!vf bJ?#f@iؤIeʁtⶑmgG² w9m!!>{6)ZJ)bWf^kɫn;f"p1. )\),8zlKS`+/SM^% +@$b* +`ϑm'NüSTk`3.&p$O KjP2i63נ԰ Κ:6Lm8b>22iw"NCfy+XrSiT%thUd*OV}zI$ddXȯh;Vsɓb,a7f-unS8[cœ3>*'tPզ00.sH[jBXOiI$].S`uv?]6[) ٶ$EMCaz/sΎ[b=uY(ۓ@Oeפ5uY]mJ!'kWr hfji^eZd?iq*%qPE zϻķǼ ˚cQxF@fc˳ scB _v[듁5<98U\IC+[.)sR8?XV $ЋQgn =>pfI K E15 6P_^{3(6m-.kN 3YWG<*<l~ЊZ* lSV=VaN}l|lc5]j~\wWWw/]<'D8 cW[[f9#bk/6zL*545$`qiȘvrƴ`=:OKo{3@dgh3bV>r{(M%{f Mvxj\ '+zCΆFx:yKm +9hsCmb̺uXWK$}#m#$&=`2d0Pcd#ǜmA80,7 ן(Hق'A #12*A%RKǯW?1۟YDyHy;s $7iq#h̻ I D;$jp@$w{6Grw,I~ q9(ojv$Wemy5Tp*uS$ c0ɓg!@$c"D%D֥s"fm;lN3٫!p$oiA_UXpD345/nph=:<\Aa~ã[SZjF<6؞ewbe*c!Txy< Jӱdr;9eF~QYHh +ng;{v9CzewxB͠q &Y{16vlͽTWZ*f9!f `>bw}m/? ^*(xqm>6Fud#%[Xew,'#xB%Ga+ihM=:gGRWhbg>xqǜqEk]~)R^@ *>3m!Ԗ6!GŦ6 K۲xϐvQlh3.'T-MeBX@eeF]n X,p 5:EVNQc9tN3~f_,@¨$>͹̀M[ d;*Փ'8gnv:aYN%`[ QT>)OE<9,I$S%Zm_(Zt>~Qċx^>3nF8Ŭ~߼~2QAB>ڕD0mNeyUzkFlԟԾp1g8XE[ I|Euth!̺7pGf'%mԨQs0ṘO iݳQny C#z,XImIQ\}eZuO6c'r5)4_iF*&ibXN`V)9d$6aYNș-aY2189X=]ԪiNqGiEZq^l8)d*݌ck qJX0!AQK%3A<'SuK+*U۸0{k,peNr~[#'9pZ8z($̷x ;r;[Ѳ爈)F9+X5>8z0T=Ǭă@= f jֽ٩ +<@\}b}PCgbF}x95PZs-3'svYvM jIYIm5\3G3-\f$8j`Y FNlPsf8S=lUk@|yK!Q^3<̺{P|զ6Ӝbf uTeLG*GlDui)&̱Qi,WNǸ$ÚiTG6<,{buh*Rjg`Wgm$m825qҗO#BNg3a(Ory?)CTMK6~2˫Fm=3r^2Ө#W@JILs[Y cft\ chl >fxnV g fc̐o<[Բ?9u8=?V6!1 `Ζl\`RlN}đŋ*ķpϴq[d$7&ưb5PA>~e}Sv'+dUt5{P\ciI\zCNuHQnFsؙjPN1OkH ^1? rg;B-%rM9$a7 +"@mЩ`8V&i 1).p9#r)35R˞m5XJ (2֡5;`8&f$b+ kOc+.yu&klM)ب䌜vR 5UVSv+ +nı&Y#8ѧ/I}2p3) -Tqȭhʈ=JU-c+Oc#m'#\yeDtpM36;]=53Oc(K~HU`,?Vc؞T麝9PU ɤVm$>̛m(*fTa&K#0KSqJrrF}e=a[FeŇcc@_x~ 60wx9(L+9'92v|dw0q4529,s3# m5?cYg˾{Mcĸ+p r$*%2`W /T*V1aqt8b~Rm!r-o=m-TM YUvLMwL09_xH1 ?jsCyB!wڿh5gaBس#8eld3dt>Q$Kyi`,@ +1ٓ:9IW#iPqc2X`dH ۈGG<3!yi/)"J˫$ ?   D#=4c1 QuKP>1TDטT# v9<(Jha#9#99S\v0*s+>RhG翬R#,3!BZ`Oi!1 +)_#gwn̓{T3#cp7^؁c̖] (mWg}8]TX1$vBbI@mHcag_%louȔ#֋./b|d-ذdGf_c&Pj9d\K v-/wJjmP,mmjv-D{pT:;>fo'%E˺*WjO +}Bۧe_aM5iΡ]5P)TT*]idqז=KP9-maL{{0Otpps ewA)Sm1mĞOSPX9yex`'_(RQgZm7])zxt <#ŹQGs6PtjFvQM)Κ{;|QPjV⻜U񞧩O>byuKj&-AKn^%M&/NӦj5}ڗl]zY&SVf%\qtzH!|ǑFwc]ڐچ(@B=ER5]yMi|}%t~馫{uWݶRv;jz=9gGUͤFGNZ~]_S³9OF*S08XtCM{c阖C+w%ۜZO-?SR5͓"'!& +'3F2Ϥ}.ThseyKuz5@#WA~pO$#=G5&^]Q*2-?x(Ӛ,Y! ~)X`O`Z|5#By#)D 7G>g1[Xx{|ĝ{0`E3Wuܖ՞3S졛gdv1;ʎˈ)E?Χs`_F&=#z{ﴩ-c7L +E)9Fq*d1f6{,ǹ0Xp"A8v-GǞrztu [S'^Fp;6%W@t ̜{DP[Ww'IfC'Y_C_RzŁle3!Փȑ +#eH=jjeF$)&dk^2@ndPGp#}a|-&f6ij| x2X +0&̌b Z܎ Zxٝ=k46]bwmL$܇hR#\*d,#һAL>7ԣ9XFR1 fxC ܌/UrUg|20K\wf[; Q%\q(J}y5 +"0zȥ9aKYoY>@f)%6=F{Y0Ys+[i'}fsJzK0 VǏYb-HUl#ry˙JΝqyՀTT0sU bA> +X +(\w22`s#;{?#bX-`v0 mc[`N=aanq)R\y(- +!jÜ%rA +<2,BqO}ɗHkh9 082M~?n5x~1>(~bVQ-a`f>}|rVew1)7=f;Țj6t-OiVHb[IJ.Iب,#݌sSvHTXF2P@FrN>*v08#+h=n0b;p| ɔ3n!a_|"ծ +_h1m +rYv'2;' h pG#.D c"h@$dy j{'w!UGe+cEmG<`Nj:v66`=d\8z5n +/~~sfMw +^x\UV7c5Sf-Fz8\*t1M6O@jnYmk7֜2!N&,2O`YRRǖ 'udm[{rsg-NI:诨mc_)MvCRJ^8ٵAVUGv*[+<&-a9}%xev'ٙˮ8UyͮX1.FJշ+v"T}#9ė<( ˅JrE-!i2KJtQY-L"RốVX _k IWR.@Vgv-a}w̗NNA"H')[߁ԝm_|fvj--Rf\Hܧt5=%ujtۖre#*qZxwR +*Oc.-Ja%]I(JX]3u5tjU񲭤fĊ:SըrtԬulg83 UiV%DۧlSmkm'K,ԊZlmQd6u n'9nxӖ2H +G]{ڻ ׻kl)j9egkiQJ=LIZ(0@Z+a%#9e|"5|[__1 03I9J-s3hh A+ǜVb{`j{d ~驪w/b}h7N95|x!֪9EdIFMq#j4U%d`q;ZaB̮Ó82 Iĕ2 2||dYJ)A9ī̲b9cVZLc~U>󟉜Tϸr=H[qWPy# Y#tq>rQX1.y1c:G4 vA\bF28 +|}s^T1#jTgm|m͓ L_qs40IrB{Ydxcnq_ ,<6b +nm#+IZ5ii+T& +ݤӀi&2}ZJh9X>g_q*=qPjgfRv>QP+Z$V +m%c&hSUf䜟HHhwvjxNlwP4"o23uר_V\ L2O O?eÆ=^GUmfE'!{10_xR=T}9iQmN켜ce)Mɤjm[]qġ;*s-ӡUlĸ@J*uO9,KK!%.BM޶>MΆjt6쾽. RdJ%VEU}suS[9vm,;3EV +T>ә],yϔ,Զ*5>ݎ[hqrga9O \ (##yY}aڦLmuӇ,~3/i6ZBM*|6\nF0bNGF[ Jճh+s%kFǼaϻ4621lJxha՛{3*@ 3]Mz] 5:A#S{8,ԕ*N'j'0ɍ# bI>F՟H8~ښxA[ F3̓.&9 `G +Xb48288 IW</ +,ny8=NCdC lՓyØ_wnI0 [K6>b@^1xa8zeb3jC +=gޒ#܍2v+>'92|eКݕ) ű7OWY_Rq>CB[R>rH}XMŀLG"2F[3Ȫ_0@(O̔g>`BdvϤc ؀=OhIc<Ɛ`G"O+& FILV18  }ـF̉%I X 89 1s@Ȍ\ 1'I>R3 M_9>R<栘@M"D`c*IU }9`^9?*1ǤE[(0UIYmrOF `$ a+s*i BD !@= O `:{# I(Ndڤ`e>P!شH) %فBd +z2ݚy2JH>riӗb>]q[ F/Ej!z-2dR8bH{$֖]k1f>],~_-PL.~p7ijz~4R=c Oq*-ܛ XYQ+z9c<lzz)Bx'HYF%A*}fٸ'쌟2.X91uۏ&`FcFj$m ygmi1#=vA%i36X? (!@Z =ޟ]a|k+EWzpy tBFI=zzIR3:[nŘ+8c q₻$) 88#e-3!P3RN!go:cIp$NHl2. c.z=Fp"[QUVcJbdʋceDs} H2cȢ[I7Y eUU`h-*qF;.sUfI$cVafɭK@!•sDց&[v@Q7TG2{Q`LݸY]Uv/[9i893LP2x"z%3ڡٮѷ3:WSlVE V%*op>D6>rj"ᑿ ]'>HR1%k+(ʿ$X샟)4 "3Ǚ*?΂:]Pzq7&{fwcϴ, ˡ p"Oؖ ++s!|\rVE|6K~SVIKߨWZ 1i=]%ZlQkm[7}q¸9P}cW8x-T2wSȕ?'ۢe3̢sEIF A91Ă߈Dd+,-jvU2@|$'=I23h3 8me2B`O,{Ō Ċ19,{s1 91w1ϫ*6RĜwD&'LwZ<}'?I9QtH5Z*vo)Գܩ`&խwn$9VNWc%0bk0ˮӵz: ʙrOQezkt5ٚQ- ?%a=E+`ƽ3>Z-.U{OmCXpH2z܇r6׹e=Gy^fXt3ʔ{v򔱚-@VEU+!ff-Otec^ +ȕ#ruFGVVV?4J +f48`eiKeaB `2[i1=&UPIJ]UCsm%*$d4, xpdžGEH63 n8}Kf2VqkQ616u B?h叇6BDt=`6nBF ap*h]%lE5 րR v.,*-<{d)}bczj2OԂpǑS-^LOeUÏ:lpr$5iX.kfgzvB]KԸW-cE@md2bJeh]nSXQ/:eTZK.'9^\]uؖ{S^R6[xjC;nr<6HW?e[+ðcYlZk`ˌ6X1gbI1l(Hإq{;KhDхxBYeTb~>r*)[qu^tfץ;otNgTh]~eH4یeZps{IdFoՓtFjB'|KBZ$Z}{̴7zvɑWO((5#q`2sǼ+<1w3*HsN-~IտZlmiv"M$J!X (ȍa#ŭFCTL]]jxږSXfU^W'שNVAQs55LC;}b (J93̕إǯ3ntjΒ.,v/_av˿𽀋o, +ޞR\)3=n~3rxY\v"nPݴ(iXՒXWkeԈ}F%PŇ@fSզqZx9~)'!0q7F4Aks16n,LAYu %˟w3wU]]xR/nୁi }2'IYi# =k&N0 P苍Oզ}MXՑϻ3鵽>uIv*08X抲c2kkn]G%9`iժzDlPxm^4zM.J҄ O/rZښNXk]13rpKu:HKz5un֓{Tm?8)t}csb-)q4iA}Dm,IԄ5 2-nW[u'xH'+"kU >5m(i(:MTǤgit.KP (`{Mlۛ_BjzJ Z~Wݦ֭.pܐr?9=x6˭7^]6_Oe +FLPޤk}8%+/] j)u*N*믏#|v6V֥_cyYR봡;Hȏ}~Bdu*zAjst~˜&R8 IkKT5<HQ'S'>R_ 푸ͺV,R 1,RbI1 qqzRP1?i,ߥ;l܉ء;FB(6n;8puڵGvNzPZT6'#QqNIcX,z8ensk 1Uz0f,j/ښũ٥]JZ +{tCԹ=.re7BnBv9)28ePUX"ia'9 wq.H$폓U*_(Z9 )0MDPr +zGD'Kc"R;b4`sȒ\ p0{[b֑$n$Cp>YUpNO2tqI>ҫ!#a%j 63S'[M;1Ce49j +9p0؛d-q 0V*3#W=M4{sG~n$p9,>O?Exa +ǿ)Ehvn)`ƱJҪb ,r*8%  2UN@<VdIݏ dW'7P~2#.v+3+%{+8.2y-Vnxy-dܘǑE.T7쓈HbTw0qpT;NX"#udo)8˾>:c/%Kr@2=WS8ĩM.kl G`G"fK?b91 k\nd'{2io wg $SMT ;I^W09>"U ;E-y!#~@B=R0cB Lr}%ENxrD f}+_W|r 8?_.>C#[GGV"8*Nczm:GҟC1+&IqV 0DG~uߤ^tkzW[B܉ӺlW ! +kLx3{;Mھ~kZGcߧrU_Qkd O_ > k5]4jihu>lN=gٽ/ϣd?UE+_{[c8ɐ7#@cSΫ_CtMkxU]hչ='3{ IUk5^M;Sh#<~!O:cJWM4x]eR˞9"~J +ӝ?83C^n=5tHJ3>Y`X2`1),'OjCNMOT"ʼn#ϩ7mi&.5va{;uϵ?hj'NKL;eB􎝫Ʊ5AWhS+j}bXw֡bo}cR a'~rpOWM1{'7~Q{Wp39:}1{+g\?K%z5Tgf4?1. #'g,WFu}B*ҽJ[6Kyc93[;j5VMoM h~Y]`}Վ:MCCoҡ28-~}}ci_EƬm!xQ7's> mzwOѧosTvǙ5{%SfQV'}-ujG($g 2{wWۿaڿfJʐ!(8<{'([.zVVrcCO~j Ӻ&O ٨nDzw3o=iHU7 +3^gO֏#,LCk>wƩw#뾍tiuMEM[yOeu'7_`Q*}r<$_0: 7ˬWvs~kbz 5V:.Ԋ + 'diU춄ׯr_Wp8VF{wK۴|[cYq'菡ӽ^EZ^=Z:WPZGL6YJ5D}ݷzϥT/ Wq呉5d6xŞpv^@OkI/Rj/Kʀrݱ>59'VkEWR"(7mBq9ɿhm8Ĭp2~}~tɧT5"܌q wWWtv jk,콸3QΫ]+ݨ Y^b {n;N !{:M[\c +mu8烌.+b%sv;f}7αjkѺM2Xǂ0>sߦ/g:]kzfǮ +HiӞ^M1>@@i]Խg J]['Z-j5-OaN9Ϝ_O.y=n?QVXmڤGSj+^zq|3ZY[C^2>cva)+V87Ytܥ\K,A%G:hlGn Al 3z]?{G +q; Ҵ3=[^r*7w7 +cm3zMY@8j'k xe^VFRL +/6Z\o[MGNLel0{MWBGykl޼)ɓMڳHo% +ò9Zjܞs A*lX{ߪjVxd9v%gWnN]oT*UF؞X}mYJ 2qpfV<=ˤ\>,N&j-iӢo4Q[5,Xɘh*SA u:VV[q;T`<>_&tNHz.RAPs5Nw\n9VXlbIfީAjdmsJݳ:}.QWjq)7u}w4(Qe0Z|f`ͫm5R}L4fPw$ i==fSַ f1=K+݀;b{͖9Sg(A#&xjO;Z{>z1 nTYZ-Iw#vn>]r*AH:)խp[MZuIxV٤soIl VuWPMMz Biq_,e؊wǬJ@jKLD|!l֭xʝIQE/Myr畏yr)>nK_߁~mRv 2;jJ)Ez6`U='Hu&v-OFb͏+i>g;fksR7YAD(jiŬ*aҺl2+)ZF%iĝRsʛ(ۇxexUpy9NfmiY>Rʐs15Rq/zW"o)70Ch<c Vz}r#nL.'E:ĵ}󙮑ҕv\N}W]]TU[`= Zŋ_-#c== +k.uM}o545U?>u¢N=¯,EHDn F!otY؈}S +Dg B1'+Wыn!v{fF+Cpp}bR8~ėN%1hWݬc| }v_Qkp PjvǶIvnm^{K/bݙ8ho.ST-Ĭ9(&;NLRTrp;Frύ%a ̃Mλ߀%-m`"U3K +YD{tױX{~2oK +W*)oChg u̔Hd@c)ïhxrĴ/_~X'3+[E78NlZx~ jZJu^oӃi|^?xb&Pd>{83m]jƱ߱p1Z)jk ! +~Bm ;,cm\nyM؆T֚M;)#;WҴF5얠'$1괉U -hPwy U$]Qڅ_yyN=7Y[WR :EZr20 =e_ͪݖJ'j[\ʾ\fuWlUJ-Z} +v"cu'jȲ.s\=`'YKk| p>Sc7Uv}<A2"sy%<鿭5h^2A3I ? [M]S(j39o_L =RӺkOL:v73XVs3ikNR` M\.ڋNKڦ]A&N@Er{M'e[kknAE-Щك.Al:wC}.D˶O uS<9gٔ#/>#WIQg&O zG +9R!+}t-=;H r~2Q,Hǻyt!7 𒅊r8#"7('BۀP~FEbln`7K ,$`;J*8BfQv Ďf?19ͨǤȼaIR8xAS͛63#%3U4l ggw*I>znC pG\N:L)k B|5d籒G8%z{ÞHRĒG|tʻJOFRmL\ +6lɬ1K̲KL%iwXJi*TpXLہ[Z¼ ( +״N>& =) _ib[U|p@'&rZ A}%Xed,FRyHR1,#=')A5IMH $%-lXX'1ӗ6cjK+zc4YYV'gbR=?KpFf2#+>\F*O g.AwFu8s.ch\rYi͌LP1P@3\u3<Y{qTcu=^'WYVm+xr}0-~Z"xM6a5u8ψH6Ҏ)v{tNxP hYۯο|J5gxW=Oִmj{d7*ÂG:% +fm_?yA?e@Im=Ͱj8'{r >}_k>MvTիH|. )*?'ItF1ce@~i_Zu]u4;6\,8|WIW>R?Up|ԏ<?g^.XM3:o?g>=_ajӵjB\Vgod>^꿭+7VA C>އ_n>#pCv(`yƼDݝ.zobz/I}3xݓj}cgZ6Y5@r+@p>(bf "V@?ht{ o-/v|7{l`d//:=}xWpZg>B_z_ SѷOx/F8ۉ'D=JEմ-J:c{Wzphpl޿f> 1KGoן3R~g[]~MNIe8#IeD<Q^Σjlx:~kgmOж3(q#/{) OftCSEF=!5y,OD V'^ګrV7|}odot}J1:;pO_jKkzgL;Oӽn]:Vsf=.fPG co3?_KkVް뺛źg=9h4^X_k={hv?GOu1sVZ +jX%F_c93?D?m:}SkPU5RA>Ig OOa\ղ +#*oS_*Q?<7A@B"ퟬx>i)&Y[j3 c&_=ܿj~aEqgEgiȎr3S/Dj( ??IПTgUsoG4c0nυ"GjU~s&K_eצI]&ӊ11> `|O$'YͷbpuAu:-)6 Bd gO_fٿf4iC]*cc vKneq|N?Yﵺfzγu=@K6[{?D{QmЛM#cvX=g֟ya{ ힻ]UZ-MYw>j=6귧j7#9l|+ӥ}cAc릪,rw=|%YJ//Mz49VϚ1]T>}WqsN1#H}{+$:ƢEKZF@݌yIJ=:xW u6w" ؜v_^N20gj {^t%2?&'?m:W_Ngzf`p|R/͖~Y8*y w'~z[[M]zn^}F,> ֢imWn}r^TN~GuM?ϳv[ӯ:9)kWm,;T?>=gU^^Fmc9|Oob:׺B-kQQ9'bjSԚ"|ѓՎIJZ.;_jty x#SU sϺK)~t1O.ϢnG C{w#V)"賧)#?U?]ioj+jn) ::qq5?F_J:%xO8/"|?WFOULP6޾f~:cmi}wb35e򏥯_}.WNdT}l;c 28VwGOPt}z.raŸ0y|462ˌɜ2E5#\6a?9u:\ s3/ >^J V +CtD#rPl{ }[J)ۙoVHLb]xWb<6Rx凜|0A;0ٳsڙfD6Xx-6k-?;P|ĨӷIe+~S%=#uYey|eQ15ʜ#HW%Ξ="զ̴МlFӌIOJ졿֯0tB%~26;ft:1T'''E˩bJAhhfkUi0K3v4.MSZ;NᙧFBeM56S,͛zQY,Wxu\f>H$sgP*(X2cФ]8Ziv0;Li63xss0n 3Ņ(ta%c( #WjX֠fͳB&Tq imFC^UgSa`8 Iud4jB8+t7W%qym:sMrn)z%l +rsE4#aNe?aNF2?KѨ3HkaQNyIxTSfӜm@sv89>_PۦU6[vd|r@osˋiYkdFr&5J :e>8{qԕTagx`&"0l(Uk5-Ug)*UrAw=-+G$"g{hNvBm|6FNKu]5z|mp>r0;7.9mLVUEKﺮ;;tv>꼉P8JNv'>Mn}VAU9v9DfQ]«YMfGP*%>^дZJ\uV'u_XGq%7u  F10>PI&gR۩J$1@eQ`,G=j+Ӳmr:t}9.|{r=fV98(SAu6K( p#Y]Zxvper]˹f'': 3zO>H?3'(ٮhR{ ~w3ww +\A[*9%UR2GObGi*_,u[n|xף )zftEmٛ0)R3n2O}›~nˣj4A*LPPTNzp{`Tuכ)WxYeYC(1VGRKZlZS;{h'fʛ_X.T_Q#|v#N‡;rs=j7lU +019\fz>jRYo(?) >3"CoKFaMWeP7Of1KXYP[Fپ2*[^q[mv5$xYqf c'QdtFX[h+[hˌj1(wfʐLdKVm#uaϤͫҒoh`p _,b&I`ffUҍ!w|5dͨFg 69H7 2X[ՉKMSi=ݪiӡ{`%Z&+S YƐ7*$Jf;s%LXϥANxݑ,2NinB3j-Bo!kPF\ޏ˙n dg&Y5-3,2y:}>A r:_TPq*UUh _|:cp7[_X[PhW^xl,0}&j:uN|)JgɾEzvm=Az-a{1h/n}sESN9Jw96e9_ Wa˜NF9@faLI>y078a@>f\ma𕳐;*cr>0w$(Tjl(7x2d($GyUk  e{>!oxMy&j6|6Ր%xr=k?dq(a1FI8'ʈ$#M!XJY\0aeA\O9J3݃KOq2Ѕ8<,Z HɰnP@:EFDD#k[\,;G t<ٲF$ F}gW&Xp%ViQ|#dZ^øy I-(3RҠ(,1A˴2nC##7w$}9¡KjaHlIj>s;ds'x=&6"DL  |[X,XtSS-52*?/Q=t-vN1v FHjN e{OZ +ȅ~E]3_zP)_QT/a۴z~Oi]n_n{\~gP+EESǩ11Nf P|#=.ehP.8TD| ga_P?PMOJ?F+Y +뺊-2c"'G :ꕵ=`rV G#b|3鹉^VʑNuME-N뮩)fHpeھH7RU{v>EK?xgQ Q_H9RF>LxVUJ$B!;yF(v +qB+* ;s\p8^"x'f~R3% +"K^PǬLq&U>4r4O3GՎRBc6#FN> zHR:Goߺ eZWtCfMZ>paGPAMMQ+[lǚ˥KgUaG!$ 3YNH%s UXu56>2'VLf+Ws 퐹~8=6'F + )6ϔ*3pr~8v7v_EUu1Sr5'0& 5!E>-\.D1lNw*,sWϜavi'4`fHP0v%e+ȮEROqt2Ӹ]Uc&=a8's*s2bg`LrX>`_pskŸC#^jPQ_WeBv)Ű,;}$1`H󑥭yw{Xb}9Ǭ~44xFpb{pJ5=T/%fs6kB7UՌ7$ZCzk5p q*rƃRd+b/IbYl`\}wjS{g.!|yf8Sc8VF3*]PsX@!eے~"sn;})dV#Ao,wP q12A@Qi{ u5);a ?*Ł/KXnϬift + =bp3%9aVX'$]̂ܞ-X38̾-.B*D,QcK:.K߀O8X!:dޠxd1~0JW8ɦ^ +(N'Gs'LV9reCAb_NH'Nm$M,_M(W %] H 1p™+c0-kс|+} +=ۍ[zsW]{lUw(埈.e^wn#9ҸL3gI'$n=s+A}{SB +1>~.}r"m]0HۓbsE+08UUnQpNfM٨XI;k[|u^ I?-vDZ5ʰ{,wMWk yAĮB$oZm*q7r|fpp>\ukep%^_yIJƩ$F +Ẏ$)ëR2Jyl ۜre) ̭ [eJ2SjT=3؊GWOybOay_)zo+7nW3q|%m= =Nyb7y0$VdSEk+͞[pGit37AĭUhfYu|LC>SJ;(\dUԴ-bc]~3Mlxg邊2UYLbBXnc̚;';-Y]McQ 89ȼX@;ۅn52شrq󋧥T84-ʮ:FX{ .}q1k2y7I 10m]Luf2yJnsvp%& +W{J;s163GH#0S|TvdKf=x+-n,(V=3nq1`(bG9H$pL 5t<}f_ra[2+2DV CvqC"g@dhR +ɷohQܫ;V9TZfӶ2X;)T\OX{E5+9)vPլZú#r)m>yIb| P`3ׂ 8zJyYYp8#/*9"% +x08U8l|[s>xi9LĞW>6ɱIU0-vj[(4qNN<t[+RVR;NS>PBG>>~oiojӲ'c(J {ߡGFXuR^}`^ 2;!)J|ϷE:~2.m-f>?9{#ѽ}GA׺CVZp:޺m:3c(~v{O'T21?_YJȷB:4|-TP3>]=juRiYʎ@83}{ ӽ/UjMBXLʤHrItxo +ƫ +|^MGRstۣW@H=׎:KVz^[>fsO(;w1?Y}${ =B{4mWx7"n 9ܧ?dO͟H AuVt2Yc1%ryPey<7۞R+2ԭl`㌞DlZZ98MitרZX<x"{_W6ңubH!G?B[ۨu]wYf&ܿEtۺOHm}pF}>+f_ q8Oy=/x'>ZPv۪tݖ8jGZgAlwK$v>smWj,moEFԡlga݌'v2`0z9 |?C}{k*K };rG3WnQMtmεV~fN*۸n }V XQ>?{wVu5ꊕz=̀6gn~98F_Dkt:oKso} }<ԯ7)E҈ÝAV}ݾ=,E?{)=P{.KTP rDqƗoyNKZQzh_|Rբ)V?.!b {/`5>j(AtS>3$xy}^l4tuN8p8LvonA?)p GlϸЇ~Ծ|ZAdg؛+-]w6#y+hc>lr}{3׽TjoV/R_RrG>^sGЏ+=FHMED'(OGOaoL[4#U}n:L ;OSFj ǟXO*AoC*# "v;-4ʘhV="kyH_O_)xm@C `0WɴI 9h]F$u=9 Xv`܈[h 2|f.ve~2p X6S}ʫQpnbpr+.\162׹@`; DpnB; v;dL+ZXw)|x^Sg VVg6s TR[>Jw[=/O}1zl*ǹ|;jlj{FN 8muk1ϜPYJ` +9L1D!iy`Xboe+6;X`dn}2O?s7s~js~|e,;~YĿZu,)I8oE3^ڶ>#U2pW# 1nO+*ǟKQ*aQYO$ ʧ k)CN *`%Չ`H}T` C#)nJy/rHfp8lq̽vx=G0,Č^UU(%_مhsR;k}WxKk*%g8M%$+p쏌jc|!Gko Aq Bͻrq3]*`Gi{(6r$o_Q+(R$:Wq؈ܱfYBGۃ_Q7ΥŰ{|iAYƒQ%PVe}W9F*`nLf2TJX $O>\ E1<˪R${i{i5 0°cKUl1/,G㜏82jcR9VvRcՕFҹ=ϔw(!3o& 2A{+mrs۞D0MZRlfm8vĮJy]֖yϳ3]U+}2*7wv1f/Pp zu\ӠSea;cT2&Jݹ^޳BgcNT"%c +9%=zLL>Xi!30Oy5Pw-~j>sX.>ry3}ժNN=}]<~ܙu:?'*ۜ|]\++{Ym+"eJ° TU2[5)b IyX[=cޮK!5}U63_xy">'hHeֱ@(Tb:w,hX<.&ShFH;Yh`jF5Hd|1xu#1Je|y2D;"jJ;d m:jR*mT#Ů?yݵ'0{n6@mpz8,kR}mqѢflZ +@i2癝I'-H6v3MǟoDEm4;w@8]Ԏϊ +|Vmle +\`ĉY dX}2=:]N8O.%VcBi ;9e[c ?gnG}'+]ytq_{r9:DA8і!3<&׵XpJzn[R6"@cyCwrŨlN85VU98(itfMl|5Y$Q@=>(·^[L{vm]Y9ve378'9áJǒ;:=&ezzNV&<˫lVs=%r~3Vm] ϤQuX#TsWe}"^,E eUv2O1Fk㓎f+)z7Rǧ:}3ev)t `ڛx縕88zGv-}bR\cq}c8ı=8\s2ՍhzHc!0o&2f13>R$~f;T6{v6sJ2߉6RGCT"-c!|! W +W;.O3涷 adx؂\Qv[d g`1 +'@#w0r v! @J0coǤs' peВAA,(2+]Ur#b UJW`L|-g{),A~сBەLqen ӪڤKR 젉 SݒTw9-Ban+#kI-g0abFNfS?GE~ru_i,#W_XWw&|W%kQ(B~;gNo15lwn9OJX?Hgls?I}7EoB`ɥ_X٨ZO9uOSD5j:i'j(PIlO4u:t:}oElCMnBA>x~?g[MPWbF3(:UGZգ5FW +W?_L4hgvRuP,3B^}w^XTA@q|K.T&J鳸5Ǔ2}>=?Oo]}y 'Y Nզ0º??5꽚W\١}Mx$dz|dWw{)FUZ ]eBPy9u-6G:ڶY|ֳY?[YU-EѾTѫ*h̹67 w$guGߪSPxlg;x|۟vZdsC^ht(kV_]ܶGοR/hO=3R~Xry~j`dd}#ndzN5:kF-’ p8k]_^D}1%ioRx=@0|4UZZ:s8 +lkSVX6Π@8sH?Ej=z[Yj꭪ ; ˥ޟ[ +ZgfUb}x?OV۟iA-Roump?.Oѧъ/WRKLjıUzϝFgUn@mBq`ۧ[vu/%+mRl P13IMuE۴zGBH$"T_N'GT9UԷEᴶ;  Ik뿣jj+h $S gHGRn ܊]K+1} ozGE_ [ռ. 2} ֛-J]q#O=rֽM3F7~X?~@':O:iZ=`^>&zc$c8Mw\:W;APv9fCKV]~zv;IpBt?g={ GfK}AӒxrW_>ggю[.WWPzQ۴pF|2m~OEgWWczƞbxmϏ}U_Lu 0RSۏ1:/zPd銈Z [PGs9DQg_]U>,Ec? )S(mwG|UW|诧d級wB\(WbU+a c3QznFMb0qs&^ےie.=14tJ+>tZoY?=_?}~nuz}RUrPOdkݣu]#ꗥcS'jEaJDPIOc_R O_H]{e="mBW6vg8oч:kt~Ehǒ'?:]umz:3K#>tϢ4W4#PGu\OHO}4__u>z_ʺ^_GI_YSϑ\K';kYwҗLV5_9ݟgD=YYE:4 ]r 19ϜU'Al:=UQUȜ}f^I4ݛdgG:zΟ#~D{? ߢasQXʠ~`%?AѽJ~'%}]'Y:ۅZ1e۞xL.Di:?5YjuCv>O}QizRiV`{˂G^uoh]mju辒 + +dR|`mg>t.z/]kVp"vS=w٭ +(U`oŧok>zCݴ'?s? _GbGnUVP+VBXv;+N''='ކ=㺑W~pB{Mӵ5UX$-oJ_MW~tuYNNeXT3.>p?m=7跥ף4#P0Gu\L 8/ğ.a'E}~aq?"y_{4gYn¬<}=|T;q:v:-%ZJSS}y~SaK +[b5,٩}@'8?A~ڎR#{b[[B~ќixb9q|>jzQ9P "|.GIo55u}+mR,`KOmB 8۬WԞlz(@n;k[c/ntD +dp"%  Jp@k*W6|D AyjfC2E)@A7jk ݉l)|9&n ER;],Ϥ ds)p$c֝%WF'Yw@9j 2v3[,>0•K5/w$z;MЫ֕#X}`z3ٓksLK~Dn5!xS .!Wp,[<ʋ?1$Tp(fb2wɨzmfwxLr$ooq#`[܊~BXpɶ5[>FƖPVI ve"SP~2.S_Vr2{{3;ŠF*hBe>EeU@x\TMǦ#k'48. e+d#&zZzwZJ_BjC v3'xj]zǻJYsnKĨg]G>nf3&f +|SJRg1Nxlsܓ%qƮb1tV{yȴ 陫NtV''{ tÜ+|F%K#: f\*hX ^qMT:g[/gdfx*AUj]hm=9eqmI]060R9$$zֽ s%v?q6f]y STK3;eaw7X#C}4!N&(KNJ8۟j[>o^_h>+lŬ}vGyveUn3Uѳ-__}M/- ?ůohvc~PWlg״|SPz`7'ۯ-j&cMkmٌUS\Mb*|gZ*NF%g?~`w2.- +$2dZ\1\;ɒxA8ekfcJrG I(Lw1@Us~r9"rJr>8WO)adF<.+ظ&sbU82a>l9굳~R^$Kҁ}DFp[a{I9T͞9; pmlzMi n,~܌BO3OEa36jE:1#[^*>f{FJyHSfCo %`_ޭ;@ 3e{2ִm/Mhyvmy[PV+ TN|_gr&*˕nsSYܤ(#5l*ǀs)}ˤ^حJ^w=L|R'!|b +6s`k!>YېF籀&/Pq>+R'2,> !Y*,ؼwLf + w˭j㟌BAN`YTFCXcDE<Xqb, 2Fa1Aə,>Q[ _{JնWx[x=/ kR㌎0.i+8.6XHA&C,/ J3N붵Lw fvkI>}Us R@]}=c[rDDX|ð9P8p`G6)&s^WkUwrN= Jibz`:װ Fi4Vթcكm0<]x? Nq,_:5}OU]kZmu@I?{og{=hcQԭmn\8|!ȗ,Û(p$Gg4tYʩt>9EM4wLDP۾D(?zMET잸1{`#kҟh_Iץ0Ŕ(|Xqըfd\V\q=C^t6t6?kv! 8‰Q}WR"%ڻZjB{N?϶H>iEҡܺ]:>d~d^6S.}Ubf=gׂmFG4{S:TW{VөU8$|-][5u5UˀGpxT3r@=Fu 1[dc_Oo]WWE&W V +,Ad>=z4el4C8%3{A~룪<;+1zoXS&Yl̎Ƨ[7HfI,9Yon }?\B+p` |ٿo[561{I +˞2;w>SHSΝ]ߪ45[F'>{wSO5^GNwUefg}_ڔE$Xޙ|[kC#S3:M~ ᷑Gǘ3_@^ui9[M=у^}|%)T:2?:^*'YVy[2GRlRt]FN sz-B:xw*@< 9yMUe^w3S:E۴C8#~[{֩~ivdUZ#~dO + +C&r$ܓ. ۸.[ng?OSWYGG.]V˭~H q{C/[դP9Iv<EFdd˺w{iֽi]OO=j+`Ŷ,F0p:?Su:41B| p2b&Òi}k0V.}?xk}qz&R$Yтlo[OGvTgL z[jR-a,A1{MB]=:5IK3BΛm#&oR&v?S{Pzc}\tmi, CY__MNXnԸtN~*l]?KxikkXA8/V6vKhS"^F{^䟻4ohtWizqW@߰.~3Q[ʜ z}StSucrc =6~Qrs$\fԩuScҙ4>O<ߵ>j6Pri*S̓qŋʺWYIqZ->%*6>N}H+pGVرyOFI:W_,=nc^pj?Y < Ӹݻ՝Lt:uJS8W63:+ZsgO/5N|9K1*:~YoN;h#+P~SNYYD֑۟麍 Ghclm0ŭQ<8sM52i0(q/$(kvPt7K+V(PQa9cLܣK +{փ>')74(sOS:H+7lH'#t7X[ dK3qiwm\Č{Հ=Xp)'4e+ԂģpOnRp2GcvVbI&iVЧG=Ep͹s`-u}p MM]ՖKq3!-KIjF9P1T;WfKGMA+1lɱ*L}=wC abHV6`(9l|"U)َ&[ϊ1ny6޺[s*.'30̺6Hj1/R&rcN6!->rQzcR= pJVȈd^T| qW&3I;2j}CԳ TӺ>*V`I=R %XDt [1Pgu7U+ M3**=ImZ/eĚ7J֘ +35SgW@X/-* 3i( uկflʚjs!GfG$E̜r<}_p +ԦsfԀ?fiـ w% l9V y{Ucv&u <7X +e2#bIϨ9̖ +ܐs]ֹn=ݣT_$ܬj d@?1&_Oi$c#sʑ5mRe?hbYwnIj̬wn +2S`>R;'hxER+(r ̻ H㴓% n6'Vt9'T[9@!3S*$iW qS/XEl>ɇrsYyQU: +95k2NĹ/wEWY#iGh+~;Pdl!BVwX@ڄ!UrC@wV9Z(ԶVkNgO8u Ĺ1zk +O>QIP2 P "%XvAsA5+?e G? [ +rö#5=9ojW"V7 + cj}2I>YB'v;zAKSyV AE s}?ͬZwڭg'E*C1ޠdo2X&H;qؑ$0\k@ϧqUW3Ekc1f@<|dkvS ')Q-xRTV11 0019Kgc_2~ ́}c*3"G+KEQϠ=UA Gݽ8({KbXgP(xh}mNtNq_M{#̲qk ==fSUYрA f{)O}Kl6pAv4Au~Ԇ%{ 1񛃿} +J޾e˦3괚WONzΝRRsOVzFH6YJT]}WKT ?e7ڻVn\nO.ߥ_uZgiO+uVUVsej+d{ ڣ:4+Ґꁆ>YsRS9[T~:qb713VϾxlT0 UJ 麆5Z;q&\'-jmٷwyh^RN  d=m^uLd7m ˙γKVt}=pQ"6$UjV*_fʃly`}_u:zDޕ][P,{p@#>kR5tu?TUs\FIm^6U@O$wWҺZW6AuPnKؤAeqE4ƶ֫'OKR~+AvZi.\g3>ֺ~R嶔ɖt0=c۷_F{~kTM]5Ǯ.kSN@yyIUP«&KPmwiu^]-evR#(o9꺽&%{ 2OPp}{;Ѫr *1G3>Wa;} uotf ; c22{7Vm-TW +XvRIc +xh:fZ֩V +Q%NT0 <~iO^SUڗW +0Opy6Z?:ܤ3[Qu5=,$.{sħib4ZuyOKZzA1J:OBz:ڲ+DbtknH$A2mddʑu!+*uC)Aeǒry Ɛ!+ȗ'S0 xkAog~fSgnңcBcvJv2E99?aϜ7HEI!p W߱E+6_Y+d!v龨f PPc9[NYawoCk4%I`Z>Kɛc(:4?)V0]xT7[ΒNEBѶqqn6"2 S9S;Jq:5UuՆ/AC9zsZ\T?#,t߇;I\k^n5(q?]&ԩ + Q~fS>LTigMj&Mu;|L=Jf-vSJcUxېЉUT&y72Z;BT8 MϡBsM+:+V贚]1f+#)ë/FUB;l9lc"WE^PFLе.$ ċ%U}%Jl HN7MEGd#kU2@̑ H'9OD XこVc}DwA$ge0*\Gp9PWx f+<̃!B;tfa$N$m9 1$@C֥U9=lVX fq=ܫgj-at6mE u_2T0Y7-%?zԘ ?K~ӵH,lYxW+mEKȴ7Z\>Uяesګ<2oצڔ9z +gd ~&Cdiy~fTԽ;\ܙ5TjWHj m9[^@̅ZڭrKg^0vi}K)=6DfZ0n \.+,M }YPβjr:+ii&]0<%N" T(QY;rd8!g)q[ >{%_!`PV ʨ93~MNQ +OL[O&U4V.IygfQVp?8}_T'?2ήֶ#;yiLb)IT^8^ݹī`{_Ood0X9S^N8 +bWp}J>e +98x`8F 1 ¬nE/2OZskMC;˵Ca +}wIYs{ y8򙵛RكCؖİxw`/pe <ʊ3p?9Fٍbs2UIiМ7#I99zJ?-+Ÿt[EQϜceygMyߖbxe{-Ӣ3\on]@0aYDnߐGoI*x?(ff a0-#J 3 +Y؞Ǵ}!p"Nks̬LcEqD/'2 &yĔ^XݏըhϬn5eYNH#!g+D\n2 lyMiRNNѓ.@T哂{šr̻ROq,L%bq)W;@ĕM~04Ȩ>ySs] Rmq^[Ƞ+#Kb>-kQRZ +ؾE-. + soI uZ3fYmځeo(Q5G5ܷn[ 8ԩ ?7!:aGi4{]CλP3~)s=zBN~lLn2NQcOҾV苦V *uQH%ݎNQuhO:~ʒpI>i~ud(UJyrS<*y&{#Y֡ڝ3  iu{=KդV7(>?b}S-V6&;ٍCe`0BA'CGUf +2N3pWCꮟVM:@U{{/?3{z}[T1'ܽzWJ_kzCÍYZ2l5NtXVĤm=w'BOj۬}1dQP0N}&_/f~=ZVOև1=jzb9fBL&G_Wt$jh@ϗ3{cGN&WzgOYLI/v8Xo>yow/Q&u~ܮ^qAn,5Ѳ?>gۄjݔ, M2[MTԯñʃ|K}'_W} zuz6EV I/jmjPiÁdzOϝ/]G}6[UQ+:Z?D}9>xH'by?d4=N/UuSn\!_=7ӺxGWJ{@GѮ{uXZU=gU}1u\^MfӁ{sPJEz7#/F# s}0O-V70TOXWS5TTyKgRjW^쉋'hg:BGmgZ!,NrI3+W5 'JO'O6#*e};}ڭ2a6# fѩ`V.'G|~?O`GYjOG!n_zKI_o%S'۪=zNBKm)bUXvFqH-_K*=Jϓ[_uk,}zWZW%Hl|g7Ze'Noꩬ}'/7^^=)t#v?U:Ҁ?nyY^:'Om>Dm8kgv`~Sλ>eWV q:_Lobzn]]EW\j+fqF;HhTdM4{\WZ*9(^Q| -?cK{R91Ί=UU(Z2kX~Պ%B|#9RG|̤jJ@b T  +#\:ed;G/nQ}oLTٻo2^xb~ȚڎZ7`L1m5ch&URqhw73O[YI>rڵ {I=ߩ-V]O GPN%-JhINFk(+ay%DxU`=f:VBVެ(e 26bh6p.9.UFr;LbmTJ7?WWi]B6X3915#jԚ hEzZUXK5#5rFx3su +}X*D<ΗY].P:5{<1h8>RQ$g<Ч-#/w e(VT}cϷROAc5+iB#Ut.*5d9ya~rN|J|5 +ͥ BNezm](tԾD 6+0ecwN]N~;}-[r 90!o{1x0$̭@d>($GP!U@I{ݢ8 X J0Y' O'Ű%g)e`,Lv.2X[,skJ'8,*55cΥO"cA iL!1s=)_3' '!. +<aVTجm9&yVͪ-Edw&8(2fG֐a251x=G[ӟ W5,ۛBF7]m\;K~Eĵ;`eSc&]g'nJń`@]lP8c@r<;O6rF6y謌$\eR׎2;8e<Z>|"gO2IhV=XsENU؅? n,@+ b"0 o<6@aUCZ\flR_ԋ۩؆DZnvu4,r?aF%v ,h2=q Ն%>߼{ʩӑ26Cv¥w&s*m![icvKMJ}%;>AER{IWW\w?a[j*ɱ{Ec8="Ȁ2f)USu-$'S)rJ Ef;7"TĮND~1$rnjʡrCZϏƒ')i6sv܀}dW癶n QXv.Y7%%U JFG1K}Jg'*I6)RX?kPUG#c +3A-_>`*H1d7nXa-JZ!uy1<7/J۶ ҚinAN9s->PQCbHA>K8&)o*$XFWidJM[#?Q-w`ۉ=mVvv"b ÷B91737D +1[J[] ~H8w"[}:M`=5&ZBEC70'=yˉ5}u Xǂ}^Weئ<0MRJ[},+m o,/ĿPv4U]Sa8a=0q"beJ,բv:*݀q,BZ y۳<6:X-TW*GOOϷ:gZԜӢԸ+Un!Zh[nr|[.!N,kn]K]>-NƍggW{QRkZJ%֥Nr6gc?6hʊ!L5pjg/_k4TW~hi#h3? Yu='YFMk3d3ȞWk{̮Ca4ٸ053E:zVm}nMN+f_ F@'A5@W׬~&Ju.jzHuu>`sifjܓ\]6R +'$tDu_UMۗfe9>׫C=viP]`:  ]tօKOy ,ȯ}0(t +_dmTni춟4T D8p>>4B{C~w/E軎,J |ni%-ˁ`K~tίԺP{űxh|nϘߥއv{9uc~j(\UEx|8 V(Y|g*}$TP{KB^i"5ʩk,je'k`wqijDkWPz`U[$Z3MkXpdSϤ/ao:NCz'iP޸zqyOzUoCuaaϡk%+%"ScyEo}]?Y:ik٧jsA /ODӣcz[Rp g887ju +QB}щ@c[i{Qo{tN=.:nSeJ(' S퍞5Z~]Ud5ox'ugL֨yNYM6&wT%m?A/wյOW}~0 #q3h_/g델{ʍc]FbOo)Sq +9yg-EmV'D}裨׭QC5WƵP9ϟuUh]r[V¯b"+lRqA_u*t=KV/R@!cGci=_Pj˕Xe،} V#hS]d@ňB ~=h [i]G_7ФSڊ{2>|8{Iڤ ]u4 ܨpۜʏ?폱=_д}U.:`3}1-zj~SʭEhr֘ KW3Ѫn#s1KOНOn==3[bU;jr?i,9r3>}1"Λ}{k>WpL_NK-bziz76 +̬H_kJY@gq>>yhjϚjrp~3x=PNgpl1ڀϨ kgܪlrOjIP#D,'cIOSXOZVN6%S":r 3wM6(Hۓ0u v |iﺑ| _iٵmTK::Y j+.÷˭EFO>+=Sk -e,uI ϒ]p6j.ݪx  q@V@#>cF5NQ +Ek<~0)PXpʠy`K&*nk߱(f=R8&T+#\HR4.Z9 =AJP< Q#Fksj,kqĹ~Ns QuV}DM`)'zr83.~WV}2i!A&WijhGzm8MONY{kK%1Tx 8ZuTߧֵ5ѧk\gLP9Aqu]^QM5fZ{Qj +q9O=̨ը}C,$L>sR.Ks܌L͐OY]>O n.Jهק$&q|c2fZH׀eھkfJG,O^q񺎅nwZ;u.v>xӺwB_SN-DzRP%چ|hi:H@b|Nkjͯ~ .u |'*6ihO#^@o҇*Հ\ p`IQC_Yp1#Nª<5xVʁ,QZx[B<"[V˴vnjjڥ@#&vM:w"GS]SZk%a&ov/wA' }uF +"6yU(o2c-NOgQ5jEqvtӒtL da5$,>\ W>MWtfEn .vf?Aa_P9m|XqƝ < ENoGm2۫hPڰn?a;Fŕ-='Ge,e!x8Vu*)V=lS.fy?)6tw֌quF&{=%$d8)ߓ,  ypeRJyA`KD;v >UHPHBx`hڸ9aoq/6Ғ9L̍$$B&"J>hUs-SYǜ0[A`Ia ̴8Ul %C"3lb`=Jn|q)#@΢8PݢI91ps*7Bc- +y" [=䁘m8 POif*1fH2į.WMvB!YR8ߧB<9e"+285!v }pFУymD@̬rIGY؁IH v%6c@DU^dɗ9cpeAuGZ%~R +fc H"*g;?G=,kQ8 x cU;XUe GLyVH)X;:@0LrjO=!uiI wnh2wS"`HzgnqK|MWZ*t7_?~ow~>F}- W>et$[MG8u$hﻴ36*1ɐr_ E=fӫ"%-6~+ +w5Q,"7 P*XҚtrsi~ !b.˩b=󕯘) +=̷#h':l\0}_&85^}<] [G̲تP~p9E\x,ϔ +쀅Q7dƲe aaD0(|+'}J' |&w1mc΍*,l1'[pBQF{fEd +Cc;`LڈyGE}* #29 (i*ygplKLuuʆv{h*W$y) +K }3JK^bV SM1ؼ%ʩ{1kIus w.O)b2Aڠc&H_pF0KYݣ > xMa^9+r3_#'=cĴw691m啷3R66HD*0[`hSeじ=:2l$v#H򓍃dbv5^s/3),[&*# "v 'vY09ۘ׾ZĠ&:.)ђb~ǜO9C'%Gt +m*0>sӥn1pg5 Mm &rVrsqd)؝}GK7-r8 (QFScDyh"7݄Qm[/Z"~"ruwT4*T{2JlW2lA_lPq1 cbuaǼp"u +˵+=GRtuW+Hhb[jvz͝>i5rX0̶*#+_9Fi +3pdH_,Ij +: +,r9NwH> I="uװ:uVBڒԶf@e_,LzmnQF%ɯ u,ĎAtOktNӍiEΘdI%C@6VeçVDP83=SmS}&P]U{whcU쾴NBߧEe'ft~wAhz5vCѵ]j:gR._~)Ϲ2ʯ'޾=_:[IA- jlǺUO1>m:GN˩S]WWf=_#:cʍ5`n 8w:J,i{i>kP8ű F Ϩ(`a+I(njSA6٨K@mGQ[2# |ĩ9U,Mã?@l=VmJHY1)-tڄTU'zWa$>t%5KS3qyod)OlzVYj*j7\=9O2tWrb{]oB~J5ZT5[cx=־=oُg?KhzhI{Cү[T+,0VܺGI=7*af9'"U";ُjz[hƲ-u5emtl3w雠teAҝ>ugpNX$]~DT=B->':_Y5?C魬nΕ v3G7#eO^L@fbFmjsUZصQ̦\3}fÑ~oc/>_O:;`3G蹫>'ֺNjhoENX'J^umP; *}_ٿczW)=;["鎒F'/ry["GyuZ|p>q +/xunIXn_O[\+`sm[u +QG=G]>1껉v"ۉ^r(WKYm֋؄o b~~:>uzFB\tWgp8s}e5ZUv6=%Ze;3^T0T>`@}PX[,@~PW\cv~fEVr"<2mVۨjIuUWI}>qYɷP1 \EzO)SA-iܱ݀9f9 @m{WTe}shm?k+&l)ax5n(&kc~?ctdP_.fNáJS<+UC|e+5upGr1]2C=̱/WCYY cbӭY +Fq.$S$ 1>"k.`vzc /! g2ImiX=9GǴZ 3Q+fO5&m9z*V^}3U`p _<*j.}:ʎȰ嘯?^:mGUkegZRKZI˟zѴ'J6ZO}ǃ5M(Z%8Q]Ya&VXrI̲pֶ=xfFl=&qʛY$UDզu֒K?ݏ>$#Q(AϜldU5ڥSهMB +̀H\%~٫vAVaeS?Pqԁ6z M(OZIotZgy[Y 2 3Hڳ$h5yVG8OLp^q?GwM#G~PK +@lC~Px-"scdEkjZ/`?RCu㎕Wg@65l7T9:k?v 1^=]3V[7TxD.9jG7 =bAӲ-PjoehBϬs6[B{v;KǨt4|Sn\E5C^ͅSJXz!U*T|/JF~sF<)'pGIβ*% 3'a93ӧE} ۓŲC~*{O,8.r1.;^Bڙ#GbgI>?X.q'pb^Td[hI|Ό3'r +hy19Ȇ$TiTzs-:t`2c_IzgyG.;fZd'rքV +Ĝ/:!4ȃp򐥏&4G ;*,g{b >g}B6|T+NO1C/Ԫc㼝9vٙ#'״,-L|1\ھ^%w8;BZsbZu/qop͕l᳃%n#[0]$F=nʁz:}&?y5'[{f=k΢\ykc&pySs%Cp::u^݀^#*q u9~uDءEALXkjҭ6ٹpkΗC898Dw:Scvv񙪻WJ3Q}{P eO,N'CJU`HS99~èEL>~q*2SS`[194 X-R{4/fE./5T=DihYů>-Sr{g}9:^j0 `<~q}U}siGq +~dgOk폳i:OT2Y'q??G*:>5h_\؀&:˕<騿~PlTZˍMlM~} {5u:R״F} uOQյòU*RT?3Rg޾}3ftZU[?! 7c$ccKzG_~MIq6G}CS֊PA$S>-'AWil[AvA { wtnq /U~m6H%)?~G@=ݠKzih +,E=cw/BhuBSqB?z#Mӵibݷ /{5'S}!tj(vZ[T2|C8=uΏ}zi4me>`9_a,hSF,]˥/@??M~ue=``#>`꺽z.]q[7"?qIdjZn:_v>*g+_ѺZ.F0Ad~]DJS{,66jBT=ѕ@}!t&(Kgo=鴴]dkS$ f:OOuZ`W;9P8HŽ+-g~{'68nK'3ޟn~<{+۩jk[ny>yoE >]m#GPYڪ7(\ z}A[FC~}āLmqlU:>:DuhRv>q8󙿣G}Q} P= 4i@#gAߣ~g44"TwRH+ndDz}t1zSԍ,/1P(f>@zϣh>6@׺~٠Uc7+Nf'>ZvKuQI,z.KOzg՛-X (U?95c~lkl~۟gqӭ̵998Fݴlp}G'Y"_[};+ +39~>z'^U].}BVpA@sǬU+.lT}Ri9 ca}fީkR ދӗMZ{Cu^>֊>A{]>+NQj-k5TmjsM>@``L\6=Ʒ7kM׏_u(6&6|8@a}EN7o?,5Z?ѿUOkUqz0݀p|3@ooҪXWi,WE8VR2>>lC{s޻^oI%C%mC0]Dzecfݬb.p~ϘI:HqˏK:GO(WӨ*@ʰ ,̓>Cl]3TJ~}/}MΟ{m̭_vGǷFEm Ł%\GONGרP2fe]~ji6対 ̻HM!@>I%yVS_bKKU>]RP|Zpđ3ўq"9b1mՉ.l%M2lA܅2צH - +pc5ep{IC,'E'NUB +mF:% sp'8Mc)Q8]6ĢƫU} teXa ++RO3C((VaNhVl#uz^*q'13nQuá9{x+RaQҖ23._,8`cR0X=;9]o6qpkrS!zJe s wӄte9+[0kzQrOTN6uʼn}!`s!VxXI%W`|KXe8q!P=O,:ym IGcMTyE}{ݹ Sm&6] VTCgheMW? +>07OO~뒰FFfS{7sLKNmw&^ASO35D8ݧn!I3+nQϹW?y3 Y{6?bje.ڗ_RG`ڡT9W`cly/qVET(՟ٰ5(%56S5|b'P+f YoEKxN 70؍5'S٪0&ŮStM0V> }$j+[7F@|h4MJݷOn|t2( Ϳhyj]QkRgki궡`)d#?3PyUR+sH:]_ 0>DOGJ,EccYpjOÉ_xGjӮ.˫YF~\kŶ1-9NGX|; += ?)YՀ>Leٸ̌:1M82AӴG~f7οp\9?FṵhqHsp*=t:o-:~R~lCxh_':G3z]xOGWiGl?+zRy P8QGmtc Mo}7?)xyQKea,g3p4MylFý/OKϩy4m./o)ǜ >.\ ?)#OxsOQq/iM/A'i '}ZqKtjHG YM8U좰-Mirsf`GCVMn G={[yRu&^ѻ{e]64iFښķ!pX14tV[5^Ʒm&B$xy!˟HޕWUn`{8Nu>=j~%5gD6DFH#WT^[[?&-XQ5^}ά(9WrNA'LMh} άJ~"V{0v,{C*} (8C/8RTٷf$0T$>~Qxg cbVwy{}ݶ^G'm:}E7]ض(nS{M=6tˣVʜe.I,UW #}!}>.TU:k94???1'^w_٭qmkilx=)#5\Mmګ6&Yݱ*H3a_'ٴuZҍInǞI cW!']kIUuVu<* q㼼^%G5(?>ut_Lڞ`i5k + L@+lZ^>l(=bJYT_#'[~Nҝ?HYqէb}F#jeWjGOҟJطQE}c`QnN>3_J\`ݲAȟ:oR۪r'GI7F8J5hlZ 8M5W_E^-YMVz]J2j[?I?LJ7CB~Xj #4oj&[ZH6f3C7ۻWڟjU xi*A$w'ctjM0j~ͻsl!JT߁>O?{S:+ޗJo$i7'>{ ٲ{qǤ)*JUf'voӃW|0uNW־m;tu*45R sEn#%L\/{ o'Ak뚟ƞ~K=;Qc[r= ? uYjo(Uc8$>Y3)d~QcYO1zkO\Qs5n^jproISWNӫDjޥ#%)rt8[,F_ + }/yj2}'_펣OwTM[iji՗ A:ڟOiW:=*ֈ}5B%YZ/F._iu.=&/BI$}?鳬}nQ+Ei\C"|kRQXcm;?x:\jQT X5(`~1rsٲ3 $=Ȗ# +G٫NfWe|6I9c㈌8h2vdTNN$A!H8 UyBXqc͚{++Yă'|#Qق37ծkU;aT/s׎Xm@{0a3V1,^N:^y78`pL`K RApFiMH4%mIV]FޓsZϹ6f!өKd>^<)?9ysU"SvuG? WUֱU'KN5`pGnzT*w=']=\郓}%vg6qܛ_XN-9zχZsCZ^gtS_BIؑ3S4t(:\Wxf;VOӦ &=_QL yu)IUtd&,q9:e _ &#yj,,`cLi1!įťIG+c#f:鱛p:4ښtgcJzFg!vwhwP؉!۟%X`_j}DIBnOcsb S)UT1sSZ|e?Yct,2l=8=? vb|A&)wġF%@Fs q2O=Ė:1Pv4SuѢNnoקӚp?bč|50ɒb *W{/yHq9$7 duPb69IyC3eWd> @ M Q$$6}'w#3T o)AϤZKASfU%u@  c (' ݉' +8̓)TrڃF2Z^k_DSrw N*IU^ C-h5 55 oΓ0kcؔSf6!n2@'́+p' f;8zFA85U[=-wg]`nvXN~Rm n9c->Gk&ciW83̉*֤dÑ n> !L l9\ȋ#rs+NL30)虓 #23#0323 31s ˜Č&نbfF`123#02G|`4g\\% 1ݨa.J fk yod #f5٩;Ge6]Iq +b)ʏKUuRykl?85>L,tK",k'VjŔ ^QkS~fm>mzy]"P-a+ĪxxK^Y|"<]*Qo_(}SıNpp@c"w]rcnG: {!CEO'TVq(ųQ|`LȂpdeOab > s3VWh,3 |Pk#o̖3-hB,iw;E5VNG<"55[a=,S++aUL6 `O>qҪ@21 >Pew_ vmRB{8eݟ?8c yJeNnͪO>12`TfC[;ʞfk*z)O/Lu=7G24Ub.>:+Z=jlŎ#, d999Oi +w &^k[~3eە72Ό&'CY^&bfza )C{LcSE!<:5t8}Mf +8Ӵ1B1pLj>q{vT( ?a f]KVG$q6tu]bT>U*qq2cWg}c4vt>|`_矔%ؖf9$2g!zե6r717fW.uV6|V.fau.s"Z yJk7&ZrX=:}d1HOlJZS>d\n !ԫ}fK܏}.eiڮQFGenO%Q ƕ`q3 k9"gmٲr!g1&K"W${L[Bx rgB7b22Q!"\+ٹq#mKXJvy}(ć 0|DdȉW{EIʞ<L"deadp3ȓc>^UK7q:ȴe .29ΘyIߖ7^4n?UӖTf>ۜ\enrQnN D+^N^JGCF7SoRG fKAoA7u[I`Yymϒxcq5/wVn;KϜH4\psByΩu-I+؉Ƥ96ɸ9\ytB4iǜBIcx5,[~3Ҙۥ(2H<;Ni>o܏CAPM@df[ǧ鶸o|v3eѥի{ezeTֶ[3/oHڿjI'[WYsuKAھawgbI2%ڒY$A ""m cG*6Q3/&]3-:=K3g:=|EPh܉k d}kFۺ5=n2(~YM{ .đef_b=yG{)AJ?)γNd?#!G6(t #_=èO2F?uc7ٱO{% HKriơ+Q<7E[eՊS9j nYW:zM&ƛjܜ$9 GMave_LLUjsؘic]S}',TaAyO۶.3RJ7K;>&s0KPܣW[0\D[CQfՖǹx쭕v}%$]UC݁ +ۘnS=H㏄zHJ#pxr%%J׳9WgaMpېڦ3^A>J6ao{r/ j6Q#΍d0x+g2o5m +x25\fD9J>i Xn{FKwlPsg7ɄV6`@92}=e=\,Sz pG3Y>Q>rm3Bj %J VlȥZ$]Fb.,au=Ǫԓ+c[N^%Ek,uۖ _Wa9()!=}$5XNWVEWFV1ۣs}+1:<* x .,2W΄s a1F&g԰i]j2OKXٙMw+ cH%2Ѥ +.T8e"ʉ8!G|9Rt&,E @#&G`&&-\Z(. X7;Z_I3Qyv<CLK i}v"m|u 1%$֛s1b{s=Y F LO;2P15g-+l't֕nn8g'=$c#"*m^¿RW (Ex&x1vNq}r'LPx3<)#'6lĕBUcG778$Hǔ\yx9RܜNΕiGsđR_i-D^Ң&]Y K` ]2X2eVkCZ}]OS.UEH#zM#:*ٳ.f, Q98_jl6etB*8}h9cFy@eOa6ݓ}n0+DWEZQR *]f}TuբUU#$4);B%YqZnfE麇#mlf>ƾ#+ N{29920} *s,;#CtF= kF;&gٕ"s8'$v? Fj-_kWu.;3Q|;k)euQtzksPPhq,59vu5zpčW]Э$V;cVPTJVz *հ V1o$1m6GXdZI*w0r jj?W `9*,gځ ٕ#)';s*$KX.vA[m>r@Ϝk +G#i4"wSYc8&;Dc"rL0nW.G2WPhw!n +|&A& +60DԏXyzI1nu 6̵U*d\:18*k!YJͥF[tZX yR6dE7';.{YM^0oLv>MM=^.͛&jQ ˁ2gH0M8dq@<(Ki:J1hk9u\z*u!PI3B55GÌeeq5ecӉVev#J^+L wB + ?8bPo5G%UlڣT_qJj![ ,UZ6`;%b{ώj03fAm#> Uu%%'aY(4Xf{8~?,-{kiJX=f@8zTKza"dKqh5v  ;B劇cL]ĀJfEw\)U 10A1x c\RЏFb5K4py>6dgeT3ˏ3WMR{o{ͽ yϤ헦[Je% =" #V 'kۧ'-='%ȝru#kW)oq:]Xۅ!sN-\=IKeV6B3CXa`1: vzG;{˗PrV&j:7wlHWh [SͷBGes:ʫ46Tv5[2Tj]J > y,1+pOxcG| -W靾~Ŭj W,Kƛ\1* ݢ +l1>T3)ؘ #P籎-p NuBTN~69X2G~oýny(b +8 yGd0 +2chp;Gb ɱb9g2ABO^G0+;HNNA + +@ʃ+eg%sX1UAO!OUG~CT% ̚\د[zKߧ<+ad#Ǎ )^qvkgfW$( tTi9UiIC$-BY5mjXIs,Z|3fYV߁ $3S*x59G0#1m]+d(>ݞAFX8r+C[Ul@=m#ĐL"^@ fUҰvU ~BhF2xSid9M2ӯf&@*{:Q#R0O_64 +<ى8,]03N!R_)v$Q:]a,3OGoU˟C,+q~hWY|0ݾ?\W4!'q:?έ~[dǶ?)Yx> +34-PÀD'̕l: ack2q󞍺J9:fX:y0:Βu )9r`^=3ե-ǾO7 =bt3ߥU:Vʅy- ޓ֞=_#t$g==+IZ!0}[HR+2N>St< "'%J4t +yѨ q5I= dA[dY3+A[FPºk"}A^ R8$O(굳-l 5w=JOߞf\Ùs)Ë́c&mj2sA?g[٫'Bs'Ώ,ՏE&&L:&Aa0"LV2s#0L\&#2 D28 +s2+ c3 Q\9=37qW-c "NR3Z9'^K9j_Ǭg$g#mk2lH^x܌v&ݏs\ @8er81-[g;^Fs w |'lfif_S8#w{I#-OǑ4y@ujW80Lۦ6k-j4Tߩ_t%ZF2e 2{!9>qT=ԅb+\ `OEf1@"F!AlɈ҇g*"0"3BjARpGnOyMj1_%%^ +28})fllM|ʹBh`<^>reFVyJpPPrDx#3`Fq)_bi(7XGJi)}q>/T:9A~rP +yk~Q|> x@ϔ)s#/xry +<̡6#Th 2f8̔qm#Oᘧ*߉;>Kd0 6֐& y`ņ3KzJmIbU/al`u +elM~jeRxf+R)egy~zO3@(.(q.T\yLZ9G&`kK/,I$p󉜆;uVK9kddUe!f;6rF|4 +6H9H +.8*wvE~1<\Hg*ghq@H3;H5O>q/b6FyChȏ""XՌprbs.dSTN&հ@rt5+Ϻe+βt8e-2 2#2h3MZ$,~3xP!])Z68d&{dqq#q I11 F1q&6! \KUˈ2:ދ NW[%(GRGs5ӞL;Ŵ ?ߤt[{HȔw>#xHښ Ԕb0:?[ǿw?f`$6|7,b!g.?&LϪ[nL^"'>ÛMR?I1 E30٤Ĥd23 ِZD8 " 6`d/qN$`H8>`Ny33%^sunr$iPL귯LN@sg;ZgEAEq9Zͣv'fI3&@c{\6)_՝2s} l.y HWUQ3B&&o-j1NT[?W {cG$YGyƢ=b.%]G˙8E01q&V\qA\g!x9zwq%onFC)r1Ȉ[`G'3 o eOq n,d ar~T5U0L].Ol)fA $wعJ9Ǥ +rpp,쓑M71=Wek$D*%8T$"A ,]ӧWP0--φq0x8DXN[<w yLP7B\g&<}|n|F_ yŷTdcv3c5;J_0&Hw32e)q2įLsIEF;ٷW;CtևIFbΧ2ʱNybTؓBVsCZlbē 1Eq&43؁])"sĵ]G2h[R 8+pYN=LS1m:z{ `䉊e ;j5\3{8hprͲMl Jn#bݚ>F=$=}&FM(v`l)h#br&R$ fW$ڱN7 &6;P( +>L3wSlmfz19哜D,&97hD_*Z-&Q{ۜjf]!b8c-Y֊g v +;gPMf2 Pii%J3/7or9|I~@:{رkVmuw9ڎ[|k#$9k~ r|F)4e􂭹8dwzǗs-#JXǹns2*9ɗ<(?;LH̜l̐yNOp  w17vĸ#b2cO +)9" +ELj3y'2v +FRbKq'qeFm|j&H=(H +N N=̟* 1$))"9pd=@4pѡ,˃nx.H܉d)H9_5?.2cJ3b0 a>]k6ـf+U'#'1z3#w]&5i:;C*y*#'`#hW +ͻ=i +]U쭬, 382dT&dGqU[bw8PN}M8Iy -q\2ȺsץWx:͞R&Mub(8! 0 80b90! 8@2 0RbO2NFWRgn{FrLRg%zެ:YYtd#iRSڃnzyJOŘ5SSL:\⬁91v$T۠:֣>R:,0q8؛:ka<26u6Z3E=Z[h@}B4OHmznYϬGUE݃=C8hfKQi : Mh= ֭ ѣ+mc3%XpeGgOgEpm桮.Gƪ8F)XxQkAHW9]|M̚rx{+-5tC.qܐ$?TMOϬRdr@? t6`Os'(,51ϻ+mdd{ ή[ +OYZw<@)pE`~Ў +JFWawi]ʼn,i P9)eX +aT#raBv,1*nՅ*!n@|e@A^@J1Gb5Bn 8&fp6^\0콌7)? X"XCǔ)9 rS"hV+"G2KGiuK; _1goy%:(y(p&mAF|\>QZHp>Fi60r2)S0' bTH<,1P92Nd3S2G@9(^*lҒk^27hsGX|rfJcpfVI q󕓼PJLio M'06=#>> kK{)PΊ88r)"PF$Pp9n>S%P/S=Nx!\z+Xt(ڰrsgr I9mޓ(hȏHUf~XMx# d /HwU,"UAĔ/ps&– wz0-MǭBذ' *u:2)Wu뗦]C!K1T<<íT|^#-NAƭ PB鵰mi閆<̉Xj4xn$65bB\KP3|dtOðӦR=D| _)eUc2ۣNlȫ3w$(pXs!>&[F=e#"f4a(v3@N$1T +"k<̶|:kg'ӰE Bosf;Q~jƕt}' V7xz +LN/}c!Q&sZ|cvn(K3BۙǬ] c | #ЙT\/&c2XcG"#> `F#LJާ'MEҢO@bN9SJ$e<2b_P`'8΁WݑJ\4h 1`,3~w9`-I;Ѥa[{% `HT2FDp3*fF%h%T;byp34}T8c:R.'D28 2#B ck|3H\# (ai@'<8@"ɁQgwyrcr==c;HIiI*p;IoH. T ݃2*6cm`=ਪ0d%@QLbs?)`񀄑߀x1 qt"a ) 3$nyʋD0.6$$ Vcegy@ GcN? ?V F$QDYyianwp S7$`d8Eh+nYFTXt,]T<ʮ!37H=B~Q[6?kCK\'Sc#PXFG@@>4JR>3beG]Z; a{3Y=D~6X|Ou{sǚjSaښFҶɯZJV5Ekܟ!@T 2k-9 w cnHTrfMG$V?)uJM܄:iC>'OëOeT?4B!X)N'SaϮG_h~MU r-@6&{n2S6u=}Beh Lp! wm_BTW[(ܑ11҄دgzsSA+ӣ{|g!:#'P3ӝtۡ9㯷LGSjn-X&g]ZpqNyD'3M`>Cd#33r6rd&y&v`@،@LW HؐdDБHݓsmy89ǏX +\ >qkj6>r +3B,vQ2u+GZjFFoYm?ftڹڛ؜Ah11>3!fg6ʩR7%i(\#!q&yi="lH?6<"8IEDu(܎Gg,іNAAC.yJ% #j3n ʟQ38*I#ɖS&@ ~s{(E +]اi^kU(''@a1L9+*[ m!H|W,AC# /R%b<=%TlwoAǐ*o6;Hu^?1ܨÌgk{PWpgۿ<*u{Lʼ !)b*8.m:9fi$60Y- ";ʐ~yC1G~%.6+mc|:/ KJ. FFb W`7XD9=TP7hg&KX\M`G?mYԋ1Vݰ2oPs|S!S()0gcv'{B`n>"nM8^g4"8T+;U hֱyg[e?=^k7^O-,&NӃct[vvNff[g|#eGyXeSـLS0k L7 Qs*[VaUhXvZ}kxٖa >]0nk;ygj[KR̽tJ= jm^xQlZ{ gQ~Oj'L5&Q~8$KѥU|qk\=e\)dFfԋH jAG8{YezSiNee +9SJޭ+O6'vW4]Fpdrr&*ds*xT|H1vIdF "g*$045qHc%@!=0 W@v$Jsay DB|ɱ˟AA\T,*"(('jgMQ~sZ0W'QJ1+}k爈w2kIo <*FT|gy[}KzNk}:UXD>l$Ϟf@ +@?ɿ3$u/sn +xYpyʅm1dꛎ=ܯ30A'`o \YK *;B[Á8VĵYx:M|1:(5iXSe (R8c9>Ueʣ3=%%Mm68gXry:C%T{VfbG2p`bsKg~ N!/v^%un{` ˡY&G&Y1(; bA89ʝݢAmLDA~N+7M5hI:L6ԄE]92T` `& HiQ .; FkR2q$M(N3(1&Da"&A $ȓ2$sDd99! C3 L$f2&8`LfD 6df, $̀dCH&FdwOx@B 0&D p%$ bdCDQ2 \0'0̉$HL &)233bdȀ,0&)3 A!ĎLFh ZSecL[&-eOfeE';lyX92=y9;YdN{I"Cba 0)HHC ;H92| Cv$ݜ@U8`|,%\;Fe“&E$|*L5Xᶶ 28F*.Wiݑ۷r<#KzEd>b~I=e%WOK'?9 ]l|IMZw[G2~i]V!`F2:J"rHW ANyQdJRAqW<׼/B)}|̊e8vKs}ezbP#k! 0<|t!{c=D+22#,q`zK',X?># 6y(BQdQ|{=N +*sje=%hA) %k[U* ^07vf#,HRZÕf,y5xN}q0A6{s%˺W/ Uns㴖U5\ ;bb@Z7q#)|xCw(E82i59[7<,vPnJXPp #'%) $TO qT` 0$2ٵGD2{dAdIB` n(I8p#{L)Q(U Ld$KLϼ0<dJrO2;MALbbҠ'*!`ONG.y(``!@`H'c+Qu882"i<>3>NgIQnЃbs09@ml3 8Sg%WYIɱ2XFQŨPyvڭv#K{hfT&zN*&Pse~2pisL,:6Q:p#wjO6\V6D,P hR d<7+bfys[QQq[3{9?۱緼%h[c2L^/.BVF< $U5.x^ 2W%y,@ uBky`@9 4/pJ:,m^sWf6 c g68:ey*46`ZbIIffl"bzQΫĢU\U;V/*\3({yBҡH_ɑu`+zLh]:uXv3?PϬ]T'!T}3!hf35ڥQeRq%J=eXaq!W'YfQ db +<>m%h1.[JiĽwY挆օsE{I9PN~yJaK?v3jnoW"60oWD>yh`@Y<$ &"a! #D .$6!1&A1w=ddfFdBL!@yI@!@$Bb$V3ߨqMǬps1{9嘾8e,r"-ߙ;Aa3Q 'ő?ny ;v8{D&*81AAs%9$8YHL_1'XJ\Pg"f +2{FS $ pAR 2ۑ' %$`Q +{ ) @o,@'#`I>\@mp;5w9'< yMA +OH[,*~FօRv9& p=MHĪܳ{gtB6īw>\9_{ɤ[Nceqs8,P pї *2U6 H81/bч_PyA=*Lar{LL32@GتXsEeC0!FC`q +,9X- fܞF = %@ r}c>HQz8N( +0qqfڬq/_fJp /8LI#)4O,um*߉ +)zfK1B\·(x}DU(5as @\X~s; e{h_skL e>%yj)uy24ÕQSFQﰐSvxa"뚢^$g, 8>{%T#5kZ]Q]Z9ümb&!JϮg<CMY;N{6j8i8ev1E1`)dfȋJĮX{nG)<3.}b$L}qp#Wws3 $.c15"2PV,q~0$"~ r[y nωKv0r̃3"j 6g4jȹۂM )31*zv4~uY 7JhCe{ԩ˞D:]X ^yɘ׊(yCFpu,!6:3Y0AdOaclh7|4 Neā3QđIKV)rj8qЫSZVV2GWPCɔթxN}`2H}.#dhԟ"(ڤza תjWg;g$:lN~Ն,Iӧg U 9§[q7ԺB +\ [9p"2ثY]sŃQ8 oRmq*т/iQfw̨ܵnqY$ڞ Ec.N~*)r5!NOKkR:zިEgs.ֻdmrH2mSc i+RHǨo\@%+J}!jm^qgԾc e.fCTÉQ^ĩi#c#?hfA+dĮ>-3[v^ye5'Cʹm*qf1CTa.zq)AMOae]j\J;9ѩ +Fc&T rsKrg:,$X}܎bUbAL7wfaUbϔ- ŏEj8$V,+<@cnbIT=R uIִ0̜Zt/1j`iXF~;hFBe'YR(J@m`H.HXؓ +I F!0bB$&̊1'q*1 @ !A"F#b ؑ' IČIXDǤ!' @IH#0 ȍ I D@0 a2#bN lH#b#Iİm^$l19eHQF@H00Ę@B"@BLdȁdȄDIJ͘2a.F|nmM}ws%DIPyH#%i΢1#&.g>a +}d,2s"qFd_sy:!ۿ)(ĄdZ=,d$rD#SqGi3X{* Q2rp#x80!qrRJ..A_AV$d{‹YNG2ջ53EqLlfbq]+N}Ӟl sȅڌB`8k]p) 5apާ׼KٕUU~]\!Ef-xNb4Tgc_jJm>|xڝ)UhAyeCh/Hmo~`eVSDU/ +O'? pErW%^I‘l”A8DPT2v=1F2HT|7j.6}{E~"t$gSe-6%`y۞|QUDBTؼyU_Ŗy8O%p8<$iQXj /aĻz<'ulqty,뵁+b8GCgqi +۰y9Id5?|wS3alk+sv?0c*FA7FvNJ1=ǧJX +gjAm쨊>bTGm^`}˶P8Cn*Ի,%y!|eA ϻi62 )d"[#2 ÙBgI'[p"SgEIr H `bsAFA'1<癩nv }V˴@;H<?ChB!s mfw7sp',ZWzN;FM AIsh$xe<%t<V)2XZ\.rO ~({11&Hjg'51Ǟ{ `N 4gQdfz;r{ο+gz:HXQaFzb]Fؼ#*wU>.>Dʖ/P +Ǹ'?5+-bbv nr17ӾF:"w)\N wȪNj.Z9jYuYN~ +F;a6>Pqx+^F{ͣF'F'MDm9Q(rҤ9TK`u 鮡i ]~q1j\)q960Rs(Mә`k4(l +LS+|&EJXO3-=c9\%lB)vAz!e@@f .TmE[ P B,s$Yb9 Lj0LYI1}ڶB5` JeGY-\,Y[ 2(ݻqJHna]#xvǜ +.Xpُ *Fk]$ôAǟyjۻDS-giR}NB&0DNUTq hÕ4 - |fD#s߶;Fq;_2 as؉”E3rIUIiM`? },')V?[+b/!>Y@D(̨Z`>c)[8$:_l2prs1<*Qokl2=fkBŰ%+mb[;a1X\mR@3X+A bs/EJAj2ko+;jYܾseW>3F:RUakr%|"1;+-y݃"Juˌ 9Rs=7`ܿ̅'k z@X ǔRo/<@|}=#0xK? 651c,Ub;+cfeu ۓ󛁷ceWYa8b)SoH3dbFO910AO$z@jlqxlFs[qqC_Ne9e +=爃(0#"0x0(\0UQ An|!ZK6ҢIF qfhr3*cpI= UGY~S(:n*h8%2>ßTW_67ZT0]fhϻlgo +vc?lv`"' 2}$^3q{NAҎl+>Sǎ؝ -pơ~К`Z걎Ϭt}ms=g{}szeCe<ƱZ` 1eSyB_Q$w(PqЙ6muÏ[RT՜ ҿK~TA4ϚX[.?dwIOe;Z>iU}CR39HƞS+XNV7*z;Dѫ5U; uـ_Y7I 1n q0ݭ2~bd3%]9?g7;bWX2cM\q R)c'< +YE." so<#8M"^~x?jt=ZޢYvLǎ+k=G0qv; q̐dT2> c91Y2s ،1TkXv\Ӣ9TT(\x$)Kv.ͿL[#8+}͏^5pY__8ْ֟McK{ƫE՟FwzOSN?ʯ8!-FO06-7f>s`!FAԏ-tmxaGku]cjtIn`{F?I?~b4u~3.2'̴i6q!9PGvހطѡӄv;:qn&4UƕHUD?,_F+?(!*[p(ǤOF0&&HLB@BelVU/:c? (8FwGLCA8! c"90!&"D$L&@B0 ȀلJ2$ ńsf!9)XBB d@ 2 AD $ƄBL y2Gf <&D 8C̀A{Pc`dg_tHzL,_{h<9l$<s$7s3gdhЭ ,3yH$ zz݀2rdO+d.Ch9@q̔ldWKve `Ro(XP1I\g1Y$ң`NGp`{q,ABm>|,6~P`yf_#^FЭ cv 9r!rx5>Bc Z:"v1݁C|`.b0}/zݴr;*ZZeTkފحtw>jՄ`{ gT X: >(Bm;|؜~S}Z*x]~9,NR H>, ʟ$Zr>Pk 3\'s;rcHRB)YdKRs̖$,dcN&BE9 l8L͎!_/N6 }y{6V&+G`|NyӳsM~ NUF#SlZr!Gd'y㣣ڛ{MեҮ=`{NEs54VGvZkӺoNRSH9?]04ܳzMz:d-ۙRfJosYc--'}|GKZ3lqe&WAY 6A\XǑĚ.xS܂}]u X"-58|27 ߑ!0|fvjF9cD43FKr<1&+/ ÈQ^cGGBy?22ɷ@ȵ~R]cpĀ˥J~/ReVvTV|5"d~QwN?0DQY7s7*T;R;p9AKn~K< fHivHL%Fv3k.~XTA? ~=mF +22Յ!\Fu>Wq-?r۟;OzntWQr?!пg])KvaqΜFOm:Ι4y/_);ba _Ɲ$R<EsNe>sXQutl(PH? `?f#]ډ_״wopXAy$k݅U'0_T"V5UۏC9]lmMj9[?eY_ܷ$Rط`]&S>v݁va++rdv0Dٓ!!#&Bq!80!"LCa$@I>d"Ndf&D3*Da1I%!$I2!1.!2 $ Ҷn$ p+ǜ9׫q|fZ'0$\s$H=Ә >r2+b?p~#v2@a@'1JIQ-yiv8a|fDôȈ;yT;x@I PxJݷi;G 9 O/Ih`dL;T-?5vD +5VjP#]*56L(##mHf+UsVKs=w:]DqsRHEhEwUOaKm yHhzjdpx$ElrϨ})#Jm<TU@b8Lm*2r@j<7lw۷jAqlIF;EޫscMqaHnlIY6`0S,5 +x܄A[,#\0ټp +HIgj,,>7 WRp9]).< +%[5V]Y6{Oigɭ* ]|@F3J/VOF=ć}q6lnf qZp7tg\ۙfݬɻ1VClJIr#+nN"ͧ8"Xa,Ae1xv cweЮ~@E浊"!Vg#^ٰYBPU(T>2ko)66<`牤JNL<)nIHg9msϬQb`Td+ĩj]9Rs35#5&1$vI$`% #98\Usrdf@<1V1x0$pG10=J&@8Fx(8X=̱xE' M*.9 H9a$vG%<®|*ġ_9hH' FqĜkhy_PNIςem$yq51d>KlUZKrkp'FskFv˪Sb$y;4}-\yM +]T|bjn?m ْq:s7d_Z{қ,mf=ӂI>ck2YviLɊںdO>fwԻ?NH;Fs8$nedڬmP09#]ITƅyVe6"peDx2" kn;iS*wՁh\Qf֜='FW#˓Q}: &_P)fYgMҩ=3}A edr2 z6cMcu[͍3j">31xZQ3[cY$+9n@ +9b6" +3MĬ Tf%8W@0 * 1UrF=BW6Bx1\`3Hky";Icȏ|Ĝ3U2MRwe;)%nkj0#޶MJBHo8Zl^ N{-7qd#qݛy A +m}d]0-1$򚩦wVW6 m;IL"iXXJ㡳δaCeQ9t<ؒ|TaB KjsKp8 +Ŵ2wFEo+tږ~0CbpMP0#Hcf]]ceG~?ip4V8Tt7֒Z ӎd6GB⬎F~O16j?p]Qo4}]3P٧O?PV~QKsvaO?m)btOIFGB8)4c ĩ<}^2VA}H4-mCoJ9Bx6lq#f69ڷ\*?.>u7 nݜbܝ.d`b[qmuGO?@:mEaY?'_R184I ?cb$yBI  %IL$ 01J BL dB@C1e'2!ĈH(&H H3!dfI9b@hBH0 '2 c*Zg&J0 eI=0sNGH,PGnĈ:sϤ\FLp908ČKc9&D_3ݜ'=Goab q8bpI& 3[H,ay3719s/ I9״zm.0[5M}{xAk}!FN{EGUI Wq 6,%a;G$ ;y UrL^pIK e Vɐ BmIRK'n8lS$jUWm  ŵ۶cזBxe)ؖaFźY|RA ep|w*@)9'w-Zx9<2U/b ݅9&fo.֌ wkU04" +cz(rI +Җ)ŷ'˸>qYeEJٷKG.@y +"7ճqĒA6u p%yU,Z[(ҡE b 3bՎ bm`57'V0$~{K,{]y, wrhy憦H@ب$=lṼFtR*[Wc+ H{ wwX8\D RqP')\7$Ǻ01PaRfn32 O~'Xm2*,Hǎ%jrpf)! v3q*R1 b;Ig0ep7x$`dd̃b91O2=zʆ$J~ct$`P`XѯA4Xݤ_89bs;Acqp3 890p!Uwe5VكY@Z6Ĺ.g_Iӊ9\@M:~a s7+QZLҬ+BH{*>O@tY9f_ts86kI=*klӳoRa؁1ٯf$,rB6lԳp.ؑ$qG^$=ѴDȖK!ImK=clU;%EF;Ek;,'^x +|̂,܅8=נқY^2TKs+|1'n91CRI_ZyYr/̶^ mA3٪b0 $$Z-8lQ?5{H'$@(̛J1LdM4 Ij2uuAc˪FZ4VsyRec3r!aMs$ {x8R A0!gh>q$s/4I]7 MLjI\[>X}q:iy4w5#F&ܑ7CfLUsݘ0ΐ\yIh#wgxyMQ4b&0ѱ|'18V~3%>2DlgC:Ԁp>BZaVHC~Ra AI f6=$&D3Qa@i*1 I$ȀBTxcf>w9$B4vR "YBҋ#2L HF$b6$P$&# "L!d@ȅN!@!dB&D! +3B H !PdA!1̙2 L$@@bH LcbH`@$00A=`A*p%Ui򒫖T `}˵PTg34Fc&iD3Or@Ϥ=A'2F$C`H$`Me'1ƒݥP9R̒F̄{9'>B%/ +y$.`ZLiٌn*$P[q'Uc=%Illwf14%F`X2$c>8?(` >!oD2em{9FsDhыv k,GyRۑwy,vTTHaLٛ,Ա_35֫R" +ǻt_;y``y 6>=2h{Ϻ珄q{PVBOeuު{MSSaYHedsx?h.3*H 2N~Gƍ'q3 mk~qnJXB5G>Iv[?[9ڟp5eu[o")lzR~N?loiuNF1gƇoKѴ4k,V=Ci+U_\O7gT}?'Gƕʷ\(L^|6^fPxL=#oA[ +Ĩ\ðXx返"#bgdaJfS㿢P_MT^ fo;,iK35)'SaiRIl ޳PpPy'icx#W1ӺAr"qXԏاO}OݧO󓳐đrGXOv/:OZOeq8C}(?:cӳǢJXMSL]h^[뿳~9+A#mOѮMZuuj[Éߺiei=߸4;?~֭ZooGre'3ZZooC?~8Ӕ{,־P߸40;?~־QƜH־RC-779Gsi;S=kTb?GWݧOSq=' }I?f?5_v?;twF3@' %):{-_n8 8'/~s=nhb38g^^W'g$v׃3zƤ?յ `-_iN/]G>\VWhA|}It9jGeO󓳐7"MLTn_SjڇG!&I85q[F9D9C;Ȱ ƧƧ?b?;d?3,O:_RrL?vr{#?oUǹO'lǠSwK U?#hՎd7/l_P)8hā(/(F1Rv_H0Hđu%fEV#L_Y#Y蟑q/ouLSa9PQrfO返>gRq13}fEfE@3aosB.Z]u6/`'a2fD')!6oMW_Lkv f? fg_Xa08pg_Xa0{Umu {Umug?Xa08po?Xa0{Smu {Smug?Xa08g?Xa0{Smu SmoXa08oXa0Qm {Qm+#Gج ,'kGج wWb08oXa0Qm QmoXa08o?Xa0{Smu {Smug_Xa08p__Xa0Umu {Smu#O?m $'sO?m g?Xa08g?Xa2]cw?~=cW?m 'sO?m ?]cw?~]cW?m 'sW?m g?Xa08g?Xa2]cw?~=cW?m 'sW?m ?]cw?]cO?m 'sO?m ?]cw?]cW?m 'sO?m ?~]cw?]c{Smu {Smug?Xa08__Xa0Ul T?Z6jͮo`p;jͮoaL6M6jͮo`q!;jͮoaL6L6jͮo`q!.hZ5[G%.~FS!!!j Mocʀ k)um[?^7\ఄ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#Vʶ#X0,Fgh=3C٥ORPeݻ@ {1Gi=oڌ +ī|q?c{EgK8%j QAw“C\ Aš@!@! {u/h}7龳K-{29Нj}~{Am!zupT8BBBBBBBBBBBBBBBBBBBBBBBBB ~OkAe*N qIZ}S4޷v{T?E:}?O^MP +TUD2*B@ &{2|!)[c&114FalJہZTH5K^` 1M11Y-Ua~'`i63`cq1̤qZAf F8[1 * 0teiX9ȈDC lL%>2l̹IJBf9FZ>sLw1J4)l ZfT3s ޲E=H0q1c y ±!c HcH#aA9H̐`Z X^aKh,whDJVxØ`FY'v6U\Z5J+^d_خ}Z[k%qQg}20R;zÜ~'>uӽ0^ԶmmIU(}Pz`}K/bt?R_[x7+}1<o^]BFW޴MX'VCj |6+H~ͻлVs !=F[vY(w]wؕ25?DmOsiLFvzˏp83IK k1%b=$v?C2W<V?Ҷef]^SVv°>!tީkֿ5:m*͑>ϑ3M 4ƀ} ]c:o>~ +u}EBB ={GLٟhm}~ bxGr|s=ΗQoޛԫk2<7{'[_mV3P-u*`c*{ oѮnmNR.qS1"{e>7Hsm5JP =9+f_lH?Ks53GJ̻EX1<ҧSu~m2[fp;3:oo;R=ݥ%nB{K{󙾇:? %uk5>֭e j>=uڝZkV]}"{/j_^Kclھk:UꖒhTa7] +CMm[{ ~3w@KVsF~՟c}ufCffB/s[wp ,Ulk@HQ="@3._Eu]%~vljg;XJ$y'?f:WBoj:xd]`ğf[lҹ-M jz]Z5_X:K + ݏ̞;h.>p(ڮK"Gg?JFo1agǽ[Q:Ni׬C%خr8\ZGDBmK< 2 7obG^_^T"-_Q]c9< ݫudu9 iVN;u@ϟ{ t~}&5UV;=Gro`wYz^j(9 u~̐?N._=S-ubU$TqOڭ_FZ1ADN^ MV_Vi*O 䜓!!!!!!!!!!!!!!!!!!!!!!!!!Qsݯ{Ttp?ks,-Z0a( cfoH2s*0i43$q 1aF(d) >s=Xci-J3S z_OKgU!zxJTg[RP1m=jfRY0fϸw+[TJ]jц #N}N[-NjV@vq0ioww|cҊEV>)a?RyܲjWuizx=5'YZUѬ3{ mZOEtK?XKk[Yޝ]7Y-Z9 +`t4~D+5-Glz~if݆Hd`ϧo{pNY~^c՚.`(ǧok"xdy/CPWdž lcNKnb;yu +v;փ{uFM)5Q#wobntjK\nۻ<6=GNY]'YjMƳ+olZ_Y{c j1ۏxjb,9,F]u{s՝q!W#g}MvB5y]UNez ?2YuE/ {S`8ꖥZ,ZyWX]N +9c>ġ|,3E?H}XhURbVÕ#ڋ5}wjnm]>&}.JlX7a1=_Z{Qa3SRzveme!8Bk/w{ih{ 4^=i_ZxOs5]+].QdcĖzy.Xd?!6/J>멧f`;g1l:y7[>? pi4njkl#8_!}"_M{Em]ppˏ=xMд/GUW, +Ȝ:tgZX``q&;ݟ#~?RoN}s][u~bת1*Yw)`=3;Bt|T:/Mϙ{U7V7Rz}mPu6TVXFIߣӪs=e.<BN*zTM6FV>Ou#٫(o33rev?W:!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@'ӿǶϘϦG~=\} ,e81+@2A-vЧNLHxivӿ8ĺ1 q6ئIG[Fyҭ2KJ˩dYDZX&"l$bWF̜&s$JLP`Lv$oJEIS1?P"mMCigmU&ja=fA86Hsr|=+xjtsLޮojU35N<3'P+{K8(=~f*tO |yc6E_|wzf=FycFp]#/:we5'jW#<{G +1R9+HQ`K:9fO3꺧R^xy]e;v'||I2He[ҫmE`3^؟ Jv goɿQ: U^~e6u3-eUB0@%:*oض\G21|1i?8|.-۸XA%6r29χOAoje?kO)YF-9wi=170npO`ju6ba72G&boa}Xz} J9#'_5:sn=q1*`fqb[~^USEvxhe}|dF7|wbnp>R (}{wF(E?ryo)U `}KNp +XM(P2P=2G0'{,RjH é` m#RZƪ OmǏ>]9mK*;cBjl/ݹ, 7.zҧ!CN[鮪t{V+r=fԍA J1y]JVLt?EbY{*}&wZ}JZզ ףޖ8Zأ`K vn8}{ONE}&cnQʯԅ gm4#> >3apxFlP#9ٶ=x Ǎe-w5j0*N}fsj@ x%ډY%3^Q,;{.Lĺw #_Z6RSm-)cǯJ]@zڲ\=4ڥex ׼ut]lNq_CVtۀ%{R>-[c>eZ& ]v89ؕmUZ$G2ħrOcXya3PiڋٕN =`OuVuF3}}GB^BBiX{u4^=noV4ׯz}RΥJ׹[FoPSҾMxuđfn=^3w]_O̯/xO_Е[[8BPh^Zhnی˼Z}/etڪ6|:fۑ3ֵCydfu3==|a,Ԟ7h:MZm=2w-vVN]_Y ѸVT;5j;2gGjW\|Bf# e$^;g9:/9# 783gZMFIE2ր30'?g_ޱ bP{O2s~?n˽n{{[5MeJx yeٍ{I1qL)b>ҟ_y/Өrkr0qx~gxu63߿rϢB4BBBBBBBBBBBBBBBBBBBBBBBOF{s ?j-T_wݶ1)+:C 1609ʜc7m=c5M[b"jfWSJc2YLZ*L +ԥ`<Ċ0ՄhtԸJQ$bm+N?ʹ޶1,Σe: v?9쥶b<5Nm>cjOuϿuVV~{*(hgϚg͵=kS{>vV93Z.qvb}"kt0 l3ݶMlyO)᫩찫{w 񏟬_{'503z_kur; kzTX}r~"q,w|y¾ +g׏>wg\n!svVA JuYmzF' 0F=q&꺁Y`/Z6[iB|-Uex'T/Lo{#ĶSmMVq2*Qڍ0ӨŀY]4j`M'=YES +JlA?DS^UFffzb='?9M#A{H9m˾~2+ܨc >pWN߆hjF/RV;N0Oe$Ǐ/QI$ ڪEf͇r#9O +=NQa 䁞j_W>;}#۬>Z6C`ppfyuzM"?a?-Yk,^zN_P[|/|/rxikՉ >S^! zn᪫ޓbYZNaoxs>,C@c3:F{ZRA<`d/P!,M/.Īl{mZ +l>o\B̖jdpi"TTb{vRj +eUW2a] +k'F֨AAٙ]Ҟ%Jr9#̷4">l$+3si@]zV52˴]5TyRuI]V*+KmVe3cIwSffzضkpq-mk]"?rAJ]KRsɔ(=cp fz2F3)ί}a'{&m>;OIsmFjK%=҃%k5FOŊCjuYL=ݣk1+8bG dBPb V[51J!"f*3G֣^˨S2ʟH(܍Jj0j$O~?_QV4P6ߙWk-mVrvqZԶ f;csjϙ)}7k;/m+}Ք8z1b69WNZv''wydbM59g>/_j/n2blc?%G8y5y" )u&ӟcwysRV6|E` +ptbk-b@<6LB[7-QPFCjm.i;-Tʧ>3,bj:Q1d*f-rrJsA~3Kejm_w.K/@"UaQiLW3GV Ko>k-i;Qz-^8s'ۚQz䲶ul oWRFըleZ8=v +|'Vցdz>otq]XGݟ<󞯜3Rxw{Є'BB}noV4ׯa替Շ_M?OT! ~BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBQd?3Dk}:Ί=J/,}Ot]l:W,u?=Ozx{@tkEU8 :ܤ3nu7=o> 3n+\[*N2OZ׎:OYBݻ$y9}h~:S-kۡෲ;h=SWJЫx2;c2:'Ҷ^Ł߷#eּн~_YEWX5ƨ?;og-رbQH~S|_oG=G?ۑ?3umSC;I<׺}Ew ?ț#9Wܙ}_cPuo}g}wn {@'MmL/GmG>FL?m>gC9^ɏX4xoLrRc>sYծJ|7F%sMJGU+F~k)e&~7W3yozzGu]D }$VW\;Xn hM*=; ŗ nWt7Fa>h!:X!!!!!!!!!!!!!!!!!!!!!!!T?wݶ>W>[lĒbo_?8~ժ?&փ0ރ=wa{8Qf6ܤ]L#3g^R~x?X*djd̜So[҂] *_Q/S >utXq gk55aJ(]9sk]y==YT a/q55ji^U)UC' C }MpYyc~s͗Rj5>l[, z3z\iZ9};MBUq#gQVUj5᳷5.T׫X+$%X@ s}ew +G/7 +lbl+eqߟI4:Ъ)+)][g5=][^;Z~[N|6PwV9Ʈv ZՂ"1@TMnnǷ=lN.[&f6lmfmN+h¨gGMWOevݞ Y\1u^yz[s;|];_췘|Ol㭛K*ԭ]K` +;V*{V˳x.܌O~mݷƭ#8|kk>CM >9~iBe勵Q_ZiM*@lk^" і_39r,x+]i?)ek~ ?CEfZBqɯu +:uZPt(۔{p#N`awv9XSKJyw g o:9;vkRFqW*GoE^x? )YTlYQ~dzZ+?&:MV-jTuvUe!ʔnWwVb !r'}NЉ9=!o-60if ;ղ*l9m[pvsŠqq{1<\|{-TGo;6g~^sԹvZQs=<~s;qmq=vlqc?ǏYMT<%}{F4﹫]~ʞ{[;Ạji~.Y3ZG 1DJnP U[>%c]F](_;;~s2Xle@q$ݞYӔ醱 k @c8fcGSZ}\7fM{ zvDZĶV>ӑLk%nQcRC+1(y툺u5{FivQ9 *+Cp;|'>v},a;u6!0qǘ;?\%gP6chQc2oWL?\USL(sGz:qK:T! +H=BVKY߼{s3kYJ;ms? 1-oR vJrG|Ԛwx}e5^ʪ6uW6˷X#8L|}%tz.|4'~šd[]fϲlcsk +RA#s6l;0tM#Z=ငI} Giö:W/B y΍?j@1uuCˌ.qw&&ݥI.|>2!,gzJa2>WӕK[c0;ΦZ)kzHTIɜjSHNӞK VѧH[%G/u9WWKT{(Z(g Ǡș>/Q ٓM'iECm͒>x:RVki;[Ľ|% p|i7ދQh{|_GM@4cPy8k7ecjnTy`W_e;Txj |:kjOpMҪ&ֻxt%kdzzfMyŠy]B +Br;H^ksyEFVNަ<JB&Mݦ)uVVw:+zϬ^wmY5VVob@*T`}T#Z/m@@SMZWO:^mJ0@qҚ/[Vov' ԶVl]XU o~<2閔t]k8==D[(,UXH7鑽y/F*鰅X+5wz f߆om +scۭ6B@#=e-BTª3Ǚ^F[4W`& Z{>SnCEZ`,!ݷLڭ^ +(ս%dWUM:F֠`p< b!Mgt8>eV6*2@q ;O7Bn pA1Xl( +{J`k˸b::gW]f|)BP aǢǦ@sM:=Md~f.:FU n~7bNVjl0A>]|直NPrdi[w%8>W?wlYϗ5k$! BB}noV4ׯa替Շ_M?OT! ~BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB0C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!mwYniбFx+ȟ?GՀ3cuK7[PBV> WTC R6/ +J>cdK=~Uz9q8zu:[e:]CKXA9);b-QW9tWK@6E>!AӺWpQHF;7M[˧|1R'9꺪EzYyԲ]LOi W56I'=țlw遉v+/%WuzCI[|Gm:E@82':mȳAA s7* T@;|Y8^]Ϙp>q!wUFK:WQzM S&>lrI81wWkWq;tuTvU ?Q:N]fǃaU]9i2 }2g'u- W:Z+xzT58>=\zeUZMe8qq:Tu ܭ?2N˅Wˍ.th+oF7yίtgi:ߪ( c25j6)3͇c&/J:C]AM2>s dbd*I@_9ZȲ=(+efg[TGq۴j Fe9Jp;G16_>\*tIgPVw1w Upߎ|Z%Pbk1k]vHe,B$Os7oꄮZ͕_#!~?9H:UJ:U!#MZK_NⰫ|yNWSuu1S e}%w\9pVV[[@[? K S檣#OWԻ6[\--T|.}Aj: y͚Ms]S(իx m|>C7z;6sn֏UģWRKvG#Rwftt3u`~tE󓹅QVڍ‘i(+8e<@]1eڮ*V;L~lۨ/F=x*p['=S&Qi(Y^wNHܕxQkgyy]\&VV.߼UǙu]TW@#::{mZUEd2]icF5=2 LEIO:{Oz3Lta,R-P5<@YRC03]2WS5 qP4@{]?V= 1ǗcWgֵnթаqϔS^-1I{=>Ro&䲣SUZ-9*|%-@Lq5 +ۄNHǤ-m;i;R%x2*xXE9܏oZQ}U1?EEq;)'})x2S١m-ept.YE${m>{y_fQVڜ܂9 +έM]Lu=UVejNfcg͕uN5jutC{0g3$؂=C*wءR*eU$ē',b3!=@"W?*1w?Y=ݠ:`먰o `#L!/΋@'G-G|2|cs. }~}'-/?=@>l_xhKf1w?B/j::/D4}]01$c<                      juEkZ:VRWzBV3E]I#j+mfQ O^^|-!<'j+@Ai w/oQCk CcrD{!au1Bvo>癡9;D!>{l]sVk#82W}Y 8'g'~%w缿XN-7YU:z#8qOT8CgkAquu#$'Ʉ'+Ucԟ֢ 3{DەBsH ${=&j~c 'RvVTygH?.Tq!:OJ@b2BLnń|a Ϥ>>aGc99[B\>1MIMA%X0Zgc^w`Ʋ,ޮc~0i'zUfy۷!<_&QqxZؓa$#Ξ5=L|3OwSRi9fwY?YBovh8zp+{׈Bujjn[a3b4O'έNOJ11>'_H/@ .9 Ya qݷq u=Xۿ|ޮ4!   {_a替Շ_M?B/~/B{           +endstream +endobj + +310 0 obj + 196181 +endobj + +311 0 obj + << /Type /XObject + /Length 312 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /XObject << /X1 309 0 R >> + /ColorSpace << /C1 308 0 R >> + >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +0.998743 0.050132 -0.050132 0.998743 1035.941284 384.149780 cm +0.000000 104.425140 m +155.191437 104.425140 l +155.191437 7.658310 l +0.000000 7.658310 l +0.000000 104.425140 l +h +W +n +q +155.191437 0.000000 0.000000 90.423203 0.000000 10.830116 cm +/X1 Do +Q +n +Q + +endstream +endobj + +312 0 obj + 257 +endobj + +313 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +314 0 obj + 2567 +endobj + +315 0 obj + [ /ICCBased 313 0 R ] +endobj + +316 0 obj + << /Type /XObject + /Length 317 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 315 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +0.998743 0.050132 -0.050132 0.998743 1035.941284 384.149780 cm +0.000000 0.000000 0.000000 scn +0.000000 104.425140 m +155.191437 104.425140 l +155.191437 7.658310 l +0.000000 7.658310 l +0.000000 104.425140 l +h +f +n +Q + +endstream +endobj + +317 0 obj + 214 +endobj + +318 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +319 0 obj + 2567 +endobj + +320 0 obj + [ /ICCBased 318 0 R ] +endobj + +321 0 obj + << /Filter /FlateDecode + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + /Resources << /XObject << /X1 311 0 R >> + /ExtGState << /E2 << /ca 0.400000 >> + /E1 << /SMask << /Type /Mask + /G 316 0 R + /S /Alpha + >> + /Type /ExtGState + >> + >> + /ColorSpace << /C1 320 0 R >> + >> + /Subtype /Form + /Length 322 0 R + /Group << /Type /Group + /S /Transparency + >> + /Type /XObject + >> +stream +xn6z.P])?otRN 8–??-K~k?S +̽Qx,F;{ޝ9R"Y0 3:L=95$ -*sNI7FHYmɱ8~J }nܜWZBq)fNTu 43 K=3_:"#fU3Euoԫs1wlY6 ^j2 +x&x~.9ac>!XJ6dQdd5+̺xu^73IdzhGt.w/&rI'roCRŚG}bB]47o6oG1%P5F(kAWth@>H}b-p:; @!XFctJyQeXgdi4}2*G*  feF娽Q%ŰDf`|.V[q #k9m(03㍺7zTs68IHqHnݨMkpip(ټ )TL>sEtMANCaFn( +9{n^Mgg՝75k;]X,~I5+!i_zT>.IFOuqA`JMF|A}uL<%?߉'#%))?"aM(Spt@+),uzPcd1d@ʰ7$ZrbEG|1̩  7>rq-gijvx=q1xa|Ab͜ u/Z{F##Cf>65SO(_ 4Xxe=̣%[iJsh̾ήq2 B t4IA Jk&)Nb"|87>r\eg},*[ +endstream +endobj + +322 0 obj + 1361 +endobj + +323 0 obj + << /Length 324 0 R + /FunctionType 4 + /Domain [ 0.000000 1.000000 ] + /Range [ 0.000000 1.000000 ] + >> +stream +{ 0 gt { 0 } { 1 } ifelse } +endstream +endobj + +324 0 obj + 27 +endobj + +325 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +326 0 obj + 2567 +endobj + +327 0 obj + [ /ICCBased 325 0 R ] +endobj + +328 0 obj + << /Type /XObject + /Length 329 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 327 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +0.998743 0.050132 -0.050132 0.998743 1035.941284 384.149780 cm +1.000000 1.000000 1.000000 scn +0.000000 104.425140 m +155.191437 104.425140 l +155.191437 7.658310 l +0.000000 7.658310 l +0.000000 104.425140 l +h +f +n +Q + +endstream +endobj + +329 0 obj + 214 +endobj + +330 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +331 0 obj + 2567 +endobj + +332 0 obj + [ /ICCBased 330 0 R ] +endobj + +333 0 obj + << /Type /XObject + /Length 334 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 332 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +0.998950 -0.045809 0.045809 0.998950 907.730591 372.014465 cm +0.000000 0.000000 0.000000 scn +0.000000 240.237732 m +133.743088 240.237732 l +133.743088 5.880585 l +0.000000 5.880585 l +0.000000 240.237732 l +h +f +n +Q + +endstream +endobj + +334 0 obj + 213 +endobj + +335 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +336 0 obj + 2567 +endobj + +337 0 obj + [ /ICCBased 335 0 R ] +endobj + +338 0 obj + << /Type /XObject + /Length 339 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /XObject << /X1 309 0 R >> + /ColorSpace << /C1 337 0 R >> + >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +0.998743 0.050132 -0.050132 0.998743 1035.941284 384.149780 cm +0.000000 104.425140 m +155.191437 104.425140 l +155.191437 7.658310 l +0.000000 7.658310 l +0.000000 104.425140 l +h +W +n +q +155.191437 0.000000 0.000000 90.423203 0.000000 10.830116 cm +/X1 Do +Q +n +Q + +endstream +endobj + +339 0 obj + 257 +endobj + +340 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 341 0 R + /Height 256 + /Width 354 + /ColorSpace /DeviceGray + /Filter [ /FlateDecode ] + >> +stream +x+DZ]+qɫܷޑCCm.d9TUtv>?iȨ|rנvԏ|;0oSHᅢݬ7 AI` 5Z`)ᅬ<!͘GKus RK(%Z?*CXQ=r. +Z(HR J TO?! E?"(!Jڡ)-zlAQ( /*駟3ϿC d5y'MR@ Eb KG \P=HJIE[(EZ_((2_42m9P-j#ou2x\Bq𨤵\*%Nqs.'E ԫG!_~ߐ_)rJrZH T"PA- (2 +.TQ{j*T;5PIXLˈ7_T7E(uT|@@ 5 9P>tތ/(_5L1:*GѶ߉0%\zt-!N P@"Q;C[j*ճVGk{&e5BRG + VPpvKi/ dOpJc\AP?(C&N\bED_뇠&,55)o,u%dFхPBGeS >t(!P@UH$ bZ(ƤCiњbj +E<Ťx(~RUJ *En Br1Q }?P't2hUT 'ξ(ߣkcRKDRǩB~KDԲ >&N} A!e;=ؒ}VFz,$mI!Q + )f 6(u*B)\;S0Ԏe;bP j% +CEZD6O?@G+:HuPD +W2"BI%J0ԯ-E +S*i㲸UDQ)#G#K^C8oV{ؚ*?w1I-iB~jIP2(S9nN˨WՆB{J(U`4qQ]'BdanVsV2^LEٖ8UwgD Qujw`G"$M8SQ.T1\ ¹NR$PE s"shMEs GC.¤/崌ZZFdR”ŌPIk07݂R6E=_i\ph7/&٩T-t=E8ga֗Vr Uʙׂ;fI#h(2f/VN .Er J`6/ +S/oh9Q-+tsL|bH9ٙTzRG- %LEKNJ}=ňVAׄ{* +0TN}' a)?Dj{CT4RԎX&wLztNIс5n)L0C' p6A$1s$A_ss +_K^I]YWyX"Kb-._أ㽐hOTɵ 2S+̇:*J?Z6PQ*.ú TjxY{ CV> Z"ṣ"],E_wV>lj ZwXiC;>*eWȶrR^tn+e sY.>L_ l060h^LAF8o[ um9؃mz1p9ųձU]K|G2ЕtG)bMl?݇h-̝ב~.WS1ֆ.Op=}8[<]oC2;j4SxQH!(d:Ĵn`[ԓ`"7!܈?f&f!+p֌mD0st&;3)<$lQOʪZqso=SM +ѣɘBA&U&Cg=0=Uj^ Cc\KO s&cFs/>p[a#OQU?c &EŢ|m2,uE Ap鏠%)f.?ɈEZ20S3:4ݛ.d%%ѹ9r s?W8{7:61XYxv;J6(Hg8t*fgJs %x4DВӀǪuʤ.+ġ%M?5[?4fluJ"4g I[ɵ9Ž 3k~m[E{F|>gTd0#2#oK9ۗT14 +CuIJ?ʬ$.A +Ч8!I Gɚ#3Ĝ/.chŶ|䠪w0ci':Bx( FдZ+85K=y.'=AE?6{0{ا5pYkkqaZ{u]/ԇ +IEg Kjl;!9dӊ{2Jc7_Gϟ8|k >4;PP-/S}Lu5vGz?SR[r^u`M1Cģxwj8%uFr/&(;]>e NjLy(s̭/Hp0DUɹ9z:s$UA;0_"c>BH^x)K 5" b8q&753m4>"ѫsG@bRa~]p˲ F,870-cIqzS {`yef EA? d;MbFΟ(GY $,-hxIqp"~MBE1M!JWπQ!f]U3nk0߭Ya)ڐ0ǎ 4JȨJ8G-gL;ˋw I 9\T +y 3u<"j sU>F=9y=bP4Oi1~ML|#4T-A_ן +˗ +%f0(am9x~l +qfFCm MoLKau/ SK>(0 .'0=kyB\R|x0{"w܇ .l3zLI%:sPOmKPrLJ8_\YA7Yerhꁓ&(>r߳jͼ&={ƃ,Hu8nrF<*Z+N^.5y:ڤ8?Qnb0#~5i> LOx]: +h-h$V<UCO AGa?qpK1Sa˵U-h: +1Q-G}0Q7A#0 b&0z.vAq*3qx**<9(덏k~A%{^tY+hZjk3WQa zԝV0<\n^~WC]*7íppC_܉siaY[{"#S+V6% h:>];q1{]"{n `̾'v!mpv&RQ^?k/uM q=a;k_B$ +Sa +pF(AߦjǶsC񘍫Ђxju R@6T1 ݫobxI50 +5#wW'Q_~=LQN=_9Se"jӀ:>x\!g#<*pxA'\ihZDǵVm s>SI +0{D9"Dž%MOj;EK*$cL'w!sʋK=FX&-{`Hd/?ģ[>aِO!&.nj\vdŎ.dz)Q0`X1;YE#G8%xZtr`RxasJnWr_BxW/CڜVï@4Hs5xasO)%Z> +c09`6Ith>>W<Єhlnu$u4n߿.a&p5$pShuQE$tar@yy\G +0WqQg_%o`k܇=cyєp[GYPH%e9qDc6>PtPo׮*}?c3 \e,iz+P ,a嘅*ݮ(4(a;aEcqD-&)+MY⋏~Í2aq`|ojo+:Qƅf FDYpl2,QopI|1ח%?{$ +n4$8n&T+O{ԛ׸اcJ/.c:5V5A*wOkTg dy P^h0 h u4E7蚵X +@y.f!M?;@l, yLAqZO.(hTgq+' HZlVF# M5PywCօvpAN.4DG%dÊ=B BSǛ=SHDo=X!ΐj*W T8{Bq--RƎܼƯ 4X{<9rj"4&)]kAG] -Rr}U?%92Zy` ^WXgiOR ;0~k?ӤTӭRDQ&+z[0_oarq<4NFS7AEOHy@"c,cQ hTK=d`шD/rxS[aw 1yB&Opqp1evTҿYx^ :qQzFiyZgD`̓G2vB#9}8%F_<#g%z aKFm3L4#K0{>Ĵ*兤Zf9G+sChP-ǻPm.,tjq> ㌱7Q)/$5? _Ÿ½⬊ O2hrLFl3_O)ўI5sJ22qQv?!1kR;>r:+̟YB)sz:YlHBD\\T5 4p0f/pQ,~sy\`ϬD|NCpUM?+i5_0Uci48\ +-cSa>6{_9竟8s1 +NՉYD&e5q180oC D} ,8I3 +NQau D*ܯ~@t0Cos8jtDᅱE#4b6z.$h Atg +% +ey2g;$RÏ9 <(ْ46 +s[Y~Vp3'B!/Dp+>af(Kqc<#uMZ9ݏ/a`b*M0"Ğ!*Qj|\\aK/UˑGt@ݏm.갆 A{JTV`XJGC^r^+[]{^ِ5UNÄSF(a/VpތADhѝ A؁y!COŒS1(WJ z & xrl!^{J;bAY3ʕFއT럤\֣}+&Fk2IjvA2aW/NTSj;FSѴtaB%KUwTq gJ#7Ffh"-M94zw8h x@AgxeLFIjk"sDZ?4O<0q,>B cϰQrW +=} +S0{x}3<h0.,u'O˩Hm;E=1SQ19=wpʼw: LxO|#u@ЎeIEי= eٛ˰o&r8 |^HYٞ!c]M'+$ZdQ ,{^ +t+'\qÚ95|=bEDYh> +MXg ?qGF3kHJBHբ3` D]'jAp} J $,>|/Vb*=Xޜ 8 4X^5Qȅ))sB:+N^T{y{-vq2I"IGE+qw@ Nnux㠍B{ڲ,0S&74Rz#ɣh0ۀ#¼}NWZex ej`S=¤A sJx2Fґ +7qPg c˞݁^g8-:i.!zM$9$z Ҽj!S'Q`LpƎ1Ra +ӭ=\.ְ9c(7r QjZљ(ۼD4 /KsaZYח)Ow J܏9 6+齟܃\林y`;w|lhM2:Cfp,a;1Bs7NV P0qUxu}H=.>`yv:m%/V9 :J'Uv\'FYW9 +Sjx>^'G{AO(PDfG|ZLODxx +~kÿMb,1, KaJY #t K (͉-ÏcsN_}c3UY0-2Z6^wVȲNvPKֹ٢3.4WeI͒Ѫ?w>Kd&b* ՟9} @ͅ~ɞ~Qkduq>&01(zi7,%n:3o1?69fD@ Ğ2s`Șnz6r1BCc4@d `grړk1¹K%#PwtTe T*;F;02CV''>jѴU2V8rst李?q빘b" +.&E%ls0 T +)i*1' 5Rx!V +ۀN.6}w:3$I.~XfQXeG?òpж8(9\5b/QpmhDzbp*~0{8~Xd.APvoG(H.Û-o&f$AwHyw5E&$~&Z.iE ʝTȪ=0K|x>svpRM:,0bM(~esݚcpmh!C>cpe|%s%>ow:dɠ\]) mX6[M17Wj>dLs,zSa%TƏV0c#ǚ_1:F PjZo7iZ=]MVIF}ͣ\0_W ;0&KwQ-jyLx ?kFy CbnH3+¡L. V|Za0dn5aD~hIȔc8Z< G:Ú')?+xF9ovK_f18\<2'X^Uez.vØb3Oyx>KxCC!? YSa8R'qQ Q +VbC3ѭU}| y*4cd/fZQOjh C;< +f9+=R?J#'V54-ϳD*T.ѯ/ىFJU4)O&ҰlLn2*$'+_]O +쓉-LQ1u!]}Nf0wa*}o^;A%SK<=ĺ:B"D$WLvtü>̙ ,B$]A ^W*7\6'Fz$ ̛.M4"(2tOث_ezua 3._'aooF!:w? ({oz0`! '?ua>r|s>%vg'+lyF\ TCT0$ˈZy܌ +`R:`ձlyF@ +Pa{9?C"Nq☞ۺ1ulj,i[.t`#p M|3k;Qaie7#ϓ*HÁ Z1 <$st +RqE:k}0ĵ!X gTpճGXs'J*g|1:3›ЭV_S+ϚQce)% 2Ne4qqw&xU1sr1E-v%.qs0~6_ܩ;Dxo;gx/+}8_͌ЪMp_6:M @<ڬ3-C)(hM@R6 ©0ws +3T8rkF9'k@lT0R26+zhaC#O?*a\cGv"N,\ZhZMD+WB̍>B1`* JL?an$} a;,{ӂ+~}eT]9g1\ŒRuq\= gXFoVu^:(mv +bOW*;ab*,&t=4u+af'Jh׀·ع___R'M& "O=ЭZľ:~E"7\yAfB:,< g"_~\qć=Ra<u`L;lWz}a gRX=+F{` +oS5XlRG8J nLhM'^ďZ0ahS̈!=*eBnĭĽ3f>"Ѽ9 ,! k˸܁'Md= mX`QpG6a%M>|oh+ZCt D]v~tJbnd_DTAFK/H ї1\<(Xh8;MnvxL֭T9S;Kk Ǯ%>U/ cdQՄ1u,u, N b'U# Շ%ۑQ+:HA\MS +{icT8G &Z4g D ${5vdR5\>EvѼV&\ad4V0J\`Es|{ɟBPZanépá# +bRS(*cOZ&:ꐣB+H5W-S +]hyD}ŒX%iyQR:xd+*8uؐoc V#9Bd>B8\GCR+IFI&)Em<^vƍe/fk` [F=Za~]䰂gaGϡz \ ڷ_( +Xo +s܇s( 8DYiO2hYoh}Du"\ڈL7:kbRQ?$Ca|H0k4 [,:G88VAg_rs˗GkUz#-hsQq/[{v .LW +c;egy&2aY}H8!o=/ܴ'1CU%{0DZ&0ß+mTX8/'˜˖=S5fu;ȺiJpB簜['%\hay|A܁ڷa\$ ?Cғ$sQs;==h J[>\?{ +~cg ' P?XITY24&SUu5.wn\l&~4WNwyx-{ +xf ULV#7TAƔ5}0RV5]Q'[3 ڨ!+D?*+f4TA|x`=iP ?d%i>&czUGpJr|AHľA=ѠzT;oT_L8I.;Q~Kl 4 &,5:ؽgab0N` +,2:jFԝ%&x.;Q=֗_L, +gtF΍y\ Y]^ +Ӌ×ZOWc|PvAxXǘeF :#*v;y7?iC,p`gz3 . EP1: o}cFТ1֦BSV K{V߭=jȘª^Mt|Q'lf'3YO8cuVgV@B:G[ dUp/_+.n{c>㌑q5J,V{u1O#'` dIӞd ЛA*VGajᇄ1 B/ Nt>|P ѱZleF XwM Qj VE6ZL fwPaw:Tx39xs=I|$ֽWJ.}Ae*s!Q99Dӟՙoytf{g =!}E0, h [!Xm>4lv{=肘R0ػqlbFw.Q[/F=!E+DUGE$6FHBhQ8?%GAQPa_1=npkpG vv [Ufo޴P=ʼҬ$z^`mS὇klж =d5잝 ,4Vdɝ|UT 8k~ǡ ږTTW?09E;n+Ӧ5t14@JmdbrWkUleMsc7ӳMtL0F p%^+L_3y@( &鋎zǴx Vᐎ}6HX`IՃkƄlGAVއ]0R'v YjF!K \ID=*Z%tHg$CAEc#؃EO%xKyYaH"*Y2>pJ#4~xo =TJQW*SdpZeO \,W!ey a2jz"h^j1ެGڻ¿W|/Zb0;$QVNxנ. ]'Qd5@ŋO+.&*2\6A3/j1A{LW`@I_ ceJN 1RzG7<D-&I.;otog!b> LM!+!;gpz„0o{BmDQ +>-DgOͼ<=T/VuP}2XZ`]Xr"˖+vsM;g W£ch@E^2+m Y tYXq5)A +i 1QOQO#'O{Q4@&L&G&aï.1{؉sz3ॳY:fd%D&(a; Y/^Q},_Ouυo t6]{Ԙ?#U}aO$(7עkyA!o< L[3&qlxXkgGAb6Di ,OCdLA#e`n~yL*o~ +YR[]`iQ9gqҘo!pv:){2|tTF4c"ShÿsﱻzT}vwPnކ ̇:a{#B!17FFr9kk8#,Y졣kp"!ax W؎ 7a + *LMF]{]0Mޓ1h 24m=yc' )b}ߨ _="Tat&X>R-OU1`R5V%\;9CoVz,uBTRC¯ ;-%|-r'ԥ z=LI'WHDESw0h[ZzmhT@QͿl x~~/= RVU`*.x#Y4j4:=As:jd/Ak QTJ +g*km.Lm" qza; ,|?"g&, aԋ aPߑbToj(!D(e'OUasyZc +o8cD4skȧ6JT˕;WFSh8x3XJZ$l*U7jH 8Sb%! mU~P L)x <sʽ9mp'f%Y7?!?5vLL>դx6D5O}W#:V"jK}{xW \8 +: +L@L8>Y #hphz*jZ"TRؘ@q֔b5Q;US1m(k<~UaZqh%@\tԀOJFi\YP6Tu*yDQCPIڕJN17x +/˩wݧKg%~㊽׵ʡy\$]z(!2P@JhCJEpLE%-ؖDԑW6jԲTy<@[DjFTmt32}(eZ0( +P S:d{RrPv(SG(jI5iRД3BFaxi\xVFb9C{ճ(ba4۩ RD\.5Ds +?.P,*ctJ[O8ż.|zY٣2P9PG+N'XG[p(\<Űh(Ҽ +c^4>"f]çj:Uc,ar~9o"0voH[->`d +endstream +endobj + +341 0 obj + 18047 +endobj + +342 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 343 0 R + /Height 256 + /SMask 340 0 R + /Width 354 + /ColorSpace 288 0 R + /Filter [ /DCTDecode ] + >> +stream +JFIFICC_PROFILE0mntrRGB XYZ acsp- desc$rXYZgXYZ(bXYZ<wtptPrTRCd(gTRCd(bTRCd(cprtJUda|fF%L>՗͛T[kKh] B$C\7Eoٹ禦l`̈?*vmqXpW,Eԩ*ZBz niu;Ol|B<˳ܓ @ ѽwBKP9 +D`kA:bΆ  {U75.]sM{R`ر勗?3oh7-=Yݖ+m<cq Y-x|iZr(,Yg0@̥X +-J[!BHL{Tj߿rޣlIn|(ȻrڭD.[ݴ%v -Oj5mmJvĿnTݽ<ŸRBhVRvFǁMSnN j͉9NS|;χ&-(nӠm*p +e + +g˧·Zj.x۬v5Ÿ*,Z<ǒ׷[m^N ۰[&~}ONV|?Q\F}(aw3rg;Eu?5[*J ,*v,^^fQ@W~x+xv]\*ո-}eTnR h~֛F;]˷R$)BG-9 9+uV\bXL~+ݝZ];zo> v׹v廬v穭U-@ ڒĹQ|W,.kt|2,ݷqRe, *5(ގ\}6^ ORc cz= ?k-xg4 7mvl~3 J!q ]<ŵ55K"u_I`^Iݳlxv2㯹҅i;G¸_zhӦI??usSumi/h4m#>N|FPI0@b+>Qנ+yu(.yY$y%OTnDfzs=u~ -#]gQqu7ڝܷtt@ 2NQ-U߸6Y˲iv$DIE"'ji=:jkk/\oM]Rp 0K2Nza/٫ݸ%ܟ9cW@h*GQJw$N"G&굔ݺ9\PI6dD@._yĢ ibM`?O0  Bqۯqz+0O,B%'#IH*>1GڡmC V\r1x7u2b}#?)ȓ%#\g,[P~T8Q;f{d@ AF7pъD DrjQ*@` g"`@'4z{LDʋ Yy 3p&#9O"2=LE™v3gH~pqJLBr`Gqb;7'HU,;}pM!gezfrDj1#HՓU $~u 9\tA|(vGcAfAҔs4G?*@ I&7$o L8*#[ۓ֚N'E?ɡr`|#;нȞq(%1Rv;@g=>P@֪<βY?S A#@L`'5;zmzHlWĎWuMeݶݫg&!AھB5woG捭[[Sq-qIV<ޕ OoO+t_XGfͣk ĥH@X%pv#JsY?ڹz6:^ f%FI=R8qN}ALȁ `9> сԸNx?Z%$'މ1ނ6 rg۸'>dɓG;#>L` OzF(ʂ$R> &IxFGdv + sҐ'wQܚ` 9@?~Y5 U I=Df |'ѽ}X?a09biH< +!&G<nTǬۈqE)J#y\9$E,pGjjO'P TB?1RNԙۃ'jI3 C#$ɃY-bPNgDYAeUnߙl+ʠYfLGG ԾK%H.*vuU-Mn`ל$邊(J~iuJ-Yq.Zs1E%vshV@W|ȍG|m~em5ˏ:#@Ri[W #m'pۂ㛌 dOx$N1W߿Þ $pI{U&18Dҁ#ykD`g4(<2g> D`D HDE4*FN 9DZIz@DDuhfN߾i<`t*Ϩ"=i[yA =E {t/8zǽg4"sD]ޢ1f&0 &0ch g~A-$2`Eg,9s@732ӈ<&~"C ~tI:~%# PD8PG;I*4WZR~K O4I#1U H*&Lo ǿʅМ̨83@& Dp; 3QDIbdBVɠ$D 2\Hp0i'څH>95L SGjF$$LPg9D#H"ؘ~A0L~:dɃɘ**HMcp)c`'F B#8uA<`>hb# LB$m'2)H6aR2pN 2 On{Z Hj@aIF&σݺlu)iNkwˋ|ح"p!`|z/o {Rf\̸晑7 +nu=EW%v? _]5:bͺqX"nA\U 91=sVzwUVCR'yO([k%ii rh zק{\8cQ0q9@#$GJkp0ȞtI<׵ːbO知1&#=HH">TZ|D#$H%G2;s`9Ďh\R >ۘa=iA;DN s8@!c!+PH ";4<(v#q8 +ֈ f>t dGҒւ}3anh)<y0:S&LzOR +B@)c EQA3ϰC4%y폸2x(ٚL6HX&N'1NhoI<?I;F~`7g(Q&G":P7 b0vE"z,l"3('9$tvV_=5qeg#=Os{ڹnpցnOp*q3ڑ!^`G_QNt7I?ݸ18y>(i,NA<jH=0LcBsKz) 0;C2AU;hv6{ coAҁOP0qgT:< `f3A8pgG'& Tϴqڥ*~&(Ye#<SnbcQ|')eD'4`Fܞ O + + -'u1҅#1y9 F:lt+׵ ؄,ciҗ\Ƀs0q4?/3>s3"iI-ZC$0z=Ojc2c&hc0 1G#*A0@Q 0 $2X1_9"GX;WZk68f&vkaĴ r+:}?lu_ۺgQ~rBӕ]_lӀ>uCn3K1yk+t6}1+ÿϳѧQ^voV4ZKz ,Gjڂ//q۴ >^j-i_yŻvfv&2I8kjm-ƾ d$d>|ׯmZ~=r +Oi&:DIiJLv+:IY?*mcM.~i cjV H$SJڔFA4B '~Zy" @9$w0T|#lDs +& $bi[3#2$/i " J`Hց09(y<5-HLIPs;c G0cQ+&8Gi䌈-f=~_6#D aҀwjB@=qO(;H21AU(L# t +!NgӘ$U# *|D#>T@H)~\[#5Xi'dCD,r>rIT2րb}&A"0F{`u0DԀ1g:a*TdM9Py"i2;*11۠VOʛzX;Kn24ځ&D3=ҩw4w>ѐpMI響֭$\""݃ҐY8ރo/t{m]c+m$D DvFs侗WtCg`3ox]NŽ5w[{ܓc6BJe.]nB#[ < +1G tQEyCǵߔh5R] +x$0<:m~番]K_hm22 9k'MKJ + =r@$%ƹ,_ EP 9*Cm&{H1h('1^_ INL<{S>s( DGz#♝z`D#Qɑ{&gKHCA1#goL0$g0gƓwarczPF,mth,`:`9wD$ pzt`:}FcRBt֊0I<FvqӥQȃH>∞Z` G~Է{TOZ 褠gnO]\}M42` GD, !ZrΑlj +)UX m$ v̗2 Q,28SO&c9'<9+۞d? ~څa=cP(98|,_q3D9G, gC5YK4x j,C0bOF$IlQ1$@$`@ b ǽ 8ELg?ꆍޕix♙L E<>)bLLO_Tgqu3C" @3DOʶ~r{Sal%-6d @7o*ėoJ o19[F&ϒ-1y|7.`չk:;{xQEx]Ez_:^M.^v%5Mz؃˃FfFo5]5!vtF] ?ʡ`So1b +ƹRqbGjdIG-:G GJ3,zHH<|?Zd25W8("I{Pfc"`s)D,=< R"fHzEIP(RFdN8& xe&Hia[w$dNyJGN(Ԓ0r;~JXXL$40`G_# 9?6c$$ 2 dMR8SxNDv +%?"Iqq8'qB ϧ4"3$10b wEG5-&T1FhAazDTwv I3"`҂Dc&(&`PFqb=4!( sTq:ujh_tu<(8O'Փax Fr OҢM 8ޤI;JFF85 ӃSHfG-N>B cޟc1<u}9jK0gYTQT߰x +i//iY +e ]҄vq_KO=p H'ԴdD|ڤF0{R3i@RsP0լZ#1R`zw41A$~AJx='z-خ{sjl^#т q!dBhHS폡+)6֘ + OL4F3iu ڏ$r"۩'s=3H@0&r(#LjD3<@9 &dG$df)x♁Ɉ wg&>':}-Č=;bb bZ"Dt2~TԟN183=h I(ɌrqFH${>H +(D|g'8fj` 9,[ HVIz1bvd$cS$KT*- s5-'(06Ԍ3U +rwJ&'@’?sV{QhGIs$ wQLz] C^I5W5堅VPAYZcutiK zT H =D)`rl{:hƢ+; +`=HjʽN SyWOjFgޱ`Wғk$r=iu#9Jnq2 jWNjOi00&x@911Hf9jRT=rLQ\RP:Hjb`ǿʄR2—+8jg*+ۤx&H*AiCbxW6hU ay҈[1у$y4F;Uz`z$ND~3%2$@#YLb}Rev9\eAc"A#jDčOIRI&Nc*f/u瘤qy[w X4#dg.hf&:})&@w`;MskU1KFGPz" lݷ~: kwRcedNX03'L^!$fzBXqk%Tw0I>jFUJZއh*iY \RA'3eΕɰ&"VՍoQUBԓu]ToH gENY=Κт$ bA +-u ]:ظnd;V j1 dTqLC wL xp'/ޕ`=Qe_6l:ϢB dBUvݽE\&yWmm2щ0=b1d)mNGAҲxMӸKT댥F`aD0N{:/(y4wV娛&ݻC"uqY].$Q~.ܼgb*UY=ݺ4Κtᎊ(- +~[>.k45=FQKٸ%XJˋ*aO AMwT*1w_0*$H;K *$dLnְRWLl(mQBG3K`jtiu[[PF\"yv +k٣.Y\B,ASZvµq^W;Jjn͑/Ь}3l ı +9'h.+´zMeESMbm.:ɹ˶Il1X^:mam77,* ݗ$\vn:ƮjŻ!D* >-=]~#i.x s[7YJ fr$sOA}yahnhYYmûk4=rin }톏$m$ !y(onju$~bt`@HE]$H۷V[l;y@ %DA#hX +mz#t-ep[p`@QE@I KWzxӲ]U˾ޡrʸeES $='봷w\pKKW[i\+P G J,sh~%>"4xO++VV夸ۙUp*hX[v6_<[n +b\>m%m̮Hy=ZL +Pm^]{M9,TMęrٍL +޿ůcͽ`fбv4Fcv+m/j#ʷEƓ_mԾ> +stream +x n}m6uX?VTTv%j :PY@--.:"q}dP +^Wb쑣x*ߚqzW@.Nj +n:& +*`hK<`L`x\8SP9) +|qzU( +x_^q._a,H.oo @]CQy]8+}ףB / 4՗ mS6:!\"r[F@ +c +B1r"*c.]JtKnVs+P(s=,XTsW14  +Sd.8F IOU¾ +_|+e媯]B/ =ir\9?C$'Xi =t 疲2'OԭL_15 ٌm `)(LSBP + .˓u׬덍WY9NKC?*{Ns6y( ր)-4%0AZƈ }+%1n e4j_6H HJLvƍ7[7o7q[}G߰6c5c&oV7쀓4Xw˜BS $&h_Ic$Fd@ڲdrFeP_uFἢ2 t@(HȷGp磏,`׮=> 0Q[ﲑcGղS 1[ ctᕘĜ6dF\e +[ .ĕQ9 ˨\ 0EcAyqQNs]w{w}ݹs޴'C2B_*)芩KEcDjP78?j@ᲀȍk%k$tH"&G +hTݿOŃ!G|S\8hg4~(-qhD^<6$qBu 5 J!Ť*/F%2Ey9ٌk-з@߀":y[ |Q4d~ԇ=<ȣG/oݼ>MzPlPUOKdf\ĠƠ”'h>SJGo޸v2o芾gȌChИo{CbEVe t֙ y Ab2"wī7o`+P +S + )P9=Af 16ϊϟs=ܿwz-?}/e'+-78^%3"BR9$@yACr9"s煸%ѹNNZѹ@])1y km\VgA\ȏTS*3ʳ)O?>{Exټ>yd 罿A?Oz*|;j.h֨[J[k1*U&)B>#rC-q85*SHdܣpa.ƾJ(L4VdAhE/?>B^YlP{wܺxsgGZ$> Q|AR<ʅu.N E%$iL۠oPc +"  i 1q@e HfيScY} d6Pͫ/ ^}f>~tw/;oEzD> “^Gvt?Ԏ /Fi + 18\ ^z{9!l&y+ȼ }G <.LEck$~F""C#D)l%yJ@6#5Fזה_=k:X/>eyI]平|V@o2U)LiHUyLEpfFc֌,c*dF`%%tFc%3 0(lnYy$.Jcx  H5h~i~|[7,(ƛ,ʗo|t?^/6"09PW`lf2 + X7LM6# rPcTf\"r~~*(OswH+;wN_GfJBE_6"S`fs2" crDFfQf-T +2:"?gdf0^*0\*'Jh-92$D^UȀ^?bWʬw?B 7Gә^ϟW5fhtFbE&2<їʧ1,T&2"#3E80j 3* ɬq $ +אĀIL5FdQdDD&ШrqO6X_}$=Í7a*ʣ!Fy;)_#˕|j":4dF^+02Eyh7I娌\S D hlU0204B(8%:WhL*#/EPUQP6#қ 鹽@CbTz>kgpOꊮ|ʡ1:\ɏ*R2g@fD%RyuW7 4RR"f1:-67D)]V"~ Hw~>5y?11Eƣ<j>[$Gle*H˷??!o`@!3:?u@NfFf^Cc@_/U)Ut&1 mR3ڒX5 v#stV (Wo2Oֿ~gnŋ|}睷8#3/a-d/|6ľTF0d@dȔ/>7lq00 U#~*Li 4E<4ܨJ0:"uAX;/`ݟpސg@_ogQތw~muWuViF/*\ 4Fd +ИqYWPW@ކ1y\ +4F^ +IJ⑴A^d./Dw2ҿ+7OIo#{-3'-5"2Gh 4w1@)”0hM* +$6A]al8 苺18*T^TEF| +)Qf?XWׯ_t֍k/<=ʣ~x{m w5^G2Ȏ$3/$." +HcƐ͂l-}uȬAe-*"yO"0 +[S@DY(T@Buh9!^J #}paŞyzΑIy1:ie>eGf*wr\CsF@.GaFcTvD.PUCD+bj`&D_=j 6)S>cOIxdYΫPjDVmPָD ª1Ej R +cVApacv'aٿX^+ʛ:UtO影q{3֔_;xiw6^|;I^"k͹YRe +JkE$2jjKP}Qv4_rk \Nj]sµA%=E\Cۗq:ZK +'^{C9?@WP>O+η򾿚>eWxu1,CX5*KH5Btܨ +:SCU=3p}Jܢ(f:nW ɖ(h{rt{O |Ol;IY@lZr5p/SeVP!c)mpn벽3 S]Q&! SЛhzr^z9ϭͻyz{2ʿz?#pƈL ./,@7AE}q>3;(iz{@ ;gf+j0=T;NK<]Xiw?ĢAAKy>:d&ww(Ox+S#F EIpC^L]WieUWޜ#=bQwtg7ǟbyM9ĕ)^?Y6yVw#>9_` ^]RWZGoӉ\'X=51>Z}NX8)q<9m9:PT}/7+=WQis`i\OJ +dGQ7cˠ,d/cr6Eo\~BƜ1Q~*+6>#YQNw~@G+t4(q@c +Bur؂цmzjy@qPyRzuFr ³߁!`}ڶ`v$X1f@JXJ`}V=fkQHѦyaQޜg6wRޜҳc[8^RV*RqB zMBjA` .pl6QFTctƺآaR_Ԉ_jhssWM6ۨ?vQX*Kτ5jSJ&}fYc1oH8;(P *2=tWyG>ʟynh3|Sb=Mx2!t&Љ [`d-(1 +Q,s}Vh(r쓅 6*S=S#ۨ܆y*/?zmJivMCԊ Mڔ Әj` * =묰!Epƿ;,mcؖ(9')F/QYGf((=3ڐ(OR}?ʓs2+%e7lS{/Xv쩛SyBXv.k8v5+DfA;VDO|sH+,^4n9=6>)PveHĊX D융L訝,Reɮq+ECp)(2:|(;,Ȍ?9Гog'y>>mR{Cz^ZIO$ Vf 7SK` w, -qh3jCex:y7ߐY{Cҭfzւ\RmdARd*-kO:HпҜgj捫2!WmT~3#?YX?I9).4l: ƶ [/l9)Iq j!{%ew @ئ\n|EejaO>I9{9?fFHϮ%[Y}.V:&kAe)bx] P:)%< lQC +;66LJ> #eFa;U7<{Dp4v ҽ(XC,}EEej6aDx,lQYdvlh[þ(I#>a@?~SDnT-촼,7}` O k*mQTކvm4:: +"pYPG'bDG3繟G#ᙥr0矐op';2^gy87g !-*jnOٷJoY%?<=/qtخ6-emE1ZrT~ې5T+(Y/]~M~wXvʾ(=68!l1#6%fiBV ՋQocmm۶plz(C:`w><|OĖyEцg:{oxpC󰲯,̠^>ֺ2YbDNhPN+Y(P:ȢsSB :b# *P'"=r <&~?液4Z2\fZE.رvZnSm{lύڱbGeYG +X{! ~O?a/sps<9ߣ9}I)a33@'aEtU07: e`h-3E, UT$.Bn8:4 X@L:5x)1q^y>t__2)Ž9Ogn`dH CXm8ǭ%e091'l[T+1QJnn(6Qޯ}{ +-Ba(2_4{*V 2gKݠ:jn +-7vqߒ6cjd*;<_~#Ӂχ5q!C7h۴."<`8yaլV tjЩaߘ!;lAI}B[ fU_ԈR8|Չq>+Q1AYQeY C 5v!q֡_aK jY2Wisid-\ϯU)/L6bʣ'z@t!@-+p,BlN TQ)gcItN?-2; %n!6>Gy*QwX?^}|y@D_>xC 7Z֪aVt֕!Qb_%=I,cMR$K׀n`,$(e'#y|@;9hS9/*Oʿ{Nr^skaiV0,'54#j߮`AnmZB/[4a16*z6Lع1ZGXvX,M.'Q>Ur +U&}@o?"睈ʓ꬈) k+1رD;ȺuT¦֪fY!Z QB504ю꘻,<|a9Ϥ9wûJ9cFPީىX~7=Pdd ٜAYˈ5dd46O56Nt:ε\88J810漟a\P{GʓcR*Kys> ̳- +Yc9, +5 )OowT!tMu|EyS#5P{oo;)uR+s~f 9L@Y @RwXj蠝KsJ]qkWNj29t<$z QBwso@w@'W[6Ж|U9מ] [~!sܸ);hrB=t>yWVohSGMy&bkaeT9 vp}*1V2e1%T u)wW9tPf% 7c"/~#69罷qA'Cyf9[tH-)O5< +L VvntˆUapV|*<%- +$=3)tNJ9/Oͳwq尔 jA[fs^oZn} {&Y:آv'%XJrd`fSr^坔:6yX_85ü9/ں. +6KձVCgE;IjA٢]qEKӠ=XF-l'uU~@(.G)1q+|]5$r-[#A/< vdYtGSƚb.٨v8$Ԑ u)!6NJ93ڼu</3~+UonDk6t#FZ݇5JMBT_Ȓ6Y56ճ8DžW +:밡Ct5 xnCZ,Ԝ?ޜa%_b:*HF%Quʺs]d-1V6rȾ+- +=!?d0Ȣo, (χX^{|ͬS,OXU:X׮MR]hÃrye"a% S#hc&R>&6繡GyGU+ Π+ D\XBӗ%ncnxemܨ6gqǺtI CI)9VzWy=s*_Ӂhs@wcJ+AG2H50Rv*Ԡ,oSε)J//_k:?Vޜw3_9h̼/ПRMB#':lTC;\K9.@N\H#qm77Sy&bQ:S#yn+Gy;UF1KΣ<||5Ɣ2V}ƪ +31R`,iwZXv}WFq1s,_FaUĭyg:w:пͦ<;΅s-r O`UӪ Q=1PǞNv65>lҘV:虈u +|G(v njRwXF*db&PVzePM3)_ڟL#SAb!T{vI͍wQ铇/o_cj$;wsA25nuV:ֆuwi'[9x,Ԡ,t #S6L2'Q7QwX>`*fUr~ GP[lfoN OŞb&F`gH3HciQp'9ZFE>9D9߿'9ϽM)H77W Z]Ezi̤Z\[.QJSQY"ʹCRTI-nJ Pb[DTZus+X;lb@y3x(TXحʦ!4V\ՎTGm0$v6>2CoQgQyVV'ͻNJ;j伿 +p%f]ߣmC Un^!&[bmrއV1ZJa ٠Er bHf5>}Z{[lg"gaRǍ+ 6='y@OJKH/,- %ue߮aכ)l\?]A Ԯm +Y~\am*^h;Σ|O?Ѧry8D/m)gOdLifm`t.m(7. 3Q9E|*b8 slOdLi|&bydF (xQʿ9_ʿg(ǰҞÙU"+{\H5$Xqr_썺[iQ`R9Ow9/08X{[ީ{뙄ᡖTGEL\d=Q&YGI@vAhWnStۍ`!k(w<&&o*gĤTM $rboR*:ٶ.{jjە^m+Or +BYl(NYwhXr?;l*:~*oΣ|M0naGˆuȌZ>uĺY^xŠDY$3Ž]bHl:jG<6LĒ9R}d)Ԧ< urtHbXvR$)'!({:*m^WϣQqsޏRg)O6?{~\1?q=։'ݠ`b3X2z=T`r٤ G"R +`l y* +Q89oVV(k&~򶲔va HFMZ݇MDmX]kbFg-ãcU܃ؐ|)_9SG9|n+m>&fwa9M`!0|bk@Y`X _qGcK((mFwy?~oaS#ʿers+Q+h3I& ix_&Xer- ߌ\.*q8#&f +<Ӂ<G9[(y|}ՉGyvʞݻ K35Ǝ*W6WI#fW7a-W+\s(Uy8Ϥ{ 6G#}<ӁLJMy|I)v }.ްza օ>x4UDƺA%آ(Ge #7*fF=rGzVC%Q>9xCҥiKѝ^d/8 Q\`6zMT -!CdQyyFTGo\qRg漏L0"soG)vM9MhV`et>R|6dQnk֎QlQHs+;۠YXXwF>?zۯ}0$I=*χVc6~*3u0xN-` eʱ +m0YC8!P;;hNI%3dz7(Oͫ/jRwXr?yG|By;=y˩âTm.P_g/~Ok1# +)\h]G#P(:l:ygH[Ãm/@Qw ORypԈSzVf:& ? +"#Ů4(ǂlX!:+ n:Q 訂{o%m(;>&vRw }LzrJ.-KDMݥO^Ǯ6PNk -RTsPR&KZ蠰3lD!9_S)>1q+tS;䏅ib'3}{/*(pXi'm= > 1s 2B#8Lix4JQA٦6>F}~dmT5Q~G_V0i^0V/ذs{g׳5FT?l1Kt0`†U;+>}}@a9?ޜM(s7אּo EK%괴 k41l/l~zb==MpY*1訹%c±|aÇHBУw>2cÎgRq?b91GU4KqYH0vER[4(V aaF$A߄\ńQR˗.R~}n <6*QhX7QvT rUDgݓ@:~AL:;lUΌf=D([,=9ʀv QA)w;T+L/4#Q(ߓRw!RqJ'tg:086*ptA 9,kqe6a6BVl^ \@sdK^+(F)YiPKy gRQwb3Ы%=r3Hw?mԵ@tIw̤[BdbVXni6fEfcQ>>LJE%֩_d XoB(bϨv`d2{*hϓLLJۜ fK1{#܂#$"NSs0x8GΘIpSp,3X`f*JsF;-})zFJ3$(p#el- ؁7+Ug b +s!dߔ{zDlH#ʗk3yV@r'y&b&JyFRy +Ki*>qX!>fbh ;_7Zv T}yPпu*m?RdRp#x{PZnf5a(UP_ڱ-ZIoLX +SzZM.FGqCQ (2IsV~LFߘ{/<o]#3XN:l3n8R@Z'J: `)pAB(жw%nt㭹~as[_=ߺzs;q<{dofL@`S?b,llpyJv sԅ{-󟥏Oq[.H͌ BgRr)9m*Q=)Ypԕs%z2Ek&9N7r un !EXKJIkR{X +ZAkAL<6kV)8<+ؚ=쥵ξ-uPqYH + J&4lX*,f4#Gyyr@&o|Pxs_q֍} :WF!1q[GI-ªtZYΐ vPe9X0|o#|&g|otୡ||`ΣF~թЇNf`@3㪾&-IdE)߿cbG<Uo;ڠP6QsS#*;,ʳ>R٦3V))[9R`txmK<%}٦YD8;)؂+EDF|6*~8HEwzТYqbl-1#v;R3XӁm>2_2ʿ$&:e՘l9K61+K) d[=+,ZEʿ8k\:)Pf< I7V*+Vâ|OJW?|}p9nLWlŲrƁstTOt?}+,]DK 蠋„ݘw5Ȥ;Dy>wؚA?b_&罫~=<YCq} +wh$15h=)"{5@l/ES/*ttk`K1)eOo^<ң5cn11*9d<3bB/਋ +:( >5Nԡzlҽb` a4j^ U|Zrfrw3(}@\ԈӁG£?I3Ϋ<*_9 ;":kP,,mO1=,6e[VY8>/FJy7_#oJ}pghc@(_9rJM]i$vo7ʲ +C?$zŲa A` 璊btyayLwj.}IVNg +!RsBѱb#k Ƹv2퀋RPFП%&'N*0f7_kL9[|󭼿VC8e(.-#,故:@C9y½kҊifͬ'Ȳc8VF4Y~Psr~S잺ev=4m[+,g ٢cl0XhW5Hl&K(% icI롉PSyy&b7彭|eq^Va ieYgck 1`K +ffL%e5^-bk߲~rMk+ݴŲ6NĚ&#s?#ѦgH * g`h/P3A6}Pv7#3̀ tE.3l9_S#U3a%9?n< ~A\ |K4$>Ȫ2A^ĴT,&K%S/htkP&.EymΝC+<35t3cbVF\όb73\hm@4F0HAV_Y%n+#<3 7(I))g>JK>TQ޿!6$ +ĩS3Np`},=GXs2LV)m#SDyaQĥ[c92dRI)&b|oyꁋf6(e'Xԋ9$12.Fط`A10BXk-ц*c+yK1Lr?c2En5f8elCB3ec ץVz)ƿsC8OΣ<Ӂɤ3 睈eW9)=.0/KWCH-LStAwi{y(q{*+>3urEvR?wϗ6(TF1cs)u4ƣlluUKoTfKAX +lb`=繭7Qyon(ofPi{Юq97e#uWLԮaXhddَt'0y;E*O35伿N1QB^#/jٞ4c\ +cAXٯJ +f xtQC>}|@ο}$=s5%so3r3:~ܵlJA'a-zSE3'#mmI"ʀ~O#gަ|TRhS9_y룻uW1>eƍ +c+6FPK)S+noĮ9b1EtT6r><ʣ3j@xb}LSOU~<$=3V2u^a ֓`uzcފ=r`OíZH7eT;!NlQ͖j;z,te[8O߿YwWS 9hS9-FP(o;Ο8'$,Ff 6)cKgvu(P6xRqnܨN [U_lt]e J-r!Q'>J|Myp9q(N|~/4q)ϾaP*I!U K!& XؼvaA@#nnkqrFQ{:(߿H+L6|<2S6>JqWc◟2n_cbcyr\ʛ<&=9?F|`gf{Kf|eG~@*Pn@Bux'Xmq5}e%iv{zeL@]IrW@eGys?Cy&bh``6I9GYd1%p,p +{ +RznW>7/ #8G5po5~39 +<9^+Mކlq]5 gA_a3"&kUNC9u!_Ybcrt{lJE@.[ {߈a%hSNiPkֲhhk<5YA׬[`B?Å4k qZ )'CymccwXȌL<2#k윊-WT'7;爔clCY#68J=tQbILlQs":+6mp)TwH_3<OIRGo*+U&1;jΧnal8Zk[438i6fǿx#YqUCko^+Q`mx˘:Fu 9?֯}0)տ?#ʓQcb~9eT}(0qQ=Y5}QŶuc41"eJӜ癔@G~dyJ&by@W6ݎG襜dqR +GL LZp{[CF\kS\'vWGY2gX"։zmFg"C?rs5;@j"^s־H\%p0#nc,^<$m~涒q?z yX٣ͱ(ͩHҊ)lES z;A5VhwZ+nI:hMe"mgQ6,t8xYRϠFaͲ  -9}cעM-;Lׁa@6,ZfЍOI=`()/׮>νuJr-<&#f aw@,0Ak.VqဝxPؖn<*Ė=,,s[P6lq B# +*KyV|Qh?Ju~n.P +oBHH!.kkEo`1Ze={rdq0NF^wx$})x^&Twt2M+kF>I|TzYF7u0?.ӌahIJ_ε٢`a2믭kW._<wa9yL8NC;b ZrʲmшC=bY Wjml^6>3k +?q?]ew{:QWy +r Lv ;QZ*Eڭ+w  l3 +)W_Zˆ1.ybU:ڐ~ }g<&Fy#pP#3H[mƀh.pU1yv¶տ2,xCI3*3* 彫Ɯ?%|yd柬w +<(-ᅵr( +H-zpU^v3`ڶU)ԐfV%*'}x *yR`=%M|:þmΫ8~y@urW 9Wt P4L!u&ecb`]T +'a9qpײǬ Iy&F2(_mȑ*P)pDysFҐٛ :m`T5kX˒ƴߌC; E[׈6M&߸ -xٳORK(͈c$'ۺ,UE/آ a(pkw_M3ǫtԅjTQsGƣ<)apgoqos8O3Ϋ_9k]p +X0A;llq⼊Qw;i#;URpǐfQw. +b[<ʍE_?ÃOؙ<3ܴLJ1Σ<9h/HYϠSGb/p4.X6ӄ5xûF\J;Uʖ(ʁmx xdo|ܸr)ʿ <9L2!=G/Z$ѵ.^|).JlXBYֶP68?αAn FXJ*RQcAE_~^Q?|+Ra5O*pzsfM:Gzn3مh7dtfAU،tnc. F@DiㄐBT8uYո|@P*+s ~ikn)Iy&3>aR}nj5! mJ-Զ10WYk 艰 +LVbkxI₨'Ƭ { +_!<Ryahsֆ.'󘘩'<&&3}/^{L4ĔV8fæL@٨*NGR ,Q8@3U9.$1￧|]@g5:p7<)bbV^CpB-:E~2 + ++bANжq~*8cc:P眗U (dI+[ XQ7#yc&r4"V~@[+ . }YBsx8g+a>wGӅ,mDDžз!BtLP(U$&qQyfQxx$8E*`SE4/q1 1u$rĊlEW_Fgx+/>G}'>H gQyrޏR>&ae(qau}Q0D8TW'|jl"̩RaXVlMXQʈk.THfEtFd<6 Eg|Ï߽Ɣ#!믿xk%Ti\% Nr]dJ(#6)qrH+AbQac&1ء"7:D<"TSyH'96z~< RAxs^a%bd75|6i H;Fd*ѷeo*SnE݆ $*2 dpY5 87Fy>Io^=7 0-*[ -2e3`RO1)qTFkP#1..Iقʍ+C4*C^U,srGHo3ܼqUZ/}a oϓ'Q_Fv#nެtݣYT5VbJuSQWո bBL "3n0b\Bq@bEEV5G6Tmu-7oݺyܸqk׮\A$-;Cyn+U>byiF_cO + >eoe*2o2P-\6[!rX~R)8GCe$V+q@c4#rQ+}z`PXnܸA(u+_u|?`›Nh~ cO_$ўEHa F]"1Led)4xcDXTVfp(ƊD^*#/& h=$%dE44e?k,2# q@eA` XDbeH1 0R +$֘ʬЀC^n7O(Օh.Iy*l3s{sm$)2"Ӡq)C2rāl8J0-3$J\ 01!3* [ѸDf4[ 4T +Hwpߨ{o#zdhȎ=rꅋ)cF*3*+r [g d3 BT.8Db+[ 4.1Q!Ā/].50&0^`50L 1q};i)2eE@Dw *|K{,;psGwC@Eh:SXZی}"1Ph29*(%2# +7 <+Xs M 0"oug2GBu.\Gsʟz 7+3(7o&=H)H \\r+G?.}q|}l.L%VFfN*Hke +Q\9 +#oW,n4Vb_.TEEڿ؜&o<,FjO~ +SoQVc+\!2sЀ7( H\"SQBQPyH)nZqDb'+@&(,hJTB=/M-XpNG_hl1%kPؚT֑(͸qg4mgFakh-h[0+5 oĢ.I@gՐkv " +)r̞(OgYXw V)7oٴ Td&Q2G v `B"[ИΕ 0"+4FbҸP v. ʖ(HJ \*V2P"n,uRb(>?r<ΈyϲHt@>Ғʦ3Q + +[# 4(o m V){֠m8˓4"X =:56|CA%UJfa2˴l _/(]QcYۡ/&cPWep!X 4ٌEyYQ_^N7|Ed]@_Puh.S*R'#q +'D Pi'\IR_8(_.'7R[d0?V)vDai5e669jUcV@\_PWS/ A.pF%=$GC_˜@O +تjx`GDbY9,Go"N0x.u%PR+vt҉~ -!xi!- Z  q lٍΩ?OG4$dl@h@LE\6p7%ƪ $ET +ؔ1:SǤǫbm[ePv +d xzyPP6pxHOQCd=cEi[Le1dUPrmFaPYL l+ıd8^^-o@DMk`נb5K 05՜ e$y +4k@uTPp /KΦU +endstream +endobj + +345 0 obj + 27412 +endobj + +346 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 347 0 R + /Height 280 + /SMask 344 0 R + /Width 378 + /ColorSpace 288 0 R + /Filter [ /DCTDecode ] + >> +stream +JFIFICC_PROFILE0mntrRGB XYZ acsp- desc$rXYZgXYZ(bXYZ<wtptPrTRCd(gTRCd(bTRCd(cprt,FQPv$*i]tb[Ll^ٮa]Ldgu+(0L\o:wG7Y¿q,,P N?IoUYXF7W6r[ٕKʻ@brN04F-s%O_2Zdlu| [{3oમs8$j#>e}1QPeg +XYtÒ) y)JvtԺ[w'T24v dq\ѬE$ۣV@cH'>ױQ,ַ&+4)Go+W1x{Ǚ){iW#D%[)X᜖BK8$N4gU<Ao&xdfHBp_KC'OTMkS"Ccb@SHR9ff7곱9''}2k?l,\Mzs4sfœJI_M JD $0سN1FӲkjsVnH#x~ƒ/M]Yĩi Il~%]? gӂvi/Pu+W7p*0g 9ņER;f@w؃{HuF8G&+De\He]H) +Tn=ėγ9ש̚$Qv*Q:&Hڼ뾦`Tğ@Pv_R3ԗنFeE@mN͌}EMIq$M)$,3 ʳFNVpTnK' ~5 vRu;ɭ"K"`r@(s qVnGKNӖFuH| #I5VGzdQ[ +TA%IZ|3(ӧ0;Z"j1FW;Np騂yڃgDl3ʦkgkֺ@ƢA8IoSYOzwH`mX3J0$}2ݔoc8XPc@F8#o06yN|Ι9Kی׷Zٲ<N;;Pm"㜁scˀ$`~$}w_p)T ϵ#wO!H9gjqSڃ0PasQ9++!$1v౏x:dEnU>YBg [˧ eO i!aXCj73VE鋈2O$' }EcAR'QJP>)M@)OOJzS84@(6PLoMޔ@j)Oa@zjOE(JԠz TROSlI(6&v!Aœ?zN.2Z:uI<Ѯh0.JRrς(h}(zsJz)ϭjh)1杩jP)JP)CA@w +P ;S(xɠmwh( sG}W?H[9?sf72ٞf`x"Y/xk4eYH <8?jnHōa⻝`bp[,!PyRDEӧ~UUxɆ|'U!4 +W`ڴee&'HPsz|?syIPp#)Ϙ tuWIp=̊A=8N|栌fwX@~ҟ4 +Sǽ)3AA@N"~ԥ?zޜ~h4wޝځJP)MP ;Ӷ)4(R4b +w)@>iށL{қP;Tzbb3kű'u$Z\ee2ƂL`5`N84jd??Jf_/N񅌗bi̾<˃ %A +ζfc -Qdm뎶\ZVH.Li#e\ 8AZ:,>ocWiځ΂J +v +l)4Rx;Sҁ6Niɠ~ U@ReÕ( +僺J唫jN`EX>R o-曪,uI" H +U:|_Oz7Zܭ &YйH 7h҇چ=()@)@CڝPsv +SjP)枔jSP)N)ށCj|ր1Jv Oi@" +S>h48;Pdn8; +-2ȭr + +܆؏btH5FWM +O pcsƒ>S' d@22[mZM]}eqclnI0[M,́ s2 +Zz_dr +=/8.RU#f$\ifܱ5^kߪ4b{~ZC+C4E*K*>YN+&.5m؟If9ڻ?Ă9NHw(jzzS4 +Rނ)@qJ)@(⧾J3@J;҂JP)JP映S*E|S)@;P8;|S'H{/组\3,zI0Ẅ(dΣ݆XZ%p87=8oOS4$1,zߠPJ=Ҕ)9R{P)ޔ(Oz;Pҁڝ9ӽ3N()jvPPSh(4R?sJP8pj*xO`(yvg+3‚$ ǰ?j{wT3hT Aauក :>  JAF^gE5AinbaUPXo'q(E`2T +E { fMbxʀR?usYW2ӴNC +Y_8r4凔+7|ƭ?OZ~{Vw)#|r{+A;cPAO)JOʃzsCOJ8>h(Oޔ +vC@4(LҁR&憔>CJwb;@zjP>ijSJR;SރzzPO'wmGHpd`Gk5?h=)f,:Eh;DfBʀA ?Gvz}/uؾCB,A#Q "?S1jmQQSn`eF3A湳6ʖrX@l|v֓ACCJzR +SޔiA)@;SJR?zRy (z +S۽?Z)J|P)(4ҜҁCN)@JRJ{ҁ(9($~U Ԅ 3l`܂.;wAa~$-jyecFF_f-$5:|GzZuq"-Jv F x +dKd¥QE!{y ę@*Jk#*?UuKk~W8DLٸXB"3;DemHfBb idQ@'^{j=j踏D@|F0H 5F(yjP3)ڔJ{4ʝOjP~@)@?:P)z|ځJS>)P)JvOցJRJsJn)J~t +j~hPC?⁝NԠSޞʘނm ~=kAAG`o%Tr@#?c'֓Xu;9ٚ)cIA93F)#d8l g4)ڤRAAhAAN=1AS;E=jq>?ZTATTq@<Ѓ@Gjl8j=*sw9'~ڇ;z08E'oJ NyާmG)FN#w2…̌e5E%~KK RڐeI@&,uƍ +y14׮ozŅVHLQEF{,W<@8p+iuez$ 0vb\tFFq\4C^.4I C=[BBrJFuMFpƧ +qcvEMK ^P2@"_ ,8ʪ\ bvZx58V`T!pu'Jq4zIRϿ6O=v?N:!ƭ_~;UUA/ല?4yYYH, Aڳ?KaPP{4('k3" +tIQ"?)] (|pɻ/$ Gd Io 뮺/I.{kcl.ed@vUȬBɽE(XN^;BʥCVդ (R<4@+%L*gV N6_M'HVqӴ`%I@ %VH˟s GHoв"[# +Nytϔ9.-ZfI#'3UPpI{mOPvIoi`lG1\A0R3=QY[\w-ŹA*D +kKq@d". +5* +[3''&B\cz=W~ӧ# ~q#T1*FKm<߁o- >^F]%].Ajxd@r?m[5"/.,Dd(;oPq];(/:aL?NW b2ږL !t+\? l-dh7322$dY &FTځ4jTpzot/Oxd0I K<ì$d Liդ:2Iep*T`AڶuwֺR/wOJDdN79'rh:-C53С +sTj= HIyPWWؑ⵬D4 m*tߵpKod+嘾ǙS s-۬$u t(`G^;}{:1uHέC8m~`߅)cFu|eW +TK<$),H'#]E53uΔ:,W$g,7+iΒM?E.:oTu;"hh$M"ǡ?8RT,<(=-B~q$[X%dѐ$*HBXwb;_e\J%( ] 0҃X~KޫԼM>z:rk|6)hu`J.<@ eGOUHbVU5H|U[ +T̊WTP[][yY$q1?Ea05p s}qsqK'b"Et +05 $\RRUկJ>%P̫%TL>jQHlB+l?% +[+Ayq(]Φ^AOJnqM1DLA]t _C")63[Y_-\!Ki>Ktžn8 c+iʒ@Lj2)"M"t"W\CҲҒj J'* 5ԷS4[!ky5bfeû1rw V +T{dAsS=I s#9y>ZfAL6Up5'uҧ!T(4zגkxnU\Hp[K WVTn'EK#l)$wUظԥV]Bߨu ,öiPUҹhRdY#IÕU.XwNpjRm<ַ\Z$H䍊09 wk((((((((((((((((? +endstream +endobj + +347 0 obj + 11788 +endobj + +348 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +349 0 obj + 2567 +endobj + +350 0 obj + [ /ICCBased 348 0 R ] +endobj + +351 0 obj + << /Type /XObject + /Length 352 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /XObject << /X1 346 0 R >> + /ColorSpace << /C1 350 0 R >> + >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +189.037598 0.000000 -0.000000 140.055267 1016.161377 368.982910 cm +/X1 Do +Q + +endstream +endobj + +352 0 obj + 78 +endobj + +353 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 354 0 R + /Height 82 + /Width 433 + /ColorSpace /DeviceGray + /Filter [ /FlateDecode ] + >> +stream +x܋b$a?ڒ6g $!oREZnL?oop0P&5gœKi|Gigr7u FI~|(#nxd&e뽆3nВgc]xoRѪ5MP) =rԮw"(D#ɉ +~M**o0~~T9b0 Er޼X?-o|Yx,MyXet@{TnVڸ{e5t]!;XVBAdOY̰iF+~Zn5˶f{%i>OX̚΢[fhT˄8 [=`$>=vzŽ<vh ݜxaԶ|nQWSj!R Jڥav$*/xGjJ,f\v,+.DU]DJXLQҔg|S`і {Ld+#l;ybH1eXl'8{>\f܉ͽŭȬcjaWԗ`gd6^[[8 S1VZUa҄As kH嫘c/&&X}d$bm{.ծ}. +7OІ'k+Ni~AJpNq> ۤ(?;ReJLZK96ZrЯ/_ML.n>}lnd[F58?x+t_p^BXhH;.֐^ ]HŮHwLU|; lu*@`oN:_N:=mOTZmx%_X_J̽ueB~"'˵%'~nd6mV_}Ѷx(7h'U3kR3/gmiӆ]h ۸ʤ+̢Oى~ IH~hQ,$'j_321|N$f[ &HG0굘:ָT_D~i`&&jkBXEuLx N\[m4)hf*r1Vw9,):Pf r`w2k N ]M~mMq>\UIW3EەY*F76M#z~Az\亘fn{r3*&KE\Lg<$'|RVwe,||om#/N9A5a ݉{6)~Kv㼍AF1]!L<1}."S$vy=< VO8t0%nk~ŒU~3ۗ32 +^XY9?{HӯtzE~ \bAc+k#J/b]If pd3dw&ɿ&=qVV0)GD~g8|}RZvYWlN d"GpjaS.~WAX 1e)4)n"lNGyc FV93x˾K:%s9V%6(|FR&,GЏW\Wjn?w tLg,VDV:tgh)*V*#B )ag{<ՋMͮ + %蕆W;Fܼ|i7 .N맢nR g0Ԟ^~ XY]0c6d5ȫ:Ie=|S5O-m{*xcڕ/闷~yDli>*ClSS+qWR ;AbqM[h.;#}0"6n{6檲CFڠޑ z+hN/ҸHt/7tk?+^ +-(Z fXš9ܡ$axV$\1l^\ݘpF6H qkL+1NC +a9 +} +\hlDiI +u{fgzf<y`mBX ךUK;%@[AZyW^e[x4ڨg@F&Ӫ[vAΫpbq;iW60ˮӠAȉ1D‡Ƅ8Ll]KXzG}ֆ@!gA) <chmBSOAԋdk r5-i_3.-ygsܑb[Ʌyd:!e\5 |NEsYUztcȠ2K@񰲯Z:r:w <̂}BJŗžk;F;l8U#:"K%;#kܽ߉C&VNFm,-V!J_sG[ ^b+mô&M:"@K+"{Wi5XVeq +Ս2Zs@`fnr'ύ=2+8&}t)}M5-f~qNjqHo"c1E橔MyH\盬"^Ϩaҕhd挼rF)3>ϿmFqyѮ8)ہEb:@d/MDm񢃆~b `Bx6AA2LL3DyʌA<{B7^G0QG$&C^غ "3sL; 7/aӤ7]D_oo%TiW B|0@!iJ47x7",$ +endstream +endobj + +354 0 obj + 6204 +endobj + +355 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 356 0 R + /Height 82 + /SMask 353 0 R + /Width 433 + /ColorSpace 288 0 R + /Filter [ /DCTDecode ] + >> +stream +JFIFICC_PROFILE0mntrRGB XYZ acsp- desc$rXYZgXYZ(bXYZ<wtptPrTRCd(gTRCd(bTRCd(cprtP{)%f[Xw))*fhstJ~ 6C`\+Mvf85ēKM Z%f8._^]pJԉgES,$HQ0%%|i5誽SB_S^KEvc YA9hI>ξI@Z!nX$oa+Aݛy5j v,Q,UQ^a`a`dV.0AGr$Voi$,y(k,ey9ѵltdn߸ՉҩiEȋ.lH*cH +DM-kܦD/X&'V2d*TX:/svy5fr:Zof`Yh=Ejx =Cld#">-]5Av)SATsr,1') +^EMQǷ +=V}?XbJ5QRyn]M87d˺ L! "dqR[Mz M|m XXr&FI2<4j؀Jg%VM].QUm D 5 *T!sl +ܒ^!7*7p49.&Â;\nFjb,Q$&p˗XXcĎ xvJ1h( )B$2*HZmkRz5 &~)F"([phj'jXIYYZ\7qϥ `Mu6SQS-edQJ2:e~k8p cj^uکi*^쒴^PU!22\Y\\jzbh"ZRd;Sw` 6İ MWSPde$JͲU ^IT{F*TOA9T&+JGW"# PmRVҨHP-n/b k__FٝpQEKMQo]f)hgeY 6HѠ)J?>'6z(wXq"XRT$ ?M44MM44ՔMR)gE,Bf + 'u={9U5t%5d۔Ic"*|V*$-w/;E6M5T IDm#Df1Fk"`X,1:OvdzDqMSB]hQS1XDQH`0dX$A!dZ ]ujj(Y"vJ=\Vȯ°Sfhh)],&wrcncY#n5-ds,ˌC- )fB; qk磔mӘ\$d&ʇ 8bPqae cڟv κ:x":BHVFWZ-{5IrϹ,Fhv#wqˊ.G @<꺁SSP&RLlI#$_{w"hG3,1 +U~`6=bH*143;1.,)ly6Me +JΫ+ᰲ3,`'HK!RJG~lEv/lO$fo[U(f|eB*f緥.{}#XgnLX.%C_*l{SQHEr Z8*HHII1W@z`6d' $E'}JR L(7%"nے kUU4kC%Dcph*~6[@\#f/ r!R/S).c"Ï0x厫J& XPq.lb>zywE_h!6 goP* =0ܤ lK*}vmڡpGXBPM"΍(R? ©6ךŒ5l,Mp,y:Zb +I$'۷:ە՛bF$RCDŽrT0KĀ8k;[zmTD'JFF1Ȥ\>Mōk }})򨍍41=+_dH)wbK[;:pnp.v頕D/!R767~ާ7ihbxbV3A#fH(ĩ*\E[ӭjZ8 P" D_xu-+ĕ'rF07VT]rQ#8,9v޸Ba+k^z_ЛwrAW›'׏eYF*an/Ĵ%)6bTǞyjB/p<䨽OO='rO`#.J"X|x: eĐA {n5kk'H9=6ˏo=J YwlO΃n9EJ$%Hw&ځI6 +HQؗ7DŽ\y:whO"ߟUFd*fn2@o+~]X-"HqF&Gةt`\fx=`=u[HU"X$_{"Zx &UB%o{{j(V#+L u']FE 9x}Τc7'}Ȧ'Sou$<7-$38 nnOo?AmP훸(nXȍ5T){}>h'$\$2u'kqme%-rnH7q?!x`B.:X؎`,o?2"8n,!m\VWq`OWʒ_Z>u)$ϰ~#Mˬ( Q(ֵj!,|j{a_EYȇE>_/ հ|D P ߿qmw#&MuKd`XMp9_f)- u$C-;ɐP8#nAդ45[HcH敌E2uTLc `## 2\nKmۅ3ELկRlT 4fd*${ERmFu3{׷$RrF`Qļ.$bqo ثݫd=r$"H⥍&LZ" 1"ƑK zksxJhP$%RT@yA<+A֞hiGlu9kR`zaB6b̬r<k-H&ڽnWXi#&5GbUIZUPzq!>}}&=ͧWaTF"ʨfsCf4OI^ dPʋ`/MqfRCVMM,t4AbXC2!(_ A,NuKUDrY xr"늁ŹQž5:ϙPm~y >xb@Rr7ڭ2ٝ| 1oXwQ$NUqAZSۿ7GQSblpePO:p\X>XpmhW$`Ac4`9#-e~j[>ֈ ߿:. a{bObx^z 5@- +>|_{*Oܐn};yh9'ǃްB6klmg{|D{HY/}x8C'd]<{ߦ%2pEn8a,+>m}AnlAǨb[is-y?OY! cc$Jm܋{F + Kv=?uߏ/ԗoʛqq}Av$; =_OBavQa~EjAHpB#}G'TGo+uO'Cuv a`(J\w#},دk*T~;~(3)eL@Y۞ T9~X .ˋ9xe!qk_ʀ Z4lqߕ<az}52-pXwA~wExH%6\ ,@M~֬QK*P;q|BYEͮM6΃ [ϞrlM44MZͻk۞yZe(zQ -V&`_\ZYĭyZC# $V+v'l5mĿ'ʤ8j*L($ :J1 bQMռD;G5,5b +iqE?Õ̭\l +8Ց1ApJ1{_φ&ͪ]|d*0p ^i:OӪ\Z;8R*LrPx܄Xrk[%OQ_2 a~K6g.q35V7Ep?AԢ)\Sv`o{MX([묬cHU-.;1A}=]ԖvxC{ZDs~x{ZofǾ1y/SQ +J\IPr7?PUUUnz5)B@ {}E<* ,?+s^̾$-ucPܥyכh)K߮UqbE7FZ%!cs<Ǡm1\<_?3J zw}#~"F<|]ȿMK }j*#WH1q$ ksQ$yWpOfַ qv\oߦ;-7[$e7n|^6>W>綂0yRIkv'h "{eo׏GnR=~`so[ 4ʝ`<7H7aH: +Dm•P1M,MX +qoبf,G^>u4a>C!OLbK#Aa{~ ֎㛟^}突@呼vS ZEiFV*"2rm|28B≙1 q60{X×=D. \y;kxR))-FB<.RO:]1ise3`E.xTh|~~En" 3kzkdYՂɸa猁K\߄:cL\o,6[۶ FTDE"⧧}[pUĩ`5pn;_u^eUyCSp^}k.螚H{vǘSEL$**ə3X2Ŕm~"c5'f*1KJ"XB0 +UplCfIJ"-:1WȜEgkͻ}O5U4u;^E O BAV'I3Ƌȥ +xS1"KH̤;Р$U Vrrռ#ȶ,@[f>8bB [.7$p;fQS[ RMT=#2Fב-.th7ڝ +͙#+!GASN!,l #Z(^^hih=W{ۅfOKJ(3IH.L >wOmCM5-DdpdeHU7nهs>re1XE !`rbA{zmʹUQK,6X8 +|9tM?"s3QŻqlO6"1O)s!V:p%[ j# n]weJ @` '<գ;mm#nͻ45",i2I/*%X0+ۡ4jiZi4UBt\ )ai I 2(ѯo&`Vok J1G)7[@[ [MaKN"&HiI# kg30͖2F؋{ijw*t% QQ6.Y3Cr_\GEf  M1ӻ?$c؛6*(+ +51;. +eOû\ϞܨHoRJwWXZv4årX򳋗[bʝZb}$JxN(v e JijgI;|: @ÆSFz JovYTdt 9Q.E<2*@z- *uFGod HVV,L(іF*Je*H#5^ t=~Kzy0~;v˞wmC*7f**y6dX@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 4@M4 +endstream +endobj + +356 0 obj + 11127 +endobj + +357 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 358 0 R + /Height 2731 + /Width 4096 + /ColorSpace /DeviceGray + /Filter [ /FlateDecode ] + >> +stream +x `v@F:IF +endstream +endobj + +358 0 obj + 10887 +endobj + +359 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 360 0 R + /Height 2731 + /SMask 357 0 R + /Width 4096 + /ColorSpace 299 0 R + /Filter [ /DCTDecode ] + >> +stream +JFIFICC_PROFILE0mntrRGB XYZ acsp- desc$rXYZgXYZ(bXYZ<wtptPrTRCd(gTRCd(bTRCd(cprtЬk`Qnꌭ4z=Irv ,!6  ܔbH J7pC`DC 0"$I  L`ic%AZGB=qc~ֵ;;{Aˎb#q\pqxGB\c/O^J5'OKdp/.j{j?/l8&?[ft>5#˯Gպcⱨ<~ +n5RzqV,BY6rsjHRg͵v[n_H#Jfa3yewqc*em @0 -D0 b```  @6 0A 4`b` O`C\`0C CbbL`  C , 62]97%ؒVh ``n@ C\0@ hdV1 L97[ڽuwpʴ#(I4jn*XN+Hiᤜ*;.W;Wn<>4y. ƪT/S*RGvx4⸀Ә @` &EdX$$0  @-Hs8 ĭ~|I'Kg=6&t0`y0 00$IDb+dJIJ%q,"q!ȕDM8D&$HC ZELR$!lEMp. NV)Sl 4Hb`!E6`D ,خ @I DR*RYZٜmj9N/OViZ{tjK6|>kt|] X}-=xFXTZ=I3͇@7s Q` $Ow7)TJϱpMQDz4wzgF7iEƦM8 JўU߅vy~ ^p;=ԭK:vxe'±.x `(@!`!r1Ӧ[k "Պ"SDrr!plisH`&`$$ clH@B`DhyX@I "t*M0oCWg+EZ=)1la-8yХI%n* y~Z*:8~ gQh-۳NE*KH^Vzb^pAbMhhRV5ԳQoS*{t4zMnpܬa;6'm^fζ +Qhgȼ_^FNlge&m,lq2:iW2ΥV6jUl6ܛdOXa;&  őIQPq@D!B%qЉ'n@  $0'O= 0dzaVzbϛR:N|DIfB$%s7ĕ*|7411JrW=ԭZVczrL  ``+q6EɌM>Rb4LwbH!C\` ha.`;a\@ $U^(ע,ZVn1oq V"g8xr<3[6'oS8>:g(Q2ÜJo z;R.G.#-i\zG.]äǗ5_͈Kرx'/&:~2{ODm0B~ +MgOx7a8|;.fih Ƶ'4WVm31=b +p= X< (ZCx9`b.\. \.bap\..0hԦ%ݘoEiciX<~wEY)7ҋDnJz2ApX. Ȁ0!1 N Yq!ȕdQ"q!ȕDF$DMIDQ$  dX1${ ccnݗ6C4$AnȪR!&!61 @! ȱDH$C02!HDM dW'Nŕ!c+1 5ٝ|6:3IIQRNVzmN-f,1q] 6ubQ+3NԞ}5"x9 !-&kpoxb +zhrC崽 up? F_4S;׋wp^.QkDl{ +<=Opj>wYnUu柩|+h֤q+Gx`DuR*9HKY`Ie`XnnhLT_dIԐ+NEzW IĒ%`#`P" $4 ,"YnIQXL5Sb&RplLJ>9ԤwvWI#]>oSGgj3 +S zSiw=4(҂`8ے8[=ˋC̗GPk ^^)b=m9g=ݢ 4+əM<8gJiM1kc2q*vGmEW:WQ4xwWS9MN@N0N(=pY消*wog _.JV)$=O_K1]R}Ύ6XVnsl<=<M@@>x, B$&%]s18N2b(HEl[ՁbƄ0.«ׇ8WO' wׅ'$`赕`"t40a b `Db`\ C4pb`1 a 16` V]p!Z+%sq~IE8Fr]i|pY/ K*3qi7yѓ4SY}-xIqS:r 4 +Qqvb9E;=%!Sy=W - JJrW>v8-qo[>F::sL㸜,g״j5~続~c(]^Nή ! ,! j`0  p9`/P$BJچ&1(Oa܈+8TV 2LD'`10.ml"4mҦ_k"dU9dʄAl + JH-rj $1j %27@22` CH)H2`Eb`;K]! "DYɑ44D`;mjݶfko58+3CNٞA7Ⱦ.tGSfuuZ~N2Eⶕm٤@-SX 0`ȰrQ ڤJ9|Ћa6ĨO椽8N[EFl՛<:TstUk>U?TuBCC\H<='Àukp\VOў38<-Nŭȡ1?zIVԏo(eqZҗ5#Ǽ5e9}W=":>K_>~^CU._c$!tCϣ~^Aak7~ +*R.Bs'۷~^QpKڔa1Rg$Wp\phtBőnKl+e} +gM*#Hj@K(J2 D@ ._kŰkBWi[ WGjb!9Mv$p=7؋SюJ[pTࢹ (CZ%hv +l`1!@pC1\b` bƄ sĀC!`` +øbzk3;´[;Xvx>3.ܡ_Н6>S<jic=\F:YߏpwWSVz~x-qP= +WOԒw Ҭ"%B`+0pWd@\wqW +p` .pb10v 0b|D.@\`  0r `! C;IMZJ dc{<G+}WS%Sͩj>GZƤZeGxTgM9E M_COZrrG'mMj2*PvIolnΎ4*YbWwhm +\/Rpm55*N'(ax? l\Fzk{}>ά,Ӻvp,ֲR綅1hq,-t:׹2RZgG)!`+ C 0`0b Hbm-EZ ++A{`xB2Cia]vխ{˭t/om*qn/\BcS;G&$]΍s.= +m <)Lʴr0+( ,LhV@d`Ь0V`F 6' @ "$6y CL{EOdXY?͓<w{3?ݒ;@$D8 6! @J$EDdH"q$WȁdK"T"TYh2h $AD$E@40dwn]Jb k;!J(';#-ZJeICp4DP%vMARprřlJVz"22L Nem܋wc +`!Ll@! $6FLmɀ"A*p5S;ɨ!6$JQ'rX`0 @0X~ N5gCT͘@ũ[wJZ:OǓ9Gf5Zg\{(Jd3SփLKֆ pi=ޑ2g"#p73jhmZN7&WBZ:8xAI&ȣJv3ժP9+aF1%r@Z4C `!"94hX0-HFJu1Oh+{v&yv\WO~}=O?2_s*_S/ԟgۯi?q:#<|O%9>}=txxQ}İyk˛`j8H,\c*XW7-.!٩*?XSWgӗ_N7_%)GqNU=;OK|V_O9T;%2kЮ\W?Uο_KUenI|&d@fy+v߸Yt36\@e@CBPe'lV%A/5+F."ISsp +B-J hPI(:#N^K^SjUzR#h mM⾭EF +V #p KP*MS6y=I\V<7g{hy5z)rjK4:\SɁU${^ Tc4GJiի:<+ +3Z;BQI uCZs9;#qVN!Vb1q @ Ũ +LLH 4  1"; d@(N$ȲDZ28XUE9|G',aIVY=d?=؎|+C\Wr6 ` І$ED$4N%iZ8M44B$D4V$⸮lpf(B` +:EF\EtWsmIݑJF JSHS-QHD%4݊Ps+nS prJ rJ7&IA MDi% &NVEl1 7A@"MD +Llbb6asfEEEEVbU[cvhƕ$J0'dV&ȶBb\p0BD076W'p J'B 4 "dW"0ԨTS +T00bdiZCvAwNRQ#L(6/(8{R9(RlR+Q2.I Fb@4HHRvJD7`ebJPHPJEI[c4vĵj4@D&m;X, +a GPpbD0#a4;CA9dD@  $0n`El\iݍDy@VؒH.J°\LBh. 6 p;h,BZA* aX%scN7"rA \3\TOu#]q3*?WEZ} P +D I렣Ē $+0;ED+`%pD6#*=)Urػ6kDZ&=a CD+RVj \0!7bcb b`q%Hp 4IHbXv0 `!`[+Hhk !1j+{U[ FjpZ 1p^)wjԮ'cߦ7K[X߇zKؚ eqkucuzɩG'|5t"<qIJb8^&ypM{5խK%i&HæH +@``ٯuFV|,D3hCI0>Tz6svE*|'JszuDqCQ~pi<7$~V"YQꮝkk^"Ю; idX-RܒCS'#*U1WV{|oN/H3_Sm;^m5kHd)F1J:s}OKJ1 GtXzH<׼IΎdqX`!``aEXL[ܜ@mhA\dFb i4IE +,#D֢a6A!U\jAp*x>r`y`9hC  Bd$$IMYIJ%q,QdKM(Db"HĵfyR5&Wm"$S IɒIːQlJ|p0pQ*؄2TE*S)ՍAwr} &MAu,FVlJ9QcIGYa(!R +{40GlN2L1aV s*2[U*t24VbNZ"3Tf=h0|ڛ bcUjVDIYjMh)ͷ%6A呉damME H'2ܝq5!̒zlK(ZT' +4"r},°`=2`FLtAtx[$pkZݥ8 ^'tbXg:G&*rd,2i1;WX "Q|pWDF[I7 +ĪN[2,>U1ծ'̢qbٞUT Ĩ--|A͑Xd5&;$I 0pHVd$ (9;EeIhcVP $+B1\iFH;%pXw  @ lw HCIU\X6FJ$6X$6&% 4+pm6b &qJ JĝK)wCȅhV p"I`;,pe%F5BFL%|[\ .$e3©7 Ć6ux~\ 'W7bթop"("^DA[|B#^)$ M-#Zdn.5 ױK{@:3[_ayr0I~W2`""Y_F5 teBX%=YmNO`)]>Л/"gRKw6YTvp +EH.v Xn"=åh+xj4YJ״8ͦ{vZ Mjp ` z\Mߛ@ p@00 b0B`@$4vehE4G`0"1FIbűFB"$A'L-ܶ:dj.^ +˗Kk9g.Hϗ>m@0.v+s VPTu b+Aa+΀0 L`$E@IDR'N$b"D(,(I1DI @1ƜMS,ҋ;5Ũ6@N},֔ޥ YnQTn5SQT祑 6}LJ2T) *i4 3Jof[7RQ/XTF+Vp) h"5rIuI.+屚fFӱ3 +2sFyVo5LENmR\*QLI|܂be,Q O+ zj4afiN=d͑a6 pQVBYҼD'''"bñb[rmME-(!u% (.yCEɁd+``Ol~]@VɪO{j܅ qWd.{fBqh}B+ I(SsdѕGaF  evkN%UkkC|Cb]I''; K{݈!L|F{*e/p`Ja(J +dWM|'2g.lNL u)Mr26)\MCWa؛AX,N° !hDX `JN)AX$Q)\Q $("@6$%\V` RYt6` "Hv& ֈv("ɐz#̒(ĕl mM$Is⺀Ն 'p,wfI b nMQoRv0+hjQyC6,[VZe_ȳD;Xl6O ^:GTh=l h9GInltIPo\Bs\1TmPFGa,"˱ЋS5l= _fzI҅LdnPԋ:8I1Tbf&LIl 4uo# +mc{8S6)iUgdNz-UmEֲ%eW9H^2BTfԱ-C %=` +㸬;J`` E, +{(\,@ 0k$ X- +ð @ X,``1@60 @`@p ;#p`\ Q{`! ! 0~.L@NOޔ;&B n M}˯̲5a~k_Rr>ؿsCIp,<>ƻ7Oeðkjhe}U:kh{I-"W ?Rq^`{+j ZCCA1Vߨ%8rIh1 na+hBY L@CLvD!V$#@XMvdhJd4JD"N;N )R5NkJ^y>#=)%u|VVeZ +3ioWTl&A-X,YE°eR`*, VPY`Rv  V̀  @b] +W!LC<+ONKDi8\JT|iVR\V7p4*ܴ258f*rma%i p\/](VU58Em2~W [S_&F;UPYeqQq߇N2WUq?SḨ*/a~{y5/iRX/F9?D}[䓎->IR0.Ҿ5^-,-u4Jգp?5F +rZ( IMs3>wCaB^N:PI< +kJw{^$#5?|WʗG%ϣ\?Jy<;e8tL⎜ŖWYo Vbi }dENo`]ҿ1bx7 UXX8sit3> ?%g¸_pq:_xϧF'#|?;,50>bګgљ^iO2Qs6C˄pTg'x(W)a✝mNmAr!*zR\NO 3V ü&𑌺1O<ϓY.L/*6<4[8\xH;~tg%qg҇ńq\FnI MrF}f|'SBKgчದRa}OYaF}j|Ƴ[hW^"$ ҹO8ȋ>[\SrxXk|7S +n|SZΦJXYTWɾfW8%:9$LgB Bbs O*(ˢd qKq嚡93xp4m3T ܙ>ipl?ZYf=L؟tn?  jiTy ˨os£-reWu>zߠe Ig"}sPҼCq}Ǻ/2yeqOf֌SqRxpRd߶ +k_\D'٭.cY!es)K-.`9|#%؄^-i3aVFOM(iJ̪OA1;"̯u`+VL/F"%xW jpj긗)P+0W*=_ ԡdBW aRCκV%mߑp'4jQ} 9<#41$mT@HA+EQ} #"JvAUX(bvB @@LNr敢bLB ,as `~4 \,;Ap X0X`` +0j\ c  @1s 0; UI+"4` `hv + `+ +Ą0#`d ;LBNZFCzX-bDнE$mqa8E;2igN&x.ds00 +a`J`""V ,@P@4TY@tu0c{L>,ˡ&އG=H4iXAE] JrQ_BnE8e~N49\sԼ_QG+MSn:)5X(FbI•өʍM +jFK5DFRn5&"cdϧ$F_$r*4WĬ2m(y{Y.g:poKHJ8yk&˹` + +)&J4Wr~Yyq0qgJrNKeۃG4eЦX9gK)Ij)V* вʂX{#[QKO@X)'Zàp!RMo9\wpmE;H,CFNqO4ITTsI]f+=:n;OHZ>źKU +#EhNt<<=E(֒}u.<]55W%-|~*JiklXɆ[ѝKY=W[m44IԆʡNPjJw[)֎.Ӵ;n̯S5~⠝EdnpJn{u'VOܭ1@aN)taR{40RV_"JYTgQ1FZUc95!vw3, )Wxy-̴~e˹y:W\K ڻ|PsV+ PB^[nO Bcjl%_]oœ28Fٕ:c΍h՛8"5i9(V.l/~>tmW2Lg0)K]]t#;In 5piIPsq>IA mx"ѯ?w`P_HM{xt/fKMr||X -g)4?jkE͞rUF+ X(d5`R #Y.Z^ ֨T SU4cV]8x՞^ +⛏=6>Rʮ%*vu6Ϸ0c$3n'QXh{<l$Dx?U?2'Vt|Sxl]7SD>S-RэZiѝR M?5RF2eؙO<!oFk$ U=i{gb1`N/s'W WOEꯢcvB~ThS_חbSz*0m2~㇛z_bK .qCЂJ0< Jˠ̙O3%Ngkp5I%CN*4[F3+ >o +],8>o)D97C/[ f}>y働 G8M%|F& +#)u&yy.Uf}V>sv,S]Y>P_~rf}>B5sꘟ +p,.Xo +͸Big,'?_Jk'UgR.'ҩx'7wIsr.K78 #>S><swҒٳռV#?'Fw՛dwũKn<58].'N[&웦|<^Y89/m +xj!{hT)AJ{X*X|F'N N!:eRebY;&up^^;"OK彊$ީZx5jyME[8)eɟN1|\C=O̵* ٵV#u +Ԯm,7W0xe(#daN 9-b)^QQGIoA\m+$F࠵N伄cORj=KqRբGdh,N1D@TeAUd.HU +Q/Qkafyq*Qi8KWdYCNi&; + ,ʁZ0P$@y."Y{+˰ kp"4ebYl;kXV+e e  );+ő (0p!~NřXe}P+,p#;+ FbvZHi,X +6VaD2],j!bb^¸ +÷`XC Ēa`" `!`;  1v%QI6ISor@ I$\@ @K(X +0@ + `$abV  X,Ebb[AXX`F J° +bVV `Xv +XMX! Q`"ف+ ;WarV H@ CXvH` +1\.q ,0;h X0W"eܜeH7`;EBc܋@`Fq+zniZԇ@*ʚhqa5tU%f[tFq'SLKZl+u>iemCS>U$ǸkXt<]aO)99N-qf `aS,E+h=lek7XJڬ勈cTrEKzл^QIy}ȱy5gVBXOл6U9P< cVu42d*~t^ʛn|g,_;'kW,YV~0mw14:J4vXp%%xO:9q|d\F`1/W +BKV27wl5SʒKq0A0J4 cKIQf1>?F :4;qiUĪ󛍾LKT7S#zҔ:oF +!ԵWk55u.%GNj84z=3''~"U(=uk:RH([# +u|T19j1Η ;2SMo(~Z5Lw VfkBYVo"7btInd:>T\n煕o+Ɗϛ$lWbU2ϏjTG *5VJKI56W.5*yIG_ Zm$"̧+/>aR=ZՆ"T_5ϑzVxћCK4uO)ek-M\x''Y]YJRݭYP#+Vt* å +KbgVR"$TiTSYikjKR-*[4ccL7u>$[pzs5vʱQ(h2+,,)]:/?}NWˌ,i_`w&cl{ +1?œ-̪ܼ$̾t6P¸2R F+5%M:J=7fՉd騨eo+ڕϸ04[<04u\ҖoPj 77VqSm* xb*YӬJjoXxh'18VQJBOC]zĥ(乳7ZOn6Jur!Ḝxʎ[uj"ϓ'-tT{;˃B4 >Hu>D)M:bϰV2J9%fm::#*jN`chy%IԛVJ~8Z2w#pnZhiN8׋vSlÖRSWhኔ^Y˨|ɑx9gԇ2劼#'NpIn׆"2oN.اI:v+9\b +c(JN*,Uc/,_\'_"ӳGE*GeN[:ѩ]-6ۦtV⢩IZ6Kx-GY꧚ gB,؝jԩp2Zjԫͩ_ǛNRIW%IJ[]bByjs|Jremŝu0ɶ';)4 4iRQzUn7$_u#8(MǪ*UfI|?0jhErVQZv[W2g֔#K/VsS +JMu<ΞgK[F)']p٪SR!SO#i6CNn5@SPÿs<4ѓUYrj۴s'V%(muG8U6zY©EhJ|Q# Cei.&,d`|F^,N.5t(d #\li;MJ_ԃdG.ҍQ$`ByjT}z-Cͯpi=1G\*nbMu*z0Q&rg&2'9Es&uùYTEEs-HI<;th)–fTEBjw$ꥻIw *ľ$ "za{f@O(euc}PEUvMhK2,RmjXc&ܺ%`QEWN8*lw +#%pblW9ed; ;nG(e%p½O*#^!Rw~ YfceVmIEܬ+ .(hNV,A|yvd9Xe.i 6hM8˸ЇE}kY Bk`+-T )d\,[DLEd@P2-D!nPevQeD,%g2""n,YXNV@v m k +ð Y Xh`E X{++h`aXX,J`ą`Ā;l;V$+0!`0DvCXX 1Mv";&,C(]V "ֻŦ7:h`Ri +nM4UVրSM3R57YkZ-y4#s*$wc˚7܍ͪAr#J%J# "T$4Tص`M̎f +-P45H$1@1X*! @0b +BІ DL 3RFH̫E#U4QI*%![XE8YF(]8)v-A(ȑ] vId`- M[ bĽ JKf|Xr}C3 e(hVAe 529PX gdmk~`e 3 2#i +ǙV 5&M"`Ka#`;Dr @a0, ^`y f-,.썘[0]D}X]lVK#pYE>YՏ̗R;@.ȍ!̍X¶@-DI0 |6=M]G*]ꢐUܯ`إ\ 4SpR=Sg)Ys!ܯ@YNA.~_R +TBc`-(>DD*zkM/ǩ[r ]GgR0-7ap'nyYPP}FEg{܂l.dM)uB}d[yu9IdU2-U*EYI8Ԝ]Ԥ[9>C24:ܔquҲ;zF̍QWRjcu&řlfL7)+³9~d˺L:X|ܽ~^a$l0_˩x:JCW ajIhN9~pnù/b,#>=zFyObVM#/<089AöIS͒4b2у(9W'Qg~"OO, ǩwiaFii/xn1MStfѦB :2M>;Ǩb~%:[Ԍ\ӄ<Ս!_n6?Kl*(\wVV7a +N3͵l2:3=+SoLnnHɭس΄(GQYA_,"nlITf:PUy'./2IJ +*Qiv.`ƊejyTJo>mpk]i]*݅>1a ƢQ~];)~nqMAئ\s*f aźsy\٥lgeQO"]ͫ3g׳lZJ("6j$Z75&:> T43 z/*I-LZns#ı Fs i2eq.,DRt-xxad& R|i5Heįۜ[zӣt8ύRO&i8zp{ CII>1+8øN%L5XPySn=3a1:fj+,, [h2b]UpSVfj7|>=$\Fn~f^įƢO}`T7ɏԖiVI\{ Ju}Ҕ*|U9[au#^B9tTt?N:yg5.1-;]LUq4<ʭ6`h?>9Zyo41RjbiQA6UXZS}uSo uM|LRld`ﻹ~NE 'T"+3Z:GKi׎Js6rR6#R~!&Zj27|<."8x8ۭbƾڴz5Ib5R%ZӖO5גi5F.:yjE +*t^u:>KRrBYIMsOOFUVS+acjN1iKl:&^\(Y4f%|ys_!u!?5YkM7ˠ*N9?Ql(~* %߹[:уk;d ᆦJH͚>'ѯik~)Js^[w' GGVHTT0Tϖr%aiĸrNiT9;n'beOTMO#UVgG*2RGf.j2_5ϕSS>J4>H,4Ws!n & +߯EhSd}M :ZyX':Ry${t ]VYQNVS?14t/:"x?&RMǜy8s|GBunOC^ ᵣ)-e2yݎêʣoJ̵tO˺Zp>NU嬭-<)eHQ"3rI$zlD֦ȹ"ʿ|%<$O$N4ZaѥOEmŸࣞ.d[ԡK +jmq*F[0*:v} +ɉK #*t9:M--ʬrSY)%iGJ3bTg!RY5a9J2WFO!܍|$yK3ԓ\#Swg+3j\1Ti=RwYr*qi/<7ɤf̥*cjդ҄egB$Vf>TkoF]u8FןRoS[",m)VjSj~ddl…W%)sEOIk[(%4l-^Y:m 0Yg/J8]jeR4kR Syt_Jcѧ ^QRe|?eITDf yPSS{#~6e&|ʛӦ҂~ +LYTY,̯(9䋺Q;{NXZAe|+{s:)ӕ%f (3>åDdeXhWF4Y(+S{t9g˖D)FV44I9iF*N 6,BqrO\^l|B.Q[nV2SQ۱ϭEePƌ%?=%;>ONifN#^}] 578b\c]`tBq&E\܎SS~>iբey!M+V"ҍQ+q)µ)SZo6,YM]Kέ +ti&t%RR]|\GZ=P*|¬GEVBuTb?:t<HIJM?ԃwytVt&*nnOBrrzSZTsZQ!SjRQs/"ģ%x2!2@+X y`TEa(CLb~[ bd q2A`uUj`9jr5)`/69Kg2=E/ ̇>5VE8D;3GAE.g7͗P_VJ˯;i?_VkGF3w]X̎ڳ~+)/SLwԹҍIENWJM9NM~|̎[o6V+VkM{O.lfGGΪܺܶXK޼OQ~"]Fdðؕ*ԪZj9BKws10v!mU|G:N}GQ~-bl66 +nr)[4~8k bqF.*5j^+:8E((FIl(?7JaJP3b1ucRNJ7IulDZrQg+84sO ҸMcdf??fpF7IvzJO1RyosiwJbUrwVϭŏ0K$mqp8ߝ;GvtSL&\6Fe,Kȹ#Tc=Oid*s[>6LKzOKˌO+.] i1#~"هR=9q*<2q\3z#U߾0ពe5Fh[h?0rܛ^JvI[cm./í*$y,no6V'mg>oVog ׳Ԫ֊a'R2\s]3cyލ<I*PtأpcR)k-K7^<<&ڔnzu/*qnyK7- ׹q,#^ ±X_.IԎisv܍׷ج:VX]mf7QkEIgMIɽu%C"&sw:7Jt\#ZvײN0ya4eQNV;YըQ"ėܻ6:0pMٓ)_v) ~**ѯ?bsf~nkPU{wk+1qy*R8a I7 +aCkm=O-)ҫ)u9_nk<*/Z >睟NS㘸G+6=?_gB/3MsgE. ZRR ]]UetUJQQtcdkeT>f:~To'K*.#ͯ +U&jcdҢEּUM7 Kv!SUT}#͐T}v aZJ|qX$c* 5,m//,)'ȩK ߜWΖt*~ FnVOrN,V*'H6_c(RUs`/Sܯ J[\?*VL5HXL"noq!_2ۜڮ1JS,Ɵ|jQͽ8ΝigȫlX.5!'5 +]:Qqp|aS5%gu2,*[تuFO𩨯v-/7RyFY*o-7[\#žE|qcBmnsYʋϸ27~W9BY^́VcQһqOGAAf[fE8r>2U/ +SCwXǒ-u˒DsUYʊΧi-ӡVK~:Us4\i^]wd +vR& /hК˪ta?bRΞUs`*SRjIm= )omv Vג7Ы 5 +vKT.ExTW%oR7E\$-ȅ8U,K 4),TUkG%Ui]LUE<|O@!IԨjWf!jbW~fUzx@sZt S7"ԩkiJeU<A~)џ?6*Ӝ`IF J>[g̀НU)7ծ~KN2ZM>b'~e%*UW ROnYJyf{.gO (JO+ʕzJx)-_b[m+UhՄ> +燩榳8KxU9f4μ;N]yRuܤC=?<6T\)[bX|]B[v:UcѺT6[p(dnUm0fS}Z?4̗cys3v9Flʝ,_|eZ%N"TI&]M.p],WQ˛{03BFt9YBRlRJj )h+ҥIMBVC +ݜZ{ArGBt +rFUJVIz(m9`¤N<5~'G(ݮ!rY+Yܮʻk҄a1 e^c-F7w.:<թ/HՃGխ1jI$q>ʏ35Y;nݐ6ݛU$| $jG5Eؕ*w5PS:iڝWU +RUE6mnX(*MkNrajR\eQtJ\oU6\?M)jQ, ݌uNRyuAXZRR_,ThcWSQO͏Of4jWkCI6jPJxu/V'`v3-Us9׭R' :92"ڜNV8[+B6Prk*I/N9P$c?7˔'a*ԭbԏ/GKӔ%xF5#FJ]\c<]@ltLKMݚ-ڲ^\?*Wn1M؅G+Z Kk` !2Ǡ; 0hDTP4jȸ_/CL`!{̟ˡbJF³'A"C(vAd5dB6`݉. +1d@;[iQN(\5%N^iM'}T4\aF~@ʕ,mN %2=5At]h7`Bv"']V += ZBv\`F±!jv!h$,%p G8j^Nr61Y,(P25dE&Nu~XYv@F4+!J[ ۰e,K,&rzp+zw_4,Sf;[Է*䁤@A^I_{ E2z.6#4y;CܶKX@E 6J[z +@VAfN@@-ܕAYIElPbt4.kknYX-hMjvaePMR̨N V"F[mvNd'ph+HkM$ 1FCPNu& 0|I+ -$G)^` 2.O0 `IT yNA8Yu>\X%Տ̗V,'ܢ^d%ՑHy@~t3^odmVif?:kd-bju%bW@ZUzuy2Нo*&u9~:kbϢ&5$cC +6]>hit9p)U)m7PHh_ԃAfTr>B$T=ԎR!V˓D9>t%_Ԓorc% anzNjP]Ddæ5kJUn9cj[a,mN̎V_rq 2s'le0^ƤNLeUg ɇZ\S(vd#F6U]__a=Pn6üW9j$cjߪ|z]קq+қo); )BmI͞{·PanMaKp%xRygٍJ=Pmz\>")dD\^YoSnj]ר]p뾤uiJZ]\г1 pIfU!uc%jγFVy,O5)-׸׳Z +/*Ke x՜vZsVY7Bmz՛ZD5B*Mx6_̗ZZUP׳aIܦquh<]~?O7AsQ^F)]$,EOMw+ӿV6])-i)ϓ"{XFkӹgbV7A'QVåv:1uouyRVSmƣ[1/sפTh2|JqB5̓SDS%^*ɭw&`.Q"xҏ#"$,Y_bYI/B ]cC.-^I'غSVw# >tKwsBT]$ۏʿŕ!Bqq]@PDڌw_R+ղٛ#*ynنJMǒTa|KEBY9R_h|5]9+/qIMIw33mqL&)Ui&ՙV~=gi[RiJ YE6ÉZUS^W/*IuMU)T/!8W >Jk$FٸF @n E ?k-IiOix -/b_7m?keT:!1P )b hD@HjFLHHMtt̔t-\",4/Bȧ*QeddEĪ( M_4RDI1]q~@E)sspF^IY 4q0[ŕ[+h&Mw ;i aChCˠX!&&4'o@ðz@!hbbh_WpB^ PQv 5ͰF@2 wJ!; q\%` 1I@\ i. -oa4~q  h-z {^n`r]wB:v,\WwA-GdDlB1mi"trd).M X[s &Pm0p=--aYu 'ippe,-;JIwK2z!=Yz-A\^Hv}.M>Agmq z=;$!t hw[ +;RKAA z@G/qe,eXe; DeWNw}`V@V⓰" [/T'eZ\} z SzK斁@I"J$Be,#P$M%^K.]@(Xq]Jn`ASO%ՒWn!deԒK +r0݄ܺՀ(X{/,V㦨 +|ܚOd$5,qD\W@"a`#jJIt, ǝnO4&MNEqMhɤ%&MEHi.vA R6`>}Fi>`_rk+;l0cPރ )˩ _QLēN%F˨*KE!kuz鸔o 1ϙ?žȡ-`5T Op6[?>ę,BaϏA"= +]3A*=sTzDya\:0xVs`X&;jlu`t1r /SXo:|jr=V:L3G'͗&ΗQwɒS&rc^ϨɇS<˫TL:ʭEy|#?0&c&o6qJY+:X~f5kVJr,C$rV6D.O̘u''yU<~#S})bceU +{mo?fL: 8^"&bXK{"LɆ|O %zSØ9~%<'Մx\%<~] bf »(BmnHOїGԚ>l_!Ǩx +ņd? o_gBxyJ>lv9|>[W.sq~f!E)"\ w Bz 5|_ \ =$4; !>ԗ0%`)uCGb(Hv$nVȸܱ- XM#~Dd#V؞&EZ&!6RP \v Q`{/M ^![]+h,%݋_PO]Wa+Ө4a^NC @VB[a v-M0_`ʖ^tppI F LN]{!Y@$0@.zj$1: +zr-|[,DtjwDbՆv{i>`h2+~ ap!5 ; kðj v41Y.@'ԑ)n=#@U`$fnavd+E0ILنw VA~i$b(D ": KEkԂAhDʺTp'EԔ[~]Bk + XD=bVa{Z% +l@e{jMBlvm K*[F%q'p%\|-@MB14ML$,ƶZϨY' _p !A %{n;TGav`F'K #mȓ : v"B%/`nCha~+4=CP"}BܟB +W>v 1+w&Wd4N˰XV}K-=SDIzA+7Nōw!&ƑV6Bp+ȝZY\v2Dln5~=Gu}CʐD hO +hv}GqY+v" ^D[V',]$JbA; +E%~EFvN# uYa4. LQX&;t@#`+ `#a]-}K+.D aM0p ȶF=DHn7 +ݖ${#*By_a*DdE+UHdx*-IYj@#]X s {&¢}A`~³ 0E#gֻ߰"I &lō.OTd]`,b[h-h`C#`OQ0 "6| -@zt +u#wcδ(XkPhEXJ(QH%C"dH,Hv(. }~R_a >N +[]Im',hIE=vdҸ[MF¢j)8 9/:4*fEޏduCƍ.64h&jKqS6: +s1jqڄe'āKf9BkUI'RqNAs\p_LߤNF}E4tii .gV'WN%o5cR ^/sF6R}ͩ+1i6Dyz[}uGtqSCFJBO-i.V1YzV~*?:mHdvWwKv|;5|O#<)Pa.9(r%)N-:zw0/rb7';2_f$.GOA֧-ĥRnAŸO -iYjL5\UK wH3n#u A=P  _Gĉ5'~@H.Mjdk}E-ɦЮ$+zl Ә+`!]+^bFn[4D=  (kNr1VZ7fIV@XIXK"lM[ +݇)o8r^ެ>1+R])Eh}X^pbZT&⹙%kz ,Zՙr S M|EC)62ШWSF4fŰvMЋ-,>1T'%^ޱZ.G1cd]CWdcXnJʬo.͎H5JROMyGJRݥ'NaV\畗1W3E>-8m1X̦סo+OU>0ũ%'#:QvK[,5vVHⴧɲ +USWeqiumSl; 2G᤮bOj~L%{U)ф7vAZ +o]kf"% oȒ{2ifXԒ|b'B_fXc0S1+ƻ,E7X)Ž'LJb-'̍R$bM=}6쀯2$*\ˠ]&W4%a%gNXXw+n`EܮwmN v:oVep΍ƒ|(6+pwL°wddCHА{W+7ܛZW KM26|OQ4TKNa۠ +_P;0 _Ղ°C;knbkĬ-` {BډLjU%$MߐZ@%~cʉ$:-oP'vB{10!ƽ{,HVԕ +ӸCdM 2K~@Y`V/PV XlԄmq,uz ;NP}`DZ\5|(Ze&f+vV$G-_%i !RV@ ۠X-~`E,X,Jv`D.6$ jJJWW$֢CM 5a[r t@Ӡ[$; e4  @_j JX J +,,H ƗpXj(HXDl0p 2LHhQe'`D2Q,m5$FU:``1C&1 @,Q2qf&%hc-s!FlK Q]bѕ +Ƈ<X:1^zfXq,* =_-7xVFҙ37jV}9Y4.JmJz`x~"})YiױTI;y-;ljZN %ԷXGkbJbN^䤢X6 37*hjr1- Q¯!׫QI*~©DZJ5KڮQgjWg)1E1U%ٕ"zUYp]MQϭHW>]%̗-y}g:Gw֬Y}>) |z>WGkje +GZ$.#׎ȏoKqy"\+'} +Q2-S[|g^ pvNkJ F;W,U.H or?/K _a1nw&/d:|M FËRwƱx I87̧H3Sҩ%剧U.Ū0(SʌN|Fj =FIѦީηOɤnDײM2y0OTTmc&w O!<9}|w)T68ƫz7~@;;9r,+%TR=Pș/_^}˔ФjIxL3ލ5 ,jog |+ -Ftħ"7Rԏ&^ˆ??qh:7ӜoMԸ3} (5seq W\6[,erǸ V +1/?K&zg.WSd.,TX_J/pmX^:{[?/j54LYbH*_J-{CNGNoXtNQ6̮eImv1 [7uF<'Ti+z*qEG/Qj21 \sJyJcRi35|Z~g}aGy2~h܄6n3G|w~R +;)c/2+oM)2+gPWYSbk7=v ծ:qKէlb(*t/nv6Gq'COO͙3yv8:)VN3J]ZK;JQ%f5ZuLN_sM>#qů%$r0xln5:~&| C歙ܮ|GS4pυ95/Y#߭c*m3n[_ඣ1UҚj.U~ }Fc剼 gȽMlUZMf乘Jgs\EY^Y<^)|WEZ3"qTclGhkY1ss +rG *|Nm+bb6ړWRݺ1pJ':7CEyVkkbb? ?/OKò: KXݱƱޘ_bʭn7xseFJQ3xIU#ZM4cDľ F\ݼd}.hl,&G ].R.>IOȮtG{!GqoNd5{B +̵2^Ѣs_vX^]X^{r(Pyks<5'XJiLE)|5/so˄a%}>Bk$[檾&OZ^u__gggk~_u rTN+R~5tbo55n8{7^SȘَ9Y3XGWJu _Ň}QXENb3/='t!S Czx;xa)A)cǃk][۬g 5.c8 BX?SK:|/ozT[;6ˑKn+~x%p}`pQ5>3ḬK^/oeKS OjQWr#UǶ,IHKIEK. ^"XR*^Ӻy\&Iڢ^Pգ $sj|˫MZ J\"ĝjG*XixĽV/BƭaMw3"Z*OHFrqmjG)2B?4YThxE`Tta՟z! oy^V;VS%/C|9,_kU>/Jӗ߅ +I;Ǹ~)|U,2z* m\kQ_sϮ5 #R'_N<>9&6!Frdx5VURىt?\>=x{(^i7}?ks[҇=$\WNw$)pH +}{1>_>'Kՙ?sqgTTr/٧u(q=.hU̳έ Pִ3esjχHjt-9M,L%ӡʄ$eTߙtgc,xu +ZQ S)d%jn-h.sY Ȫ~¿3# 쎱ѫO,+7e= FqF׏䜚#\y Ǹak)~ֿNE^5xBޤxe9?sJK5O^E\^CzYMT. +L<~FSW*:iXѤ,i +Q^ʝ5QUd%Uf13ݸc57ut*V3ΦI$KKj׺fW_N?Z~ +Z +窚S,ZqۣQ:tV*қ$⺞}X^8'mK|Lbjtbncggwԣ7RoXu^ļe#&x%^c-.Xmfv7V;Ώ|ԾЭ)MYƢ><:nL0P֚~Ha]㴾c! o:H Ň# N~hՏ/~?~?Ipl#JmE{#QD+c9U?zc͑\ gZB;72dð1pi'1=q|L<5k谲~=p" <IF;B+*w+zV6|k%oRfu)xyױIFⴎ:-8)غ1Wbt>5o]xV]4>Ȓ'zkw}'ZŸ%7n PLTiɜGF;yvy4IX\Sjv5.V%hrsfVN +"f?֓:~ Nr8_ONZsG.i:nѝZZTS0TTƶ{5|%h߹١RVŦtiNO38jDLt<4\㻱:W%γXkZݮQ,Bv48f"wTq|#ͣb.sl6ˊQ)q H^L)¤dރtz+=:|ZO}T-aM|}JѤ-j5=M{*켥yߘq%5̯8_ N3__bKq%>2aSsT_LU +~1|Y|oؗ7'j[Г[̧idEn>O4}8O jSJ;Tt/qq?F+JNJS8ç +Z~LN;%&_HSIm$sk3שִwf߇FX?H:YK$l r՛g3zXԊleK<~'*V7C'eMNWSOY,Dwzo rƩOHTc*Rm\^E;E߇\AOiK3B"ԓGK rVV)u4&^UovK=9tmԳ;gmCCdsW/"_p1_θz] -b58z%<'/cK[JMa|=z~'TIɏN'z)Cs)OA:RrorJq^ŎrOTKf->evWҪ$c +^KAӎ ]8^M#Q79uaeBn)/LjEflA40bC;FA?C$%f}>Ѵe^ }\NDek3}:ҵD<ִ\4KҫR7[zc_/ls7v#Ճ({,]CvTfj|g᪳><Ԭ#?Y`7мJyVgkx2M*R~7U΍>f뫩h-tpqr5XNUQ3C!/l:3N6#ou0EBYvT)Z,~,5-yئ>#GX:,+]l $YEC hŞVvk$/ԺwFއSKVӞUoha~\%.#Ba5Y BS4ZU;-j]jU)4Fhcp梡ثfX+t1{OxnõrIHJ +WGayVN&f|2{c-UpK1E#9+YԱ#yJUtuԜc;]br-xer@%VEءSz2.Ƣ$^W63lZSʞ۔ZųVY7K!0JiiExL%R6TqpFehNf'K]:T^_c=J4ou.nc-Q7] iӿ 6.UҜhkcMa('`ťKINm੷;3N E^mݙ;=)>莭*ДnSoNNsY\4UKʢde(?G5xIKy!֯[t]{2ׇ/ U),[Lׄᘺ[cV#bcŧJ=N)Jgo)[7ON2'*#|/cRJ^ȵTJ)ڜNf.&.)DAjXSZ^6IvgOr;:W,F'Vq!ı_ěyKd{~C2?`jG5FtaԔk|Y2c+W9ɾW9+O[ỊJNpw.;[ZJ*}w02?1hVZ:.+m?lR8N$ɞoZ|$ERVT[Hx& qnIͧs;7\,]ThSi)#Qq INsr`]e4r_O%vOhzFKKjȢURգ邞"+H~3{6Bz?q,n~lBW(K#:*[-:WoRJ$~MV' +ůcf\_ĝkR7m߱ҺXD̸n[R0iHPGawp=:|\WKψb3>FɮJtUZ%F^NBfjM_mzY+NǦ/[v&0FN㤾|Ѝa=cbKMf#ܙ4d:FB[N;QYd0%t~g9ⴣZ+OWg3caTWǟ7GZVa8kE+c>5;fCNj''E%!s3 .Zlo7Ix0~0Fkk?[=S81 nt_?\<=ël:2S'G)jћN2Er;W4NHE$e<ȍ^%bVg\9=uN&_%^!Si{玭/7Cpv/i*KՕ`3"K{WGz|Oyfdp1^\c!.5[Mc)LnkS>;\?[)c$;v+'[/]7/zx{G`Gm 0ܟJe+lqXi`v5&slj{ʛ %gj唗7MR_qmLviKVٷ56[8MM^-0yI JK OySPL7W1\_eOUo(.jO\R# og3 /RY<{xoЋQ!k]lٞ)ٗCҷtmḴ6~IiNu+Gi~ظ_br|LdN-;RūZCĸm Z_%?hOX%kjZFx#?c~tZuI_ס^(sM^'gvWN4*EjDCjˏ O[SiH~cV=_x^\Oa3SpC?>dx?UrK?. I/IuE3Z9\?Eyѭ_o¥LҗY=T \s=_E:'5s8o<"ˋJ!7dX'9ůПER5?Ii)Տ?.lҊ"7h3^!M׿]E9nKS6nb0Mȶ82ZbI+ta4V99b){M WG*æDsy[ѹ=Jq1!?7˟BTBU] +JQ5yllE%KV5e1 'ݲ/XnQ*ەT(#Lmki/Wbtc3|0mL~)TK[ՖiW?cݥ}>q".z~+5fW"gng#V3Lwthi#\16 -xbOʪ|z[^2&t/3dعN2\ja//إJU\bLD< *|2I3JOI,BkXcegß> kS. ß2g^4ȺHM:TOp=w]ji#Yy4p8MڗIp %/s,Dy&W"a>!6*Xb51˯&\. |4imRyN[jJU!nC6WӅoS`J=mbHyusbC*K!J^J|o`*Hj;T$ȪѼ$]Ћ\Xmߡb+Dr7E\D$ %3 uE{n!&!ZoY6aIǣOOW+Yu)K3;9< IeN,j̬Mxњuw5k"al}^V>UjG;O+zH|3cu+Y(N'OdUB +ӌKr3Sk_cxGx)ҷ|Gx{V=Q + +RޚL$t{x|΢īTo>+XxYK׍9Q(C +j%Ku9TO)C(#u? b#FzGjM'BawZÌ_-[!Ӓy89RXE|3OrcV밾#S&|hӥø23Tx5jw5^/2]' zTtu*>lNbScmQlJ[;'Ytε8F +7J(K 5o6w\W_3d~ZIN|z3t,e7){0_Mu U˞ғm!kgRbgRPn0O/ZiF g妞f#rMQ)ҵ9"{؜EԊkǭwѝW 5Aݜ >Ζf16ك]Z/BR1sm޸n!MGb[ s`uȺKfmˈCR+wUJnqHDɪR{EC V[G{ÒK4btRʤ3R;KR3M٨Y9SҧNRm-Ln4'˃I>X%|43KX;؜*-#nOWC=pW%_S553Q/)*\җC}:C׳ONku:iR>_Wz^g$xãQ]jtN׳>LuJ] +iTV3BO{S8͉౪s1+5ƼyMJ&/[oU|-OR>%*OTwW9ϗ̪x{f)E.g*Rz Ч8oLrg_qk5 SV+$}AѦ!SeXXҴvOt'!W& š[#37ԏ4v +FKaTtz奲!*[#o SۍCgo3 mgN=KbzLkTJɶVS,ٝH2o yQwnÍ!V0=FT;jh|D[3a+,SD6M]YkУMe7FH٥bWWɫckƓDq1jQI_.W8 a]Xi(q*1E2㸷򴽎7Y;lGNMFQ~N=8ΥkkЮ\S=BN ?#'V|C՝i!GjŰVfi/oaqJyb?͗kb[Ҍ..o_vsG|/2~"K6CاKKu^(ǘknbx:_rle'{Ƥt:x_ҦEnNxQ}YyGZх9KG]ĞTw>4b#l! +{Y+uSM)6HUI;3e(pڱuoYcy 4sgf:&nGr0rߩًR<ĵrx*Z=)hQn=JQ$r5mOVZr%MSSzkmh6n}:31Ğ3%#^*ћHWbzm1^v38"MhqDdNMvf7%G_K$Ɲ#R(P4Kk̙?5C#JzӟoOPcR1;qU+J_|tUѓ$3|z3cgM/C +SqqjT8n"h_5:BIwS3:.|ɵrQžs Tttpmζ㴫rxjҪb~{$Z)3CN y58*]Ʉ_sUI;h{WB!Mn n)\KFbW,Ru74*)ORMjҽ;&q1iNͳȔR-5&_:Bz/DdQW̽ϣb8VjTG+Lk=U)'Ne⥿؄]g|3*5aiJKݝ?<<*GzIZ Frs-O !{}9PIR/]^&?0k{*d_qqvR~xMmW/ѢI*׺5C[^N\xx.;?ϑܧO(/sE??}xy1dq꿪=maͿcu i8ۉUYx[ ++J'pO2/=Z|T[W g űsb]{| aە(nG"/vtZҦZc>lsoɊFjQVV^|ov9Gx.{z,V +VO+q֭y/Cˌ_ ?ϟFF"a}s^ 4uL0؜zÎci}Կj-Ozq)vT#/qV8l_gzp ktkCKJ'sSUdi4':_al˫KHZżZNN/л"{98n1FIM_[DS/\𴤬c8Dw5̱6f,xe.I=ћ[ˋ޺,r钞ZFa饤QqwEYnc+ot5˭t(Hnj,mYzˏ$p:]#Mb3q x&SS?߹Ҝs2iˣ)hNųZFϜ}Wdaֱn;-"LAAa'QrBuԲହv[D3ˣ\?YJ+wEߩ3ֱ3qQ9Iʝm]e}PQ50o\J]ɺ6݋,V VB6SB!CyгD^dzSO '8yiD$O} ϻ/d'Qr;Ӈ$s;M;رf-8^.yfqqWQRs3izXxFH>%x/Cyl~[ٞM7/b_\ǍpvNOO<>N_bxy,z1/xNJ`_?TW$7'գҮ?{Bbq4̏/u}F{ +\G Siµ9H߈qz\яLYjg +7x Qөv ƣя ̳//W5iԧy^mڲ7g'O0~ml[^Ï}Y_9S2~PZyvD3y ѶK9Tk16>o?S´<=3dYt37إ T 105d|4zXe cU}?d}+*v0nw/FuXNF9~.\)æ^rSOcU>on_KZ֩o%W*:U$Fus^"/1 +çbĚ|#.oL3iz^m>x*IKz<&g^m?J|T\OןKXn>o>.b_ }-G:s1SP_*P>o1/ ֶ+~lw}/:J^ķh~?@DC9r~+OZlY2Z^oER*~%/E}ϡ.cҏ:4?swxoХqWZo{hMQR;3̼a!EIC % *ׇidYZ4sqj xuirc[;Rň#>*mB;h|}mem:Tj N*i?$ o1IK;O,QI0JQnX[gJ/G6 Zd#m_Lx< +0dvp7fJ69ԸD=ӆUbjMmJҾï(TWQTOJcdxԢ-1ʇˇ~#?]b;Mm\WYXÈA]f_. Q;6W, i}'=]ryhKNʄiRI/.==&=z h/RľƼ#-NuW$xNռ= iôWFYiPńqOV΄20$mC2$I}ʧQ.de7 (^ni>E3D>^His9Vʞ>\59ӎ+x8[d^/^Bu#}; >!b.n"^ׇU \!a8}3#˹,\W4Ac&&_L#ñRoV6Qζ$qϏ +j5QѦ9]k7ҩ 4(FZn4փstEnbWTdub <ڛIS'-Mj +Sr[a9D)Z1sLkTgmQыP|2/jʳ/DKX1*= [U"F%?1}]~ubӟo-0~΢$L5KD%+.'An[']P7tpXx,*0`NBi4dW-R5gJ6+" '-sLJH64QaNkcwԬMTdbhr}':ELjRdXbsT.(j`+mJe/F#ۜ{]Obb#*8q1vC?v#v&y5RGYGUƱ5-^8dQǙUd/FANVV6KqwA@8k]˩O-ȓVӷiv&N1|x=|Ms,JBL)c%%bz>'.Dg09ju)^(tyAʂhxKբMΧ# mjXƫUh~RJz! JJmFUZ=8ԋwgV8"b]V.CQX[[ỳԠ Uؒ|J}Iyvنf!uȌS2jVH9b 5l)L%pocF"B[2t"+*pLՉh_i)Fyʣdg?p`$BR\EszTaq pj bi5u-K|b`Ib ʇFTê%/-ˈ4CJiWFj$e +Dz.$9 oaxfK\b'(5fFBӄK,mF\Rpw!8,v%'umi^hΓH8L!abp)oXҰ-K'_+ghJN.ٖʜZ+kTڍUg(ɲ6 !`cQ} *r|+'b +I+'n[+Uƨa+K7o_Щ V e+&E/m +1w++ „QE'ͫ?| Êѝ=t擧4CU|F>eTR9e#q(:MykRTi;-@`.k}D+\ClVhb!a}EplwD =2\R|d;&+.\%Tk5U|;*L".ŷUM Ŗ؋14r ]tzF1zɱ5\ \.E\ ݅f'qArq7 ;a`J°T]ٖX2T!$**yX'l*d~W)OG"X~͛2ŒH vb̢jE!ؒA`CHvi1\Ww.BfWwW}Gw{\`FCPWEd^`W%s6"^\\fTI]Þ?wccJOVk JL-*THEczz ۫ ?Dԕ<%9:mK\E\sSv!9$ 'OͿb>%+z~|wi"r4vgc^N(w\s^" ]S_1힔KVVNoSUrW]m)0s$>!^}xsh/Sw"Gyˌ}=s/Đӯ_sQ?ϻ/?p? y'ػ<4?IW/س/>{E6 s\.ON}o\,b>gmm|c=bGGϗ|$'ĸ+<Z>u^q. 5NC5yTVYc3$h5!OMQŞOI#K> >p\"/k3|+𸯆/'tN|opF*}G>w(خ^|LiƚeSw:HMvj88:] =?{AX>Ġ0jxJ{NkQSle]1判ԏ]X3~tyPZ畾g2Kr_/WRX+8,lU3><5$5e54QiJ٢xlK=b~:qm#QjCJg9Н#Hte5/RJ?cnޘXpik ޓ~ڜ~T#Z7? /{cZoG?I_`W_c0,rhoKs 'p#Oۓ*S;{UÃ)%(4)ÓoaF2xgnTdsQ tf^=N>+=!Qii>b[O|/6K?c>@)Gz-{O\[Fd+B%RIj}[/q]U6IB)Ig<-r~,UTM~IJ "f9cf>AD}8Цҷэ]+~4ŭok6_wK69#Kgq4Df['6Q{xL{)8$?gf?c [g\ OWi{y\g5u=D#caj$zs\(h߇8=/k|tja*BjdŭX~5eӛIJHGxI{']CQ#-$a7U+j"GIM%_NS* ,ugm'70~ J4GFêl\7(? [Q{Az~EmN+nh`R.HS} +60VRV3lMX^Ls{hɦ Dtڱ)EHMM#u࠮b8܄RÜ;8SId"|wH[RןmgdTǣGh%MBܐ9;&2\- y,آo㇏3.,xM5ª:^! j4kos0&t!>D]Tən4ࢷ?(y6imHn+U8["W7n+ ktD%]3͐mܸ\BW}YTA18[f`͔%d$|ee$2Jq̬%3BIObt.-\-?yakg<ϡۇ˺X/O23/wyLH_Z\~~zz5?%=FhKs? G n4hOYX$wEdu\azrxz\Ʊ QKYý=f4*˩%XΫܒE0f)Ui>d`ڝAZ8dfD=s@fpBTɛ-^\^#TErDt>; cc' .\#~t@5!!`4MDDI4J$4TY+SpuR[Ux %8etEFq>T_e"/M/s-n;92b&]I"Ir<_Ӄ4YRDoR/u )ak4P_s&ra&09|*X9F(aqAJԗcCk|ˍhMIf#^TqGY-.H+5U<\[= ,ޖ>iNNT{n _=(}"R9|g O5f:zKr¥iR-nxLt1-4mY.OaaE:^ux= ҌaӎlyN Ix%ǃU++Om6<(BFJ,°?·1èR]$^*)NbPY3s;r" frTԷp狪OpAe>\C Ntbߡܡ +j0Iw&C`ԕB ؜RchY -nSMg8}dQ_dw5$0<RIʖ̑I%8ٞoQ&>MR2L=8Tfpdk"  C+1ʺI%1Ԉ $նV"_DO}dx.xwL*2dA*&@;4PH``` 0bLbX @!n+wC"F p7d@98Ji%؎מ5қN>];@= =N¹p4ʗk<xДiԱXU]ْPOS>?ĸTͧ՜[RL+Oj(^3 ̚cRR4Y*;,MM8L> neԱ'CЩJK%s|'uM/6Q~$Ta $SR%(hClMKcp%] xqx."%k_rJW>%:*x?=إ(9V4ēC+QTh22V/VpAI:tx?1Pm,EO2ᨇ|kyIN2Q~ybwxyb }u8ԭ +r͝FRDl \W|d*T'kT֔ o[ +oN'DZλKW̏ |FuV*S.#Xoix1MN=t{FRoB7)iЃI(y~5MJ4͈#/UR:k!Vb8m *ci';)~ ^n%.zTw.#XOpho^Ȍ|[/񻾣M~pPoju?8џ&6&Ξ8,fьGb$ϸ?ѨEj{c|2a& ! +w %r-!0b{ +1PƗG?Fv%nu7=_" :K~)V8唛D,ƴ.ԓw"Ba !` 4\QͰ#pt:RZ~.kPէUE`0vM.Z'K$ 7jW`c +Ŏ,V"&FbIAa,X`X+ F&JrTU*;H2MC);!aؕF±+X,N`!`%,,` CK6BBfk@.RC+(KpX '~ab +IjabQ[캇v8է +Yb"Zuj%<ڧYp8jc&۱JNOi4J3B+ጃ`f,QVh"$FD"0`:$D4K:ԌSJ)ti›ؒIYl0Zt ;\,0- ->UXsBb=j +o(\mS`ah>k/\+.JQ#ZˇPi6G2ü{("NΨ1}.HK^ylonOmBQfy,WV>po9pxsz܌f&b+܃lryڞB~~u>DZϪ^v +\k^+ƃqx?qܜ^~xog0LM7GNø_oeOI~8 hdQǗی-!KsƖѦ}[3kj|8='g7O5>˙l3lj8We3WU> )*'ԟP ǥwcYt*NR|"\3/[gԒc G9R}|gC*QW8tSC+B%/bOo6B ẁ\FޟT$z|K|O{_br|&TW*2>3:{ce#Kϰ$ " C .e$Bx:Y?)x/^*Efg/Ž]/>_wڴ*Չ&~B#c)Ͱ Qz3ý/I]4ev5+H?O^)1_>$-&m/٦..خ_"Z6)ʡ%3{?|j?ы0oJ|fGr~ poєOf?_̄te.+pleaEȾ\7UK_5*,n5i[J] YoN_bFzq_hdJ&W(حH)[+mU_b:mcf $b[\fXejTuVF&ԕM-.m^.#&ݙgWՓn:L j4޻eu5}+MNU:њ"CX~Qs&W3>G2;l,qZĪe[S|؛!5c˯5%afN\:GxQ%B[ȾSf"%' +#fgIYi\"lG>n9N#Jl1R{jhhgzّwE5:%(8+5.q3/0 1 @1 $Dh 4V&*'Ȼ2LUl;=}2q.V'~+ZYVm$W3+52IE6lI wLp^#R(ۚ=B3\gOr+{oSU(4xjgpY1D"oc l[Kk86wG4ZxɈ J)%=G&%к̑WhCFQ<9CR{a8,!G&.܌T0b1kdT﹡ҽ60ѣKS +iׇcZ(2^)ԕ<L* $ljEi!RmBep.M?:ObR:x?"ҨQd }*U\SJkEV>Y5?N꤯:]O4jשW盗*$IF@ @a +ðXi+YQk@B*dWo1<:H.XhSxv o5ʻMRI-EDH$$=Ȍ1&0a > Ⱥ[<; 3r \+xMt:=l/Obp_3Fn)l0Σ5@iSq!ƥKuqlWV =]ccjm Bt\BYwCi3h)N? %Bя{;;'tH[:7U"<|k rT=ĺҋC䀈BiBfN'9C 'gc^>',4 +*Je)֖g +HS)7#3YpMmDd$GѸw$}}N<;59#-xZ֜i-5h`ZXx?a̾*Rb co^-ƌS<9(,^%hE(NZ0Upuf3= +Xr+O{9zE5>aNQ hTr|Ca/1+ST<-|5mFYjE=lxi=/榗BJn:ꎉ1[zE@)Eéx\l;V&x,u_3.W +jelf4pڹ1Qs(oq1gtZ҄٣'_b@ \V>uJ\߈jʰ'o ~dZ˛=} /]-矦bc'hyXdޚb#,''nHGOQI:>#Ŵ" +qsWl8k8ZR›GQ!fohs J +RKc/CBI7qqWizmV/a=A_ %S(L~<<=Mҧ3/piIbl<=) )|)u;'Yte\E6Sb^a|,+0~lYV"&Ҳ +h: MFۀ  87W2q :K~K5S($ᙍԕpDeV#v+`HcV[^6؋h"a`@ /aBñ (̐ `Xv`%K#4UnPoh='kmcqB2JQWLx\aH@Z4ȢY +rM<R,ޛÆWIqmv&G0bmaCG\fOK՟ZEZ8b䬷&d2D>jxA-?F}nϨ5ܝLK☟ *>G6jcSNY<6&/qt\} xf[q#,\G?&\z0^9QPcp>|7q1L<[:SqypOS [x2q<_,C_ȱ#Xi SU 6Dj'~ >oLD&U'6>| Oƻk[TG{<)~&#4&{V9b.#᪘ZRq/>%("$   c>l;xBN\&GQ 0$RkF vFS/8*|9ؿt*\dm ݥt&/pͤq2`fKt*nA`0Rv Vi$%GԶXW^I_BJ]PW8s> =KX +`Dc0c @0 0z 012B6QL,1XmE0cUIe:w0`)TSNVlA؛@Vb4By\.'E׊zBji4VAq\bKTJ-o+ܕ88ep, &$`%X7"¤d%6ܬr& +S ھcW;X.L!1]Hf2/_&b:OzP"%aw l +'|%/=N j|*_cxl6@¼p^3_kz3p&\< iIx3}  FOo%S/ٕ wݻԜn5#?έ'81YCqZ ~WJ^y+SZo6NSqj|~޸9FT_?m9K/1\6L<1]>J]J6q˟lOĪx^gUGp +]4dkm˜jD]؏'菼y FJ/sz|lW*3~%K3{Jئ|/ _eg RZ7QWø |x/DLϣ3anٟjxc +j9`c|}"It^Bu c%h3I"s +cbߡ} -Kifфp __&65OM&: 5\: |8Tfvϧ"xi {GSqSNAM s24γ5֙?I>!^m}`00Bb`!І&&N MD88D"MDirvHYmpMmcM.DD=U/VִWjMg CkCOփ1|+.zW I <ա4wڔZ}=V#Wdzl!n>0`ǹ͋[b_@XJj{ O2_cu>fEVaqYe%Eíy]8 ୱ12$5qYq] +0Jes7 +iԬ7{<<ƑMWx*̟#Y\R~FNT&H5LE\ XV(B`0Xh !1HĀ`| %F:xe# =y [ ;f$p%mW$\ rƀc}*^U\TIpu2$VF@z:R#MbZߙ*8|RUuc<á}yH<7^}5B2A^3FO_XZI_5W,YHuNK,|bti=5,zqf N2j:ɇ5yafpVڭJV05\νДcMBwh5Bη6&FM|8Zp\/U'c<[[G$iғX4b\|2xӳ<VK՞/.k|A6^;J:{?%x]1Z4V0ӘWx +K mY#F[G6*3Yj f5֧6SHq5䑖_8Yaq=gopKU]iQZm>M}:tI͉h .&GMAs>O RGsMv2)$"%IBCc(b*ߐU3;w kWtbס nܒ揲7\͈RJTݧr Q8iSNr\E d h@` `I7i*1=,hx.IoV2;CBѡ$1!Ƅ1#CDQ+WhB/BD*|'ż.*r/|(/6v*B3J2WF ?xG+/pFNu'JYI6]O3mi҃eZտ(=I+C,gFPTQV9 6oppLJ..9lbbmF#כR/5`!*nM.+UF/Z1y"[𿅎daiaJ)XX,141:xIٽOC¨,E9U~^[_S I(:_6nI<3MfgTJ-_20+\0pZzN.[h^3Q]@┱U9N*y7&6A7uGN<'Byqv:/GwbyUHJmE)Rslxe򵷨E<:h 42B EVFy9#Fdާq,%z*pJڧ$s1My)z3>WAz=sx&V&}sIb\MIv*x+ 7՝# N\/9S6*^zx*vsjSO9 LVtSS1?ކX%E.'~Ԧ:9ZZ b" -Irblq/apk;\˵kW)lKn4AIb*Ys5}Ua:~G73x՟b=ojKF#OȖ|B1^Bx)g%ܘLGTOhFWќ\Mo>k\I.?}î=_̯C,o#ǨfelfpE0=O#43_<6{z[58Bo3 +ޫC%}b}m\ =^"Y(8CF>UL-W8Ÿ˂TMj=O"(7xԷJ^|%(ՒUY^5EUZ-8I\1xi'^b$Kס$|겴k?8LRJL=]QNTM> `  pbzp Gſ-œnMsĩ8ᥦx1UެJOW;O'?   Xz8 iZ@v~={鎑pcWs +~Xi~yr-[mHh߉Ok_jj)z_TOӟ$;O4fM\8*& u=Uy7F6" u=uxS7bc$|J'Kt'j,,( V2^Y5JtVv:vWk$dxw5򧘧]ieN +&I +OXShussXw*7CBxcWIu+AƸFZ8ڊ-rcBާCqzR^/kJ*ר]I]eĮ?/_Ǿ/˩KN\F.ܝc#ub ^i3 bgR4/l`:B8J2OIa#œcNJrx1S?e~&-~>.'ُw0N7c=x"C8b'&FRzГD¼bwk5f`ppM5xiڻ/v(A!pM%e]}5Rx^5A i$}k4Y8 2)u'O4,c|0 LR{ A.+ <>JU  ,:".\Gl#O ={WV<wv86WٙCBɊrKFrOOS/̰3TtjK=J:{/ дs;JO1^V74{Sb:oHݟ8u|e}O_FZY*>)7͖ӑN IC #_ .gϸ6n5');J.T*$Z;ZU۱P5i4[1r5aհ6ĸLr8\t1gc"w-@D )j0 ! w +u( p}TYt}AkrFǻ~6x.ۆW*ؒ\.S.r؈in/a bB n4G/EJRWoQu7k%9g,?i>R +0mciS6v JVarq⟗Z.NhMN1HY8E2㸦ԝE1:n4u*w#PxG+is04<ū!xui70"'ɒ<>jtp +5R"Rzg)*Ni6z:zx' *U5V;#ҩI锣[a$%.#pί]kʬR>~2ݩBѻuu_nZ9RdG2jqݶdvyB:3Ijf7X9Ռz=.?kiO z3}:䤻B04-F*t_b:=S~%`%R3Fp9@|µ?g֋q4˭t1q2PoE7FjafPx^5A_4{ߓ<m,>[R_&mxζfS&&&i/x*u==e):=$\W4e5NRy519pzTP½Oڌ&G{y,]E#EU.O>&yI)Zi7[7/p^1ye:җ0zݣ +jq>g%}ȡe#ĸ, ud<~'afH!'麸WLz}oxbG-ENj5(0ה"{8 6aG1X'c6g͖&#ͽ0KӇғJz3Waf_Fc?E7+ҭ~bSdήU%yqqM |KU'%,d1tQ11l.Ar#"؞]WddQ=@lW0;3ՕQʹ uEC=gzE5Im'w%%8͜WfF#Q`P@ ʀ 0 C 1C @1BD@IĊDq'( w8ħ8"gZG;6(^ug_ɹ3qhCZӫ&bM "eLH؃v},-7/`%JRxzw*|NJR'3Q,_+_>@ZFK4ZH +<'c#u󭞧}N(s>vGJLjFO%zvkCRVN,GuE>#s\+|".#j7u:zHZ)t8UZ*W8\S'~G|ca':q}9؜4JKNN~3q)煮A= +&<n'Y&24qph1?UiuFFX^ׁ6KxcbSOa+5OKۂ]8TR_K^F>X4e}y.FLL`v0" Yg?[x|\k#X]<[ɈyHWܴzT|9t8viƢG8+yNOR>`ةʵVccFZqQ畩N+R6%ѳ|~&~ei?q:x$c?3p\ϯz#ɗ<1 lx|o a4\d{/W>h\e)ἴə(xP_N3]Z2Kl1lp|_gSFhԢӒ\5.+I4Ւ^c|!2Utӓ\xGRQ5KV<\Jɷͱc}.)9UNoHTNܣjppHiƁ"J7"I.q8֚Y QRIcM"+7X/p*0h|`_ЩBXJޔwΌ>Sf~2u|"T-k~kˎxoWLJ} +>)GйV,ۍa)䌮//BW+b~8Wџ?/԰5pV!.x4|֌Tm +PWK=8xݎ`fGRχfQQTC̞X|j|y{ذ=pf|ϣfYhNGx ,hH5q]W(IBz/nN7<8蝄+bjcSχ~!¥9_sb#_|ToJhO2-nduw"û?eBߌrTſ/MԼ%׹*^/:tZ~y:5@hߑ`\|SZ#%>㜩3nq%~`wai[Cv\GX<[KL"JǠʎ k€`lCu*-tIMΥ`9~&cqI ]z17K'%(&=p_Gx$7cW_+3;<^.i1j6wg=gl:gH? Ū" ܇^Ef!O=bXOA-by*rU>H[t|Ndr;Ofxrϡxj7-І=L0qi?u-/SxW2F?s%.V5v;Zм5Rg|9V2f}r׎la^*N;<7Rmsqz0ՒGU]LKu|5BÓu+>wg%(nj mwQTMw1x$q IG]j}׉>x:(ѩVV&#?lyc>J)&v4hVHWor| 3M'Vz%6y4s>[ BHE߱~̾I}rwjAӚ) +[Zˮ! ^Y6&+_SWclq!\ \B ap#Z,Q|SG#qOfe%x%Ma3 \idShW+``0bq-\K"$88[OtzӢ-7(=8lq;4(5&yN3M=3F]sUP,4*Н984(=Zc}u.`+$)u=Wgsl$ = "8d09k# K<z[5"xvd6,ԑub29ŸiU%/pLGZt換PU_; !JM T`pT`-YFn/Wt<SxTϟÔ5WՔZ42jQG|=_6->[M>ậV}26xwWӄCb0W!S SQ4,WDr|GșM7b3՜,,5H|z˙xK֑b4{kÚ6D @0Q=?x>Cqޓ!s4ƙi;4wc$ƙ0%p ^㸴.+ n\M lVcAqX` >砖Ǟ5!G7dz8?waRвk|? `756a|]>fDl&XJrSHV"y)J] ƫT.GSЫ꺘8m?kU>3$':pHzjl!@S/Ba'd3xj]U)ue__ t%lL{,j1GTQR0܏ p٩ԃGѪG4x5AF׋k=)R#?ml[Rw{z׌U(w:/UTp^o OR-<ʹjVfkvxC%+B|4} .EF= oe)N#755gBi'ª:쯨Wp8*̎WFn18.4F?/K1{ J[xuJKd}CL:#Y +q"e ,!``+ ]jM&Z&\ySO%*4: +T%shT\Ɂ^.tzOVn \cձHqت_+jsKWX! ,t &@+{ 3ſ,`x~3o"g%n痩` +66@5+!8JUn,.Q,R+5g8.'q\ \p . xq+Ǡ\4 @tx& +._/DuF۩2KM)zH FJI3Q׃jz3{$V(qkaW'&n5_#(\gϟ⴯#\j7Uf|aõKΏ{X}cUN}N]Jzn=TfG-)ŭڔx}STrM-ϟ(?KwrB=/ӊczuiFa,%k7:WrYN1r]y|w~n z/[ӎѼ=W>+rԖ|CGƾEFr>kl6iK{ؐ<1CRkSjy|=C-&^-[=w>}DZhwC3>&heOnԓȋDZi SQ a =NK*RNa?n E|4Չ1_^8o)Դk.GX,Z^]e33*Sէf;)RFp6>8FZ<*-9AVv{gɚٯ#5g`*p` `Ԃe#J8鄏O{aIYk\w" 1Y b `1gY+3ƿ\ST J&(>Fx%mۭwfv8JyLʧ'WyX8Q<};,u>5n{q!Q,f eX#ӻw2aQKT+Mz/+e9wGqKU{. [58qRji8]_7 jr_ִ2׉a[j|K[=vOEw>|4⹞;3NZ:i=FKzݏ; +.|M;CyfjJv9;{U}35@D|Ejq1K2΋0L7\dn;dǾ","bP #a DjLWiZd<dS:y)KrOx$IIx>3)35;mF.&̀C @`!@Bh $"q'J,CK"=3)u>wxI\7A(z\ܛQ36JVO7S|eUS| 0+p%R^QH[K dng!Y\`ıUt*N۱S㐝H(|ۈ՟߹xJR,Y>NjqR[3?wZ`4d8J'~ 8Ԍ1|=7㱼<"Q\Ltjcia8|9_poTϗp**:|ű9YweuRȣq5sx5՞ּ+xN)Wľ5] S&&O{M}pd= =7x&6:FWZQV]Y|՞ʙ`=#U:w7Z1y[KS2q°415%(|O´)Y.jդzKx⩶zE}>вʀf2:<5OÅc5Ogp0BLl$+b@ \W<+zItRƷ txyqKH],mc0=7-+s#S,qs=)k ѵ\;F/£N7ٕ86quJ/D̕ᚥ:1{VXVƎAĺ\B1\"JYTe'Lb; +1FKx'}O4S`jJInqɊ/U,N\ SKFqihȯLc8M=iFJ2N|7<=[W<_FRWFksCXϊ7%vU +Ps+$y>=cRmQ0!]$y_c'7בq;|Cϛ%lhxqFnE%_MS\; U^:4yanIũ۶|F$pxaa%gTԍ2T_&}.#VG>mY '>k>IO{$.=qB( +lDGB|jt$U uq?̋[|{vٟL\jE||4Cx$E9t8f13&Z96y AƌpzV>GA Hectuhъv#qT{:'Z= .q؈{\L`g,%x`=xAc<6ʼ=}xoJx7,Bm~f l,jebhuxeNxvJ7k̞$w`W+ꀫbTti}mٞRT.h|grGbY^qaV"VȰ>cq9GNG煪5&}\W¯R }Ov6n˫ݿ QD.\ۃ:tҎ:xq +:pOɹaFU&}O8RG4.^I$=ä]sӻ/6qW<߈pe&'*AN9d83yf`>=sF-w|WKXz5|TNO{t'.Q0u0M/ ؑDN 4rU|\"lpibr8ZuC7Ō^_ >)Faѣ6 4aҊ!{#%^8c|'ud(]SG%;_45< ;&s L>zm8Kf}NQ$2oUSQm3ԥ +Ҋw_֡^Rpn=L k6%4g TnTO t 3İ溣S;<-O˷q4trc_Cj83q M:uaV`#د+ejS_,w8&g:b%Kcck:6X@"$ +~G|9Uy7+*M3r*u Ww;4kʭԄ/u{\pzv##?1/S.!bSPi'ɞk=NnT*)c#XjNWl4g8%b|. NY՗)nJH'¼Naxn H2JY"+LRI +)(Tiȼ)5V]ϞqN.W\ϫ#rdE|h,1^_˫|?^ b"w0wVK/Ra#8jŘ:TZ̢K<VZ|sVO +Z}:r3k/* +28:i[,w0ȟ#q3oIH{C5ZjҜr).G =h%$D)$՚9GgI <'ݨqb(77Gٚ\̸Jkv|*&]l#|=t")leqݳc# ++~*Z9*3StCm,=N!q~ay7xtx[ZIMmE]S?h*~D*MV<LRj2irHmk;KNT7G!kwoVpR!-ޥ}(sb#éNv|aJ;ƱzT3S|sTg}>;1zY=J')a:ilHMʉIrg8ԣQ\O)*>i|iC4s;h|1R=%U2a<xҜ&cM; &0}YGʷI\:<#=_?Vo#xJ5!7]+o)x',m8LKXZRzhx~1Z'&:S1pƸ ҔiNݢa0Nc!:''͐lr=WFw@}o zڃo'e5c:V&aS5ӌVj0W_FfWN0É[\ZO'^\.z0L9Xo p+NѥI {%%wd68:8Z)luDttQ8/{ )\EV] FQ hh& @W@H W}d"*.I@1@3J5ϣ_,^5M;RI%8BR\?壏ݦq*Vp 2$A_F ^TbQUtʌ>/W̭idT4Z%a7]p'RN}I#aWWCfǫcI]Xw|}O;Ii>yǰ2M-UPf{]Fٟ0tk)ǃ(G}1;s8O^a9%$t9>*UJUg%ͳK BDR.խ8Ę'I)(Jc^ul`«Wg엕ȭAB}3ÒHS +ѻѫjfY͏V4T">ưU HmiU2Ԗ4J.Z؞AaC6Է0ۯSp 7F:r< =UϠj"厐P}N^)F+M ,e  bdX+Fb8Xy5)6gC :Ut>`~,5DN^?.k8%W(GS8ګ]xuξB]L,or ԹbC"JdB]&Ð6&\.+\W b_PЁ] DX3qOH-c1R^3uxg(vXLR+@b `q "Md@aiW6&5ySfm1ѺLDv#)J:#6#kfN*]^R%NPvh=.# 8l6z)[wyja$9EJc Hw*$E1!p ` ` Ā.@1#~ ZU X̷ZͧJnM<6M1b5((=Ӆ[944mɚ!p7o6p[ϗ8zGeð-1).1c}r|/ -c=N IGT F3I8_#ϩ SRMk՛t[B+gC˜ +F"0$pl@-Q=LJ6gLFQ hdF ZD[@E   l.;+p N#@ ,V y/*nђ>}!] =lH,`@ hC(Ь2  BXRID X/&gxYCG;jVݫk=#J+ՙMTRNGbkL)I)73LJ8Orne+I8o)5kܟf=5#습)k +~8Mzuw=-MBu7]z4״q\qO3a'/,'mPWkRiDTVn'-mbҕԺWm8Ið<7WPU_uYެJ @+@qA wX@0+@ \.Dnt< KGͳQZxvaa(q` Ig{s;_df]ޭG/V079>l2` @&@`NLrˑe܍+ w#p` Wd@"jCWq +\).FdnZR˙2nl&Cb`+ \ &N5%UqܹVKCXMζ G ժ6#aKRb࿉B3.S +?s.:{zߴlcҖ?S=GnDy!\t2_^nSjVɶE + ! C \::,t]^ Q؂+S^:9x(6Ia*q֪_BxSȨDn#I6z[wxZi=bߡKVz4cXT`D+p \/ w ` .\@\@$tJqJ<`I[U׬:KbKb_рw1ʧ^~cATΣ"zb&)ȾqңNYIkSW]'HiKGFWR^69[GVɩӴud?N$#q ޥFuy,D{\B(r#%g{\7S[ݐzO#xq^ +7(KrKb6}G hJJɂ@GOenă`Ap0\ZpW\. C^ q\.5\-Bp ]sփh\8Ճ-n//jnZ]O Zz f* ]4դq-iK#_(F"VOR,Dly6dur珡gGdv>;>V&#n`E Oq\EóN^#0fR.EqөU&&;b4Fe';a|>YY`,w. DԒ+,έf\@\BD+).P @ w"Jr \@+!H;I(iUijvr+]#Jen< T$0=8VܸyXӟ):]cUlj{뱙=fNA`.ú W\ih\8I?:(q= xn ߂'bJ˦$2!2 P hj0p `!h Aa@WX3Q)Պvir+xk ^nUR~ zJKzZ/ݓٝHAB9b(@@b(b4&12 +jQQ|pOň~LCw YBx'Wq/Vz[/~ +FXztա@IY><(݇SRT#X0QV$ `'8go~\Vb|7?N-#L&V=݀` ,Rr:ЊJH`!R9SW&$zKqORgRﺹ 0E1 +ð<3bieXR(-HvL.1XV8[v\TrQjH؜ j{uU58rS+'dVN;qq𠤽Kkm=S?ܶEwc+QlՁUTQ_v{|qikEGbI2e8pcɞˇcVGN"\Y%a2#"bW 7.˜pBcX@0Bl@I|]%UO<c$?5׈N-^{  M ˰1@1   @@4N$Q44Whhh h&,zSi7DbۭxftV2YCTΖ5e'ߥh0᱊I]m=óC("@x-¢GEәjhxLם4՝/P$Y! B`!q `! @0W 4 C@o;XjЗ̓&jp֯gE)?.J=Q1=Y؊ @p V X.1 p S,Wd X*𣬕-3ѪLZ3;^cG_ N+,R9 Rǿ-4|Hּ&]ӌVEڼԟ(v8 VEԸӓR<,kϗi i=̔qk%%x&^1=TqxgJ[N>= N"qF%dv"0a@U(*'ѱ3 |dp Mf;Qhb#E(ETԥp0' NBM8,+kVti> Gh\u"<-' Z//Fkx묞 Ӄ)*|Ô1Xі!,IQ'e20M ~__LK<ǩX 2jQg {&XVԣ$S[A/b}QO']ԙbHfgp^~#-^#;7Hi|>kO4iZ{ˬh<#p(:DDZSZ2L&b%v̘d`^+96sםGSBgֽͩ!.ڋ9*noi{>}m~si妝^U#ai)#tn*13bݾժd~%E4KZZcgH94#sֻc{nLAp4`Ap$D`4H"=߇wgG#(04@1  @ `;`)Bƶ#宯BH b rXv!v0{  0X!V*+N)`q8Sȓh-ƕ|39q*PqZ8kj*j+1x $ϙ8>.&n̓965=`i]QNmLgUnGGOg=!űf9IMQaqJMf+XVhjPmu{yՔe_^Ǯh%e#4f}N"+{xc%WYovz6+*MhUྥܪ,yN7f/[HOdf+ݥgFJJwijv/[y**dfqksT|xN${ixL~ךh~8#1TԦ(]J۴ӵ{€%`:90p  @Pa;`U`Ւmb&{(jugQQ`}5W^yvF$KN(a _=h3ճ+6v0Iwzmvp\{{+]=/c8·htIV8_B,S_%\]}}&-7'ykSmuўKhZ;=k=d ?RL4ՙk1D!h C.AINQe%.ׇ^.A82y+чSő'طP_;bO#JEqN᠀ ELUSjъ(bڳSwO]@.+0;\` p`+S\  \,p@1XW ¸\\#7vwFAٻƙ&=ڭacL*.(;ce t#ūg^.+Ş/m+K +{3m;W[Ż,i=UL4'-5WT粳`*F5=G޼Eny*:h?bV=B[QWFGd(y񗓰XUx=)|pY/Gz:s5Í`Щ73 ZgXԬ)Ӵwk$50hl 90 J-,Zr~ěDwXʐ7XSU>SJtHa)?7z\5Q$pX^`16M83v%;1["Z{qWExJv6-$)0W+^В"OUs.+d]c[mEݝt-ys֭1ԛmTu+rݳF_ku[Vu-_ EXLXH^IsNa*{j<}\k8Wspep@z^@%n q 'c0Cc̽Ja_{~&˱'{n ,*\d,IJq`;2͡I(hIXF1 CȍC\hWwp Ah@.Q+be,+er31)|6|z:-lUZI_5#/jiLuץ^GqFINNQG$Y(KKM鱁JPwi֚tҬyaZOZUR)Jj +_67Hv`!@0p%p+w. q\.\+@ \. + dnWW %p ]wAr#. 0\ a  LMMDw 3wƛ gFEjx{ji>DDj-1> kS>y"n^"e~ouM{U?o<qN&~zyF3iǗsPfͫRUuC3\ٸ.sTUJ荸~k6a0tF)%R^/q>!0 T5<#gZ}D؎Ь8^͆L4RF*ݍqW’#q:b;8Iq!.+w . \;w pp W!N7J8z ޕi~g<>7LDI@!uM@P`+ 0@  @,:Pk1fmHwJZ nGF"W<|&v5R;-N=jqT rciԵݙ㶕Vݥ2ɰ\bK6pa P-%Kh⹨4e L>[]7,΍'×. I6>U}Ol}}?N:QU.Nlϯ\dp{{^F(*.[ SgR[*GqJ;B+ؒIl f33ݸGbX(Ю"5I\bg.By4n#(rdDqXzmLJס'tƟr(hإW``EP[P1bAp"0Fp&nC#p71\ 0{1 6Sq9.I +Ie]+l aWM?p FNtC"xV1gm=YuiNg }~Fy,j.Q~"XUWFmzS ],c5*~531$1@P  dF = w6\MG Mկqq.QmP;WNG\OabZӒgGƭ]R8ۈSq_ŸJs߹㊳V>uN5')3p>V8'qMKYR4F"kjMRY}9X+yN{[0#aۺtUNn;ý*%,"{NUZW]X:USMzK8JmT֝hseV%Iѝc0<$x8iE2giqLu/5kN)OjGH(<%K>yKN6I#|b_kR|<5s_>&u>x?x:z{DJ_gu=sKX|88/YOPs~-OI}8]R_bxCQݥjb^R>[W*bjFyT9K՘&&z*i4Z4!B+ h&0 ;0EIhm +44ss~BH|}?³Ksq #v!/R9cC0=Q y0 1`!І1 !0Pȫq`] +i->ePfH G[BLMߙމdž?hlfS IP<*?~-̘f :J<"k#6MM +hl2֜HrJu>ELC2a.vum.«ZƟ1C̮ +u5~GaI m:N|S ;)K[Y}o6F8|GXƟ +3zs.6Í.Y+2ñ h3uun~Gr=~YMһ^{8/KzV]EK7X*a%Fc*ikM{tj%zwR\-o)\$?eO_a5pLL2K== L~qiL,*?a.?aG 3ԸӏY)7yk0=CEiVv]lFoOf +/) % XU( =` C.z~JWwy;aٯq~ߟoÄsVt|p֓j_C|q@~?4?<0e 4?<Í,v?tQp)kRLo5>O[Td%*oÖ+3K[OؒLKf5I[AtsJOd[3冪rqx;p&0xf#?BɟbKCßDAt\{&p31.%lE?QOĶ\MyiO`4 Kc튧QXImbZPҴ?&\=ʼ_u?#˅ʼ_Gz?p.qSGm?.Rǔ$̾Yp^u}7t!~sh 'p 2)\v +n4ZFC\1"J/ Q=?}_p\xu̾LW#~exew ~d?2xeˎ^d?<~󩯮?p.S_G IRApᘄgm8moR H&rPV@M+ppZ"r +x zވK_@ߏ½X2q~EO܄V#0ˉahL7r%и δ/D>ķyK0'ՠ.!ՏȱaQі`ԁ Ḟ4͇a}s:QRqE/#(E+2q͇r^ެ?}* S *̏<~x WCƪE$8[e +tӍY$-K~4$$ؒ$`i@ +w,ԂGbВ%Z~[)N.?fIexwǢl >9Ypȅ +;\ +p ` `; q} Yz;_(].WbTi$Q(noF1W1pWmyq=kg:ӉeeBVؕv/#4xZ}RVSG hV]jG_ ZZrKG<3 RW.;*k<Q=C.~_ĽM~ߙF^4wz+[vAQqviQæ@1ĩѩUڜ%6%rJf!XξÜCgyq|v^ i9v]+[Í_/6$t<8rG\ +oڛH#^~+ MJ%cC FRVb"KjZǠsl j(j]:ZkKz:2v՗CF ?Tסⵖ3ɱ@ Lvd[@0B\,TU\N@SU$a z+soH<_Idxe4SbZ5T|$\gQ&t*n Dma0bb C Q2ذ5SpflMžjoBHɲɔFL &Xbɢ\ܒr5gavW}7gԪf|_Pκ0g]GEfy%8* /S\B237 +3Ssv Ā된AgMyjC2: ˙SALr3.jIlʮ8/u";nUuԕA]J؅?ķgI +:4,Vg'-,˂\.UENY3rL 3i%mJ[?R.̯*́Ir2YDPg;sEY*??N~Ecv2-e.b\ro7Yf|1Ubs}J\ʭُuT2Y}52mNU'j?ܻ֚OWSlfFεO1~&?4QFW?>3*J_5W,~)m.f +]dlz~.W[F!]OLeo?6Q=5ar!\K{7-N`pRCtz"s%WTgogT^W,xʯBkٓZ&&?7ɃOJ!mTj7hye\c&C^իUWCY2]?cf 컭:ax}%c*%Vn{3,ů/.#/7af3okd>$޸?}ٵg221q-,3!u;V'f\o? [UNa~ksU r fqw:7}蹷.l:_È)$3ofe. ?yoyI\xxvnU5W~}1-T⯮.ؾuo"neR[\]bQ#2.ʈZ<6i]T꯸gݞ:A=O+U6|Jc/pe۩7Bx\ī"q {ߋTL\ˀ۩7CJc׊Ks~ S%"mZ=:-V3QQ̗ėbiov8u1Rޣ/oU~ Nٯ5^c<|G a~╎tq5$O:c[5qovNOE`67Sg M_NQ~غOin+S81ԥgwg<jnu=QRV޿='~r#c)xZo~RR:^ +?wmsK\i87} k{vSDB _e^Us!6ˊZ I6S>kYܻ.xeb aU.U>NUC|r,;ar1U2s*b\:σi4Ez_k\~/k-9m0 ##[1,ixJ? S 3 59.a 3aj?L*! 2?ʘ,W)a [߈*}0;wb/o"I.{PѺ 0X,tub5g\/}pFL9c۳o>S飈Ma|uuxB7A 5~a+C8:j9/km=c%g9]лe-EoSIS)'MQ}%3FbĩlX}a1*#d>0bPv)fʿ4~ᗣOf}ŕ0W $p4L V}+]Y`;ů4gр\gхF\^\@]sq +⽉YAq\ \h %q`@ED1 n0Y()=]d"pUf\/6ї+xy7=hxB1Sש,2FI*ҶEaœaI"3(Qe',Q }tրF/y@X,14!M[]` 01 0 ,ak +ð yGaXZ~H-܉r:88T򒩹@W,M 11Ԯt(VN,X"W.~'GI& Կ7sЍk:T ƥn#U9#ĩ4$s]c>]Sq*{ +%}aԍ3cۧ۷ɞUibϭYs~q؟Wn}>L8K, Vg~P/V=۟OSR˃O).f&55Y*G87CXXN}bfB| :*o΅*0sR4L4`݅t.0"E~'[äR&4@ȒLܛD\@Z^KfՄ%sOɶbHa^CUߩF"[[b' Zv 40@ 10 @b`!C(`@1ƈAa8(˭iLt MުhKD,Y>e[ز6~Z#%ԚkX޿K8RFkϥjϥh3 o>qagSQ"Fk.3}+ P=zO>ִW}Byg%3"VNWV@#2isoga܎^2c|'ҷ /v7 B9_V{̃_WǙ݆Ns!>mn++,y}+MXzr+s W[ "KZ_oW[+Y7PK]]C>w̖m +~.uz]b˪ ˰ =-Ө.ûO1ȯ4KwB}]OKopVgyA;s>!jzNF П_SwLg2zO0_[onncds4} МI `7Cr3.WKg J4'A~u3ĮkşL˨]Afu*7w*PrAv{0 +n/q3Vh<21;7(3d9.u*EB{${Rw \$ThJ`^[ t+rCRϨЭMK3EIvIKMՄ䭺`83/R)I{Xv",NzlhCRWQjQ{lvE8eE{+*RIOqm'$-v#wx%D<Έ3 /؆wyn߰̓%ԂjKrȭCwYBZ.,yS6V9%3},H=Ĥ&Z%fF=ƚ BNtbpbJ[Iȼ^ki?2_r`,]eI#1ڬz 9bصi/^36 ՟’;5ˋbK%Ffn-x>W+Rrz ӗ)PnIR`Sj zQ PX'd}F!rpt,Uiz/%J1ZZP,U_W5,1b >]2c-] 0b[\"^3pwr7}`U.¥+]#r: + pO|+EJOYVUj~@. JU"K_-yu/]QY|\_q 닗6 +9? ~ucIʹ?}ŵh >ՇOcWvqeOcocRi{#q;7̎x~LU㶜˙LXp ԟsφޤW _5=X4u*j5OAz5Þ!6q.# ˍ/031tx^>p^1c}S᥵zoHT%զԏ AZ}C;KUc}Wl>x~xO/MV51K|ZOܻGɖ'qxor|W͟OR(īxґs͟8|EYl|k*Oܹi&be0e. !~i^ m's/熮-Ыb/^cGǜ/S֬F$/J3|_-zxKld=Ƀl6$/lm?8- 8|,\C /I3R}yHwЯ0g~.]fAoYwЎt,oY fAoO2<ˡ[aOϰ#3 N2=]|N]EЅ>gA.7}:,#^dHh|ӯ ˩>}[qRϥ<]oOg]E_r7J=̺KU.]v7O_MޟN}O]ܻ>Uw5Ooks>O)wӺnSwՅV7};v\]Q>|R۰s؆gW}FOu B>Ӻ{ +wPY}[OueY3>|'2Ngyw=,]^Av7}mOKn~7c П_S7VwnzX칃i}| ȿ"P9.94У:5Q rsZW1KS$H&3 ˷ }@G!e,)R١r%sK*tIT|R$.&54䆭, 4|,M]ǧQ9^.B_].C&}B́nƟ9jK2ն  D A؛`Q+ Ƭ 0ۑ8OUq_3kA\ bQa,ós j&^Bऀ0f!^a݁<Ɏc Y>Z=.,˨g]B%w& 5SaAw+fqjbo/-Eس]Z\ID׸m-9&dl@ oFд 0{ʺ5+=;}BpR>[<&K,3;ڱleԫ=R{ ]A-XYG.H'`&`b:ktEZچlv@ ++Sy6#azM.+oCFv@yhdn<Ϩfem]4{&_\ 0B:yvcXiqGxDZCTϜ69~.E }xh<{Kle'|e)??a6 -X3ڽ7|\K}wAWX2kAΧd?܏}t:[U"h_Տ٦xG_b}M'V>iKJ;q?5C]Fav>ahxI3Q}uqy?Q 64:/N'tk1_PLqZbp.:?OьmzyHx'1gLJ!6XG~-_>Dȵabz&+?U +O1/CqM{^+)/`b]Ѥq~/꿱ڰ1.% ->+QrGhĬ&K:%Ra·"ֈPz~"ڤ~oU<_5B ˓_q9F̻}2BhS_K8'tv^CXBbV ̕ :q_Fn'jR#/K<&!^Zӟ1 +%*3Af L1 @! 0`1 @`1 ` 1  N(IF-Z,B"P)fL#BeS3^IĔh[*r-R,LY%,y%ѓ.xI1E'э'ѓ+LdRd]waqX,qW  b7 `ɐbJX, Ⱜ X0)& 0dVa`dA @dDe "R\C)\.D +e&'q\40 O0LBdp`55aVn2@+ 0;E.@@=W ! X0Xp쁒˨X ` `p`ȸ] Ʌf  \wNq0 , yf yfDYt+]B5\w*w`˅Xyf`3^qLg `C0f@G0f9p;Ƥ]`WC6@ $i2mMa`ǯV!#лe9uyf`'*<37Jri|_+ʧ3)at&<eNi?6TmNSiK͟a\>tCw'K.`7}]?K<#)<&{ve`7}=5ofoX N|cԤ YT͏PUR>}~}=P^ 3X,Q4yX3wFk w}P\as~Z3 1aO>3>nOom +Lkϫ W2f$ +H˯ac|'ӳSS/ľOv_0^l_Py\>n3{6b~BVIIv2y?6] u=4~@Dfe.t' +3 + П[SN`g9Q2 kIVKe <>^_;oc6wjo09Uvpakh96, .wr^q_Vmu7[t;ߑ;adu\̥آ9~bQ=@VAsm/_Ы=DiLKRI7qn] VVeD92IK{w!u f|2Rd3.r Y]P&_]n&5с4mݯkZx+#ew$ +Q^W2,w"A<ϖ7+0-Յjm90%tRYw +Ai E)}r~T܎{fw}3A%̒([M6 A)6VRd[eCՒSk]A*fSن{YFǙoW]^1 K0I7vԌ Ih2b'(zg^'ͶQϘԽH.s6E!pdI\e(6kԑr4VѢ[4Q˪!$ˈ=(C~A2Л9-JLȕ%$3"JI qUQ](ֱ8?o5s#z1wJ,_r.)Q9]v)-?RGUy snƯGRGVt~ QZ-.I5y=P%a^fϟ9jɢez>僛EI8~2vˣkbL8xN0J-J)KS֮'W"TB,aGxJ<%^t=F[I//wIxZ'\ǯP2앆1,=E% M}/{QA`̾t!9tad}M8OQ2>Z1  `!`  @`0b @JIӍ͔)fc+WCepV8xGs-J=DYK cL0yQu0*-`]_] 9g ,Ts4GLJS1<>eBq&?ˏ/΋cgH.b&xg(*Dk=_?,zQ$f #XlՏmF\/oJ1:K]}eH3˄?D[K Uo tdά{]| ?Q~~O/5EߩMɄXGήT+ܧp%"=Xȗi5Ev*G0zv[ی;GVF^*|!hueǓnz?yw~ so~XUGyչM2/RGz J=9πby416kQyb4'1_zwпkP]_/?pˊJ ǡ~֢1]"1?zПj:*6%l܋ʏXz EWsO"^)K=}㽐]tEw{ᘥ&/؟{ }"z9x/KGuʗ9D3'ϳS ʟw]"*ϣY^ޜ]_c##/ڟK%9nMSD~rR.b'yr#bINayt//ؗ0׺Tmo*?ayɏؿj=a2S~1x\;zЏؿf=/ymu* z}9[7У݋^oIh^iovV)%1)2\Wh<0g>֑  R$Fiu ^y\Ϟ]4綈إ}} _7qw)@AK27yNE4gvY|jWRy6#0\2(PfoK!3~c)Vg0ԹM{.l3.)Wy3=F1+3w awL3f} 3nJa8M"B$ ]Dȹ'̆W a+|!rAM}YUǙ mܮ톽Aow<%Օ6+m+Э b)JJ-v+,IE1ma^ǘ= d&Y+K/2^N>hwv"Vƚb duǘ)E[$V D+f]E |@܎k"J~Uj'+!;͍-w$ w߰fwǛ 1nWH~ú%(CtydXIhyM# ߛv[FBmb bb1 `0( Q"4f;0Sz(6fmW#Aj5Z8[VZͥ]] C3ϧ.]sae{6ˣˠs㍷Bc6Kcbcs)ĺ4Ⱦu>!qtĺL1S%>#MbhĴ(vTR |ȒQ{2 J>|~&]&ȃ~HϥyHbgOxEG Ο46, _ЊwAf]Pl2>GM7:N]}.eME:;}B9Tf\oP/~OFq_6EJw3tg Z"=e.giυ/? OG\Vy+_q>4OC|ؕ2/Sd +ˡEKGʺ ̗xz".?8B3%, >W=_ʾaQ>9(b+E(??c3O<<=3~ҷ7宁.|3_tr};2]]T:4'(ܟSPC䮈~RcEi"jI{q<~}ĸ4rj.~H>#Xa>[J _PV+% ƭ_/fWTJ.x-oAK: ~%^%oBAjONMSGB-K,[ӟrn+ܷ̗s_br_a<2od]CmG"3ۢbF#8r4]Pf]PŎ~6jR~'KNF!4߸Fuk jPbV=_OdC2a}>xHe6RfL0}𐶑^a{ a0{}ns \HCGt.{W&|"WحJY*5Ϳ3|JYyڞ6疃%:ۂ=Ib/ð {]éP;.UGv_oo2;Qm4Az)&zgQwK| #e w^e=LR{b6>)M|+kf'пnޗg|7/-K{_oG:^/'[n "5gy߇t&&_='T~~ɗFEїF{ÿG)`Q/܏G;SBd{a_b'phn'b{GpD_¿t^u^7ːyo¾_rlnΫOyo?p#.JMT<ɭP>T?O?k̯#=^SD/s+ALWFqafv_-RxE5k>ZWۗ+:O_ eo{s UJ_b/ %ػsص1ݗOyH\Oki1>ٮ RfM1yHdS˼/) 1r%\YVfAuԥ9 7Ϧ>s6i N]FcHHa93?d! sk .^3? gX] ez +]tr0oU.c0` ΏQE&#Gg]AJqf]P]0w wAE.;;  $$`  @` 0;.\`  W \!0bv;7 ;܍K0f"Yr '3 . 1,r7%tD@&Ȁ\ \.T; S  +`!\"&"q\.D.+S\W \`0;0X\K@ЍZBMpr`¸]#5vN]}2K40KwJri<<NE=-Ufϟbtk7 ΟDBrY>h~),uNf@O?5>LOEr]X|ԢZ=yV|Ԣ2/g+[J}:YCXUz}:[/5R=JlE'ӏkřYޟOI9a>jS5R[w weޟN}\ٙy~f73e4 Ky2PS .՝rBG>>|WQ/_3y5ZKt7}]OMKgC>0ʼ=tct'7[Ɵ.LyN2Iqo?fu)\asDF^u'ɶ]6)Oy)tr) _l ] U/(XNKWNJ&~MǪxjo_b ̗W0"z9p;|/ 5<";@Os,58;O}Wp:i4I9Fhb̺Yp8}5[_ԲTn| + Y}hղ!@6"IщOtOc ]h Gk2`qQ =𘥽6/bV׷G:lNu73ɷ| "ż%gѢrwBV1.fyv\مG.&`e 3.̺l #BW;JC"RwAt1(_A/D#2%qXeL4D2ZC~lBQcԖ D~E (Ee,dC$*"+]YYs&T<-'WOkZq~ƌee>2.DtFYe>E:vaf^m{rw^r4_6V} s-×P^5 z#SQo7._"'OK:ϻ˾[E?r"Z]yy'1kd -,_oK,[ї؋[җBƣK,/Qo /b.'=W^M'G_kO18>585hYYðޔ~e°ozhxH {ft_)Y{;R^r.U~֛_b7 *=yUK:~ןWʃ/c?Sȋ?ZN%~ןG* K_TYT.%})jOSە2#._ӹq+zR56r ʍo_җ؃V[ӗػ>T,{Q} ҒYwC["D] rfA 'ENN|Z-2baX,\>R6GI}dU䗀ɲy:,&ʳA3@ ʳyR8J搰r$$l9p͖}Bi ! ^wӕD2g)i2dE*3Og_DL.}g~l|/-&ΐy,yHf !rC?_i~#W䇒:]>CB(N:5-fl2I ̏QePwyu|iκ2enBy|k̃22jQ|lyv?6c2ʪOFL/2Feuϐ̆3~"]A gCa|/x(00nS<.\^t·Qt-6ĊTCt,dz: 001\"@+€0C\\p \\`0` Zj\.p . . w \ 4]Em@`+Sa\.Xb\@` ;JqnJr7'\ 0\Hds`a #q`0+0v `.;h Yl 2 lT;w]d +pY KMfbg_Ig*?1Ҝz|c` 00 `  J$}-,`ҢѲe%3]/3ԫK #-5T +|%Ȣܶ79Kb"rȘtQlQLn[ʮu-),2cj%jD [d^2}{]±kEӬ?E.B7%+[ѺXF;Ĝz\X+ǰm0Zl6 v%1LH[eYr]@- "bEv{[XnŶ U[[KrP*مK,U+v.`,[a4]SYhT2*Ⱥ!yp]db23Tо^ޜ~Ɯ + KzqD2#Q1W2>B.L!y| + ?T[/?R<{p߇rA#5F_骾rrybҋ+|Gzj8> .//kG_Kϻ>_d-K{kNɗ[_b T[_cI(N5 g:R[ůa84{aiKzqˇ(Ga~2h^Eܣ_f=[(su}.-} W.դ^m}lĭW,%hN_cQx+̯p-tfa:r[\VQA[ae] ^C>rfXB+ȺGC6[m [{ u*$E.b i~lzrw/TPU#2w 'fe..i9˅̉OO? Yw6k91CCCl6w'_B_|1'2 fOaGa]h +|<0S!0nWǨǪ"(e ˨_ + +`+ +p +p0 @1 @ h1b1X,4Pǖ]]\. .=`X,+(`1 ` ,;.p.;``bDƙ +r A+Jq\.@?,`` C @0C``1 C!8DI)r6R{nm>pHJJ1JtoBw!hMAt<ӆ%'Ԝem 5V)Ukdiz*u-RE38FH3EdbgS]IgEq5gr6 @~f9>w0%gF] #3cYgЏY;C2 [g}̗DUê0eg./Inz} ]7c:QoaU+lE+E\%V{OK~*k,U7?GvȺ,V.t^eY —F/4yzs>3>u)=|BEoCNg32.!IcuWmaƍcm+]mL(RR Y:o@}.,L\ىlkGڪ˓q#oYlqգ3!B۰xP#Q tyV_P~>K?:/?V GU$Suïqv}5u~7ѸuSd= xUbk3ZPjz6C~AǍA楍ï6CnjR%>gX<hGo59oXD~.]'Tj8T彜q1*93[VAcs_n=]S$TTY,ѸdhgȜx6,q4M9êSl6x]uGO8~m;#5Odx&JϔĻ0N2Ԟj\N%ֺa\N^̲.;5}rf'Fa]Ls:5$dXh4M %~dę+By{^X^pQe'gVd%fB(&w"B[P{ҋ5YX_ 1˄a:YXQxɗ=b0g%vr>5~֓ xrMGw Xu=2r^*T=W==e|yYJ.H_@GvxT?Tv&;җe]mc¼ u<-U9}y=ʾŎ;س:2_K^4{Bޜ~ EJ?c_z=/ٟO F{ҏ،w(~>{yp,T6M#Q 8Gr/Y}}6Zjrrҗů2qQތƹ-sk+ ~%F_b/*_bﯵGL,/ ]oNK؃Qo }|)%ط˟kY˓t+X+v]Ѕ\aXC+-2 Ue]"- "d\"- !- .Mːdal3yl2HaXM͒HYZ5XV6C5f!eC)fo"9rϙS/yHe6JuлBtMB$^K.Sl: -_@T2T-˧)ALe6PŖWdSɵmlRn1Kd4͂&! ܷ>.C&U.kkg@>Ϲm6ϵ>|b$[CˏT3-_X)tc^B5D/t3uQ cCyeX1 ޛFC XXhy&ĤdWCajMmQ ,0` ,!;`.0  , ` , V +\.0.q  2P=::   ,!`0!  @ D$i6QF*QJUVU4kI]"ZYXMX~Ry*V,DIB*TМiǡ>㈗DB0_0CrtE)\!Q' OSʉF1Qg1z?ַʾűq?gXZU=5~ƋǠD Z9})i+3!9 j͵N5ftW5Kןg'[V?7%$7I/"Iỏ\ow*zt.czPXyX\ +GDv\K!~ +kfÙck5^kmROg- , ѫ;]632TGT9mrĖ ZَU2GmsV m?mΒz&7IX$t8dÞk`վcy}IE&8uf܌<7ϳ Ͱ6lבVM/l ++ nft6AYنi`)ݷ롦w[نo٦ +웭?੭A8-Fzn +?x*m=ǛA3~Xrf!^ufx~v5[Mc + f__`̪_l"k M+]B̊EܻPf}K$t6Y!tQO~Yͽ?щ(/fBmjh]bGT7}KSmĽcA%ݓ^5'(DkR|uDZ:ÇݝIC9湕Nvt'~߈`3S#")b4wFvCJ-^˖,)N|5/3j+$tNE\E诚J0y]t`mk܏L-3BF ?qᢵSc0eq\:>Ob&7NWuR`_\ k1?qk k{W&/X_OW&uY!˹7 4$UUjҩfNjp,M|"Խqbb ;a~tyw8e(L3u1a.;ip+*Vxa2bTxegVOTgUbOd^\z#~#Swr^>#ԞdNHA+'~Ǟ$a7dP{ˇaЎ4x.Q'DZM$윸:aHEl|sᢛ!<,ަy5 kd +a'R//fg_Fg|hUuLq$?yBOԟ Ye+į7Jw|ԧS3RWt<6#&EѬt?w{j3<Mrj-8upSWDJ5bx*\l1u;&RoKlޓO2\5u~gg>[Jrnqqr.yTt ip:ڭ+swA~4<ӱ̆0iF\/3]ypc Of>/2 Q6!ND]:xKI z[r[ůa:rf'Fޗt- +n̒3:S yC<\Y;l2Wc]ɴ +W]fDĩY]]u 1"6 hJA [%ܝYPԕ[`bM؝  vb`A`' @ .YA>BDX ȯɇBxzOzqe t<-(IJ?cfPj/hKA|$py]sMOaelW/hمGZon7OʥᮕOIf+v5V_? !/U==qzםo+/Vҋ*-{5u_fB\/# -ƣxI`qތױ5{HNҍ>:3[_a8Ircʅ9o!,[ҏq'Xs.Џت\ -%j8y 3ˀaɯrxwӖ^RV=<9g5WqZS(ܼ;]m8p R&n5QOnC&1} B\#3QIj۞ñQތޔƷǵW0\'9/b.kعB'Bq.Wt#v%Q0O(] e "9PbN\! 2SBm&SظMð )&iӔYFMq"p6J0S} 81:l; $'O4z*P2 +Qdn`/.,3]C'*),Ѻ]~XǠC'.}y\*lL{0/2CGy艘6{TOv&]Eb%.8nGx>eIs}5*5R=LL5b>3Œw9ùWQ稷l^d7\W1y\Ʊ^e[.3">hv]i :"JFt.6=Gǩ0Ǩ.R7]G~;;qqz0A1! X`   ,@hd0 ; V6`=BJ΀?*b  @` @0 @,Z,$iBhQs2JMYUK ;yof%R >:$Ŏ8JT_,#BtK"_Atow@.#5Ve5'Jޗ0&%?coK8Y+^oKG* n.'&3A4{I A<ˠf\ɉȺUnQ :HYBēAuԘ X5Lc +Wc 00Q 0fh-2Ș0f{0/A#B t#`q)\d, +{`JBdBfv\.PeA +3ʃ*`̇Sʅtd;.At3&܋Z2aVFYp0Wкd—+t) l!]Ʌ7 쫠\W]rEL+Mgk+Q8>Lf 御+y#/@ F<{V<(uqpQ]. kw#~p$n +\.0%t=D^0'{ +.VG3fPV+da]n,ŨBlv @;,d[,݅b~mvb!.`+(_@+CMo`FQw*| +Vwga4Í?TFr]ݐY.㩇 ,&ȾM;Ɏn\1ZI6i*,s#KO p*nw=U .2*e[gPCTəywO)*[c#Ժ0bt e#wbQ MwGAyQ2|SgFOД26R<}J"|Zoo,}NMI}K A*IG˂[\kי/ބ?ua%6·oI1NONFl)p|+V..<'$NX}woC 1p:92]υ.Bt55ustr8JϩlL >|8U6xb1ZdgmO'2X<[^gnl꨸e+| 1<%GPGXk M߾— ƫ +%yjY pjZ~o#cį5UQXzXcە>כu}Ǜvm_M!W1< qs2.F?bp|GK# j<ʗh[ܮ^½/s 3Qwۃ/Poᜑ\7UYlcqjko3?T_-E(ĭ[aqς⿗rp\w#X2v:Go0qxG-OA+-I{\./x_{b^Ш]9.LM僡-j8 Gx,KaeoHqُO2\^HqrqBǥUgʫ娟tQWc/,|H֤j5ʰXKbK[ї2X,-U9/b.Z5 +l+}]Юb̡er "|maMt),2by}EɈQ1yOx !}# Y>Fmf+iDr!ڣ+;ۛ-Н42mU>Lj<˔ī_4J5A] b O ̮κ7s; !ahO<6(Jzz8,xDgRWrgn7I%+<=,F2245^#V̷t \|MHVcz.ʈ*TF%T +qcAGˈ(DN)y+л@rriXe\2,9PN3Fgy6jмйN]\n_宂tA]kX ҶâMVLwMcoxj#jKfD̟MIʜ*\[v3Ϡn CUbL.ZHc΂ wd]AKWP @b4 +  ;+0@1`P0` {0 0e0 @ 0b C(`C *En9t^$)hk#JZ( +MDKb|YlYDn[ h /}H5.Ѝ̴4A4&e|L+DiSPʊ!"H`MaEq-~ +$'blBè??(7o-skN]}.Y +?>9Tf\ܴ6'(f`} ɧ2 Sd_P].h3r)>tB˔C̻~σ[4>\Yt3<./7/qK=6>^]1Kl_3~|1+LVꚋ> Nu9}ڢZKT_$EЦ~gKg0=_s~j?gGA=Cӏ؋{ҏ؟Gsg0w$KacϵSl~Wrɮ+OZO..':b[dXOD㉧Rš0a|y\=G̋ +Q|h= + Y ˏ!:h} +$E̴ZWykff~d\<~R +<&#tBu)=nX'Fq^L;a~ '|dGDgðR,ه%ip|4[XkYrL` ;_*7R`Õ?{d^yx^V;ds_H^[ +R=+:<&[oFV)V;]=_?Mu!Tj/ +),gd{\wRlK{xw^'bkq/sklj&gJw[̗L()"'J/1w'WSރvW,v>;>C"=78b}m?G2)/!~l<B\? - yxXd.3M[\-GA<_Hԧ/#5/d8[QMy[O }bx*/7LjaIc0IOW$P!BM炅沪eɩS|ܜ!kU? V_-w1<yɆܧ1jIqq>י +c1Vk܌O#3OC}js`' 煲KP_1?,f5o3<=|:rU*-x3ȷq9QhⴟNHz77F8,3I{X3r՛3QX/j3˟FZ3dTA5ܛ+sʯѠM3۾r Wrz-v^\N#^0!aX,2; "̡yk-tEBteB(teӕWл<2ioJ?bplGN³7׏-n"| +E'ɣg,WhSܯ +5ZKøL| =Bw +z/تX Dw?r $_Ҿ㎟0qx/Jkx}у58cqǘj8G2\? -U>R7u=5KeacO%Z)0i4n89j8P5T7S騍>["=`ݗ+1Q&n5Q_n=J\7W.dn5+>ZZa,`zR^r8nk|)[c\)rS,sB˕*'Ir.Xd)EZ2hI^K;,4ԋ]1:mu6NelȺ&;˸K5y}#)T)˩5QDqhuAb{13eY%V,`ZُC2L3403CUeaw񔪯%Ut" U"IN=A820dA2` ! ,l*MvѤ,\e,v .-5/Q *N[6yΒݚ]8D|>ԬGr_,WAy+lؓ؋t1cXВ ^HfhUREJq<˨eQ>nyl<ɮ1AcLĜls>vU±bIb`LK[pXbaԚbMНXJ5R=CY;0fCE+ø\@ŧ@q쁔n0  b pP1`1 0b@&` 1 P @1 D 4TTFf:tfUU&i5qb#H,RU*] +( T +EF J.%E.L1/x2 +18-kx,X1+ĖW@mU#[#S<=T ZEdmC%Nwz9*ƕ^Nt]HsS & 0$:Z/F＀'сWjp6uaVc]p67݅S*AɁc7I~!P,C5.yz/; 7}A]m6%' s KVr*kA2$<˨Ջܯ_J}3F}p- m_3[0,mtq``J!f]C?ӏ4wчnD.'5#Z/qyF!KB\; cO9]}c ?!.t3t/OBGj2o;OGb/$z(j/(o!} -*\:/2^ms/F%=5D (ү/05:L"/ O&fx(ǚ=S-3+yۅ(?\.1<ct:Ip3sߺ ڢ`<*DMtdk7&`B<!}+fx{]&63ȿ]'F#oFuV_ZL.`_fHdC!yBm) y1*fC&,q̇qicPp3"`W ; \.DW]F ] -Ȏ0%a؍V _[b+vAnȍC,].e ;ɄrRWL"aedq8'~b»0,  "V{ E'Ʉ@ X@2a]řc&q؛ 1 G+H- #j=z5%p j[v +"JX6Q{1[ "=z={r'~t3 2O(d%u]*; #=yvDЛKů@#AmR+. ^_ 5\ jRfW `f #vp` ztz &I.1cR."5>`Rn5#m\BStj8OiĪiqGd#d㍼w9pGSxf㏷N\=x7>na7N[,\Ծ"h`]nnJ:V2,U"2|v .wK "腕tDy1E^KyuVfϪ +F'QnlW.8X,Z1t .%R=$Ah;ada( P #i fy{E//ؘD\z0fcNz"ax[p&e-颹p37{؛+\p|3,U.Atu3:Te×=SЧ2F%RG^'|ڋ=Qd] X$̪\~5|B"O 7QmRH?wKJ=ܰЊ倢9 oms%`1_ϓ pjOfx[1a?;W. SeO>Sc_mb梃Ӵ_/%!.Ymfsy &PxoN_c.Z?ӹT|obtqޭosyѵ5^` +偤KOCGa'eD'ðv#.{FvWn\4j6\.+U6w6$)zdV_q<%|9untnn1/6)<|__au3v ݎT0XbZDɺlGVKÿbK;|T$NMçq./Jk؜xɷˡq1xgX8<|QNKxG+>, |+ KzKn8<QX9M/B -׹tڎ&6cH~_^n8݂v~YS?㲋:G=׬ΔF2;oЦ\??ԬkYbН$j~jR^r5M %C(ŭW?'I4,2b|/-, ddf/.= k- u4h^Pm2KyEFLZ쒯Nb.DC6 hUbMu3dhV-d$?6i/2eUIb: ̆*U$Gkt&S;.Lv"ðlWBV N +'I: xeaXgd2<0 m ./Ⱥ XQwJrZ,GA=ˋ73s>%˹9RĪJ?P%d^#0KR3Ib2O +xa1 ,_TIbC.H5ȸwCdq1{U B&^mæek$%6\w0*sdYլwn%|':ȱi&,R@2!1 b0(@1@0 @ 'i3$A1ýNWOԶ1{2,,)-/`ht tnABl_ PbB2®\4Leܲ3rEJ5+yR9#}k!尔P%M'kff௰yk4) ʏ4ӏC;{/ȁ҃P SkRzu=/ʃȧг:\_hWL? 噓rC O,n܅väbwbo K+MKKOHNW +C$\&,Q]ay$Y Z[s#y.UAd˩,It݄4[bq'p H3K/-{3>l3w'<,;4ZBː ~D rj>@I%m[k^\ޗdq[ahfKdAي f?r9k]Ө0VJ/%Ԓ䅝 $fA=B|n]Kj1Xa" 獹kb0(;uYBlCe]n\z\O:؍\`OɏAqD>!ۮ+|/LF֙I:p{K͒Py?pEŎ2Mj6G,ʊ©=oAmfts.[˃igQt "tτOȾYm#gՍCO In\7W#./M]/b6%MΐG3(otqޛ"Q|В=/}%=fx:2^fʼnI?a<.3<^ckDxw"Q{SF~9yv M7fx+x^cu#˃S+*>C4ITlK5VU^LeS0sKuvWbxkDž +/]_fgB|*U;wx?Ҵx]wpZ Irfyr1 >c;$Z6+>Bq)Y\d -Bfd¤  5Ԉ!?sp 34fdrIAuԍaR+`M y0$f'0' ^-abK2aO*PuIt aluCB|B ˋ.I˄[4w9 >|euȮX +Md $m{#t/-,5U7 cq/&3%mi|؃{ԯ1x:2XR˄{+炴vCυГ+և&ʧ3i]S'!. 9}K.[eobgGZu^m*A5z'GenhbkbKj87qgjkb6WQq~k[ѹyz/iFf+'@ޥ6zFX<4&ieΏ /RQY?{ðW؃4JUnja[Zac%MmR?s.~3U)/FMSwHtO⠾=8n!ɯNZuωw[]w q,zފe梽{Re.4-\j #3KuC +kbK6ȿ0u w1Éaf+Z~&.GΦ~䔢(ecMr$A 00"!dD -i,VEU.з+:Fy]øilg{ƣ=Pn8X2^fJD9[8XLqk^*|?r\uad]8ŞxD>j3^NH /c~T^De:G&| ncOQآx%t:aa2^ǯpkrjjI#ҟ-GWp]hľtQSxLN&^W@.;A2p\wΑI-F%tt)`qތޜetYMIױMt5ecͮ6A#[2.If%Ԓ$\辄'йPJ*̇ \o.UƫE%VfUHcROҸ$L559.dY 5͆(U2J0ZhU#ԍD@%(hzu +0Y 49PeCbpAdBJ(~Rd^2ጦؖWD^̳:Uɐxvtl,n'Bw.H<:9@Ⱥrr!=̀` b0P  C@  ,Mb\ꎖV98yZЫWRC]:lsՇSe)ǩ3Wغ\D, K8B b ǩt*G2(ERuF&tc%صJ=Nj̖%5C#R+drR屫6vqwN9Vi|5U忘o9'ʼԟ&}+ls-d?hEI +띌kI_+ 7f\s+]KQ5~LWeX~gi@jWV3y1 VO ݁{M T.IDT_%gC,A-G`YA;DFĕN4A,B i4ww mwq>VA~P],$ap +`r.`DCˏAq䉡EF}H8=u'pEY:Tk<* X!er +R.HGMe]B(T_9T{e]C'r@%-2t/qgՅQ^J|.ŕ^^ȯXYAYr8,hV +~cr7 ]A; QYu +wDr?P Y{2W@>qmlő[&@Ew 9#ZN=UiїK 4@ϜBvD[ `U]E\y0.o_sykf]:,t!y ,w<捹}IS[5bp$7ûRۘ6+oM&*ah*nc,L )ĮT?鯰%ț`FXjk'ýe2.O+ +Qe8rfxm9|&)"bV~sG@Vk^~XzſB/ YNGJ+M=Ǖ#?N^m%?*ucd]F1<Nd˅Np`QG=#m}ԙs.4[6>R3z^d3][qr{GuDԏ |<5h R;_c3x𻠮#y_X_v3'&2"l;w \bW"B7 Lq_Ʌ;>HH5 v'Ǡ.J!h)KoM!6{Z^@ Fv4 i\ Zd=904 ۗ!{1e{\y̻K;_P/wϳVLqUP] F㴦!cj80.n8Haҏ|˺ q6C(X?38kԒә8Dû'NȲ-|ɓXFDL5hQL_2j_2ZV~dJ4`̂E`gVRV Bӿ q"'YKrWΏ2̑|ˏ$UHd4GB?|V(tfWUC2~muFo%-ARTICJJH*zM$)i,I)0ŽbmȦ hm\:U.A"tӬ\ː5脸$9M3:efW.Yl謇ӟ 1.+REcZryWFAkxHBZ8&r/+wO{X +Rޚ) +/9=J^v{`ղ. Ir#s/IE0 5-bx=H^e\ÿu%1r`q11<6.깓%W>BKc)}[ӗ/V/-".U䞱7Tg:tq%}*/5Ҭs2!z8$N8X|=eϼF> +ok㣵 (5vՏ-oyyxf9/rxa}5 Woo)? _-UgTvqt ;Vk<1M2T7/cZpOt scQ*%ꏣ0{>B.c+ K1#Cʷ{,#g3nΑiD~)=IKߖ46\YSd1Q&t'J{IW2ᘘe:ƥ'[e#,%Ha%VrfKq =QG7<|ϥ4#Eh I/5A.^dRǖ5]&%֬XbBJj/YNñR,h#[X,5gv +Dc[5 b C C0P  Ilj5̲$b'}<}X6s%ZZˡq 8ɓL8!n-}2jArp EeIR2P#x"ILb ?P/0ULJR6pߡ8#w<`R`QX9;/\c/w~cKF2TxR?r_÷ϚyS>!sexɬUxϗ<&d'G?,y?|8L~Z.+ե&St@kz8划Xy1},me=߹!DZl|IԘ=Z U*UMJ)nj^(s&S_LpTsq/xCUWl|AF\癇F&dF_~nRGl|W#_7"^eXL`}Sog&b*+Iu~)x-N>!|ClV9|>_H_}Ʊb%k-HNi R;Sm SMhP7~* s+L^L6A?5uG/˟&5 O7FKURv"]?SS\K5W6_:JU[lS?q#tL@tԃ1Ύ5=XsL }31e7͍b`babUmmtJ#[Ubԙ+ +wM>"J~[!܊m 3vb,&C^n*dyn̺)R\jG092z5Я6 op˦yцw{VcG?pSJ}1f,y6bzV2bM-FjuzVHDYh~ZN`!l +V,@4IFA5I + 7`ؒ}݀Y݁+$ ʀw@ Dy@zv {'q8>$ 2sLɇBJ: QݠGI +݁&/®LI5=4»nGsƗ6 +}Q<%WFS}@J_>%+ɈNp6՝15 âUhaq: +Hsk;G$7Q_a:TP+ۘI_( jm\5Y㗐-6_]87G&WP+tވɓB(? GoSQ>D/ˇa-KBnKG#f迖s_ON5"R|.eΟ&W.5tfswKU~RLObNe.wϾ_8)鹙 [d*zr=2z਼yVM{ҧ'W؋{?clj^dpΏHTZ+ ÷炟 p3>A#.KhW^d9;:Ot*s^ƙp+|3 +a*?C~] J$bt/wb.ee H}򬻡f,V5Xjas ] +I/e+PLE4 -3Es8 dnw]GY>`+Av5L +p b AjD#I]CLɅmv[.L+*]Kl%n0˷0r!–ص/DZ*נX,ZQ卶)2!8GpEpQE%0QXFB 7v+va-=y6n\oͅ0%uwG0l`K@r6c O.#eVO**VOߥ0&aZR} ̶L.14R1.cWVhB2}DyD=zYnٙ?rNiإLdb7a0%@it!vv{qB3v è5 ,R]c;G8tc!Zhyܯ+ >fBWtB`Z\~d6Uw<3'UU.+ƣZSl6!YsD=jǔxÉi{αjBr܏Y#̎mugG tEB_Re:WM4],4ZЃ]n\G٦Y m%dW;_En50%d誰R&h쮒q |2Wb,rcVVFs_˹e> {2ÈR4X^}+XOL^JoL ۸܎hK ,GK\eN|$QN-jP( oDޚ6]s J.B_B+K!ؓYf\ip*Okp;|gwF'Bs/=. Um"pDvCswǭqA:q|x*J%]9M5ɞѦֱ_ba(x/x+͗ #ˇЖES4)'Ĭjڟ]%< Շ5$ǕX.Yl)/C#$EЃ)^w Qo1: %ix"M)ktHb ˄E;f:by+Iۋ^l\w/3PÃq +ka*khXSxcS>1@p{ F[CO5?S5Q2KԺr5ctvzʌ_M(a6ҟfi,İ9r^Rm1+l3-/lj$rg!>KINkncYS+zLxϠ[llW͙q DWѷ\íd;#Q1njR #e<"/ZR V?4Z>,-)oN/خ|?%(c/2_1tVGjp|4 uӞxu͒U{Zxzzcџ-F*\*{-&fTϕ"aUIU:tQ)ϗH⽾X|  @   @PC @@ b@4АDI$M2i+LɭJ4&+I4ID$!A\.Fp%v" +6ȀY'b"`R!p*6+DKj6$%ܛ b-x}5Xs檽E8+j^bM%$GSXZV&5m^_rlGU&:ROt|C*|B2aVEYQm@e0Dy] $7Te n0ŽвF@]e,=*WD[:craV^ E;bd}FDYiъeŘ@"ˉ$Ϩj1K]FDl;Ǚ+GZ7FDoV"YW("d$+,`+.adRyQ˘ Ys+imynP>M 6`>J|E: ࢹ[SE,RvtV2jL ^ [ V`Ƶ +JN܆@cAE+}Dʉ) H1":u,݆s"hwiWwiQde.ZieԼvV"KU;l!FyM}TY%Qn~tII3V<ʺKK,ɿpt?Vxz8gKy>Fa9P1R'm7qJ]F%#=*ȚS|2sd"kfΑ4 ʗUd2u2 +8)N\p8⋝αiOvK*zhBXJr}zMqh}9e'bD ccͣqziLJueU8|ySf`k sF[TKK͑XZ'sE\,c{9|DUۻuOUI|7\XhXZrx(h\q]V*ݽJl +e@mX/ib79(BV(fَ8U5q1)ܰ?Sf!4߻&WtCFJ-v%|UkI=*ѢYAPbwh"ȕ >,rKF=</ @,Q[PB6\F&f.F_M=u!FgFs.$4~4W.Q|G"CswK˅W[;"?KgtCsyw [U!=SUdķLY=DESQB9OW󹻆dU)mem5r :py}2eOW[;x^d11:qkdjį1+l<.x]AáѬ#ktNwC,RW7] Is% Ex*vʵ;y]VW>*{XvyyUIBQ>ѷ"Bt|ӵrQ㸔BX:2R9S9;J_<%c\}_ Փ:3sdqL<#f|1(傄bp]9f["$^9GcBr˹N=\:'Ok /jG +D{~*?׉6Wv>y2Q(ޓHڗrYRl/LjॵX#~̼~g%ӗl0mq~`GaK]-kI{`+w&J:H8:+J̺"Gz%^4͍BK)x l'b-TKGf>.:K[C$z,ՒVCxglh(&xkw&Ux'ozFT[l=Xq7/LHر݉,r4dl+fTԱ&5_321zmkmXN5Tm:t5?CWM{fr׽]s`u3}bUKwjtc'o6X`kd㢝$kE NdI@]h_2Rh Dde?p̒)i@܎[-w V\JR +K'؋<ˠEjNHjlǠh[fW Ϡ6 ħ3p.h ^VG*dTFISV<%PyBf]F 'bjA Q!&Qר"ZB**LwV Y@;1h +^b!۱< v[[u U˕60evХ&;u2Jۏ;& +UF.5 ĢuqR*PbYՒRRBWWؒ3& Ў^ŗB̆d§p}Ko/ػ–ũ}ē5n,`jRz"92J=XK*ˠ6ZuSCO;w |~&E`Wd@j>C*Ypؚ6;GSdn_ *R~8ȍﰬ.yQV\'by?2RR'K/AF<(\/ehiq]I>WV"ܔWpэ. z\lY vvlY{|FƲNr@EB%=F2$J,Oԭ͐W'qbUl8fdi#fj;Jb\ƸU#\7n8X!=);hP&>S'km<|ЗԆїk(8;NŋAJOra^&Nk˔ՍyUu4G+̭Sq O%#@CgLjS;J[HTH X5hz44Yr .ȻQ۰v &MGA RX[r fA_ Om0)cQ aa'//6, 9o!.A6ft> ˓.C =$ga؍ +z\ˋ.2LA#sbḈЯOxzPKNc\<eNLLL\}hB1<<xӪMIKt9-s^g$;J(G) +Ǜ|琟r1?eÑu,ԗgr+9OxsEFpDy\֋,<6xXeXJOx/J*5ʅUY&bt fe[|95I:9_,R Z snaXś[+_$"o0t1'Ft7WL˙-+Tf٦ᨷD^yss(GRUIM4B\:Є\^fqn֌+Ο4skFMx D_Vd{Ju3v )jcuqprI@ bC`! C0`01 H$h$D IH$&I0$$2*D +ð\WWB(vAr! ,H\_A=W%Y@O@h\` (mkru. @4 z݂`X {k"J䮓\/aRݴD@w B +W0Fp2: !X@-y P$2WpC\W IH.+`% 0O0v#`G@ f IX,\/܍Yfg3>Moag%rJr.U|qu%/1T֕d`F QGĘմ8_28ջLOŘ3y Sr_<4CŴԉ)l{ ,0s菟6WTK~ad>6MW&2|1xv^ijҒѭO^?-I}cqqڬ +RIj?&}ϛNjէ'7&6=uoK򹪟q kbl9%[<<_+|Qu?zJ =5j8B^*7cM?a'M:ѝDgbKUm&L)~)j5,]k6vV&_0.t/J+v(K(ʛVͧb 7{DmS(!obtRVRMchKT4btt͐pVwix{I. Ei%qe۷a#0:{w9Fktv L.2T4]CIY@yCBNIU4$,3y~`rK|@^FPOaw! y[@emE1%NM'P,gIKE{7y;nC+0ih**GR\Ƥ"YC'[v}!rWAtXj)N/ uD !a't D2/b462*-yD,M|] Fw sjYuCQWdy"콂݉›$Ֆ5؋r`'c(Gj6&; VEG~D^UD&.WkSQ08&,VyQ)%rd*O1 o!+RrLb<݆dFD)Y̲5ꭤʖԎm+.lF^3V<4ZR\#ާ\]ݞT;qR{E+ +sgZס=IUdM%3||T9?ōJr^daNG-cfDilt3J|Ϊok+9/_;#ӟ&waOR:Z#ϼRm;Q܎I)zR-]I|磌dx?FD?yԊehùjr4ETZWPYQYq_4=ڄ '~vlgN3oMk6?/5V2Qk X KPrYGbYC*@EQ,uE%aXȰc&t N[5c3X}"p/ѰeFgJs.LE.L2gg* s. =EȪ\2vGprN|5= P0lZqX,@XjjHYj@1j=@.\qXv /ܖvP\,(qe ;` 0C ZȂl'd+ +vk,C!X,Yܡyz7Xn`# w,݂}@wŨ+DX3^.TBz-B:l.+`+D +LWf`"ԒyԨwY w{5gqݕp-zE9 +M JW_e8V_s`\u!pZTl"i\C.l}"I]ԉu>=aoS鵰)Is6ӣ=?baY8⫧I}:>4Z[8ՠx*;Uܺg lWҔ赣jOxr^%Gw&!-3+vCtO5hZjl-y1w*30ekqf}^Vw̘27T=pe5.!X< *Zw |I2uC刓}FeBAt$FdIeїt(ϠKePn0b݃5 a-~RL*Y ]Z>߰YE]P2aZLj@+u%2`hA--ؓhY@OIߘ[*/Y e\HvȮZ!ˡeiԙRBZt'nv "_Yd“d%p} 5qۥ~ģ-6&%BJ:ً/rt2!rC"y [nn0Ϡ[c( ,NYM'aW`O+BG+$D"d͎;>*V5{s (z NRmjJˠY.E̚rQ&ȴQj"f  +=,ƹқa)e +2.L^'V<f"iwcʙ8X. c]$Ic̻% +o>GQ9p&Քd4.5(o9}rMlαS:khŔkoD5FiY;c4]6dxֱYٔX;^?JY9{>9!{4xY9N_cqzs6=q%)O(h#_N|{ y^&G)Wmlg:Ii4ˡhi&]1-He kBX,V̖uԢi>b)ߝ$Dŗ7AO'p%R@Q;%`p#`!; AX, ,+v CP d]3;`!! C C0 b C!!`$4$Q}$5В*$%!2J !2J$M!1$ +#a}X2FbV  +ć,$ e!bV!`1>@Xa`0[v Ap@0.@ | 0, XWapЍ@; a\w YY렬;.=4r :znn;+!XW 솒#p4F@ЍJtFdtDNu + 4 +wR,- 0Ј;M{Qmۏ[]2*մĈϨknC9+RO6݀ u" , ۛ!pS%Qà2V'exR_s70tilT٪1PsC\|KVjCL!q2KQZed[HN;ܘ/]QhK4{&mN/"qFV+.Mej~!OE^(Oa租O|}Xyscd#=S&x~U)ϕ*IWOMfWXSeeՒ-ŭ6SSk&+FO3p8ZOOĸ}W',} Ӄw؝-ǃqIremt${EoIG>|mY6IYqkS VKC^J^VկQL:u^2O~Xx?Df]AIugi.* vVǙ$m8E~3ؘ ȇB +|5$jM(\7/'ft=s.{4^DSl<>]˂S+ٝfIҟ =.Yl\v!}=+[\si/21,u6FXjz׵ĠS}=6^^P/EUA#,os-s^W2[鞖\2TUQ9Oį6~wGf|&&TB#6`өЗ Y\eu<x^d2Y1e] ׎Xzg9#.Ve$U[Ai-YҴx]J!妇 ˘Gʺ#e]tU䵳2˰\u:m=ᡙEkF *γ[)K^.@ qy˩lFM6ɍD\U$!yQNB5_^J< " +?)D1Vf\XPZ-whm22V{j'5X\נ4:%p^}vDtO(؊헨 0}aL"H~Cq3.|[$m-, +Y!.d[ >'2HV ++Y`q"z] ӠM5t vE+ۘ9rXVA_P&2}Gu̘2.2~HBf"QeAw:Yz"WCWyY+dX;h&3&,Yca.¬^eaRK}ɻ]6BRoLSHGomqD&U DPC2LLf wNIsu i_ tʃ*Nѧ2yDɅRnHO FƢ$yIz ۛs~[LC T'45+7ּw./+^bT?&5mMl_1\Q-@Yn z 0\?a\wXb  01`!R ! @E7DKnTt0)]#C AG2:4$t(+ޚ5Ca%4cRKcm*H"s5$4Ny5ROh /:PJG!FVDe~z8Gi:V$e \W[ e7R[ߡ #pR{O_\@=_ρcP>|Rzї؄}xN_cjL_y4N/أU} 9[ЇHK^) ?ȼ<.xjo،6//t>>åN;S> 'kᘏ!, hNK, Y*' kxEkꕷcqӅlEX/`!ӫ%ͻ'ĢC^eY:NqvvG(YBF'`X,H,lԐjm Aa +0 J:+ + %mBځ , `#5X{ @;` \` [@a, wBЬ@z z 0%`# J%`Gwp» M aA߱ \] :MnӿA7pZwpjWa0OP`L\Z40N;7 +>{C߰\W t 4W V wAt-+סr %~E+ 0v + pf}`K7pREn0aAhwԯd\./.U-㌮%f -8Zrql6/̻val~Q&!rTSOY}?m~ CŔ^|)$"ܾ32jE-U*{fTXdG羱gjx{Toԛj՜b>ycbxX#M-#؛T^%$M=|Sz^/^ǚ#BVvQ&K Ǐ+9ycl58u%[ VoJLHԪj$7iDjQpMʒ\~XU~I*WKZy$'t]4,cKVCFd%b#BMVI?DRmXoˌgmF0:t4/3_K*6ӘX=IU'-#gnX9+YMߨdd9%6ZtL7EkjodgW]*lɊ1FE +NIϩmQcNRݢ +nJTZrwaQY.5Yb:kbԛSn0tZ eF؏Q"UXnpvW>u(IOTœ=SѿUJNG$*In[Nt18>Qڶ +jf¼Ծ{tqg _!)7+7Wܖ_0ɮz kfԭR^N +o%Xͣ3R`h{JKCm //9GŖi56'+\ d\l06'kyIߢBUj_U+mh8?I34!,)?夊 +/*v1:T `|&L?ҩԌݓ bx}9ƗdvUZ'stw}F C=9]m׆=B!q{^eFp ޢ=|S_`-&}OQy1ݞF<=g~EQB1?%ynr +{ԾATN9Opw=T,_~:Xqҗ˄_*85!˟ 'YL<.xk|#;*zdmU=`ϑx ^~dV ˱fǙsL /Ǖ%1:#:]dNnN9Ur]A['+sc5 W1r=ƽA&ϡ .lpʥ^·a7cJ|FR-8~[CELq6DRQQ3i}Z Zm9" Z PF2/fL!L++-QaS<2(ܘU<_@sn=4z:^dƵؗ\JQ$ő+Cjb@eQQ{5a܀] +m=3>c%`~kK7( 9 |rkRQmv1|rDn%I4ҍEU'U͏ĵyR_M) 6YD;u#-Q0+ =L*pT,s/QL2ǠaOh_+Yt( л+W >龨nL*ىMM~dk0`?-.cʺ"_p5Ֆ;lF'4<\iyo0EdK# IU$lnIR(" U@ԥH6_&ebǛ$0R(S gb)>S.kD#'8|qUƹSLøySOQ?kGDMUdk53ORQ3\Z:Te3 +zM=:G_)%\NKd8Z-s~KV;ʇjRˣ)g(Y a裍`g?ԔjT[I 򟕀b0`2b b!@1 MQD x{\#^;ht(ñ OT:P5= =(it`!hG[w5"ɬ"<]KuM +2_`gv!^7D.ߡ(OYV%Tzh +RzSM$PI(8B֓g)$3%+-$n@m|Biw&XiE& c+.)+}#RzrdգmI5%űSwu: ;E$ݔ"ȟĻ\gdw8Y۽fIUQhنWGQJMb|23 ck%u'~u\Ȩ>[,\FV&ʋN'S3.$?T<5a* -eBbKM(c(fO%8 E$ Pr׸ixcI/+~H)fM5~IJy<Լ!kJ)3@!/U/UoSdែq XH3e@>{?b{Z^zGj.GҲOLqbt$Z°u>jxwTZѷ+d ht+_%W/ `ʤ!8>*x? Ig]{<Bo?[V3|XW%ˮ)46A\ Z)b0>Zi>G[Ir-{d^%lKJxqm4Sn>?4FJ3RxVҢrl7KO<6I9Iltw|wՙ)xI]VHoK1"M$tQq %McRܿΣ%u(rbE6VKy;9KG#_C-,7kak\ť>ZgZء`~\>/܃LqlqT$VrK5P:t1|xY^WY5Xr*uckJO$R:)K+c&wO-q*e\ɮ#5$K^FQI7Y#MoH m9k5΀Mm=QZj%^4P̃ZS[(wJktƛ2 SP澄& +IK$q]w[ Yȁ+m=1X 7E >VR2'2V^=@PQQ@ +oW C%Eŵȋb%Yأ=K -ws"-u=@FˤGK $;.UMl:NQ Ž[j+Cb* (G>H=5+mY%AcNCˌw5Z\_Bb[p5*rQ%͗(ՃJZV5'u}@^f%ɖԓM92.65)Am5vMV+{Z#vN.T0,K*3hFM7 $o'7&?K N_4WnQ\4%\N:CѤ̹96U. GaJ//<.]K"pzfz++<]yipd?w׎gj/8'>W/$b5Z=kDMrjV}TtZ}#l1nz9pebpz|8jGeXpHiyp_"pzigՏ F\ᕣRb#3ᨼ3VE ]o'FNvektbkh\At 3bKPn` ]A?AeltpC+V1W .K7`+H`Z A^r`ȵa!:e.]a) EYjE۸)QeԽ+wfri1ai=ѥ$;"0+r$nT +)ɅZnEbPS} )^[˘:jh^[,$"NJp_]צKRB*MG+,Bw i0,CI$mFPԊvaef`ZbW&)_fBpG@Cycmhn& h_ +WcT_( S\uB D ]^IsH^\"쫫 Es+P䇗&V+c2a %eюAǻ!*1{[t$Pde 6Ɠ]ҘsjNjYi\W7][BaÖ+vע#8)eoQoU:ƷÉRJkY㏝(F5Kk^I3_NcuOz)d屛ʄŧM1N˺]|JYbiG4_I3<=gTt+ Mx|ҕTxݜ燘-n?n0b @1 !(b @1 ! @ Xv)},|m.k'tńz\}x(+xU2qΏs6R>g#"R& +[ix͓Sc|_-EÈa%XϗF̶涛^㡇ሣ-hZI2?s1V[U,XBڬ㡇աV-ş*ŭȺ._0tWogvg m"l0W#JZߡdH nrVwv} /WhݕXT~S +}'Q~ctP|܀~t'YTWVW@[ʪ7Sө8q +.fyR]+7 +6%UjgG^ +uwu_*c>'#h-@~>4%8Kv]KFYں<-_?2wVZ`zIgJqmGԊy_/k&N8;uSuG}W( %q8#%>!D"ޫCAb&~de U֒DIM{.I7Pqخxz3EP>φ*uEgGFPof^ƫSY} +'>-<@<Լ{V߂ڴWY6Y?Rx/op~?:oܪ~C[ϡe2Z-O}J/2> oOV\}TZ23uUk|bO._-x=Nx/`x{ + S]|+E&^k([ܟxuxy{?\W/5<<_؃.tVMpس# W`'@XK(X,l na +6,HVX,l%`mXV+B%dQZ+Xv`+ ohl1[AX\V `D5$+4 &r\.kpc t @4 aX,X=p +aM1ƀc(91lvcGQt`@>!%p '5/V@D J*rt$֚@07 g`/a4r!ـd{ C6LZȶR\N/܈5-4c$^pj^|̞2Xn/(0ZU8h.!J^ƚ~5į G0]Biw?;gBb K)|ͯS]/`')5.a|o?|8-Hs㑭8kܲZ^a8ץ-䟹bt۽>/^sUcr+l۽ȭL?q~Whlbœ#~R{^^7⢷I{ixId\+xDk^R>&UM:_VvݕK R +|_ +eiq|xmVܘg}]PVWwh U9}IU>Hu燶܊S.[e] CR6vrĶ+ŶuOUd//sS|ԺX~k@]]vCnYcy$cIZ'YRVA2kI+Պe.XmzM7[QPV VJ5 ֋Bjj%9Tҵ6nH} &樝 SfܬUnrV]fV[R]jVKdGʛ4!{n?[8I& I cet6 &PQXA$->DejԇBei[[o]WܠvK4yvInK-e"Iz[@Aũ7(-1[ t]ܳ# +r9[v n ]uWٱ:lXV܋˝*"-zWe}bZ [`ndInRX>@Tw,PDIB+ATM_cMQg{$AJ'/.|.9O^jؿ#"2Q"іT5nmkVT?;FEJ= '$ն 9خSjExTB˚!ꥻ&8HS{NohlW<%'"`(?ڳ=${\pOebp÷; N9t8rdU.Ylz+!qJ|/2.}x\գYgM茯 ZR$;OQ/:Mo%}fZT_Ў3񞥮s}nG/M~2%y:$vl|!,oՏ F9C7O[+^?E=MX-ƥY凪D&3;[iO5Ʌ /1!Ya۰KzX2a]ݲIؕY!fLĕH0e-:!iV2vL2e}ŕV y{M/}ɉ^yaEG+,\fEV<0e&!dekaU4;v. +^vD7BaB6ksZaY7afg]`؊.-9N ɅN.\WHMLd<Ș2wbJO%.zN^ӠRV} e. iN_]>@{2aW,/`k|rk`j5kYt=D\wl ~Xo`0 0 C1   L)0b0 $"Ib$&IXŕ"ilY5"ƥ`4&M32ؚ'ܢ5'.O%WzLc+\yAX ݆b0fpBf}F%EV$ɬv!mZ~pRE'Ƹ)mZs&L08UE0\*.qiRlW #REB~4_U#ic#GTM~.G.Gңrk\:[TZ3OtNGJkpG| 'T,5Oljb/dx6?א0G8eϞÏcW[.1q Bx)'{cįb1< =>]甇'.aH`ѺOxYRaڜfs"ַb-)it];BkY0ْ^20I١&y 2ʹ' VIz2^e7@7xNI=.rIj:ˣ)(Yjyq,MDNϠ匨.'t.נ>jnģ*[B[J vLj%+4l;n-`:BYhIcDUpkzێ*XSkG2d+uC/Ԣkp\%MIk{,p&ei2pֻNO~`vlN\q'|&AȌ1[*Ģޱb !M,u +rB$kdF$DY=)nPX +FZ;.Qgq8 (YPyt A 9zӐ7 S\O栽p/4W/ +pz@yzI|5,Q?׍Cȗ0<5_N1'xCHdWWɁ9W-:;ѓ>q`elZ')qޔױ?b^ӗO 5{ Fb`΋[.>.%@~ڊ@S'}O˜)l}<zƼ2G^[rx*Ex/YcW|2>7S@d qދ~y{@B W42! f}AH${хJ!qz6_ՒoY mx%j^[~&] +\_O/5-0f^柱 |T4Ӷ{Kr|ƦuE?g:M̜@wv A+xxxj|$g(ܛ$ֺTޮ(OJKXv0ͷ056ml-~Q&$M 1Kc-?2=P?Z)4Bom䎂y9O--O 7et.m :zX{ Y k]"Jѷs|Rd*8ScdFXK +y'e{~!V} #y8Y|IJۼnP[VӲ\q1o/;]j$$֭kU㘚jW wgv TQS{cSm,*J ǡ$$aU,IVKM̟fK͝نL+jF7eۙ_N6Mi. #lkjփT5gEn2RI~dX.QȨT+%Fa4ڲv.Q0ԗj-ٽr!(Ϣ 5_V]-*Mܔiʾ[dV6e6"D^[EqJ*W_bVR.Tݑ9~fWkUcU +t|1Aclm0!2i>l a^\+ ^lU̚Q2`W$%%А4 +,})OkCd,<>|)},\*\wSυg Ԫ\>~A宇)6[S뼨Er{m-s-m.ǧx*-!.F_J8Zaqzdy͂kXaM.ěف+IWԘ @1`! C(! CCb +@ ` `1!hC@IDQ$$I @4$$M $4$l5IHQ$ID)t$$K !} e G?RQ} ykӔSO^20& 4C,Ā ˠǜv\wv w 1R-C1V .R ݎ n* -\3 ݀1*NbفH^ģZ/`/Ly'~r̀R9K3  gA0f5'Ց=:5RKi2KQm9}\Qg@iXiN8B<3\[2d~$هqE.!n8!~)4Rǚ'~A֗΍0RQ<pGЗėO&1}@<1y-h{$?S抬rkUmR_pa.?4_vi;?Y}]?POf;8\Z+0񌞪&<[n.U>?f*Oa0o8Y)P<2JѮ%ZW#բpSSif[ +wjS~RwJ.AY4~n2[G?GHK$,4>S`Ⱥĩx}O[? В=Weqѿ.<D5 R^S>/ pIg>^~X>j; &MS)^#CUUejE2.?,n @wxk ?bp,|wO.>Pԗ E^Tfe{(_h ы yOdX,YHQe6 @'V!bVےT QOvMuh%&߸v@Ǒ(Qؘ #aؐZHe Xa`z%q\i@YjGn 9Ԏy=awͰ#` ,ðXz1XcX! +q` [P hڅ[;\~ =l-5 BpH.;h=HK?dmWZl.0j _Z= $) +`!qs%tZ5+h? hK~q\.a\WՀniMdedԕ9)E٠.j(n:J9lZ5I229Mk+ew7FIUOآ\GZ-5R_r|SNkKN;0^˷O|Bk7hx^L02cQdq5V%&3B[Tܶ8mi%>-O/AWIjEG)xCUc+I)Ǔ$CM"6,qdMI7de(#mYy1<8kJlՅF|;ƴkdq~Tuџ5XT&Zk}d/a!CjpagfUu՞*>)ǯ}cy`dovluoLOD@aӽ싔<]lp(VTGRY}b3ޤI$GpDOL:1R*~ȔqUnF,$}&tIkARIJIqm{sjv螤o[[ri45cdj%i3M[uDOEs$l{pnه,4{y'r̉ƴ93)T̒^(}:yTy}IS=ԛ} +;Meimɓ\ϩ׺Tx˚䓳Vl+{0C&Զ=i,E-{=@1؂=mÐCqBȗ$50ͨtYyBuR%NI@P$,u}6 Qy.D:\? ;\.քS:"~ᓽs=O pVzo-[`tbA^>~I<{uOLz hj|5b̕|iFȸJ3ZQL1c}J]HjNNiޜ#)xz/zQ~U[_b/ 5Z><636,||М,}R8lz63̲0ϡVMuFzEx<5%#%OmNeSWÜB֋3T5YC)x*ޜS>q`3e "\I_`)X'a8ZAbyC([e@;1YX,lԕG(X`XFbA`FڌyC.yB!`Zv ;V+C@5+t. v _qrDCP +a; v,2KP}4 +\V0Y +㾠۰& pNV5b@ ` +ڎ` w[`\b-B\4 l\. ̹~.3n6Fp& ̆nvLyw noa}JnƘ\Y,._VKљo˧Ki|57#v\,<_cTqq_g}GC/uG2hPhf<}F0UkKX*4~*m& Oaeh}ї8F|N8zT/t^_rl0JbgǨRk-fk%柩6+j<·̨xRF>9t6H<ǎ\$>^+ֱ6Hw8ԼC Tk6tQ_rZgVB<9; N/$mXK.幘 Id?ݳe?tpѭQ֚߱k{&DG$z 0Km^ T: ɀT)xtD/KYXk-""? 'J.l@W`NUgFgfEvʳ5}ǜaSDpb̏PQ5уF Y߸7`fvagp<0S%Y+%a'eYrN2"1\@ \n! (`$am.;pW"w 3ub7`!q y_\*giV؂/UX=; Z]['դs;8fY|$*>W!4W2qSksNGض(iFM?ʀF1d19)ӧqWE[Aa8eMԚZeJ _yr^2EQ$zԸ͎-微}>ocRkjZp#UX8YUo[[`ԏRJqMy0e]'bykXtY~v{hEra`.bz]e?I,H _4Z&22'Pr X,,Bخ\+-^Kˈ*Q.g|#<+&SykykV8|*x +US8WkxkSV,By_㠾f2TIScaxn&I{cq_bQN/|bxjz2ϱˆ`aئ\?x/D/R戺mXl;zTw R^dgҪ+& +dGu|_,^>%W,,k+&Pkt4f]yl +XA<+Vb +±+H,J`#o-;XV4`" KV ]+ E!ʁPd`oNZ5 7ȏh[n`+w@;v[X-z +;},lg([j00۸Y`6 [(JO዗%+-݀_fր<݃1@<35,p_rp]wpq  9AI3xQSbNW}Rk4NBw 5Afa(waa.X~9,p`V/P@Hm /P#~!]C?.4+/A#w &Ɵrb`Y3ewVI-2>Z^K.>+ןKMԸև͢qT$ɲ Ж"c>#!^s]=֗ܛ 2!-q{N>8E|qLn]OQʥ3C8I|l_@ס(Q=M|C6ɇkPQ|5"tqQShS{^gr (Ⱥ|8[Ö$5-nCS<"m͙Ǩ +lCto:m=\'p좀9++X;$΃R/]-@[%U73Cr/}jS-SlIl/.z+]?ʃvM%o Gdn*IFJ|4ȒYkr6KwqKI6BJd?2Fy\UjVY+{I߸ZFo8ӂp&ȕoB~Tz}bdjߚ$[Owd&kziUٲJR|SMɨOD^,,mQne+k$Q\̊մp YW2,l"mkkCד2bjOBʣZ?U"J#>`Q/D1CH< q) KPI$h@HW±CӘhFۀYr ؀ae<N^_0凧-`i8ibt≠8T=bsT7Cc]+wQ{G\&kiKU;۠igQhy`G*wL. FGO:^_˟4ŖK%U< )}(on5sP;tOLoՎsc>5eê|5c$/ +Y[Iop ׼5AtIH[i1ᬣp$p?(  C1 @0C 0 @0` @ H" &EI E-aq'M!E2ĘDQdbLr#rh#eyR%aQ(X,FNTʃ'rܢ\U//nFYrR/~PqI>W,XZpϠ.032aeA<IJ Ȁ e,+W`%X١,Hר̱ ]<܎g}C;۸ 1Rd]zfKNL,57RVa`+wEܺ²6.ȘykE.=/r/y}ªj( ie@Y2w-Ł^VEaOЕn[ t@G/d /aebv_A(Y[&"yq^XwYa"=K,BEEWvofQe@C3rYdAITwܒ*jI;\T%}vinrJ n؎^?b./ v +ϨY2RƯt@&}M|ޥw`[LZB{0 { 6 1s򾠗o~X;4P#Mt { q`qZ۠R_[29Bځdj+)5~"^VVV6VUg,YV^4k̹\cMZ59ruGJIl'A3/`=/Qˢ/~)IONIY 1P>gD[=ѧϜITkf׸0L8)kNDb<ۊbkG%[~.+5 >EnYA쏙ËafY~yV:g={F&h'yaꁇwJU"RYx:->Լ]K0*Lo暽;G89ni7Pv*iWЕ<[sJrQ%M߫(c/V㌋0vЖWe+/F勅&49sYZJ)^J}W^5ibqY@4Zv8WK꟰"QrOkr +\.r.m+n;Dtn7cxkiש?ZA[6 i2e+fw,M-mXȩU&XvqfCрǠeC$uOBw ]'ȲϠY%;ق@W䤄.d(yf_ +#tk k؝( N^2<5 i*P~58^ +Bc {0 Z1^[|>=FD_p<-3Xp/:-ra:v}l|Sjj O|Z>StW2Qe}4=_W'd|~L^=Y~kzKg#MA/>N.67~Ȣ\?ތջ`55H 5=[{!:nM-phV=@$k}+0V [  "1@-@ið p4X[5lz04`%n`sXv, N j@C@K6`;p;h ;J\5iw &Jw nm:i#9/rXkxM/]|H2? e(SޮoS}bȩ:31ywJV:4*?TZ~Ɣ'cͯrl0d8 &jZ|K e/ګ~ }5٢j|1잧G㉯ӹ6+gQ+ |,ƜNŘ +gidzE'͒Mw8kJ^|G5hFgm6Xi2V/ S\vy;ʭ.i.%J2ȝ!h~D^Z lor!$âЎY_m %@Ǭ_ÜluVMUkpCȋwWp# Erk%8Gw~q`&]b?)omHȀ]giY4@/̃N93\ tb&++s n'`ӸYtYl;!yzZ=PY>`A^ IEf2V }ޢОT+ƭ6]=}ƥt2=U/ղU"6C|TR[Ƥɯqէ:2iѾTqUӍYsM>1X}A;-[,#+x e77ݗGג@豋ϥy[sQ}Hgl:iZt =ny̒V*ٵ<<[k}5߸L=VRk;88KS.)]M;@êi>GVfM; :?[b`U?j k'̚|MlQKl]56&s#9|y6AEd#z2W ŋZD34qޚ"Aw %8H Yt v -7@ a~+>³!`G.!;vpBtH۰v'Omv.[]@-m{4:o)挀 kXGU,&wJ?cvN˩>j~ +JiҸyW[#ҕ<P;n2㈲c<^ǼXV`|꿁1JԙfqM Q}yAi Г3Vr\N3qjoJt}Eȃ^+HGh&=4RBKR֔ +Uxx6G]&18;bQ?xx?OPe򌏠dgҪ +%Zv+_>YoWxe#Ӹ2Y>ᓱ*xOA* ЪR_o VI +[%7-Zt[_uʟԚv ӑ+;%m/:_ 91V4?:ۯUƽLz]nIVL TO$'f;2) K(8fY,G+-EfJ~~!!C1! C0@   0 ``0`l!r!R[(ac7RݜX'W͔|[N;cV?uɿB_j_*{z>2]9|%*c g>>wR><w^ńo~._WkQx.8^=V~S>_dU.16C|OkZk/X/ᖖz؅#EޚENv Tjr1SoPk}I:n`j{{U9VX_5wc5~㊿h4YO\_剮Z+wMghfhK8t̲\/Vޣti^;ޫ x߄rssÞ؊ёokL]Uѧmok+ s}?ٮ.Oԋ/Aӆ7 OJ '[V{˗?[?NG|w%.%wOw~zDI'wW8Sz_bO!kMļg5ɈOԪ_jڭ;wJ8O^y?GUiu3|"oZ{GŜԯru1/guGR,o<K|e_aļSPdx~!SlL}7]tqg-xZΔ}Ϡ~׸<S:'{֤7Lj_Φu!rx&ÿcӦļ[ΗN/[ xWbLK=IC9ℼA[_\{׀R鎦 +u/N LJOOS~ืAOGmz~_h?FiN8'-)/sOࣾ6QŰ S\K!l5ư ?`We?u|ſ.+oE>9kn&w!|#>*i?^=?I+޸I\OKKJ|~ 6 "?'XoZ%f|ux+- /- ??-rKSr|,-od}5=kIUդԆGxZa*N;*c%~z2>Ėȫvs>RAo:qxK-U?B2egt2>A|T+}qUzXynapsZƟ ?c%:~5eJ~[Fj, +9~gj &>,7wNV"t5MUF\'ڞZ/ԃ2#ςW%Z§DF-xX/WW '*/`|'ޑxi?Ezxz|p\t |Bʨ}sHDܜAoNE)T~>[|V?,b pN&R28zUO؈c{T*+R}}&4Q.êJצ*p8IZޅdrӱw0V_}:QPɗȥq}ŨI8chRVB_p|;gBJc]Ҥݏ>  +ѣ[-Q~K@5/}~oQ(2zC OdUϼo^K?^z?@| 7V߰E_ɳ>g ES|&zlZ6|T]?  pU!.LQNʓ4թ}/[8̒pY`|af߰l,g|*O̻m-$f|QI3`e;/B1`^0>K7^m-ϭٖu!?ٖZ,K_/ (GĿh_ =zAY#?E^?bӗU'ՠ>d_R\ԑ~%'g/|RKKDNCVoEb+](ݪZ'fi'1[ȿن6_դ<H,]hצ%50VllW㊯~θm# <_/m|1_Dg;VȴI-'Fe.1鶀YZCUg҄߱WKoTA5v|-"i- I3!y]ןqŸJMXJK=xhТݳn z_5ÄңN!S*EBV}Jnw*`3P[ѽjZa=ÕR#lC:`1BRͥCL)Tk3^Í)R-w5j[ʝ؍Hevt5ȺJ6ƒVp*S]չ%{I_#NOʻ˚ܮ -גYa ֔R1۳JbY ʞ ˣ7}7,&V̻2kVz!A5 +T䶔8׫I/rPM>#q^|BLD`dˑՇ8m +W١!RZYToOtC#Sm;/ކ&-fǁѻ]2N =$ENIKKӞӌ[s)+IܒY-*Jޡ0^GWj)C⢾}.)өզ呜Rh>mO"/ه=Jmgs55c+?76<{!4NQkL=wf=AVzG| w+z0w]ڕ[@;{I';E~*/ ~٤ZO/4tre&Rí :i݂]]5U*KUNVsrK1dxdT厩yX%;>h#9p |.N% +Ri.v +*rؗ^}YCN] 3}"c4I:J\ '8}K!6nS`*x?c5O \4}x;XQf*;x;xzj~ϱ<~20>aWB,#=_qXmM32 yھtyaْQ^R)t)KeL%h|佊rU>@|S}M>S.tgx\׸2l<}R|d +%|^[>W{U+GdLt%?DpFz چos5_ Jo\,,^S=xDoe43KXKE|³ }SaX6[r/:Eb܁ +f@˨-؞ṔXM0 9@Jow#ef\?Ч~ Q <28$ժO\K`D`(Kp0zZI 5A`{0` @ %a jJ,ld+/PBX2,'0+0!BZ,3+rFm{vW肎;mnEKԐvԍр[|ğA-{mƭGtt`W׸nPQ +௾9n @%{se@4j]1z5" 3@'̪ V%h1tZ_srrKkr:8bxYjD2BTthx;);3%$LB?0Umjs}'ՏUQ^WV&:>U9}qdh=giqu/*4nM>d"1#ob΍AiRؓI͗hjx꥚n/С _S;ep流s)q<,\D8rgLJ5yq#25)= 8& ۣY=ToIrDRDzזH,P)T +Tz9eop2<,zä"\l5Bt>bQh3I_Sk#hDX՝,ic2R5b"•9-ұ hm#+k(5X_rJqsdyV샡eC(k%fXDqz+[0-tSF^H`VzXgQi- SՖCnӾ﹣"/-Ny!,tAdXG0< Hw+ʐYmMȎg}ʯ@ud C  !`   0 +` 1`C  @$bQdXEfx2 BLE 1,Rel2vɓBж2Ii1bȴM\#HI4IB Fք**̙oR2a32yR]FdVi?K59M{VfLFz̒YVs2$?G|=Fd,_W]|=d8zLj?]#2e-Tq8|rbjŕ݉-q⪿Y0|cT4hW/牫'1/|EO2# W}~U(}erԱ"kя5m1-s-F1lT|Ws.%M_יAy޼s޼mˠ26D=m~WheZ_=IoӏFG'qw8q\m?0(>%GV#PVΙd|Ybf42;Qn:Oس]#|8.*Ř↼W?GH_,ǯIWyZK%_#?cB+q9}({2j]QlbZ}!Bޚ:+j+I~q;y2W:=b?V_6wdsܯ3w.N{/FkXTe6Ԭ)rUKqHjy2n_#vFQz>=;yKpQc<-]"_'pO!*]$3!ݿFļs!/o +_)cRvWW[t\C7 .a>-Z+:ڗxk'&>24Ibi:#0Sk ^>.1_N5m&D>OȚXVOwy庩$GC~Z#%ϊ*#Y,~";b*/ju8|SUq8lzVXzٳӖNz>v/BuCyTFE}Ǐq(,\׹8x-s~t0[X5Z/LK,^,:z0]ѧ~K#(4L>n҄W j>u48׉b`"Kp +<ɯc׳7ya^ `y%_:0oԗf0mzxOK|?I ̿UOq뾸k{^^ 2 "S~=: z2 Z':VuMx߅?Ęі/J,*Z՝߅_W?(ۅ7LKTSzƿܪRzˆ=}8E^+bLKƿmF/DEr+,Zo 9pU:'3^L޺[}*_χܲ<[kD>Y_wJ4%:6J7s뫉`؊oD;֕iN<9G]7zoS6qVH?rU/_- %/jxMH}֤_^XZSV~)~V P{:=T|I;~]\JqPOkXY-iCGci)†-9XnOZғn. ʆ1O3%8.V]Qw;?& 8}=9z*&KAII^x{ +n +e4_/St'Jx g< ;L&eVN|K56}k^8 ,.2eq\"KgK UMFo>S<oL4(DT]ɗڽ4:/rs8J=;p;zKw.tf1xÅUwt(b*xZj1[t%6׿?AKoV=O.-TfhSɧ.RQD2Χ :Y07њNkO;iG|e_cԟsɎD m^ +tO3]# +X,Q~򤨬m8R\dsҧj-d+Q[} Qs5Ƹ? Ypoun 7mЃ4TRObYRN<3vT-[T#/~|ЃTptǼܮS^sjꔴEiTQJx/uTGp/R|^O.Ќ[+IFX/*``z(ci(YRDafQ'痫adsݕ>2-OVQ92$crJDyJxzN#W],mi)b0S[B(_<]()v7)+]J)󓎤4~"hׅO1sū'ߒ{:zTW̄VЄY8OYanLaRRTKsL>e֥DSӢ,D=k7w~* R.r+9˔ CӒU*[HR[B^M{&<^8,BYߗ:[ͽUw5_[nxƤ(q&b=vLZMU]O'Qw1)SmFrKyI\RnyyI* +d˄RV Ud-Rp)N0'&K潑0=%д眇RѽNzTVi]_0;+SٜJW%;ykԍ.3+B2rw|:JڳK&kМ#%I?)r>) |7K/޴UҞ˙R[Wu=ŧ*eᲆS'MzkxCMt ^i Q"pjM Q[@e jT䟡TU6 v-' +bv 7i(Dt'`Bbm +P 2_ Gz݆AJV FP%V@VXD+{C[[مW@|2<"1Mǐ +XdcN :B\>q*L*eR[ݑ˨X* >B[,QYa !e{k[V +Nв yV5{ŗaZOP PVFZafzKT+ +!_+ [`?`I_pgwp BCߨl91j?; +`$; K4ԙ%RKi~Z]<]h|d+3v2!M$ +56x밻:} jҬZ:xo'kԷ˲IȘ/Qx:-h }/q~cZ~Z^,q.Sj1Scj+,] 2''NꀍiNrFKZVbJO[R Kf}6WiwЭ+]0U;c W]~grAtq&P._QFU- ?2Esg s *?p-ǝ)Ɂvv5265>][F?1fazFtf  κFw'8 ++y|*sBS0'$XRǨ ,,vI7 .PSkK #h*d]42.]4[a+S'D^a|%%ɖDMJAG}?pΉ+ߘy20_5MMewԦn0] SsvP/S5%F{_$J3e)/fS _K%-/2۱JkN.,['N/*jL ʄ҈K NKd?6E̹@[iz 9AP~&'f\BRj_MT T]x+m&Q~eyf5EJ1Fpʳt[3)]nM]DU RAe \ M"2j;΢vTJuo&Zid-m/2aR"-fAnm6U}@A%WECR* -W^gjldLw37bLOp'ɿ.ø̉U-5U~wfLLqUg2q.d̵n&WKcQȝn&[zcu~/sn2e\k.ܟ%*}^BLا[qU)^Eec(\/믱.y#xꆼkR^ǛNBz~8J١MBuIF]_;R$sQJe:={kL#^oBKG,#GM=p-|Y{^cdqiuE*u>Ϯa:>qÚk xӇ=oc'Gc.ΫpUCU `8-m^iz\STpa|SAm~|mO\i= {2>M5V=;|R.)_5}qu%1laĭ9)cvbM OWdWo,m_QUO<⒛xWqEixl]%?Q|RZ5(RpOo6Y~$rCŴCB_߸8?zB=/f/`skdyq:YpoT_gJ?Ɋ]T|;[C#NJRP\{^Eu<ާK3:N-NO18OH7;s.VXd5qb(Q Z7ᑕbSe.݊BnJ1ɸVO{cN =dm"wغ~ĸ5Wb`V\B!/ԝ>$\WVS᪯Nr$U>ܳTNkL8n K.,RΛZ%x풞Us'6}n: PM'M+huqT%^), +>EO ĕW:O@7U`F!M>F5Ԝn =< T(uqOUS*, Wq%}j+#cx<j3}Zn]5ճ[BQ{ZZY\*Q0o5R<5&Q;J7wt1;A)V2);B)դe24cpLJ`flOƔeJ%\Qe>qyts.7XHRThO5Nnxk> =^FRʫS`y&S:Nj +kwʇ6zɴu.<ɹYŃӶG@]hUӱ8K7ӠrWnO 6(dSz^ijl rZb*g`A +ߺ]o.߰].Ӡt- h+/` 9 AVv6A ,^`G+NZB 2v Bm eX +ޥtAv-KBɠ* Kl^س* ܕLw/e(Y[ 5kws +- 54e}@]5`Q,]0eͅ6-mua ;_A_=~K0z>[{K4$$܅$K^d ߸_lY2>Ai7x."s~)%W78VR^|T4gu0;uEI A<7}K^m>"UjſSwdVpw~v|KSw4L'gn!IⶉƤm,>S6:̎ǰ΄&AR$C u~O|eXRmݸ\J%h}PR$ɉfDTIL3x$OFA脟ayP(V\[,UP$;v v`REZ#J``1ΔzNw:629f5-cos:0{iZ]ɚÐ01 @1 h0` @0 `C@1 C@4N$4l}7c4KbMA&] lEfHT-@5GRؙcUFTI#4j.(&5q?.muՁgK]I*˨]etFǰlNd4<}͒·cVVmBr>,jKsFFwhtEJnŞODTļt.@U)Fy'60')ꯚ٩ae{$YR |zt#wMZ(SQe]žCM-r5jW\R# +5Ѱ,r v]Xm).%mk y?BI=>4Bv@;Z!^MHwB@̍@̪t.$ߙ?Xo { yչݚ\)?MJO&4%Eitsؒm=S3Z:NԐv|O47 Ǖ_tl(Y[0Kg8:X3{$lX RyQ]4Tu<ɰ9Xyord]&'+Lw}H I+Bϣ 0,q\}¤<̅A܊;r 0f`3KP̺& ϒ~"蹁/v"ߨf`L5#vPA5~D]3@Ayhř5 scr92Y4';<NBHN0} FX3I=8I!/,U:] +y GwLέ5-II]2eJiXHpQa} Y ˱+@V OvXZXװ42-e/2w.E))U[Tܳ*Q(G5Zqa\g, y["c2MO(qzf<ч_̟/2eڇUo.%wQ7ΛNWܹ2QVؗ3I _cE)_ 76N=2=.͇̒gw) /v_t%s~52t}%x%ep5Y+>igzt}.*?t[>_v5'f?`E'>U>[xkl8 |[>@Is/>Kq1njoJMz/Te%K̟t0489+?r+b-",GlL㡇#,X3揍Ìcc&Elt0kYY%ʸK1%aO|>"wt;Ư`˄`%حNŅZEGǕ>*>kG m׏ma&}FRflE3 +m3v#ܟmhO0aܟ.9\霯1Qq91Jh7& 6>EWs#' ,s,8s^êaI]fxJn5lc:ˉ02>U/n]"M%lD=8x'o>u0+8tBBmڵ?~?é*~q/_:-?v7x[Uܲ8jcӉ ~8lϯEH*<~>4g\Z;S\gkj&y~i')v>=I?KQ? qhj?@)AOؒt?a^qWxZ؄O\5E~p_C-L +؄n2 Z54~.hDeK|=/_ĥwN_a~{sGpiςppֿ/yUR?AO<*~ 8n4}^U@8Dkkr%9OkDSSiä.GƵ[>0+O_G:][b>b{O/Vde"u݇)n{1q(5{yE~63O];G /{O Rw(/zKrQu7O|B:ʌ*|{y3^ AthύZ*3|7 K7Ar/E-WFQfLZzU вT[fkƀP3n +Rj, !~ \ip,1w4Pjs.;n-6EATR).\%R.Mk@IB9⹒R\adG\$T2Qu$Qdeo[W{ܐ{1K,<ڍX2[@ ݀쭸,$VHY'aj}Pj.El 4WPMt`̺ w6)TS|J7~6Q%K +rUZٵi +n\ካ8՚6x-e-fCAaa)YgtXoaҨseY>DԬLB{VCl0>Z~Dj/J{(,Uzu&3GDDRt:?o?&!%n RFvIax+Zr +<_ ZkElunіRZM}UHiM=!;nnyB¿{` `0@1`1 `01 b@00` !  i"*pEJ-B  1,.8D1MSeYJ$:F`fIЩ.+rw~N R}Yc؋_Q@,W@.,F[<@Sd_$w25WGQP>fahUyP ۙNԍ7a]ʃ*.1"8ZG|j.ebAIr&p|7̻1=ǕrA(@[IfDZϓN)Tݵdߘ+r|1IAU["* \ՉE(t[=ȸ=<v~_r.B6?-CTEU}G_pOQ*&/-l=.OL i\ӣ<LTy unkvqY7{_4dx9ě?A:KN\jmV(֧M eJv[tCӏ&s<ٯ,kԺn:5DU-LHyԃEK}59tEֹ b- ?bC_Mߠ$%$8P|)GDdO{B(y_ +ːYM [ȷlN X&<ܐs r%sv-wBNEv31݀=!wTK(tӡ,#eуQK4ZBʉYu  evJ6 wqzju9 }NHʋoeř:6EQܾx`)+5.4z ۠Rcө,|E (G{$ ĉFRCIQ%V\| _]5$rݠ46\̒%ȃCzhrUTIUOt61(d@j]Ǚu!tN1#n`U2w;y\51g`E`_,<>䗏1{2xՇ,d}>=}TcC0t}68ls^>1z{-a`|Y!_l|Q9>GeNa>p?rOp%CbXGxX3ڽ?~y/rKUVq>joԚMq;M{.-JM{hUiCX\B;bg'q;&lb >pޱ<B݃{ѧ+wxx} /8D|yχF =l7ea)bxS@zg}lh* {aٟ8T◡LZã/5]p_'TÃSq&{VQ=RO z^>/}/}K\ {ǸkWU5Ƹ튥'SKᬚ2iOm}-qlM,+?!|N#WTgUlϮB[N/ܒRT~2>5/WS)8* 3&)S|d~}8WņE2壡5~*2~6JH&6;џت\+*i?k4r)-hS!\;Nb\&|=^ت^ 2JQ[}~_>O.G*'`RwD\:EOkd|ADig|:Nm5;G&dKw3ï(5/ T}*__LBOeY=+:K5gXOئ^+ƺ]SDœDo]gOecU'|<3 ?+vqδ3ġ**uxJq #L/Wq]DN&'a_ j%,DMelt*-^5/&M/`V&i X2ˠ 9ɆgzJNgЁ۫HYC7[;[5+z}5`L5"/Ձ4eiF@[Y 0-Si7.Id̶0q˹.:VξUh<â}/,UTsg՟Rv$65/QJdj"#41؊>^!tɊgbkR]&| N#OjV:_6U_^߰f]m*xJգɶL? р0 @0 ! 0 1 @!  CCX@0@0 C`! (E,qEEqL)l blSdYddB)&,R,&Ktd&"Աz2ԚKEz ث^yu yy 4G}澀;.tW:'M1:QK:]$EDJQ-]u.]E@o**} //@+. ב18.eQh,Yd@fW 3O 3]DKo`VJh2>IVc -ΏB2/` N4g5g-2VZO`t0f́?"o1aK VDz@btd1&}d'JAtD'@A|м[CUX +dw0(iAgп5>ϕi,Iٴfص_= SkԱ >Wy' FIiBJC+EDZrkhoQ4,gfijop2^kfitPU$2'|ϐA#yT\̋(+5Xdg *k,ї7aP5I?C"R̹ Y33] }3 V QHjRٗ@̺@.`]1(3\ +T.dTW#̚*` X~r?5u.-rN*58=CO՗ޟDŷn@E!Ƭ; Qۮ 0 : Nq%gM>@b_ #[ԎY[FY&[S/^tSo+ؐG^-^yf%e48>27`)\EJ|T +Q{̩"kBȄ$%M܀ɒd!et`Ⱥ !ZW:S[IWZBiSj}]NI*l$WTedBK 1{ZU]q]L ]y! IsVu3-慝2ZIY$z5Q`of՛cyrd fFEQT} Ϊ>~op/A:tUW$Ǡ&ɪt_(ӜwEL~W[xU4Yd:pk`"S|$9m$Eba ٙ¤~YyՁ}̱5e.h $eqAU`+J]X|HJ/d)%~dk/| 6Zy݃%=ʈB>J|y WRJV">KQ|徠U}VV*3'>SFUYWBV]>w܁Їհ^ U0$ߠG]E'́-D +I`"ĭ`6RM\2Ys'`* DYSmm m@!{v]G[7֨*N!e"9P.nz-Q\@4\D'D"@% XW] EuDrYx%~e ++_Q|KQ fAT&0@T+~A7U "$㶁^@%{ w@^j- f`7#w[/.Ye؋̹Lybl ̽=H`V''Г@+ 45M<@Z18_fIǸ^)SD\,5WТ5NӸ#54Yaf͙a=5COʕFIT`4互U|]HIE%h@SKԤZѠ+vK#'4 (˸ԛP`s)uV T +"o /<˩')j_0V3wWhfͧ +Ote\<~s|.&W?7e jJ,λbw @ZMf] d ?@pʇ\5522e/1tWe,2e<~a63&V*ϫ^Q='%Pc2e8iZ'!؊sodˢ9mt8ةn2e݇8v}t|Y,ޔ:>{<:_c#Lf\3-!'в(lD}ϕ+N(t1S_0.1{b)s]478\c~I$Uf:}xvޡ{J/qT_ >h"\cTql8q2 >rV<ϙCJֿl|a/`1K~Ğ":q5~3o}xxA }SKV6n M~b,3~'+K*p7}yXxқIvLORLaڟ8Um%芧^ /0G8"x|al_N_rθlL˹4-02_HL92՚(4½-{x-0ED:y +Jw1?Zut{qڬ>9i_~8[ET/>㋃Q|_+cbⰿԽz<>q+vg)Y}g{2>? q8oئ| FT]:/x zp~#̸V1?ױë])Ч!>~#+-
WeBZƻ^Z;.~|T{ͱI;TOУyUm%>hĮ^ +Ss/hkv-T}IB]ӗ87~r|BwM[JeP2` @00@`0 H`0 @ `1 J N(QlPE[."ئ8DnY@%IDq&%4YcMTN| W^} +'+:ؕZY ,)'n]2ۚPWVcI%u 4C^J=P <qel/@58C˹R.V@Yvn(tRKH6X8 Dn\FZ18Op) F܋Gy[COkK]PgϣM +Tԇ7]MT_Tz(^K +s5~c]|'I-Uod?2чVKyڢ~[$scRO%nC&@/Z+V]FԃX rbO 2 ~c6-+`K`r9.?/+[tFlZ'.H3v }y&]] +f}e D3Keb 2Ad3z TP%V,CU#yD'yf@W^YrwIt"G G%^SsnX,@ǒaiF̨Yܤ&ȏ@dUKF*"G2ׇ]ȼ0)Pd\;mB%^mxE湏<˴Z=U5URܱ# +Cꉸ.H*]GuE>[/P.Ӱ\(_&n}ٰ>hӠsKغ9TyxׇKw%K{/ͨy0t}Z>)_"WXk՟#u:'GؗǸ,L%ώgkfUW/t} ''0L>?N8Rڬa(:R{cD-C!Պٟ*sM?㠴~áӕjrSSޒG|yGYcV ?10b`b2`` 0` +@H"Ƞ,.Tt"h %'F+DlVW1E]b_BI&UܶM$$]$>]J2 2iR]t;rL3 #˩-YW@QeIt FgyB->TO+˚Yt "Y bQYDi ˨e]@V'u .C*N˓ >V -Ժ_/( >C}Eȶv9o_+ȷ,Vn3. /./V/-r%^LI6}F$XV`-|Hb;`CG+䳧>agчX|T(nm (w]Uti}QBiV=y0 + ˨K(@ 8p%MPfـMtax"EPap^_F=:PKMvZ2'c#/?/ +qvYr! ;0ؿ5Au Qy{ A`gb@ph +5 +RZ]kyW +R$C}^tƱ/)-'(kYXk* *$gwZ'Еv1[k 腖j32_ǕɦIT`.tΗ@U4Ly$/ʄ $ǝIӄ 7ܗa)VRQ]gNSj_4;Ǡ%T}'A(<[NMt"ǜP쨜aAxDCN1xY/Kv(w$epcRwRm-dxD|l Q]Lq,XBqkLq BqjD\fMUCW`!A]<3*},3&=0).ۺ<gM./ +2}_$w].E}칁R|,$:ҏ+/A"tz0{\OKY 2)tms \b8PWTXE$!yO`G<ǝɪr'M%4E܏_L_bJ{I^\Q/1呪~xVؖx3 ɰ45;C3wn`UskbJL >k_b%yMfrF ̕Je yUd{|[)zz2Qg }>2NRt`~`/%wK]@؋ܷ: +|/&E]I+r:%̖Y/NPά/5̿FS2h^l{' +|7R,pЛ&/)/3ǘ7Џbqbiu[܍tb~7'gh3r%$Ƥ \vEZ1]$ZrJIMrAf,Ϩƥ[5 (Hzneqkv +>_{'H N:*ڷhr#.H5ܒq[E crryTFRk/Q6с^-e]G!g',ȳPInG]z?N)ٍSoA<]X +ng}5 w+sp]}If/sJ<̒ E+t`OΚݏϑ[Z=$w) 04ƴ 1ݭǘ IyZ>l:mr*xx>EJRZ^$/ǒW!*\*\_k`t&Ib$?>VOG˚ѲuC*Ԫzf2Kt?5s,{ ǰLFWB(QKRju`Z25сj 5rM $FVbq}@-aBwA0[ /pI,nY{+m̻2ۘv N{IvFZp*ʷ. D ѕ[`ʺByh({N`P0 +SAޅ mmtM4' 2i sg \2 Ȼ"./d,%dǕu 8!d5`Iw +ISn7 +oyʭS@4D2>`C#_R^ A) f lN#tni_T^[6w,|kK4[M )%A8 !<+9Q]H-m&TyYT S%$rʔ4r}iǘy[KZl +Uujoqʌ"Ar %c'8J.yh3kU *NKրتDx0݃Ϸ" 'poīf e*_QM$rEQG"sDyKVЋOwRIe}j܌pJ݂y.cS;/PVȒ!].@}lA%T.@Z |ʼ5MeR-FAP{}ǧ&Q]E@^-J<5S[IةV\/6, f OMPJ~TV48dnBr"9e6 NUBr.ߐn.LE 2U"Y,ȸR5"-XW.~JLj@MvG}M@%kv@V'Y6؛=ȉk5ZnCӨ + +݉{'b:2őet&'M 64ȁdBpbbJJQiR " z"'J g56'GPӗA8Irj$@.\5U̸Gs5ǘRceSd@4]˙U%v ++b9U0,pttMUL +]. Oa:/L k&]yĢ~DEA<,tМUmfǒ=GSU_6IT!t sPji_p~_uwfW+=@~tgUr^b Rkz-s*0p&J:$$K%RHQ캄CoyqBTY%M \; ElG3-~LVC-RJy YTǖUȱNU߲wȳ50ԶN,".dX?)KIqF rj*B/q.Uvr,~@X*Y:b<)Z2g]~ +O%Q! `C @0`400!0010b`  (D"2H@] Z(-L3%VW[ Dȑlnب1EԵ7 qY5Kdf4<3\A@T&Bˢ"ݶHilX"Jϐ]\vj7ke]0([.☜RM GMWe9qƳ-U<<{uh g:tah`IMzR2`-nhRP`iGU6i.`lԌ Vkem%.SF'tgX/> i .C(US{ܔjkܽb>bgV ݇@=Nb̹ kɭ蟠2H/߰JihṔe怋jܵe@Tss@yj%qdԖf)6 +TXֻ\rI+YEJ~6|ޥ@&"]C]K-ekMl^D7_ 3:juEϠOQ ka[p3<Y}bZ>Ae k[ŏ_hy}|)>HN 3y2, 0!u o L_:؃˔arf&?]稜bZ2705:Qd|ȣ̪E*4yr[HV2zX/ݾ(XXm=5VL +,y"`J5!劭5FgOddzjl4Ib$s82G2MAxIͽ/@mJ/ܲ3K(ǠW$%W򰼢jyN6KI~s02yH@ft'̏ a'`ʺžAۚKfQK".+.RD\[ٖKe +.i/NKIƯ#}Py6Ae@IW?5=+ʈ.UEȢX~u2߸ dy3Eƥ 5[F?s"i\mIw&Kԟ`WeZ]*L cשdw }XՙrJH.iu#hbl@bR*z|24E'e +kn\#u[}tEHXv+Qj^Rȃ +65)YG̟1bPA,'>Zw$qw;nQ~`ΟoeQ&]+Ěbhw\="f4v/ _ (q}HFYz^Y.az.Sv3,ߡRJ}8)q]Jc9.LY&n/ЮY8'%@wy#Y"Ƙ$WY{6;5싛R-A[9!_fXʾC8 bt Ui}HyrEӕϗQANV+!u&1t΋duÞcU%r j|ʣMU}oh HԒ X,{!*{.XIAu +N=2 sUȫ2[{r ݈'4|kWbIX7m+v{, ߨn3!Pm.aSRa=%4ݾecOvEjK}W v2Ơ?kgBp@'⅕{/}@`@ 0 `0B`b0`!C`P0 C@J%+EȗD ]"'آE0[YdS +)ܜS‚,F=(i%rVnPh] řm]mfVI/`Ʀ#4}HeP,5Y?9s3قHcR,ԥDrE 3'!\%إUZΟP&d5I=U~k怳_2;yPh@MVI U݇~`Muj;Z'pBr-n?@6m"v M Ajr8U1]%Hjir+ף >IfxCe6``/_0yz`W* EՇ5 ZQO$ r`X .X?Dc~"U}V'bRǚ6 afhӠ5gw-z- "`R ϩvDd>'qP՞پC5~`",MF7,o Zn=W0i_@JWy/_ʀAgzQ^ܙD;= n-oR:@HKpV"<`Rkfp 4?5uOq?9_`">L^Tݲ~jӟP>u`)7.K˨Gq-q@TW19˲&Zh,t@W@ iꅿrn0-݋#K).zdbLri-ZZOkj~oTe~hI.dH"ȍy_1>`WBȋRDUz",{4!ƽ֥N \Tjǩ5V=LVai]Gk41DD%kLZrFE|/u\~].BZp̺=+N7i =6㾖]Rې,Eu$nl3R7Z};ffU+-I'݋7M4J.= + 7n@[~T+g ܐ}Uw݁c_@Qb}ѐ̀WyJܒ +nR`At KKg +b--&ؘ(.HA=nB+怪+[~d&&NbE_ Ly ᩿鿤Xoec~Z{ǓhRgK.D--E-E宠r +.Yj,ŝ)uO)5*!,-&Rrc^Hb +Y\{ 2-tBu0 lQ<#]@bMb1Jt5&qꋩ%f8ud]ͳD:k0;1r%m"0:D]#|^qPlUE'k|\'.W"MUV%=*p}HK 9],,ܢ4A"n,\ +sO5}.^ʺNX:jې8?N v$'kpDZ˕.2fCC;NOt_ayOݽ &^\+l.m` q(KRv&&1biZ;Ueԧ;\u5ՙBy''Lӏ8ub2REB+Hc//ܓ$eRᝁU9E6t*OjGܒtq ^/Q|5=݄溙bՒn잝|&]uES~YP/ȘeV(S}@"|ӾN-;t۸y耋Ee̺W-Kn[0n, +m`NKmU%qh5Y/?Fk@[vz9Lp49er Y=̶gԵܒHi m6^+D%([FPyIT{s5\H~Py0jQkȋНřӟTJɋNP0N˹C+FǙ<2R;ߐ *;.]J(vI ?q\kz Ap+jk(p舺Ri@ +sKެ<3].B..L +~a~;p`;ۘu!,UXme 1&MW3tR/qSpSA8v5+.5Qܔj; */3![6&p'r rANDu.e\eՐEzܝ$&&IM XU,锴GP/eQR%Z +yTCm"$4RU@t#&Qa0t"oӷBym7r +Kkri0܎nme}X  e\hGՍ4@|D +b ``4(`  @b1``! (! 'q+D3Ł3FE[,&ˣP+LR-Fhh ,Lrϸ(ĪԶ5Q%XU" (82yɋ2\m[r&|;s]eԲ2!"ؓKPAdo'a/]l,mA\ +n^[-CH +$+>OUf-_@)iV[t 0)wR/[ykeOou./`q#WjOgp{gvTk yjTBUVAe`.b58Qd4ҥR$2D՞=K@kn=?ΪH< .r^tv.y %;V `USN36_oO ʓ$Th5|3d9PeZgy\A8+>liw,ɮ2ǠU1(D]$!+-1C/.\R#̟#.YE\hgn` 4$/s?U{{Ei"w%-y* +3R^b@#jw>Y7`!;,ˠ][OFM#wirA$N(wDl\686'Qymĩ!m-Gh.|Ԗx +<巏bIV-wb3J w`ep#"@Ȣ ѧ"@˖oSNUу@Ͳc{(~]Az-yA@G31?P.6?5I^,2k^nj?7MA.L&JuàZ<|g ]C"Vװ8G!fm^U䮤~;Ձ'K!+nƤ_PjKT)T\KAIhKIy&$S$Cn +19KE<:18n,?%>j-,0$r[I9I]Hf\ +|} +҇;2SA] ^2@2|HJl ly6\ A߸]%;7E Ma0Z/.kv#If{˩5(ئ%&Of+W ~thIJ+ +݀̏ RNj~\M>Z2) ).@\K PܫNaxnf>Yǚ Xݖȯkn4*rTJU&X6rB.Kb ÏKg>ah)$vH|G^czr}D̫:1c_6<W;"-W!g5=u~AbJIw KJGV+X|,-p |*\R7'OTg7b?`95"e[::hIo7FHJ2QPBX +okbWY`b\gU8cʬ/3B.xYrGeL(:5يc<;BTZp9~eU͍WotEG@ƱW6Y#V%E>xjL'?q?KAEdqRW[[1yW2­!1Us*˨gOvGWXnr2|#|\7bX&;>Ubdx?}DFQKyƤp#e/؞Tw~v T%;6qMFϨ{5T`tWRv?p*E__Bxyt5w@?n}Fҿ 0[%ЎX>I1>בu {> ʓQyw tJknT\0 g"!8~b55ȩ[fbr$X zV,_&dy+hWi-Mt).a 7ݑiX0 bu !8/1 T]<ȏT`` C CCB vX` @`0` J [" c cq-Clie~VF 0}HETPdP2J=bXJQd^EE$IF:jMB<nK (D/>5̖Wj&2a̟%N/ ΐgV& y/̏.ܭV]@3[&A9tLjo@f,Qg\vA~C,w AR +1쇒=lcu ˏPàŏʏQ:JۀDwTC +^=AO+r. 4Q"%2KQBpFK#hd2hEǸJ/+w@!i\-$K,+jP<怋& ݍIW%O +#ʹ%k$Izȋ[]Y'f̎gɆi-Gy"9Ag`K4N]Hg:ʫKrJKr2#S=}ʖW-@\.lj.{$˪k#+i4 jFc+IJ@kQod[v@c5VВ'J܀?5B&btS +Ƥff94qs#f5V܀יt ey -EFT$|O Ό̥8[ CMȌŁt*)"jL%E! +屔Zh'mV Ez,hKOE( +d|#UQ8Z8: eOEO"ǡAKGF ϡdt`xdV5Dl ond%ET1ӚٱZΛX9U*vl*:j1GQs-~D: o`,\M~T?1{ĥɑԱ,].l[4EjE'*Qt*V=@G?窺b*v3n*8ʋvN8@t77aY#`cXKw`-IsdZ/6`XG4VP*jv䆦̹ 0i Rz;;/ ;wEnBן@r{ .n'N<Ӎ,Qɍ!X4@F{ _A:rj Zfiit#kr;AjL +{}B˜{kqIE_&vǧR N/ۮLYe1M6Mse8TFkP49_=۰OZMP%dEw=.N JP l.Vb߸f@E~̞ujq[fe^ ] $Y@=HB*[ӕ<ԫ^p-_QU{/ ЪЗ ӝu kJ̹5f]LϸX,leUY%ZYubmu)U .\e|68bv]PzgN/K4y2F/'ܒ}XyFKvPUbјoVe̒O!3gc4VeSKrNt$eUuK5ueЃQhb9;f.W=P@Z;t݂, ]X4;mTZNr{Fam؎O0g j< 00@0  ``1 cCP 0 0`! Aa D$efx623<ten@hSgKV5в6h6{lmж9zU,I;PZR&?-uDJ28܀R}Iym-u+'SM[`'T''h +`V̶7b]x}=@M.pAd'E{%{W~@Snn̶- *ƬMBQ#uɃk,GA!"`,ȍ%р wMn˨M3K ۂf`"[ GKf|yy?X(I8݌dzhK3NnJ2f 9"k}C<݇AN]'n䢴d]~} ˘=H2G8 ,W&]yU {isvr#<< ]Gy0)C-ӛyt= ^#wɛ,H ^DmQ#^Em$@N35.LN/`2|KԤi G0hqM7avZ[쀭1X,)>y:E ĝ5r.%]@j5T/-g?9:ms^[!Ҫ&J5#ɕ&6;ehiw 5 CӔWav|#Χ$ +P/PwjwP,u!< PY=q2Yv}'xi +w`-1edP˨e7a]4 z1݆gӨuAx$s% ?`mu#(iWBM T~c`YQS"A̍t8չHʙ,iw"NMks*C`4:JUBJ}EAЯ:AfEDh]Gkk +~^I_ɘX˚vN;1YU}3F\ӴyؒڞIKܵ`8U-VMh^|<8'5Sc֧)p-N(9-zpVipmm!>>!~KpӞz|sWXi{CZz1>Gg +8۩q$RÏ(:=#wWCxSǕk՞ӊjt +̄WrxOzgpJ*Qt|K=tYoOד]⤯G֪oOiFl1,ޞ~)|-2xԸ֍I\Z+XGآW>xփ5CME2~Ĩi<,J,U?aGT8$NҚO%֕3D5f@AbqhI.D +>$iQL 5EYVkWr^t]Lk$Mb_04yK:H$#yk*]tIV}nG%Yہ_CeborJI;.eՙu@eT_=A$+ 2堾3^ mKѶ˪#_\e/2q7:iBxtCMVòSXXI̶/C!6Xv2Du +іI&ԉ%Q>FL@lSd D\"#"!L^ ʼu+xyrd]*OktMbϦ@R,.rX7]k'N<N7bM0W|Ղ;'~$?`* ȾKq]\|EdM\ ؃K<%ḘЫ^˛#%UɂXg_,_!yW-WIc& ȃE2nJ8,J|MMc(|b=ԥSUbV<!=vU'㈚Q\g5bX35@my̑E&'T`(Sod4 ؊ԒvQ7tDs.@%hoW69۠#\uMW;rJߔ +.?/B͞@V.EF@R̄Lӕ==)'{". sBk]; /4F_Py$btPz6<6iIӗ%(0"d!& [K8f@%'}Ǚ}wqrؕ`# of^B^=@J6`&VV~ =|$m^ZؕTP%~`M_pp\g~[0ܯ:riRVI'q\OM`!y{I (VU݉re@Xw6iu$=<dA8@ +5_]Q'"@}Ys*t +U1f2 YdAH u1yCU܄>U{ LH̪]ITp/4R[%Q%DJ@mVjr}ǟ6T:zh8ja"ж/M^ IRaJ +0$,EC@T,>8l/^њ/=0T +x~o雷JkW^*bϡxj<'M O _󏱕{Ili ZYhM ]yƗ&,ֲV@ѴZߐ:|iЛ0ލ#Iŕwm E1[O).EЭ-K4*#-_¬%~IFQRd`gnk>q4Z<28Ϲk_">Jd +3|X-FK`/.\՞wRKfPXrPtϙ%Z)QEr O st| `cԤ+ϖ +#_M5hbV;u]H1`rjtG:T"/ ܱbRRSTqU mU N/fs|⮠u7نUGQ0:wih +m劖d1lfe]`iBXX 3ukeY$W $D|Pv_ $"޺{vNrr)!6vW%d]5qެOyW͢>$P!,ێ)^NNT0(pwM4^ +A\ )֑ 7z kf/w/QM& tm2V ڀ6Jő+nQ_H35";M(eecFb.f])ߢ#]陋kqh<Lf I:}Ⱥ` +bj+,]Z}e<7.sA̢&_q8ǩU R*= +&M)sD P&$F,vc#@`&<{ܫ7a _0Itbʺ,'4X-^eɊϨ B&OPcj0`)q}m{h/~@gbNOjz=ԞKueQ3vHB:X*̏$ʹ " I? QZҢ*ZmiuH.\v!yr) J7ԫ<Ϯ[xscE.]FVY +q['84~C愪Y5y@EI'kDӏP)p n S\}ݘナwc;E>AhnVWOdd\]~`q؋^M.Wg5ϋ'.54W|f>s}y^/q__MF.0' ຑרwCܭG]ƣс,>A[\ +[$ǜ" +r?6v%j͐FztQS\/2=@9z V ʾXCvW>L~T"{v$0$Z\m> +vQy"Jv6_<6e]FKQAt#G^bIӹ(jKFJ./p+;su9!$Π֩)_f_"};@*\]fa审%`|rҾ*>] 2r/hAR#֬n'm8kd +P2J=٠JibK0 IWhD1+eє`eRI9Rǧ"]Q9vRX=ZOvs?9WsKC>J3өu'JM*|т8 oqy/fusџhN$_MvJ'D֘doMO2̑vfYc,XYLkS4RШ$ˣTMXVboh"c_J<> ˬu2փ-iibz\&CC\bUɷm\"|Ƹ\~oThm1fihRkvFYdK/rWv9ؾ-O#5ۙ񚔟-9̕:χmp˭S{3?Bq71:SbUP^6|;:]yBtjiGiUi[ɞ5*̯Hݺx1_J~0~:8tZ10\N>5[*OqÊAEo\Eo^zx/׆HS+hquֆ./2L&R*óX|+㮍zWpDJXfxZ-˪gʝ+Cgvфһwgsm%|5HV]86+s:9f;R|I4Ϟ==C3VZUDMc5SQ (NemC:A-d|sy6m4ݵ$mlQUقO-̷NKv >\*G&W&ŖKbyXQ: VW)Ynxt֬U[­x^N4v%RR*- Ek9nHY\%VX~Ab;j +ﰲ.}EQ] ҾYa^O wfkf}B3cE]C409EeKy1d)ԛTE:݇)∺4C̿?1d^&O;v@gxO"?f8-%8%HzAQH&ܒϙҦHOM|&Q{ #> D5V/ffkmH5cɁ;%V<ʋ,Vf^KvG6hbصbbEW憪EȾyI8,V砾}#{\)t/)٠-ӝhd,qo m3@XYf}@$z[!&Bks+ww`G%2EɆSg ,zd'}v5rk`!v ՝Y =6[iu 9Hj-l ;Yq`GncM-/@&؜X8 9vL,.Mn@OA7Rl'0,j +u\NɩǠH@C+cTjK^jD]4בfi-KMk4~X=z:dZ(M\ie_{-϶FSn@-[$.v̟0/#ӿ1ݮvoQLM_qWy}Е;tV|9[p'ND\4jM!`A]DܱI=(pl~\ff *U̻4BW,cz>@ `@!0X`b! 42$hb `nÐ0 900`C`ؕD _OԾ3Ñ|zA\ bcж1}#&W-QȶX*Hbj'+O]Eߙ4$V͑r`K/@r:IMS^@C+e}2{vbpYr=$;>ks@&GJQ "R!mP1_a; $Dy4+ / 44RwWՆ[ ߒ5[&mvg*q\yP%e`KDsq\ר ϧ 0$\WD [N(Y"%nTgWOK~WjRNN5#(ɫ~GW MnF*xW*tNGHi~̛'_zefg쫆V儭V*GHY~oVWIq˳pv8|NK츟p ++B%[V*t$ŷU5vY?Ƨ%-qZ}ʝ6$jYmgU-8+5Ο):QrMof[GVkǨ_t8ۇõKXh:)C#sYa5cWRT3{y}%ct>fWGc>s<.hۇ9C&&Eҷ{XqUcu>j uE7g#RRUpp飝YDO=Jַ=TpvgOx\!WJ[ruMThOXT[3R5#JgF&\+a+0J((AKakf1f#zgG &{/Upgt PwVPbZ"YK4:{eƵO^^k\W rGtsMs:%4ᘚ%NާO ʳs^᪓&N2'go}"o/^['3mEt"(F>7Kkb%`)Fz>Jg(t^R'Ӵnt@Qlg9G+9ҷZ5q4YM{(qmԗ/D9,T%?6 ꃹʫJ8Ԅk%9eԧ&)eiտ;+/-7V;CfgnU9RxIObys40jM_էxsTԻ5R+8Lafw3}ǗD9:-Jqfv+}H.Shٟ!hvQ'.rw edȣ;4^)h4ۍ3* mO^6>W&˾cWwfH t"5+ƢD]8>Vonz6r<'F\»p(xY"{3;;S[,r4{t)U4jE'M5>rH餾R9RR^fY[qN5G;݆ne ˸]irHU:5j|4G@u#RqOzlObSҋldSuI4B*M9[ffn`>WK&IDFXʘ(AUeM"nNRQQɻcҠڅ8.T鴝*GixEny`REY{)RÏQ[7]f\_ ΙdxԥՏ</}a{O՟=/~.qNNW-s;8*{>Z#tFa(K/,Ȯ +>5y}P.+ǝZ|kf5R=XfW}F%T46w0uWr ݡdlz5#%*i"$JhyTU>LmUڢ3V:ĕIs@[+k$%MudUـ\2֋d_0#$n[jV_kSq]vI屡}P8 ָ;UBGK"鮷;V!jvmP"4b@QqJj;hDm~W@d*16E`L*qoTAЃMEgN"Tm"TZli-eq.E[!$gj7Ǣ@JRģRIנ.ME+/b26U~k{d ܚ8Kxt)sz]aɐxvvӋ+R<^MW\Κ˩sKȡG6[gKBXeLb.ĿDseBKfؼ`u?̒6rjo263&rUi"K%HvDr)1Ө5ј#MbX6(*,=z0odvW _2*qJ;5[M4HߘY&PV +.]Aa!&FQQ\% ̺nVӒW%ؕy[ 6r7רq免_=S@WjZ j9:GeӐw'k5}ynk1nK, +H~d`*<5G* ۇH~5QC؎gagW{  |;X5-pW :-E}3@U5<~]XY$2\Nv304 ϔ /| :$Ŏ"R7}?)k.V2^cj o;v>c5}n6ŗ]@( !b`0 00  @CBC 1Pb!b C``@10YB(( )_UN%AC7"&QF­FYJcgȺ@,tg0 2A Hl\ .PrƧ&IyD2v*Qs4M+v %AWv)bJ5Z-w L]@VOkYmqep ';5})>¾gQ9z?aeo O-s-X *-Q(NVU2sBH[6*q>z)ې]%J^{.㶬R++?@/-w'Y4kXbt"IǸ@+QjVl>]gMnƥ"&A/Ive t{ayo-d5$:I= =nfjVgrY³eMaM̽XhE~caw&. +5'R`5kYck/$46Em& eok&,%\yz/waE@tZk-oCIs,ޠE_㼻[Y_` ,Ef''3v 'Z2ZQwbj;[ +Ŏ2aZTBtBMJ:OwA(rK#M44 R4dWz+?q'@%Eu#k$ȇ.yekX f&Օ.y[`,yUyY[DUۢ^by{KR1tdlEToD;;0zo{\ZpO3@IA=Lni;@6Ja4Meb*1~5fNΖJT6 #>!JHMZ1Wvpjub=?g %:Ud3? ?ag{ J66c⸞ O%'nP<;ԪڦrL] >px3x8|0ܒ<#)Σ~_L=|-gh8߉8u8MӋ|qxwղ!1,Kz#q7S7)5roMb/,D4fjtTLg#,izt([sTbUgPbNXߍE*uUMj{ʼbr *k vr3Ej7#xjN2:Q{<7K:zgMUDzDF-9Tqؚxڊ/Qvp߶[<Sq{[q=7zTT3Cr-˩W|ɉNoI3>ñjCi-Ga+:;tdczNclji`12SzO]S'ݖ#B"'>2@j<:ώW{7"w35^M=:/S*k|'"o,iV<4,U[Rl*eFURgҽU!*&d*gÅ]>EUilu= +vrUhXG*ZpΛki/j๔OǓ8O).r5g.'ܪ\M˽6Co׷E>bx>g<.kl8O?ɿ/ŷ͘F\ClT3O3qy[&Vnᐯ jinR,qV#VN>cb1gx9tf-z*%y|OU)4z.Bkڜv<\\oFr_܍ӨkAZG/ats1e7KS?:Sf$G6T1.ê)baKZXhJu45:7ih[i/ʍ|SWV +wі)v} >^-NVf:#%Hk^gʫ[3-n?N+``<\[yi-NQߩeEYX2C D%"AMɢk RdI>d.SY0xZѴyCqT[tSOt(E*UDYtm))MjCʿ")0ՁW^/!ȺV{cwT,,҂Od,RhNQ[q숺rOQ+oM!neT("t "Y乀8$~ijb̀NdGmw^M&]Y'![@a ϠK/F[,Ƀ,`\Ⱥw#`JNȴ6:1|Kf] "9͗4|+D|?<޷@I򰲢9:pha.+J聽7P%7Agf`;q+jȈdm/-6f5&b&I6hF\N( c %ҹ,z,@˰/t؏ՁR$~D`d{SHő<'Bql o AݎMDs$$Oi RS{&AЊ(ʪs' +\X"Qk`,X'et K JkRqli.Li:J?0Hrg5JDFK?@c9kn`t$5<3 +<e̡bc b В*v,zd[MZ]njDJ{-{BKM-A&='R[0h&]O W1ߣkWT+F `0 C !a`!  @ ĆCe0Cb!9@0@ bI(Dh)EtR-QTsDQda~AnE~%Oв4"} V IjN _`*6ˢ 9$ E6kD 5!]N-dzrF*"Wp3Yt4y=;4|Ff&|BT˕ajKeV}:05ULKtNK@~l:G,_ 1'mWǔlU.eȯ,`[6樷Oؒ4@X\}U 'nZ=Y58Z[5g8w +)R[a3r'e`BmA5+?0+H *zɭWz &l/6bd}:{Ui\n2JM ^V Ѱ SnMTilK .I/1N/AOd\m܎wAVfːjYp `ӹg7eț."qZ" %1d]D` 7Bye#vAq KNMtk^ev+y8zb}1k / nTrکɁl`(nKG`NK|rYgk55 ̺,M/2MH+.C`,S.Xzl ߐCwWq!$fƒKO :̓3]+zNZQɮ+lO3+<+tcɳEAn3*=\T^BWє֨?zN?K,Vy1TeT?P0ORzGn*͘|Tu0#j8Ԩ?2a0XENlz,ҕU'R*4Һ2 %CA*TskPLwy*}^%`]vOd\3WIg. ƫպGtJ4++;cV9xw[OZWskgc*iV'S)=>2e\cܶ3˱Swؔ)b/3MM2ׇ_^߳u8zR"<^KJͻ<-V[;;L7xwsI-iW)irєbje]G$L?KO6u ­ܛ[ݞ O8?/$yj/~ԨxW MiJ,KcRΞˤpyEFS~J+>WҤ*>[\e¶^u|})hbcs׽fWBւ]rk2exgCm^KkGg[uphFJݏr7be5f}]>/KSˌ<>g,҆V3 7a^6LLKgF3hcE:ne`xIǕ˃*icRaN;L7[ڽbZVQg%_Gף+ZiٜM"^/t[a|aĨ8M,|mc<{8 "x,E<ijn4{5M69bjOHEqU^;R]:RH>.kyÇ_nrק8=]Ηms#9Wn!ᶥRZʞu:Ndᨨ*iV35e,L?F7>!j2PFՌfS;6 hCDA9;E[=;NK@p*Ros`E *pK)`6*epxsyUO=Nn̒/JjVlq +Nn1̏s 6(TN̙< +wp\6tӣGx6y>+v╍dg̱F4;drO犒k6q<9Żl]3qs;Fbbƭ ;^yQOyC5lުů&^7(cVKI~_nzlnҜg?ns"W<=N1=/SJsFDG\?2Iɭy}X;fhvit)u:ƪ[|dҲJށ,;܄j_X˒ YVJyEí52d:}Ї^EÒ"e)DWL^y\9>ldq\=#t$ZʩO$gIrb&%X:q\9R\5heqo[^憣j *ʺb́t mƧdI\%'fF*5$, +`UJ.sI]EJKWølUJ=5N5$f3SJc Xus(L)Eq*#9'yrjq4SP jٗnJjqٜ)xѶ#xs{N=XxƬ򵦬*U!\Dnϖ!^OF,V"_\X$”|ڟaocF9^6|UճvlVgq/:f[ļSQ*էMHY{{BI^T3L6 R[EέQ+d6iÝ刄v@F4^$ʪbMjUujhR{$2G֬өqҝI%;\7լԪ#p KsJ0OhXB-:Ur~d)J˹*sdps[ 5Z/6o`y&eVk7T+ϩ,%5F4yi[BZuy;fY R.`'q 5κ+ }B'A4M5y@Ua4[u2Uatdkmm$%GNEJ=HW"MrmeatE֛ w!krtb1ipȘ,ZVi|8칆 +@WB۫hѷ&EufߐO15ErсSaMnX~b{z B< N,3ĖTXz!w`h[nI̮Y܅Qfq95+5R!X ҿ"g]@tC_aٔAM| $vڦ&Ɂb]IK|9ܫ_cU,yE7cV~lյ"U`hɒW}Y Z7< i +w@%PK]ܻ IuW.AtUi]ܫ3;mw͕Py+mN!f;6E6lZ\'t+ǨqHNȓ сf%n Ermz*Q;v,Ȼ]@I-'29]`6V@A-"YJ]Mُ݂$0`b C`ØDB`1 ! 0C`,0@bCH І042ˣ6n_,' +,|Rtd-?6OyhP&;v%rOo +˨:|,<$AqBU6^N=*KP{ +]X:PKKj:h;>e/$ $I7NO`32,_`3*jډ`PpX{ɻ/6pV2b.`3k'BQfM5ȽHZoRNb~|_D +}%N<0:]btrqdHiW +{+%̣;qƦ~wVG {̴Uy[%$; ˘؝+ Ҹԙ+kZfŕ+y52CAfO!~ēpэ]>O+6Q$ЧUw}7CԺ2HY+2WE*2'R[ݲ +:zywKrӑ%}F[rPRwn20RHj唰kR8{eI.mWg؜x;Ra1^:qMV8NM4<ig V0/i:N[9c%)}añU4cҩ(owFz xu*q8ND xs~iuhSuU4_|yQ>>o>r`5vz5/aR+T㸽+8 +ƪ^UN>b3F=L>Z*J=:wrˠF*-OÕ#S-FLT3.-5}RL66\٭iӴi\S5'vnpQ|zFp-5+:N7Q#&]nyܛra"1\BSjהiNSe ΣdSHom;T/#ֆa.喎/f+*VM`)MO ,M+cT(SkT]]#gKiΜIQi+5ӂRFYVjng& 7bg ґypZQ)GYxt]iaATIĚʻiC>e|s~|NR̭1ɧ޿S9I)}ϛb溥^3Vӓ)W,Yw'#O\G!Q'N4WVC|E?5kp xMvgjOY3;Y+p8+FjZ1ǝNmn%hŠKGi}0PI*.CĘ't|Qܳl?rc U?9"͞pׂЬ!9/8we9|WƷ:_ßWphoўֽLtk̓RR{u38hOGv*uVh{i}[|[-~#ð ԄT'sUt⮏G_^jRY_lt8mzSbј|JN[c X~38{XYWT<5uy6V"W*o+iޏTW<3nېVflsיDik p$;iPV)ѻ5FԪlUԵ9xoKzgtє[W hq,tj;FsG L;#M~父~E@HHE8}ZU>NCd5&]Qqf0pn+4fU&#Q'b<0i8J-vgG RTmax2Mvla|U0$$ >GNL߆Z9Y+xj88pXejQj0ba +5!jK/X^ ;tqq|=]ũ-J*9"vG+q{ڶJFGkuxE{}[_NP&=ލ.#SJsIÀVWћPӣ78Ύ:_SO7FzQ5CQOXJ942r{~Ҷ%NII5іYԉx;[K3qбNK:|IWgm.N9IJ7dYVF>ULsf,+wx'*JuWЃC R7-RG`"S NXx{4c\hU M9ќTZ\ªqj`1TdJj qx79:oxP`Zi 7JKkvAh<f{/^į`Pq.W-.+\+'8pRNEWj 4coI%VHW]y-ز@'%/+Q > t++vپD+;4f^w|%,Rn5)cIkdWȔjkq܂YEǔ=`=1_]݆@mO-E2_rt#yȩFwȄGܡ< WhKՀSkbIz儍ЪX7ɛU+ 9 >Z GW7a;[Ϡd:SDgʽ)ۡx%}ʥHS5T%kmHJ[Uy@5 fETj )Ͷ2Z/I`(S%e I;.񶢼@c#<&+Wy_D]K Ln.M%q=Huȋ =p,')u#vX30%@}I.vo ̞z@_Me s.RTw|,ͭ`01 @; `XC D h 0` @1  @ "H%иa|)_FrK2>A^e}l-/P'іFo,Y_+(S`!reľH:|ƩAjroP?F'?2Tftс|e rD̙dX[|y\-{ gp-Km{k_gO}$%zkkm=@+ɹFڶpqkp#Y?f}l$H3uw_pzi(S]2n$FPzMh't /v q(.֭$ +1`~MqV)zꉪ)!y~QI;%,ϕku#Esy³I_)&a~`+}Ed^ہ-[q:jےv +Fy|ˬ53 zG?K.f72 .LYgAhn +f̏2RL2/ + sK7|BXYtjo7R: ҚzZ'5Ɂfqfb*rc怒j?g]T@'6AN,JPYjFͽ Yrw >@ +ovqk$b7})k軰\4_cZʗPL%M%#S#R&,q[v%澈qW{0<>97%3AMV>֧%RÌ}YKo8JGyj+2fI)kGjb<ѳFU{4-ƕVݠ'|u{dK^ aJ=:y'+|N+ ƅfXڶu\iOtd^M=Z^X5]O<<^+I2/EJߘb03Рm՜~Ґ+NSЍƜUXj+Y\m9KC.2%^[ :U+(_-;޴"j|q,VfVN-\}Yy3_}X"?>IRgchfڧw#nl8mY6Ux=s{=F+\Cy*1b|O^_IIW/<Y=<[.iF +6 +Q%>&Xp(ӌb$T7=HVNZ3ʴ!+HsǚnBQJ9тg/FC1}OQVjR`0R4OJSWIνIIWS=6;=/zP^ ՞_^Nu97ͳ4(LkXa]kJu*kЭݭc8eErxw7hQr{a%6nM%B#5#O"ʋg(Z(Jr(Îͷ=:L oW4Ue2`ju/k3t/S +&oxw"u(SD0Ru9ӕ^J(Bm}A}G)ԟVG̗V0:DED'pԵz.^.ov +Yyr8sŸRvIY#MWO J߻<)KQO^HqxEI)=HTVJMʋ[a-%f~"3yY]%i5pRZ*nH<6: 8 )%)S:s|YM'+ux´]euᕝb`osxj40|M\$C5 f<§T݌jMb6ս"LT1sKե[Nzx7%+J8z+>34c_~6Ϸs5l>o5}MW:~7ceTi9cQ\FK~"zwdVSf W5N9N]"+|CXJa9xpSߩ'fMSCkD>;O{A ,Me%O.u徧k(GO$R<y$4=ε!ԥhOe9+fenW"47HQRDæ}Gmz5A7&V3(U׳ux]\':X5~3)OS?-+hamzD5T,&&Pm9Gff'㓫Jһ)lۻifnI^#SB +qk=u7J)beZrٵɣK~7Wf=Ner:45TuL%{0,T֥Io^NLXi.E3(#R_S(lnKEmdNdF*ahZfA~M:J%$E*C9usiz]%#ªVTh*~qvQ+*%Ѕ2.`O Z,Ng_=cE<\ʫהEˆhJMof|djGCȥ[uՆd*)6qXı6V;8b)5U8]V1bVzWzs_ YJR'cKo&g~^Ex=Nrf0> +.yh| nרmQZMnzN30F֍zJVʚ<1u\ębPON5<*ѝ9=,| \ …\&ZQs(pq|5O}cg?b(Rӌ5bG狍_> `xGPTQZ;_xo ѧ0ы\:t!ѦҕHqxZx{ u&,՝'pҔtjV|=<~H"I8fQŧ!VDfaN;'zU/Iq*OY7xzwsl*m_Є^Y+0/Z{W4li\: {79J6ͧiN /ջNR|9v&XXEFT',WN~?RƔ^8hˑ?qظŽfwJ9(ՏX3t/ӽ\(h|'ȦjTu|5tEc/ a9M3m.8D505N0IfsA-g@r&K+o_qn{oj[v% k`5qmԝRmj5.[t wv+`z=zirdOyc lrXM4,Tй]d[ J] !8t˝[A] X,ۓqM=vؓL0qZ$Jl;81.`Qi.`[N}QcUTIMuBtt@/< R C̺KsR䯢3)~dģ~rTqsTFȥV]XyDMAATOaߠt+)ǘGk+OCm1] 0<5EdgNqG2'jhY r"IF%Q*,^UQ/2=J凒z">T" +q?2&[IrbiH.(Hq`jiX;fAo'hcQ&l*’ +NtǑ.@BD\a8md]@5bn1Z&Ef]Xv-6¹0 -55mi߰]7( @0 b00`!B` @1 C  ` +b`1"KP@0  !0$lt(i4A2fh -/"GԄ-о +=#ݖE.#Զ-`MS@J2wKcVTTIGϏrz&Uq|\ZAFۦ+a7ЦZh'&-$ލt&59s:GqptBty˘*`Rr"ͪqݵ9ӶTq[UnX9$ +)@U?P&݋rClNTeFt'FV(km} ŧ͖]C,@Yo6G,sh߹]I5hCev;;.y lnm}@J^Z<ۻjI4m=lzby\ !}@Mrds\0MЗűP&2W]F7/[nVOP\,\Wюݒ >l\M'>+di=P ޑhY[溴ZdZ-\_"U_ [VjS5 eEr.Rѣmd7r[SmȊٿ7z+M_Y~fRS5ɻ-.Y*5mEbn]Y8T/eb&XHqտc9/Cq1A/Mf;c(ayk.xt9jSYfbܿ#5ZW*g,F*OE(B0>Nq{cZa^5%䴏1j+J+^Hn!àTvj[҄u6MFʮ|􎮽 MYbQTg0Tt*,>F-֤/xi9(p>eWzݞVIUԉЛu(47^{ڑ:]3S~SZ&ѥW1U5G&%rS)Rn1l*3{a1OS 36ZÇ%l\QgEuәQVz:|ٍvN5S*^M;)׆^eGlOS)9B칻sԼQxf{6⸽bk9M&%m4խύS][sqW^N/FMŪPVMljYU'IjJTܝ %}̿,I47JT6 ,a<_3SxWRT1\'bPf~xU f1)WZS['15kIE[@V'=<a!űC=קՍҜB*RVIic\;z}'9/ceXUF-mW꿱/cFc~Ic?8_^"OF*|ɲ%'M"ѫ<>-/P=V?B~1XJC[F D]OV:58 ڱ?mjT-I 7`RQW?ZXVrH3j +tkaIV_ ^pgN"|^/^ږ٧iFW5yD!JJyMgbM"+uA8:3'R5 pm֒^碚[_\-LLŬ'IXwT):Tj=mٟ6pn!*x-Jr$ڽaCtt"v% jkLtqML߇OibE3F0%Gv~C[жHĸsr6}C䮄eB/co;?FZ69\ `%Ș2|$PʬΤU"W+xY}P2lqн;%&5NzA~.ƬjC$2Yk]_.*|zXvV[uD88uǨeծrh\w _WOINTc>!J;8BD?x僫xl}{ư|0ju3+$dMݾ9,"!*MȌhG8J'uTt8Ng}r4S9r:?rؕ +Sk;?}KfXhGNH)8sҴpLܕˑ=c>pTُW2-0r{2==|GhInȹ7l_)Xv-n5$FH|5; o.ѳCjK+nQUwiFy\jAX3ݠjA].GE/؝V]i0 ><إ4`/iI5-.Op _D.`]}R[|s+jbOd]->v,J/LuYnVaW.~mH-M"/{RI[(rwkb:5AXDmҰd] ,Y$'%ʞsI|(yZl_Vrs{X2L:1.WWb6}@Cץ. hn3J-Ri<Ϡܦ;}O^nUW;ĢMkQ$ߢ!O@'C 6U[iԀMq)ƥQiy h+QraI=~\ §u̗WKp[ueIbooYð=CC9Var~:/NqŃcv2ʹ䎷ŚXHZcKab⏝q3Zn}zOaqmPt[涌qqV yCOp~3X w0Uļ-QKIpMV +>qԵ-gכt{ghMRovs' VԌ7qٴ{tWkRb^y=QTsX#<4WOEy}Nz1fn\GUr&N<*ɻ)[Sdmo[k=5cIh X1Wܾ hO ғχ19{Cx=^^N?:<** 4m%̆3hJ͝VY4-H--^ykFtGθK8UoG>E8ʾdmx/\\p1f(KRU$eQ=FُLK+zsw9eܹ(yy'EwWҔ+٣u,udaz!4&r_T_4z෉CB 6~qNgp=efGn=^PFg +xOuT˄Z:RZ"'4(:;Z*CEfLO9rͥ07 66$eⱍ՞iv-=bBŸ(oPu0K +GhBiNiL4r=T&G0W +R*Cܮ3U;'?S_* ع0O+vQAtfx=K O a\ZВ<ʝ8qg.^Mwȥ|7Q(&Q|RZ=¼={FP>!poۖc ӼoUTZ!8Lx2 'J\]ljP|# +Un9dm\{ϊŴz _ + gFX|#N#<-zK4N+GgS bMF8JkoWVi;Ɲfˍ9ME r)( +\F"YaIIkV#3њsdaq Q\t%m֍jtm+ЌZ+Us| uxd| QIvcRd|zglm,]0-ĩſgƕ> n7x!Ni>ppq%J"֩BXx&ڝ WNJqr[4R&/Ҹ~ \*Sͱ\SĥR L+eym^ +eHTVV͚x7<)OGzwʿZk36~GUp I]Oj 2tܬW'<1ajQTfyEwǧEc\giq:Y̿QJ!QJJuմeЪ<%y?? -{\¼UƸRQq +Ђ$SpeG+=U׭ Wx?9<xrc4q9'I覮wGWո6%(pҖx)>Pk/?38Iw1Lf&<,\,N~pvG#&"9jSџE%Zk8X;['Zx8?%º*ic <`10*sC7cfc=g⵸zFzM zg8niJWl=x|*RP ¯}y+Q1./aub!ZnPz\j%8sJmuf>+Ƹw &DƧKߩ*nڱ&# MK`U:C⩯KWZ|ΝFSv I-KQP[X:]^IFCB2P3ቿx5h/0xcӚL]ꄫA%R?b{泆Z +ք.r6Jw]wGF3Nhڤoߚ8F?p9zLW^3%xTnl47R2QGG=O-Wծ92Ff&iNf<҇ѮcW-C +K֒G fOfE)%NхH1,t؄ܲJ.N<)B*rk>N}b1˿(B?C쫨E3v긵eG 7b_K68J,l+Qtdںw`x# Ghԉ~_bߤm/mA-u5a,D'[ :O㍺>GX;jhN/ WƤ L:y*:'KM}q:O=bטiٱ|\W-i1:]2v܀/uՄԖ'Ey0-v rZ!eRE:\ %PvHsiFIޝows")uW:3)w܃J)hi_sX3uBpOZ`IE/1UN $VA82˘.ljm--Z,!o}šWdc/?&#&j-28md /*ʑTҏQ&(gyI".KΠE'IedmJiH +Kg&噯> +$ԔjMhfJG|b6 FW$n L/%w(\F?;Xt)9$2!4  %G=rMfAMv~_]Yn~V]CQIǜ Z[ېznd!_K/mI(`G2 +}0m mqJ`[d t%\EЪMgX~bVp,SD_Kh3 /rPglwfu;w҄WYz$FY4m̪2Y0%D. e #':VARp &`)d!8$$M[{ wܵߨd,7()Ż'pZl+v,D7p+w[]A92wA| Eknn1 ,{`W'=MR}EӒ= \_pkl +=UQ&{`#=]EOyIlZI2h%@,{]M*ϡ%QVω=hM}8b00 H`P@ &0`D1h1 Ab8%.L#M;u4ӷS59v4S`/] Ja'2`..D:AV1{oЮ25mN4&mK(w2i>b~iwji^jR7:WR32{ % g5rFmQfi|4&I$R^pH IqT t"[ %gO [q< .dFՈWԖVa&w$qKnI83.Q++Ytut_n ŽPoHj2d<\t ;5}YR$J^b5ɀRSyr.ݰniRNS{zi@y.LI{$5.yɻj{齁jqpk["h4!%+.㴒 6 '8ߞZZ(A.m74JrWRcPY#= J]>ěPʺFR9WdJ4¹ +R"Yl O@"RJ27W.`YgRRDK15Y|Q]Mxa,Of&F'"kFz,If+.!qHᤲ/NDq>$ON\?:SʺS6>{xCYm7Gji2KUm&fxORO^5tkgfxG/f'vZY&dbpu|fk41ZkCei$_VgwcT+ӟ$pОcS F(I^16oGk x&)Uj-PoIX0!yrZtp燫g(T^|wiq:[q\ uUzK|cxWB^Ǝ8ʋ )&::8Y6s|-xIosq|AU>^j{sZ۴GZ;|M9ՏtrhwOfO gUK czU|`FOoHD1 ~rõFtkWj7S5MPK𐩚K[~"ukܶ׬Do~:4֫+Nʻ\q?^N${*ӣBĵSq74ӎM(̾gsۻ&xo6E V}3|5nY"<'X\5w'5C|\iW GN:˃V2j2QKs4zJ&%39LrZBSO<،Ôiiz>ioJ79x:ܰK S*kS%n-?mOWYjSצ*R^=S^ߪx_ -|Ч_|%ђaIfZU6/ji?݉lTʬ6}+X0tzOqRݙ.ű/zsjTg?`jgV)M;3>GRPpP"a||aCT9|5 ы!hӖ]1O6Gjӝ,d+2TUmxgd]5v"YL#}[FxyNvi +SqYM3|zSi&k\5LB6R_x2O>EnogfMhkPw2sO[̻p\[QST'kOF9c*esDuՒ~|FV2NPxWriL|EtӕX-ׯW7'{p [MS}Mgj-Jzk _6VIB2mGg\~18Gָg0DӂcGFIE}q?M(z{|ۄ~ϡ.M=w  +Zi{0~T#%k=5Ҭ2QQFGeb@|wL8AG6 ,LԦ&fE%Z6jZz#_Ra^kx|珤u_z |Mxj=_%HK6)3"q)|^%W+ uL5Un0֦ڝ9+k?AK F{q/8:}R=??ʯU>ZcU./>Ƽ+'TJY,ϕq $8Ԝ]ϻlLchqt#bY)D̬uD}LG)DhT8ׂ|̲$kZfь>'Z8 NyN2.'IOgȮ%NyeG):nN:"k{HjbM^4F[r%&ƹV6c[>ƊXhgtIeW/q?O] N'ܫBlhV">eҹꮤOi| 4}^DбP[7)–f#Ti6ut:â^Bpi9SK9E7ѭZcE-OMtYj7552=W## E֣y+ iKN&]"f!ye8s]Em6;KYX,=f䕙_Fu2uIe7\1'̜xj[I[sf;#_ +F:PB1j?VsΌ3M mXu^F'yTNu&COOj~YJq[3ifu"!i3=\jruz +O2LxxԪ^~>EBVJ~-Ö o\^\\v,Nt5#Q)Fs(*18$hjpݧ8l(,6-*8ϔV7[ Uӫ^k.5)'=)Wj{v~Vߧp8|,Y=O$Tԋa(͢xEZFpN&=ݢ aB;[vHh43J6?CSZH '_oD.@h J4'ZMɶz?]JISMugJtMrm"VyMdbv~n4k6 ^:|;pTڽq/C:r6TTlNc_<>m `#R-HI>üU&<ѷC)%GEbԖ|?3JLO^UXRSV8LUL-GFR_$: |6H^TEn;{ M@"2FKs +:.zdVF/*Km=4_aeq6ŕ%IסJ6]V_Te~렼%My3JױIPT۽ڹ912]yhAP%k+ŷ2OZIK_%beC+IN=e`ʖMO9BдM8]$[I ZPʶZvؒP&bq'R.zji'̂Rd+j +1+_~_!$֍]Z0W8khB3; qA'}DZ[FWg>+bN;W+y×r Sk]+VHJL2],'Q+ǜ V Ij)!6@'_qǫ+Iu*] vWktXnV*h2Z\3mncRkvA~f *~u[{=)SP-v<_)v4)ǝ^Zˏ,dd0J9_0pkеԅzz j#LrtG@T˗ %_f|@ V4{G7ԣWcSzpEr9$I +YeWĹyuN_6'Mrmghpr˒e$7RT'=5@EDlO@jira_`v'}b̹&{7XJL}q@)u XWVqA\&(t@K5 + %} Fw[D+\י-5Nim溆uR5t#%̺͒ -K[eN}C?@-rb+68u'vX\&4 G f;]4tY+>MؼBcѽ"\SDw"`|C00`` @!1 bP`B@1 !  h !`  bbc1 @2Q"D"nhbhM[._5/WS΢lYQNMi&[_-q)N2Вq& k$d!*_ߠ]jKHyDWRIo& [3bt_ .IZlU.v l 1>En~}IB_"Ж~`I".$A-&]Xy;Z^\uK"rqFrGR\T4Dp_IG\>꫓=R"^T(BX*JFw={ĪX[<$HxD[9qїTdjjRzTfkҚXZOwsCөEm5\[8Uu/nu>#SJf%S|JW,MVGgxq5j-8?ǜ? u7N\- Ux_?ţƣPvk|mM}9뇥RWMvW=߇czkhTwK8k"uGxYÖ&bRN7h&T7jʕ)/k׆5u-۳;sxƿŪQQ<{'i?iU< MY;W8ro7|1VfXM.z__ QTcBQ>w"?b||}ˇ_`ʍS:>IvxgBJYE.T!okaЫPN5RkꖬJ:v:|N/[RskKRRQ"$yff{`@WpbSO٢/FZ4F#FsI"V.x^O^xR\' N=B~[kU8o0tahp=J +|mi3vK)Ҳ=I4;p q(-4(s:xFMi"?zK/f8Ro{G~W`fv5D5w@bTϞ] +2|Khg&".7zgm=Эe %E=o_ $ +Mpt,7.r|edCu͋w]ߠnV 1ewO +m'洽b) f"^j\J=Dҿ2^bk`ROi\M%ȱnh{ ط"Er^Sg5nQd݅fMt؎K}IM_R Yu ˩SIwݴVߞR}Kk L2D\jYdiu$YE uD&&:ܢ ]sŭtjOoƢ5R-n)B7NyQogZ(Ir`Is" ߢ&%)>R9J]H,,~eG&ٴMEz>`]uwe\ND-"-=P4r9@-K+qe$/7W{ys|+i";hvKwԷ4E𽀊lʺ wЊ %Q%̃} 3EJ9>Lb"V=s?@;-щ*y!݁ Rr۷0+tF{]qjӰ{ĬV^]ZJ6h-"0)j±sA)CREBt@%j[Ѳ.nAH ,Kil4ȭI [1hTW [3Nov6qeEynNɽ,< e *78`FONDGTdKdqMfiuЖD)Kymznk4A_=I mVJ2iYh2Ţ<|C`! C D`0@ `T0!@0C b44hb @ 0 "q"D efl 4B,оG|bH5,ܮYiL're{*8bIrE0Q奭_R(I|RJqގN"O-AQOXT{}n,!|&ӫ%v(U6OW)9;A!gb)7%k6^ +nە ͤ_{z[2yyT4+GȒ]21857m&2qrc E ͽXRg_w\;BsI\Gݖgd%Ms0lTޚ .MS f5 Yl!+/D'V\RR+ܜeyJ ꜯD\Z4fL_Y )}F8r $\ +mnhۛ-q[e@V1{Y(.@ +݈7m/z(N +cVInl2y{\:kqYvܔb/<˪c’>IY[$)[eTIEj8ɁFTܱgk[%:<)Au$e*dSB'%fѥE-Y8ayT_x(4|1_5+n6u[QJSv5g[ DZ$8.DZ2Ϝ3[K\/T +D9Zf<ՙM?׭.LiJ6iIL59*7k_SΩ9Gt<_ѾcabnĪFPӌOtSRi&/mFUݜN!դx.׳8&&ٽ,?)%áTȁ~*CPJU:>hՀkFwD(CR3)`ފ:n Q]…%x*ixl4"tO= +^dT74iJ\NE2^a$[:MC.|#4"VO_a|._s=n!FˬvӶwfk +jq4(ף5NJBJSzw;8\>POHΌgR:3{<^+eN'g*.^dW9RJ3jqqkt4:smKW nNnW[fP*=> qobakagOetQ븧 +&WOf,N]ʔMV@Ԛ.M&"{]KSeѣ+A+,?8xhJSmo^_ӻ/UXyV:N#R +.N2ipRj#z׳jjwG|^UXo%CAjI|4Ϟ)8vg>S}O?x*bvq\Z|MGwq;v&m<ɟS~3 U^:&am[F{T(B+h |Oأ ]9(ARk̾F!<lWVm>%|NF?;2}7ļ^dxrXT~ouhRsw؅&ў&/< Pwqi:w8|i6=x ^T_8tc,YAo [$ ^8":skK1_N,! f7:嵙ThE%m,s|]T0.q)OJ#s~O=\>#ta|]F|B8jɛCMwDt]9X9J Tum27b0*ǚgGR#82|_ ,DhN~]I|Zf +cFV2rar41+ΕX-SQ'T'x.*S>!N-=n +YjYWCJg]uR0"Df\Oaj(b*ym~eRO̧5(>i#3`BM"K Aq]#pLA@; 2qOHشF*N56n n.8zoUs0G<6y#wozx~/?gV%yr>:዇k 9&+V?ᵥFJcOU#J~d|=_/̵.patKN5~8ڮr^ +8 +W}xzKߧRz;t'{]_YN?v<fl|*Z҃'};=^)&_'z.-՜ۡ쮏TRtX%r5CGBKY|=oޜ,EhK-\3Z1 c' ;]FJ"36LJ\Wkp\WQbSMEYjwwⴸӜnt|+Da۔xjFkA;8VSiG4WTrjinspAgmt:OpL/ +л>_Okڧ{_rХ5 yZu>Jc4ο 5[= + 3SVI+ٟ6\#?&yG ?3rt)1^= +~*9Uh\8zr bC4TSU+M[Fp3YeYYKoG8tV1 pyVd$ӵNG_uT&tw!dLB2& aKq,HԴ9[F}9_%ktYYQdO?lП l5XU]/ 2VΛ98њYj(ՏI#QuzOTqWjтQi(-siRIezШ^VYfXgKR1mjf7 kޒd\)?QIuca=? E_ VCMXi.y mW%}cӟ/ *,[UIp{Kыɦ>X֤x<];Brjfcg*喗:sGaߎ~VpA݋x<4pJ$wuf&gJ&"Xzja:sT6؏COfA~`W^Jsts15βi͊L,d5^naZv&l5jI2\3Jup]h=8y>*l2-%qi +g[jhޱb(q$lhOFVI[7R/4:KqI +O\o;VxFx+,LS1M){i{ʩ5)ǩ28۹͡E58(W?;qwf:zz駧ٳN2W[W.qq5!(\U'G\糩,+MzoWċt#o՗zOt;iNJN`zE2=9x/Z+q*tܔ3ף^&'jL]εɵԕ^7B濩V[gęq\%Sv(.->-*[ggs8HdU7PƑMN,h;F+{&5kb|El813ڶԗ ^%qʖ֬1_՗6C=Yey.sxzji;mq3IfwEǖw%ܡq5^:Tp_)N-=F:Gf,*&JBn:ƺ8.O+5̨wvЎFݑlh-=m&+\ q\i>T|t%~mp ZlVd T5R;ϙ8mk7]~ xJw3f숫@mSITbKr n<ɭYقmlJ75m y64*{G{ؓ(EّQȲ5oJ a5BwV +rD[2F܂ &@W or!فv؋$ .`gtZ#IT̕ɑK?k،FԨ:-@əkʄ;S\ +Qw,ȃnU,JeZ]gKA{Yr:Z{^jV.joN MH[D5t:-E*.U#r^boVQdlѵN0n|.y2>Z\ +v\&/-̞Ni33bqV +kGYyYv&SkP.RfT vfAq}n@K<}H\g%wi]@Q&RQrY?D\G+݁$!;27 WYP%Ց[I鰯>LNl340U&i<@l$|b^lldjGY)nhVp/nr+2Wk-ͮ_g{T}澈 F,^s?;̽ U@,E .URZ83[qزP#ٮMdw7.h|r9P*O$Ym UHKUZI(@v2߳$uis)NC aݾe +V5'p-`A7iw -0uz-=>' -%.j_hQeB)@ 0hb01 1 "!  H@0@EdX @1r0Cb! CD∢QihhiN%E9ѾER|k|g +;E}t#lfQיtU0t.(Ԯd[((W&'Mld4N0Bi^%JUA4"[hrKLȇWn~y~~Z{:u:Qyڀ:UABckrw{,ɦ#8[XɿRJqOX+RW1;@'6Yz| +\jWtI,Dyݫ$/JT}ۀ;A~%"ف7$9+ +mpWWqZQvODsnN.\YG[$4J*dZ(wɯބI6 +qAxr%9,嫩]:M:M 5RGZaը륎hSYbb匕*nU^+uߢcN {G%İkRO'^+{B M{<$gkv}^ ҉aoҷ VL|1Ƃ#U^QQ?g| n3j+2䏩7 VS^J6Rimeˍh+Jھ^sBTf[.Z8<>.N?LpW'霚u{g?0ʴ#UiErG*˖_WG/%Zt%zXIloCgR3x؞%VXjJR;y|}usn&zs׻i3Ŏnc!G 15]Ir'JsIFJ-VkMG¸l1w2*Ih{(ˋOWS\?PSUTX0*yWa02IIi}63TҺ3NݞxڌQN>#ծΫ=RcM =8Lݘ:]', ¼Sz;OXɝOXj椽\^w.emtleJX Tӝ9-п(VoToሆXN5" xIʑKuNw^pv輯fe`jޜ .GM<IvqIz|#8*u\B7&>^%(biB7GѽV:#SYKit9(=c$tiMeQ^/4Pq؏Y3թٵ$bC[opg;4if#d驫=gfDExQw":o4љ9}38~*u~/|.STc=pdk8ʚwç9$ kWZ4'1/b0=Y2^GiaIu8<^u}\jrkY+(LM8gۼ1CAZG>{[C|=zc`3TЧ*U2V? Y&_J%8_)_D3*n} +^ 7M}/ `- +!ii|=heG؊PA>EFI#NT՚Mtٷ]SWtoGe$=FVU쫇~:yZ |i1^l3,.9QNMY1XjBE#\cSB^h/V|ZTݭ+s1S7Y|><;FryIh&UNx'Qm- GH ˷SijQ)4pa1UQTsJuiRUeh]Nb3REiO鞒?zҌuxMI;M];pĸ_; -jU)]'N]9u#Djp^ Zs7ħ*rvmvx +R&y! ]o75tK-4pqVw}(Z +sF*WwJ\qJqTB>e:w\ɫh3їp8ѨUSj9ٞ_ƿ nl M)oXw3? < uJJךza`&Д6 V_7!ЩB:Ic MRkV&NG{xĽ׆|3YTB:2%xIf\J,ZޚvOZ%G*HOר Ŗ19y#g(S˩b[yw +E+, 1M!Oa(4NqG%Qތ冭} +? +ޜY'+3ʬu:a*xKE֝=3E)y?IO:tRr>C)jrI%O# ݑJvA.^Ol|O]Zm#qV0m9\G4'S|Uk<ΣN2:^)SUfW~ 9?kz"Tc`-xqJP)N %E*x,)+7k6u(C8Қ K[Nm1xxb1*0J(Cv[ϘrU7"*&Zzz1;|*;lK> i8'lex?IY#ʒ8Ζv8oڕTN<u>ǐ~$W>;WQu5m_R":CX +|eHU}~vky*R6M$BWBm8yHSu8Ֆ-|MN%JjIyb*Kl/q˹Sgs-^&F()F#hB̔qٔOV_S%.ccNҩԜl2EK^Ʊ JƔyGRĢ:[L2>`MW7)FaR1݋1վ I7/)zKp2J8t3ZxuGO .0rm7bS\&NXh^\:VOK*kԩ1Š,Q"Y[I_RIY;S>e m ˓7!Y.EZBz]M"[ 70l).hy:Qd]} Y}@Ⱦ•29=5@dkt!$ѭEn'У-NIs!*z]-I-E \wIsbr* r`)w`\쀒E}Ǖ^e5N'{?1`\yƫ% ǙMl+ CpkS%r./6 ]/sE2@gi.wo\ˈrZt.tН;UК^]&v@dO2m_ 8<>>zd;U8d9 88ާ&h…9-ugH1:N8Dm|}I{/al%kϲp~]pՏacjq]߫k[+vz !Xȍl +bC2   S#8DJ ^.C-mIp,a-t5N)tԢ,Z3 +Ѕ8HAWNh39ʲχЩM¤s'[a8ΚPuMchW}ϯm[zt26 +>:ѯBnMoҫEӋt_2ՕS5)PKWد6-mtDWEaV SV|J(aqU %\3VL[L_/Au&ι8_ùҴ}QZMZPy흝^x$4'G::q?'?wGQ:˨m)7КUu)_YhM(c9k=,g8NJoxTSaR} FRU$xZulzFtV[u0üL6#?\ +J2=?%}mciG_&WJ^$k0y~x +#%ZlN1#+t|C3</W ϸͥ]iҭ s$ew 08(RNr|76OiVRyi.l>0w-Bvijbp=42wi]s> >>{S/j#o>>*=~V=džCO; ;I.iE$\6O!aJsj*oq/p*eim՟7`Rj46q՞~)}=k>Scxu|Gmi'UW"jtv\Ge֧(UE-e MՌ[ѫf-uo6.Nq5Ly^Qw6qrpdTcG1X¼b`+kIߘXÅu4hVa,-ZU.$؝7ktJiVFYT_fA&״j%աC:Ꞧ(bp}$pDz NTShiPuvgRWIrű0[ښ: UxF.έWrWX~L龲xc +նuxl#N*mnF*5jb]Ҝh'Ti.|yuz5-nd!1J*5Y[೾\zY޺z8K$"rWI% +p,%kة}q[ Jۇlvvn(iu-ԥ/B-.@%K.ȩm8 2̋EԲ\"̫ =^~ 6Df@6.2oab9ĕ +yim;t}XRj A+ù7m.@AdR|=݉d|YwrW=/\"2|őu%'ZIr P( +qBǞHI#kiv#hɢ2Zj%V/ FR=GG@؃Vh3;fQ;l?2Kck.2*&1dr +}nD$Q2 lb +kUDoS[ga7(G;PIm&ڗ>bȘ䄠2!R[^R[tN?qO o)?rPSɅ +N;5-RhJ^Rjɴ^ ױ]y!E~cIT'ЏoP$ز8rkr.--W31[EPuy.z_wBtݕy(N cSII +ܞk=J!eѺ$G,^̂&<,s@g +%ˡtf\whjo+lEmqnVm#]DGhR#3Әf}3*y$<}&h͒r`[DخfOWHرJ<}AwܵˢzVkfܙoRmCM7Jɶ *I+$2>1P-qOe]Hё@SQr%o{ \un|.UpӠ +KN`#֜H5K5憢`(!o4p^t, +cnK;\/Є֗ #c>MG GS0kN`[u:Or/آIM(>b@!`1 b@  @0C @Ѐ"C0Ё$0 @ Lb,  @1 b`!8A_h#Di)iӿP5r,J)In] ]d#Ͳ%ܲ.=´dj7X /[i +;v]E- +"dr \d/+U' UyJܫ;Bu@]y~Xa*_2W-s+Y>dZLx@RJPI|j7c}YS͑V#,*%Y옼~P$4+]űRJ6Jr3Ѝhxųu4xb':tܥw4ϯ鶐jjxp(4ofz0SD=>KmMKԝI<5};HF*<_ӣ9z52Ew9hWi x?ь}Y yŬ v% i|~qx^KNf:Kb$-Si6YiHb~#WRu/6KQ0ur9 +y`:'MiV'{a(ݕSykQaZ zH:R3,S,^ʬo#^Є䍵ŗ;8 +<M5ɝ-5$z-e+}NV6 +:骴0(:Z3WK9z5fAEC3O^<WFI.ic.L4V{PO^H64NNVu1~S<^%xSr:| u?U35OFXj/kН*3}Pɥ&Sm2j١S2u:22<ٲR4ql;RJjVK2GC,#JRG.WTx6Ijy͡FmV V2wSRQ+X:TRqONFop\&3TRM$㴴l_׭bcƿjK|A>EWRDShZ;??R_XOF.QSOT' Z{WþJ\qͱY^?us|\pӫ6ety1X +?Տ؜.k^<>[Wb~Z x/?x/FcSr&KwʂsOFcih{kIt/r%`^`Ԏ /{Klk=m t?m._, ڬ?܎Od'| /I\m/@ R/H7Hexpox??ۣ^uYVq%/G.Vcm=?d~F̏tMN UZu,iiO6۱[тvg"':>J嵼5VUzHb<7*+TYLk9qbtpۙĻnݟFY^=UN6qϱCbr=_T MKix Ms Fګ4YN(%fV=OuZY1)vgشjm'}?cј/G="N1P7','BOߵ"ԥErG5?k~q?daSb1udcqWQ{G*+)GF 8l]EѲlq +*͸4Nm:_\˲?CRM,aO Ezqr?.05D]9O/ؔ b+k[8gZ&.X~87QipmJ0ўzC䓃O{qn3*ȩkKAZ?{.]=y>3x|cӢGW˒,?Xg/+U)+4=QK>%>U5ϖ> ƪ&M挓3eƥ[XFZ_.;&qu=49\_&W)͚iN)3 x[OX|wU!i&d*<)c9Sw. + c3},j^1Ϙ +8ˋD>#ê$KZaOk5]OwøRQ5{; pgJn|]OҤk-OiLJb/2~YJc8FJ8zK&԰$Kˠgu3ϸ.'*K˔HïNiI ;t5iԧ3*sZ8?lL8v)ޮIvi2Kjtb/LOF-WcFJS~݂O%ak^>KU/ddqOuhsZ4}j78KR4H? +{iiWd]C\BURMym?pp[QZ!dcpBM~ Z/m`'b1#ᓂ +QK̶:iF9%񭀭dxbinM%sO_óR3628ce#+6/yFkTz!VO ;84>rݑZ]²mWӖI}gR+v>I7;iz13r ̍ ZjjvkJҔdrx^6X:QtjY^m5G+FTq2OgĖ1f攞eeS\LeNYlO&lgF%&ԉPޢJ~c:>+Nl u3UЪRr"m} +&MD-S\̏s9?ؒl"䕵܋Ulyy}堦29Ey%ʹ50Ydv6@ l'&%I E%o+Iiw*|N1٭J9>Q y[-!Y=7~Vw\Ti=)>좴[Fn21e&溉TM%m1r ͕)XIY$S.aywNQW|ڄXy N3'+wznۢ*ָ?S̺kOME!g}[dsv+$FF@He~q\GB2hƢ nAG%4I@G,y !6D2`AxS@>MU7B^m=%Z6PoD +1*t *\&g.z9%%6VG6M65QM3)d7ԃFW-ܩ_Hy Vv!%,hr~,:ڑTd.s;F3z +_iv:&^ɰ SN)M.A:!*䞛. 2u.rkAH*3 SD<[R|ASѓmfnW =&)kyUWDRkhUJIJK: 0KV֣L5.7J6]+Gbyؒ )qm/;V_ wN0M?-r,>LV|q|ekCopS {jdl5K$Y%͒zf⹙H3H )o(VUrs}-9[κMt;t ;@QH%kZ, y}宣 ˨ܓX։D5܋s'M@*^P +qkziЋWݶʈ7kMgItjW6;j `! `b0І1 $E*hh@ȍ10 @!C10 DAA} ]Mhe}`-2yS.[)ɫ +N)ٳ\l'4V&1Ƭl*؃R[(]K> 2>q"wޭ|Nhz>$ʊ+1yurVZy_H`KW }M숸[ U2Iߢ#+METܚ)i]ޗ)Ҹ5$1+rM{$$$͵׸y2^d^@AM-u!} N7HZdJ?+PKvl2ÜGȸAQn[8`/'4 =P%Z;?[ݭu#,EoRAhj_V&ȩImrP$F@w*& [k9\ UV[/rN?J݅'IEI$T +lmuV +n[;.4 +$Y$%{_RK;: \L)r[ܚqyIRA1opuiF-Ħ#Gɧ$SLDZPݙ×q*Tj*3QrItGm_/E;|sIcx=\ W +Zv؟*8JzR:KfI3S=JҔͼ;f%NҿS'm.hʹxsZYO(G4͞hZMIn]֌*Mf0g+ IU_s/Q1i93wX3{j/\b5+SMFOgJi)U-[ܙ{ Xjk-}S>MNNő>fjtӥLt}T?>gt_Y^:>|må& 'n'k? S><;.OO/pUK5}ώY]r4̼WM'IxzV&OKMRKW~Wq:XJ*gص-+N7KY>5 #__p''=?}q/:_C\k +#d<'':e_"ެ~#dQE\~xsYFsN )ݟaV8^meN=ثQR)>HW1+êJ؊1vdva|?N?-qOP8Z?R3oNr*Tniئ3 l|nyqUs;+Ƕj+q_ӿtLw}u~|COTqT5?-3qL:*qj<|JXNSF,WZ8:Ssz4k}·޿sqSYEt]>E8^}Gs'QrmgRsykq^Ë^RXx][Tއ~Kť/GƜ&;b^~>3 7Eʬ9+)vӎ}DŽIZXnx4ώ**䚱Z_Su;u},wX* xl񺖌HImrJ[EE܎6!7|EfHF +yV[ܱVg֟(JSsJoc6Zީ ? (6"Mj+維KLvD>'ȒS+3=iJݚ#jqM[Tre.`{_ 뀉_cz]I†h|RNҝdaBv#|5%tn+K K%օ?STڋ]”xSQЊqqa؎=gږ6s}H?G%)z89ӋMY"k0F%RtU#gGZkn+i` M Psk55ɀm^r]Eu~l C/'=Ƭ _bz\Aϓ]8ۑv@QW%w¹dU صof˛:FYBW~w̛OVI\Q+&5m,2l~_MH`'NyW`VW\BoOG>T4M#͔-+kar_S5Me;@d"pmZ\lV~LaIj,o-5G ͭX۶ɲ- mbI@N7ew+jI<16-NKcDϧF +ik jT"6 MAESIZ'>#wBi`,h2Ǜ~nS+۰.ӣ ])s~O/P^r+B7(vصeXJ.;nխs +_]t :jl^Cq~⼹VF4 f{X>/̀O;qwatӶ/R)7nrЃ|ܗN=XdO$\ +I'/d;,S^{iBװ64Z$$ I-@w a=6 VN`w@W%˨8&р0M&' .ZA% p.p[QeVi;O,jQFdIU\:|ED! u`YI8C.W)l N.bKث9%+RE^m>lN`HiX")l'$CnJtKrJQMEw=+}Y+;Ŷ%<%Mԟ7a\MBP-SLinR z~h=U 'e{؆G zP-L^ps] UdIA P̬- Qb{/E\y[_( +.iɀ$0`01b @1 А$C C! !`  `!` DV.}2204A.D.@_[S[-%܄bؿQO)=Պ'Ql&[hC[|ce1ӑbԣqo8bχl{[( IVR: f +f9IkZ'$"-ļ/nr-ȃJKArKl?BmJpaUܱVmjkr6rv+)۸|enn5sc׺,P|Z)|H* 7cLa l(U'oA?RNo>@%7oG:/R*IE|Pu nwNi=(JjZQH)Y4*P&;i`-gf,=B̭'rGJ50IY0}jA6V8OGtay:5EXJ*f(j_GhY\൱"1[^3{2nF3u#yLS4`(4=u9cGSѹltbJQ#=#n +7{,:1S` qZE|VK ..##(kV3éӣ$uG18!1]rjY[$z-/aiS++kxNyЍhE3'R2%N[:[J\FT%cXYėxS" +UVgNzJ f*s+FS螺m EZTY涚_"%֟h67 FbZMs63RFWG+'&.sYpRT8a)F/nSX:ʛ̱ҋiiSMƜx=c%&<3juxyAe{>>_zέ +^]:M(<*gNK; ͟[x^hճmv=9n=>R=U.GCM*Tt“7>lzRR/E'%£,7-g>ZT6a' ~Go˟J-wWW6dŕyI'u ]D05bG#?c<7<'V{:WPm BYVs ۳E.,y4odx? 6%y;E]xsO2OyITۆ`gZQ}Ri=e[CCs/p q~&u_Ց9Zj}>瓇:䂊wVZR]t)Xv'ZU;5 bt Qڶ~<Fnzys|j|. a* \S4ڜ&123pLWF8jFo)<>Cko Zrgl4bk^XL JVYeE=HWw/ڬqti%Լ!rIO.ic>>֞l]* +ѕ?=Sߵ: <<'Uvc(v jp@x|(@M,`:|]w Rkz<ں3oOk)k<)G/ +4iڬʴjnT/}:E+=q:is#SEBq/Qz^ 0OyrZ3]8*-6Ӎ|xa'.7¨ћ=8x7Ř(Dx~+ëPZţ~ N:Q[sZwy~-u'GG|lGIPc^"_"A*PEBTaxuKi;D,1\C l+vi>'M銩~x?׃_}~0SP.a"'T߳.Vuga~Rǵ(mc> 9q5Va#E"tiWch]T"X׍5NI7e8)bx\l=sLp ?~k`iYS_d'-z*׬~_Z{B)jSr|ϗDTMY%s4䢛d-9\C4±:pxpaM&qWI;5eGҊC|o~"c%7dpi֒9+5k2:~NrW7B ++E7p) QrQKHJ)+54Jy^9Zf}NtIKO=NEr%P5zJYfVqG3qU#W4)iߤI5q+pUO%pG-'i^2-U/Vz9xJ^xL\O}9b]:rԻsBMedţ맫m;E8-Zxfך4*h4UV;,l11Z\ufc|LlKjzy/! !4յ@H.7KEѦDr]7XY7]Bض2ęOSUk8Ikbtbu&<94(;Ei8UJ-?bړ14Fo7u*5}x+^l%PtxׇWџ.gҊ~'8MYۦ8F| a^p;iç5ՕS%?>֛U!:jQ LjTYz`N8 QOXG7˨ /2WJbwE>Y''- fie&G:)Q݉GGvbOs``gBP.hsQDUB݊6CV0p +*WۼZEԓLq%h!5Ioh JnM ZȞ R/^U@s*O[`kA?2o+,%a"6Е:nrQ\Ŕ)u- RRiQ%';jj+XPxu(V*_&-ӭn2y=D"4㮥Zu5TJ9WGiƞih3ξQjSVѣ`}X[Q|<+.`C^³˭WV,pb2kP!.I8ʏcTXɽǻlY_[8L^DP+ȽXeqӐ{%m9 .%5BjOe@%$IJ.IY>ekd(NVvO;-+Us@Sk,vВ|OvW`gԎ|~tcrkKF+I@<[| E[p%\iBue\M YݶvOEO@<}, +ھYhz3wl3M] a-ȜiF;8i@". 7o2* 0w\gɆ^i.BsotyU$0&JDt\Ǧ\[sV(׸fLV t,}5+@v%uYhO2~@Fv}Gdː>.W|]WIukhfHL ZK/&;(Wr:wm@}q wlJ܃?|VMh`ok[uՎV] $bY$W۶ۀܛ/ՊO7D3"$ [wi ބql345Hv<ۆ;%p[Խծmv}29` +MsD!e]ř-`"o +OEWD4orwתy .Z|!`!! ` !b  A1! bȢH$00@!Lb1 @ 1 @c"0 '@%L,`/e]J`ˠ%da.l\EB6 +"[.bZrD@%>eF*`@% GbAF>qFAdeؚRtԯ@N +ѥH>`5NCr\(9>Lr"IC[$ė9\Rhde.('/AI&(%Vח,F +'"-Œ]Db扤i'e K&vd$[ MT7ad-8ۚ@N-_V9J=S#$[}$K3} +oD+6Wi.@Ys`WF*M"} $"ZeG '5Q3l0|ß46s[] Rͦ3p`^^J{:2; + 1݇8?/LnJZxS iypv?xz3Sv,0tSwF1ׇؗqV_\&Te֒kFc9\Tji'f}6xf;8m3i؜=LWF(~&qPK6lLA5U3fgRa޷K+Pa JOCbUIx=OG!+%ӣ<]\N&5Zweg9JUJ:X {~E=:8UIII\ͤĻEfsWLY+^2(󛎌qtsv̬RK(Q]}]z+vzq#4ˍw*C~!luxdV%ޓ1pϕLG~חT[k*=qO+*jf'VvN),8:<# S^4i+G<>B48~eW|]FEBWX<; vѤn3R8l6y qKMug񿏕*8y=#1g^:s^[)?aP~ۣd3UԙkJ;>cN2ZmpiW;XF.èʾ68+I#>*K8PE_~3xw|U5KRqJEW^qSm}?MO0#Y|)/!~o _e, 1'ꚗ^ tTKMzjxR jtMs#x;c!))Mdze=gZY7-hPmQ:+*ɴRrbut`J)ԫQO4[w;GIhŵ);fG;&|/8)E'#7Ve>">lWgǴͧxwK?Īpi3b+:mv!ԛW13O#Rb;@5`$H֚ P=8|sacN* +k*tucXr(R&ߡxʼ2 2\ʝWtP&i1)'8c}8|3;3ϣ"%giVډ{cY9FKѝ8rXJ3]$|j&0Wxg&g4jGq'NOGM:zQz2*v;k )Z8ͧp~թo6jO,{2S㒷Fz.+ք?I-\7('NV/F}-jkFk/55_86Fy:k> GmSq6:gKg1ݟ&tkG&F58lg34o >$0Ƞ[I-"VbeuݩKL"eG*R\֋S>5޼χi(;}~1⯻Vz*vBˡ渽w:.y(n<{VAԊeAi4,B\0 ^u)ȓ{11<<ϛ!rII2Vn\} SWQRZnaT1 .fnφXyi7-s.hpX#BIɴ#-gb0Zs9W +PZ/\u$Q۩eU-bU$&2%W6P%%newlVUپDI~Nue%c0RϓKf\&XaI#U +KvF*1)QVEFV4cn3<9s)+D+I9XxYr`Mt+LIԃ;avXZ_RWĜV]r"{ GnK/PӘ_z.B knǝ.d,,JN,oD4úJ@T6BpӨ]^%t+tu}HŒ,-"_ + aEnQ%9_&,뚰Wԩ)ۘ9In&)Ϯ~`Z_Mw%rpv[$ Ђ9:nc4(VKvǙ J<y Lc̖Tg= oTR.dZt%XrzS[r{J<:$Qd43mKR *r?PW\Wwe*'Oo⸞1m==I6t?+NeH})ҼX+(. +VeSQ#WajAe˳J:\=ں9pzE{$=7Ӟ~uh$/ RVWK2GF%&1is%J7u<]BtJ]EMT뱹^&= U-*-V2zW/|Jw?f߭Ea# ?Qh=cK՞VO +x+[K~kJx,Vwxgj3u+=`柱1XiWpB_7b89MJ.͟oVn#!l-wJ鮫jKpjjA åg3Ks=(ٮfs#hC~6uk-╸'NWq|w/?F8f^Γܑ[Dia*INRnbffg21}W}&GkONձq=7ÕxZit>Z?xrcBijz_g΄%iUYbC^ patqjoNp('] cdt{xx/_~^쐥 BYg4uqx>GU YM;-iҘOw.)F-#x7x߅x٣[_%_ aTѧR&fGjp=eSKJ뎏jGs?37ßM]))pw#OV.z>qu8zV1y ++_%;y*æI__(qU<ӊҢ?hXQ+i}^ҡ7u(z?<<ڟ[8:/ +ˏqiC Fy~۸'NKjTkR>0]\4|NŴ1qqHqRmk9NßjqW8OBuJKo>!Vu+.wxT~o,GLd*3}zR7X?pM=KxZWdOG?aWƮ*zq ;;EGgŸN7K&Ru9P\ua5+Z_^-%޿#jo??e癧HxTk㥃9/&kCw񃩎1>Ta|w!SKje}iGo}׌tiJj<ӌR׹s*¥ +QKFI7iV#JS}_ھgksJ(l~s"5wtZqI}߂u='bti3<6yLJB}Z{+YPE" ]ʔO^ +ttbWd)3Hu*) KQ^fp{"q͖<ձJzN;<]cS)KKgM:6#^yYNIhأ~6ɘzJEELJw8TxqxM7fLJN-K=7&YƆ9U:z΍xvi[8IA$sӦvbfQZqqdfn3i*3B +/+86.|{\i|U 3//$׌tfyqe/;~ Qx*Jqd'28;WZծy<ΕIBkNLb<+=:8̊|G Ԛ^z^^h$`x6I|7%֮jWCz`_Ⱳk BuZ 8&vik1b32e8j2-(ƻPks?kZ^Qvx}㇉+WRۙW:,^Z+VOfjLZ-%92VmE R}W&f2K(@eN"2YJE*eKw܍ R I5ѯ5kĉtV1FjI_4>!8KFr ǜ_#'u3Xl3UZS14ID$VYZĞXbrV-nG$[ƫGّr&fXȲKWNMIn62tCVn`e´vL;3Iv٥}+jIs$L"7OڕN˘fg_Ę)5*.ĔU;hR&gEnnWJ Ͱ, IEjZsaX)[ݍϭCM>@ZZeoM-@ݹBOܒ^5Ek>'؋򻃋^̒55XBCRQqoF5Pytـ.nfE [|$} h5nշ#q'y/i}EY7;&ʐg%[[~L{^+]5h[] wdW{$.LeD[\k]RƬ^gkY ȷ*EҾ -T4J\ªqd|95$, +|hj|ˮޖCI^F>\`Y^i'ЖWmH3Lmk SВf!Yl y`G^{Ѥ1DZ%?,Sne; 耡}bQ%Vn;rHɉ'ԂploD[34K?V' n'滂z #ޥFC]B }d.H̀H҅ԍiJZ֚8>H'\FO-&ё>b +/.Z9.-}@NKt*&nW 1Oc܋KE*Y6@7͒Sd + *艩d}vo}=H ě&⻂.쒨""EK-u#RNXyU FGK ;2Xy{.tb%b$`]/qF-=~@ ەǙBqw6Xk/4'%}"z~J`8齇tA(-n7+JA=@${չ?-H `4 Hhc ! +Bb``BCDH! b @ C&1 HdF`bCaq  p @ -J-E3M3-7heƈ%*ؿBUc-RCԶ71Bj܈Eߚ=I$~@vtbQDS ,^,bI.䘝-7,IE6k2,wKIìʜy讂X}-"`,D5Wd'DW] [yjW.Я̒V9Y1䟨OloUd!\-݁4.Q'yrl:_Yf>`< +-2 +. 纔Y̝Zjq*1|Kqף˛3/3x/`8vG|ةqsoG +)4rܟ_ e**5~"*'Ͳ-(N[33"o ҥxj? +u+NUܝŜp5|"b#%cwjt̾q.%_!*Xbs9{xKWR4t_?[0,Gz//\ej)$;z +*Ҕnp5G!Jߖe:פS[~g A.V3żG~-KLKaxl5s:ܓg+jMCR _CWw> +jF=i|Rx,ZUj5vy8*UQoCp綥^>GOMnIխR^mINfw*\Wt!p0\H. \W2`+&\Lp2`+ ZLd`jb!̺D*akµ8Gٷ!C >:%<]l"%Nh.3ӣ˜Ogm1_v &gbO դU?S.3L6&Hϧ[Ż? pz=UѸ83,x+^,0n`R͢to;kƜbTPj9UݏϸMN3Ƴ]Zc:0M~5^TƂ}w8Qʜԟk"Jm?_<31'K㕷mW\w8lͥ8J Fw/QFw:Jw^'ēUl{ca Z-;{* x-9_"^8g GI:v~apMIU$4Y[PXb[eUhoZҤN&q尿/E%_ +cn%}lξ˜ +(P0M~5.-:RmLGKnaN&vߴ cd".oqRѧQ;Ŧۅ8\EZXg>aUE-5Gj_osSpқZ&ЅH8|~xKՆO2ԦoC(IrsӍZQ;e׭NƖ*DqZtp~]IPZ>m D!Nٖ+WјraQPU]$3L/FV .^tjk8h}gxlDfjह8ʩ('zt?U|V-:6˰jغ񣇧*%bILt4j)IuGNkDKWIe_?acS~bm#?,,1t:rd'\>G ْcxOtZ%Eu~Զm_~JfU<,<'bpZ[j'g%߹^7MXb_\oeC_ %4\/\||3R<&*RuJI +.-Y1"]u8jZi^#q8^ +; +T#M}##SX5Yf>:*;#ՌoC4q>_9fS[ 9SCq\rxyvj $W+wjkm>OtR5 ,mlEy@΂;6+3~Z R}R %&<oD /Bq]dOdnErܭ>c+NN"kr-l5zslOdJR>hT}U{Uإғ\Qv*=Ylp ؟ṳ +`4f6RՓN<Z=tX;VܩNW;2̶jb\ǯ2Y7`Yd؋+?1.CJ/d9Ev>eу'ՁejFRBϓPmՒS)k)J/{6MQZ=BRm*o-}ETվZl" ]ǝ1YW:{Q+ĕEYoP,qKSEE|_%Afa}5af8ՏIԧݾI-uR$BQrQGYk<E N}PݷoݕjoyWg}Yy2 2JSh'TUv+>\  @ hbCp! b@0@``e "H! `.@!@l@! b 1 `dYZ,fLhp6ld٢h+L.[(غ2@h #4Qeќy -"Ul 8" +ېQ'5pݷj .YU#I}H2Ԓo'&Z.V( *xXI9uY$ bMiRqKy LֈW YI(r6FK]l8\9p[W4^TZё=.ےMdBd[Dl-lU +/?kV" lEӃDCWDIUft/.R^vi{ _e#Rwiǣ^O2BqQU oUF'/=D5" @U-H.AIY~vM([Y Er Alk&܋Eٱy;d$ydqMYdZ-UJqwehN;lkQ+TtI-BΤ6Fʭ1eWkSufn(ҩ2NB Wt*l!¥NYbG Tl!,[-@E%fZ5"УJq{;gMMsG.LN-QkG%F`:%f/9m`vv!᱔Gw>x/EYp_Cy]X>bV @z~^Z)>쯉~kS*IU4} U,-.-Jx:rGtJ_TJa.NMw9>?)fTiZGɷ33EGB.z#-Gyn9XL߈XD̪=JOB؀ L V7Qz5іj\Kz։^2$+޾_~[p]JrLCvwp~-BJXZQ9;}Űhf4ֱ|ʸj^V2LB48o)2fNǷB/|fcr|Cpc`t 8Կ:L>m?|N |/S?7 ;~e<0PZoVzO^ro4 *n?,osmj헓i.{p rw\.0nNr ;\.0nNr7 .;0nt q%OWޯ>?d|"""JkieHN\{,zq|kZ"|./_93_~#GWqS:k7Rג' ҩ*u"88Yz,ISՒ{jgqSUVJK[#u8~Suj;E>l3 _JTSvdw_x*Jixӊ!5Xf4G>k~VWv[ +'J8.>Lk1ThEI+M<]x}=-I]XpJ)L/bQ(Rk;WOZ77 n~ͼ?GN8)ԔSsru2 +xk:OYEuOМe] KΠFM3Nb|EJ_I%剘LVщxLvsXN.WשQs3.&֞KN! dn Weˮ^Þ.~ƹUKE֟cKP—ԍEK⍙:НTV).TIEOCեjߌԮN1~4SXL&Y\#x{|+T(P!+%ITj*RC}]tFǜ? 0WSwQ=Ho\wcRO|29䜣B[4_u{KjM(Ճ-w:t`8 `/Rqo$ޭ-?=V!teo5OXxBh.]Wy=~Ӎ,=qoᒷBP8 &"6qKE+GǼZ8bbү&a|q['GXfYQaST4.Yi~&pzO$N7gxhh!Hm6y24Xז} +XZmL.F7,vVj# ̚vwF%K٣]Yۨ=.zjTNUZm>g7Qx&yq1]6чRΝD8cNa&բ*{ܒpxB} 50*UZFeZ^GB5;|TgN[Qѿ2VK08yyXůuO!W뺳pڳz]̌I礟B#۫VGٮ 7Λ9~1)6כdcÅOp MKd?f^ ~30XD)שYʞgٟZ/Yᵸ}Xlw7G1Vo2|旈8 +r͟[tWxJXY|pZu⒜SjoX}WVZ~40BK[ x!OV\[<^UVI)yzs SZ]3N{9>f4/g +4Jz_*]ϗqfvv8>|CKH-!gj'v=vpvsR4I>xnGB ,gm;ļ7V/XġESw~ұ n5tX:ʢTˑd%TM8IpHлǢcQ^3%OpʊՄos~p\|.T(+ fgN?>9N#P>_EW<F5iR_{+(JERzuV#[7q3&$e9LO.X-rN".` '5ɃAQp\%qݮ{ܱHjH*jDܣW~"}Hd2JY<8mTVz yԏ#{n-خFpp]3@_dG.=]>`,2Dyy$R'ɓrӘ"/2/8B|'MXfʋEQi(S| _W?-`5VkvIU|VDg`TXk-ԭ[$wiE3[m@qMr +[Q +yqi:ˣ$ǸD[x] TCӠ/Bh4)RIk$A ŒQ !e|n TWy-</>ps=C_Y#-(Wi<Ms.`O'T'ЃT@'d;ZU_4l,I= =D8sCq&E>Z+ʃ%!݉']Eiq%{e2-˚hdmkdA4cv|>f! @1`0`! C 0 `(0*`b@ @1 . (` `1ІEEqEYe0lNL "'bri8 + Amdf8ۡlZ\+-l&"?bEZ RJk!<8F@Y-7G*{]V,Ib{@ FV{rW[^DJϞ=ZdtD5"5ɩ.LyKilyƪ[uv[+]MV]GzhCBl#hBj?InAEBˮIohYt&j +*qK[ϐ>ú{ ikEˣ-\2ŽU:ː mb)>tltE6.\y(6ހAkӑ6k(5FOm,.iPěotC"eԬGᾈ*q{!^ŊQZ4?2?}Ȫ=BTj#B{E"->J{2NR[&ՙygf5VQcP`tՈ,2qȟOf/'Ést.t{S]j1?## +^F3r%әɏ v(F'xktr4olFpB1Twq|͜Ja>6o*.cu +ߨg/~MNq^w@lIRviJy_R(ւ!sg)W݄zL+"~] N]քdQ%%L`񕰕Z3q\G,dT22T|h/]nK0iߓ +yd;&peA5L\$s00UsotVp>hU-}2U{AmS [N>QN5:m{/GqYek5yy?*kb/nL9SUpAO Q +6_=XD^3t+I(,mm5jI(yi/Dcu<,nhvgRS.{Y/s]b"gŬ+(ʇ̫7RJe:aialɞCf +9SnKbivd ,L׀Qm2caja$EuG61=gBZ', Zs=~Je+,z.b"?:?a$ :Zt5xÌðʤR QxTG* +}f&\]LҲ5p*96FJteR'"6DDw/1n +Qz;.fe\[MERϋsjKSF"wfI2ބF؂% ed@^jJH9xJYl΅:>˾'}&r-ّ6[894Zj#/r =aĸ%)PQԠՕ9=.;1h!UGvC*JfQq\1/w¿i[7.<~7[lde.&֘ĹNfiv<+\dW`|KXu\i7;s??\ /lEJIe74pWR8W- rrmvas,r ;.rw .0oYp zw \`ޝrɅ޲r .r n z/>$FO%OY//?xyT~9G]{lJZi/i^5#1=ý7(p/ T>9|~378 JzӦa +#*1y?h0X J3E|Goӌx|>"cS1%O,$ӹ7a08 +U=s |816FRY[ů )8iӭīi<~p(xlTםro= `$^|%W>=c3ҪI7h*ᧁ#%(=Sh|^5. VSüoa1F^ǟZ31gMgp8xO^)Q\oen~1JL2"etQfq8#jU%˳}wÞ+ῴ /q"Qg}WFtls7RGR$m+Op*㕰^x'4yǒ%kzū;ybw+ oe4Тu'=7yy8HӊTos)JyfXxlttxyZLtp#v +2.F/хle8T[IpuDIg7 CNƴOS*-Oioz+Vc3/iVkYP\>3I Ia+5=x\Ouio3n{^tultR&*h21ۣ&sxt~3-B3w[ N9z zZ" +ͩV-hth6rYVM^O˼v-eJ0VdS[J +iksG PR,:ij}lH?tğ ^R}6fcR'0I^='|+[V$eS(֌C11dіn! +>bYm8ٞ?ZX lLHΝG-l+3ԍ܌hŷΕ>6)l]SpP_35NMnaQR-4a4۲%BNN$*= 򿖢vg'ޝ:8Ms9MbsY|d껼%Etr\"Z;FTsTg.[t=٣5FjtM;8 +*fW2LJsX??yBqK."//Nq2J5>K|? +Uz' +(caїxRxdxZ$q᪼K?NBo0\dr{T_MGtKe ،K1\=&,v䏌x~ޜ4]ߌ|LU'FoIHj]ܐ)2ANLX(YEժg++'Y 7&؇p \wbfbf FW(-D6M<"1Jd0SԎ +y1Qe]p+h[ "Չ}ld*^bƄ,89rUHug`T`JW4Q9NqrEԏ5.pUȃYCܕ2~5^|=օXe ނsq"7vD@ <:+zmTiE`{')( Oh0JmmWR0VZ{ J ww&!joW%fū'R*?̿!$+U#m[`7Iu`NAn@FT~H<;II/mEmmtJJlw~&%e)ߜ2KMG `M$M/A*/ܜg%Mo&bՇ5p_yc;. ,Qmh8Yof*i#* 77+s Ћ%`vp1yr[N/68`;T(ć;03l6it#maBr,td Mk0vNl25YS."`WJd5StwD7ؖgVQ[h%^|6!Yk V$lD' F>v]13O .i mqL5)% ʛ0$?@Y.lwy\J{<ZJ5o 'p4C/[Ms$srshqz6'y;mC#ŊO4?2OMkdRD +-+:jp]Bnܐ-PBv} kNIU>lFP}"^iVѤB*+¸pΕlBz +ʅ*ӮJq0ͦf_2_HbIF9SʔWS[ļq$-Ji卭f;E]'^N.-DcxmJW5e/ +x_2vG_-V#Ft*lq*ʥq,TaZn7QmYѭo[YqX.RŊn"Is3>̅I]2R"QkZT"$΋[妝XMi+3e -7sy:vm<}-.:ՌYЖW h:SN?Nժr]ta.z#ӟ+(q%Ok)Py'Q_k;yE֣Z\ysƬ--aeZA <[qErڼUqqm%$%yrxZMUNV6 Zi[S*|%.<5L7> jtU]$o BJuiΟ̻u2iF&vOwK$18 +>0^8 Z)jԺZ*]Sh[ak352/pU_#WάT=9T%p"4a]_]nB,|]|<4_4Q +ԸoxD1iuRFt9t/r1פ4qXK5+S|p|tLPEL~߆*.0&wy1\7x~fqñay+:I6:p}9F_apnU茭\qVFi՜HywKVtB)]rj|ΜF dq4Ӯr7Ay^"%(>qf>5M-#ԧ/MX$jTפU kjEQ).C V ~/ʛj->yx7)űGeQRaM,\4]q2Xy%8̿CbSNڙZ\TB2OEӓTuZU0Ecbj:F{uLuj~G"n#GRj%\c|.59oje W?S0re<^*_\{(aJmXxF>dꎿNXvS_FNӂ^JPwkSRl45],\{SL`V2\,X˱ێ<#AÝe小-esRO.YksQiB"ao)9BYq,-|lK NU&LB>7狨ĩ>94H_kΞ5n(3Uz+gCR>gqm)TFpwiuM_STe(m&|jqSm1>5im5k؍">eiP yD~qҟ pLY7YK'ü9S'ٴ~;G:\q~"mRszgծŪS_.FA(vN7x# -qU(MJZwM3/PVlIDdE{=I̪%-1 LU#=JJm&۸lTYxkIX~ZIY5iXփ8Щ/-^*N5zjj凍j1Vkadwi¤j+DM|U3=eB}(R_̻9#NiI}˔ӣ lBZr#-^79i +.P[W:bZ/Bɇcu'It6ISZjR+՚rAEgPTf:l2**Ɣnd\Th^\MT11 |i:[{ uIu;RIo5~<' +:GaVeԃoN:jo^ɽKc +oL*%ǥ=zΜtqJAҜ#~?iF/ۃYzihW7{%s4ݒסQau2v]U`'d(K2mv]H2I «i.˺Ff4J#\+rfd]Ϛ\I-btJKD,Ly1?%XW}I*$l~- +z$XϜjMFTh2E +]FK(4$q}-DtDRT!CP@!*+%.{5<\QJ ` `!bhh +1 H`&1 C!C V!E;MXxM5S,iSvGsEGغ8i=BI]/sGS+-)/G艢< /CE|0B>O878[oEض.]$Ez!?Wc,>-^ *`<"|h+kO5H+w@xВ= $keE +0<`izI7~oE=#t0<^">'I})AIJz3|6F^Qޗ\3s> *,\?ޔ&'-wf/*S >}Yj9/a<=ORg<5^pb._KU}PhK^S]F^=Ef;rS32j[G2Xr:KXqN[܂-mlATVѠ2}1#vƥ$LBMlGK/rdz)ӲQt̅bЍu/]Ke+znrT" +Ĕ!"ש 5fM4e9fsz#5sCm@hrok +ϙͮm Mf&&6Zl~lZiܯγٱK'|.湝WV]HVp ^=Q˩iAcWbz5Jd|" + ?e5HTe_4zrgr>WZsG]іWz<.)ӓTأZl%LV*G]J2|R-Qk͕]eE[&uMj/{qv_U%yfoC3ZW./4fyMb22v+JaխVc3-D̅%2uaRi]]0&uo+J;uomhE۩u +o)(8,ք"ՎI:QZu<]!yIQ6⬢^%FVv86nvG#nFtK^s*:pwMwmݑZZ>)CVi2R[f&ȍ:2#W /R"4.ČJ;+yp"'{$ҿT_M-*eJϠ,4^.b'7KhkOcRWVMrSfMrJ3,/LX_C v&!˙/TW&v/ 1S>уX?pr[䦴E_-s# # ]3WU~|'Þ(h9FJ]>]WbZ;Kv]")+6Y,ԣtvg148pRQZKSٴ +8r4rNv֬Ow׭fd#cxsFXJI65߁upTi*4/Rrkٯ^>*~$)(FѴcVbgB7 +ݚkI҈sV<CT:RN)d[/x;yU>槅U1Ev9rOgcʧT)>HYt.iV5)~Vv Mѫq:x;fM#gEKZ#x|Ý8E=\xXTEރZ)oN|\85 2dԶfO"}'U4Sj*Ξnx(¥O|f5kƵTZOاT+ڪ{nԃ,I}&:ڏe<4i9% fZI8ḅ8VF0\<2Ac^ij2IɕS=59ӴkIt%K)ѨGu8 %ILn8?˯\CI|TrTN^82ƙ[Z;ŏshSҷ\$?1F{V{f1簾23-;ܧ%ŕf%+Э-QfIG}QR{MnѪމ߳-J4bΎzXNZ[#'8%.~8E?VyVmOWw|]/'+N[koIx85;X,4ҦiJ?D{ +G)Rzdi~)`|_.!I'o\N >%NH̼\g^2ԮgļwX&v8-'Vw&yHسvOt{񻅗>νO[,4R> +לiZ=/F[rǭzTTYJV<Zon]hŗ?}QJN2VF|8X\67Un1 ɞsNg48f\VbIR+.O ZpgL^*!_.mkc P\K8%HR-RflH.m&p5+}hTe!WMFwáQĒ/K3&oڛV9vT^YYM3N;Üc{ݍEcCf>Owٖ.#Q2E~M>f{_nl?4E/HpLG0qr.]> 8x|O5ѝx§ᎅz1{9$bhڴҍ;wݥ59bpkq7j*VپF'/kx7C #VB+ُΪ+ѯ%g>m8~3=uGw*:G%Jm/ɇ/U{t>øAbiU()^3OXJ#ᔱZP5jf=8n8J ե4Ԣ^&0SPx8jxL{~LMjr[ԓ+Z~je1-!b&A`*'J Rn6oppf5)%mG VӋ"ʼ?J.S$T{ xo5%Зe/-0Fa2.piv'B9eJܯVf HEă +Ԝ贯),Њ_rkbE<ҧ.T/pE,U*fJ2*P[_ÈG_^ <.:9VxlTS&#,dI>c&cro25ʼVȄ/3lɐsob C:59-aaGv:o"LMl~lcO5V+65TJv(u'e(''̶5{ F̕˹c{ZW5m= /{O~展7?sʥD^|e\[4 $։.Szɳ#_Ϳ0e-Z8Iujkݘqړɱ%Z+i_(OwgfӶ3J4p=-n5{={n6ຊO[2{ tkqZVL KvA;-vLq["JqGnLKd* D=] epp̷NKM}}_26J^üљl +`5}Y_djeջvWkekXqMpkpܖxd,{X*+TRO':j6cFYoWDZK?@) S؛m;4Wk$ɰT䷲]M p&V^zٯv"y[ -nD]ؕG}R'Iu`<+ŀyWԕ7V +* 5&՟!k;^4[ѐS-z .2캍A\d/r6eq8ΒJ姴PZRW: r#t + \ƔB őدUwo{ݺP>j `E!  @41 0 `  P$01c&!1!b !ІCBC@I(ɦ񱢋ILupudduhΖ >#}[GgHK5!6o&)XO#eݿ<7 r]?I:~₏<R5R:N2g)mĽ=/O&OyPKhJ33OZ7XmU{60va&Tj(>O>!XVi[ih v֬S)O_6r~S>~J1Ǔ9V",L#[Hj8O)?rJm\2q|j*WƼKOo:0䈺|ux;?t׊5΄"+$x|@V꾬q|a.Q>`mǗYj/:<Rt-8)õ>X7Ix?y֏t=Ѥ$WSѕӥ#ů&>DE[}ՙ58i=!wB ?[,#Ea*yWWөSaa9v2TTT)uW VB􇀾YǻyڱWOоz^HOBOFh<5єWǜZfb7zת-/U]N3|&G.vO oC=c&P ˿m[َ~ ~nѯIɪf h00o*x"_ËQ 3&([/ɉx7mM6KPKױI.mSI*1}5es k?K}M>/ `=hMGA-#}JV^WUe|^\OoSctz#_ GU TmtnȺm=Kv_!?tX -v&K? mէVfqk%08O7$BQ8=Eς'08>qHt:8վb?[ c@S]^7aV}^T02=bsi|>utҹaC._bF )l>V:j57~j# Sx7Drh/a崲OT;R1SÓ_$g11&zsCG cc)e|tЋFVH,E:?֋.?6Uj(WJ'cBco7?ƵKȥٗte|~Ϋ֡*M*\#[ 7%w8+>N9 +g9I*q_ +|ϗ +u +u]djQj̈́M.ƨ)Y#"8jrR0=U(VkJ-lC^Zև¾SsR :ZEՍzwGJ-_*zNQ$2|Om.3JSj|Kr5:}ϰq(Wq0QC<#S(e?] ޓȥLPggpwe'5}SG8./O=/ITJN^KtIIsG&ݬ\̹e*r;^)*Qi^6R1zy2#i)W}=&3µqZJsN1NQO)b(SpS1pe/O ,^U?J~cÄB<~toh]Pb)(ʤ9$C/W؎t ڤzJ'8xgtb<)Q[Tӗs ÈxvEF5dv<v.XG*hNgG`(Qڗ=ި'apz|[~CN2kxߙWTQStN9*E5ɽ.\xM/c1/c7T*YQy^ ++ +3+2^PxJ9J2ʼ YƎ/ PYeMçֱNsTEo>']p8(^J~kb*gWYn2[3x}>Nx&v8x*V%9enߩȕ:mJMi碫FvqiZMfSP3N)9qKMp4bqpsb#]ᖵשݠDZ6 ]Z޶/>15EZ3Jx PO5=R&dqx|LϫjF;CT]67Z_͟qNI>R8Jc*w4CZ9f_1/xNpr 7%Tx^;1*"tN1U: F^%~.\?,MUɦϜqH=|FtF%%;SzwSR13-x{hz2Rlg~nFH;rd[+&ؘ7(JM]u39ZtSr+=wu<>u|(J^1SOVb]~)r4y_>u0q,T3qRӫQI1|bm?Vv/ W_[-:=JҜBN]wEnEz +ZǬv*bTs䭡k*rHrز82EP51kR0|NŰJ{SU.!d^5edWY2A'9uQБe8KFK\iסҚʬݤ\`)d-b[U%{v$"sE4g?ܾFYaXNk9w4[Aj(=Aؕ!{ZQX>-aiFYq^Fe2{&Y 5Y|mi&\oYq&N=(pXmiAkepuGMfvIP{X0]5kB(\%wk?Ȝpв4%#>]I$?*\NOY!cDђrٕ^{"QM)N]mF$Q秪V6<|agMI=#~\]'ԕ +v'Zёv|@ }+In\z?D]`w;O}WVqzn$G ˛z`FԱ[ BQiedA_aEp 6op$ աIjȴ՗2J] +ȒQQ.ZEy6)GE׍+_dВ<%հ̬qI+}!1^lW.4ֻWX(}%QEƤGsT__ʔ973ƦԹPܛ~e*@AK5(*tFhN0{"(5];tdз4?2ٶMb,z "Mj2mw%N)/m"ybA3 &춱 kyd&4¾l  1 h@ ` hbPC10@Bcb@1 C@P1 Hh$}$B4Qh݇mM(é*NjR]k Tp3#G-[)>ˬBx~NN k҅UrTԭ374$O=}VUo _e_ Ϛ_s6VQW~O FI#<'5b_ +ZQk:V.KMT]L1>Rwn!hZe讖Wq +ؖڅ{wL옼~i?she?fRNer?::lϕt`W~Y-o6:;92I}#8[aD_*u\d?)bsO#SZsdM)Kxt=ΩjNçK<;Q7GFؿS>ly8v СɍEy:ugGAХȌq=$ +.Zlʗ$k)R\;ݫ%ZeK 1 ML/Q(?R&-O.mzHj?%j2I>lY_#_1^/U_:aT꽴oE<:q?ź|}!~1~Bmt\9Щ]OoET9--ףc>,jz,/|JFUR[.Squ OCJ[)-ĸB%&\{~3> YiM%|^K/qUJLgx}* +xmM$S[B{UDd|8~*o> +4nȷ˧k~6.L3/֓)ї-Z (H_ jJ?6)].>ڟ%RU_; \3燢춊2%_ shWx?Sa.S5O &dlF`NVʥzr>%g)oe7 WskʕD<•J}诉T}{)Gs&jN>&_*jAP5J X\& |+ |V ;Ѱ.jg "q?? +I{cke5y{^_-t|?9|^'ЗS) ñ})(%uMI[E~W/se*U41:SjGeIN.23*r6FX,:؞ uF +zױFpdZ,"7kbpR,#aXL1٢ u8ƮhiGz7]ԓ].oV +̜kMm&x YTNZ\$ѣ ).݊1zU3l1+9+mqB"Q+FVK&63xsŴpztt7´gJpĬNIKI4|7OIm=_5'R3zFG 4x +iɯA)a]j*o4͞BZ9Ev.kBW&j]߷NgS=pb(CTR\JmS<~B1J_"^&O#DDvk}^1s119o&z*j\?%EYw>}r(֠[J/Sf'Ƒ`:)Ei6oV?qF5#2ҷ#粛;CUJ}dt' pt,Sj!,"}pFu cxg9RpBF)M\ )S&".iSJ+d ]%1r W 2ѿ-*8(Q%՞|KCѭʏ*Q߱8aJ)մ5G"j)ԜTH6`jSzF}n6aW.L4Kvq߳j%Bm|Qt:+7 fUswYOp\(e Tjw*x3* TJS+3xCRQN]FXKxbcM%NRŞleJRnrEmtPc-4.T*xYPN7U^'F`x%n+ +ne7d^.*Ghm +dsZ}Q4YN;F-- vnkp]?ɇ" SxNّ؎{-dem>H f$Z\s[h+5 Jb 0c0 HdF$@P @41 bb@C) ``!Ƅ.)E݄^RVbTrhԔvfUj{˩OV;EU#/vf^|tV^v-s9=)ti׏k}?S^ӟ8T~Lvz\4~õ6_ +ڳnzw1̶5[S{b~:|K(ޭ&ʿ M<cÉmmw/:ԏ/u,?N)ˆr̪eg\o%o2>ǧZK^m\z>CkG OOHjUcBY K]g9E5&eSjupw +JnNz% g'vy|KGGXIKF\;)?Sf n_wCj\3w3T8&%,_4QFO.fih>J;[mGibzjYrPFS89*-zO6e+V)'_u߃X{S+U >ĝ +Ybc'WxWI|rMg+;W%#W;!)4/B|,(sxGNݏ:t ˸ JĄWd/V6 C?燠XOjk j愗[# /_98`j+kC0e}G;~,e;$ x[It[]έq4Fk +`5K 8+Ke!:o.5'yXX TLՎeVafeu6 Gէ+ΖU+Iw~U }x6]/^?PĮ^T07iS#.eCU5~C b+5{8pcd5ˡps;v/DGBJxY++ᘾ;nٛGBPN(,=+^*Tus*~ќaʅi;ıT0rI*vGVsyeߙ<5J2?,|٣(,JL>K#:tAห¹a\,ݛI|;W JQjq|=VZjI^"R,m %ou>{F-$ѼJ277Q2VU8;Mʏ[΍7vGφ?-\ίx|^XBmBѣ&})NѫYy=H?uGwM:jQKt<ݎqRNɳIJ=q Zz3'\2_0['Z/fz|)=:^:$;|o fγD#){^+58Fz$qO+FJ+]:ծN +B1ZV["ďEcO.l҆Ue!%zֹU7g Rvg_S%-?EQ'uL'Cv31ҚӜpJcj>fw"w3ukO{JלS|"{^ +4o=tRlp +MMI_rN &FJI=Ѯ1bUBϪJv$NOC%&Ζ''k(Wб8E8|$+eCȡk9EZ W)Ys_$6&R}LbrVBUWq'.⸀>dDo+|evVEІ3M]]5/RQIt/Fub#¦:t1xH +p|-ɧSCԩEY{!BHe1ʓfM-$X &U*l!Zqz m?Qױ(OYMz Lnm"nT9Xq$IEVҷ;G̿Db TW ,O,zq_J]!L (; ]XBEdkT{3[\;kQ.ȕ9\^ifVG^rIF/V-jQ*( *h/Z~_ԭIle0'/ؚn +' nRR&ȹh Yr{IB+W".(ЩE?.BqLS#@ft? ] 2v"gS<ёdZkKgѓGvl +ܺ M>A-Q<^6YbW+fƣ ]+?:I7en'~L}IEnRo*md7YOw|1for%d+irmnX֭**!ހMN-I +%-!%W (/ n!ܙΙ$&MvR3%}+:@YkaKZ{\w!k fCU-!n /YrzvwwSY;K/8Г,^^x{ιjE9%ԍ$J*R{qŚIPnoԛI6#g@Lyʜu@<jM_d 0C   C0! C1  C"0Ȏ b2#w  )! h hqdݦ5f:lHgk_M=3E3aԺ33]bn nTlQE5~bYqRoеE`K"̷J %LQ%2aGŨz>E>\ S6#(_C$iO6M%ȱ҆]["#˜0z;_bItpکt~oWҰm)'bOt[+y!$!(eBO, ӤG%.A (.S +O"4h;&!? @fMhs$[74d BңFAi4To$)5cRvu9S62MyS r;|q/7"ғ5X2 U#JO7G.clcR4<{$ht"!y(n6ʋ'-i?ogڟ%y^×&.1i7/JkFwZ<ƎQ׉>+N˿%6"Z?=H8vkf~= %}_\ny7(R&2Z>L/9/B\mv%'&R)RN.[uQ)/:XwºoIƭ+-ZE##j5#OՇF2ib!Sf[8[^6h낕ĮZIbEi c< _| =sU**G E>\c~ ;o ==N>+2Q=x2B QURQ79ۋ{n V$x[IBOpLU+5nY'" 6R-qϗ мx||>>jr^/ $>W'JNv'Sy}-qzV,rtB.}K~7,moq~ThcZ坲 !*x' ģNS(Ƕb^AN'{v +UJ*[\V?59/cYLKAcT赺enS +,rW`'2(eƤ㴚-.Ve6Y)K繈@u)qiOu=tYOO]S<Ρp=zOQ{JǏ ϨWqIiQ3RZ,SJ͍֛3& LfSՈjd*l`y4Т7e$x㫯EMŧSR+3[hڗ#SC:otIm]Ro "T,4B|WԃisLn0TI%f/~?yX/: +G;外ݝ^Z?Y6|6Kɫ%W=p5o2+X600X "fV +[uW֬cxwg |3\|Oa1RS[t>*jDVw :V+"јeK<.(G V`x' tfVpt޼Jk CThlVNfMg+SKa+HoR2v:F{,"7)6MdWZH x~HT~*y3$&ȶ6&B2hJX'SW;7M|)H'S[ ?345}M օ B2yc<ujIkJd/q>sY֜e`Poمђ*HыP(ʼnVʋq-0(,I"$MӚ^ڷFnu9xXw-M 5 +鬶gщQ4}Q^Wk+і>1BPq.?K>fbdJr)HN)M1m?5y| s8Od '#uJ X=tx}i=[Gvt)+q陶nisb%oT)(GxL魩~i?N;$P56в_[~O!5H.,/`mr ֒bJFVc;H9aʝIuN:E{zke я3\hROdIr eI_Y"RKfbd]'ȃ#Lm䛏@cjqHD\%țv]"A8ȹN͍AZW,It Q!k3FA:R}I?r@6N$J4[zy&>W!(;.>̯^H2V犩%rv _z~gq'`yeKw)(Ւ{\bnPQ]woDBiXԴS|dZoI +M=3$fio/9D7r9!ͽYjE}H}KUHMUKEsfNRz@dj^Zs^T!:w@2"Jn;2Isw"G{5Y[]DǕő@MJ pSd<.@I;XSeԪJHT̑%(_E)چf\{E +耮.Z1eNKg] ɭ=—"M( ,/r]lk5QhUd3_fIk.Y{7lN}"Q7#'̚o@Wm;dB ^-˕9t Z#b_`"}z qait[bn,Y FD +HZdjKZmx򦗹KK#dZ]Tf| +:{:k[/*t'NՏ̶^[Y2CUWEo`1 bH`0  @ c"0$@; +`0@` Cb@1'N$ٮ1fLh} 6{`bi#MNHb^LtJ)h[ؕAEHI"DіH"")ic,#$BN-2HMDɫ&Hhv!])2*V !؊b`l,B³,X" v $04 a.2,H,Q +D XV@;XV *H^LzrSCyIlp Op;,\wAd]u5XVM˕`7aXd(>w"վ]YtC)R5)"]|]$Ⱥ)Sk3K T)>hH,z2坳GIlܜhAa̗nq>J\QE +uayjROدڍyE,{~\Y]I]~T#VTo6C/!:kS2"˪elft$%N= NJ,(tS[.].F9NhFAD_r:pdZD[M D2ГHC[O2Ǩ캲Y0xO59/]\n"rU[MVe#"ȼCfF䈸t'jG^|e][2J![UmKxdq}C,]Y]&BOܷ +B z:?.ijS3[^;BRWyEa%-G&q۱={?^NuNܔ`tfq?VN僔w cNkܷعkLF,J)AS{Zn ZߨO'1ѧy8X(Is ASfp_6fڳ*;Y.rF_)q)CE.r*jtO|yjxy 5(+R^Zueyf=kՍKLW98ˌqd#qGmQq\7 M?;Ci3 51%ݥП*?so Ou EY'yÎ=סt8z#N!SQ[bԂfm8T8pU_v1OҼAzjt[k4-ѫg*zlx EgN-c>NIsEgxҏ㪝}.[V'Yhr1^NHGGRt\N%宮F̬35mzk%U~Kښn"<2 +_wdz^SZE?bbލsjm}`1t%ױm3(X*o؇e0`ҏ&/*=FL2#S]Q 'ЏˑX #(k؁\jMsSٲQV;NKܬ4,euI}˩ql]'xUw0W^"E[=ʱk_isDLA6O:W3Q8n5Ҝj'xK]OWyb4Ie'~+y&qҜinKx-y7MiX39eOBʤeԒQq1WR`qXZaq +6^Oَ' Ėk5ٜ Qvid'} rhSjRHrrezɽʰNQZҒ}$kW$ܑ8af'MRPjrVrncM*ы4tYTu\"2mWe _RKЮAw*b)ǡ6 n\*B7!Zc +ם]Ej/v12t+2OMcF-㜬S)_vg?_K&]&rTrmUs&+F± e(L@掽5kjf7֢lֽ)fxOGJiI'oV숺k+i K'6$T(a9z5%Ͱ̊\`YrCSN7 +q]NZE+IN i7 m-feUu~sIfҽy[ 1>RhVq+?IZArM_kI,Q)% RoeK1߸IlN4ܱQ_^fG iKQ]=QhȹD~gk 2Z"$E,^2waۀ=̈eKJ2Ky!~UvR@J5?$Rϛ 0/U:Q-k,zn lK @h\2jnĻ3`ir\D\RܒkE!^,58L (J["ɲj7J쉶0A-HO +~R0/4Kek#,򚲾/p3Y.CI4\H]KQʹ&@|@!0cH0 0 $$pW@ "2a qW +M8M83E/|U8>t[3]XY]*xjha*NFx+ <3#3Xu4i̱X[ ޼e|E"aqʝUk/Uu>RD*/5 ќ7ͬ +Ĭ4;%`ԕŠ\^ڰ;i>`JV t+HY}e4"iV)`Z0DSX +Z.  ,Ja`,4+XB)\`C +@0YT;YP4eT!:E˔?Ek)Qk$٫*܆Sk2:v/SL0ϊ["TY:)sb]Vݼ~԰5(ߜ>R!5j?7.B/̕0tl_*OĬ\T΅R%N%V%dxI{bcgZ!:]ͭf47#9v8 T-xHDT,ՙG"4g"ԧk8)%Sȗ3|<ȱSHٸӇ9P%Jǡ75ˇ?HyRot#_q69҃o!F~,k Ot:Qo,S:/DnPyF&m;1ˬ8k)v=^<+FP V|Gee׬vpm~9ͫ#O%Jcw= JI[+9=!s~3VKVњ_"MsԼ4%"(_8Or1yw74JZz7h +{fX,樽GQgq uQdݒ51;(9zí jI1{#uq=?I|2H Uam JJZ}bxiN2эW;Piq_q)tM"Z";cKk/bʸhӋ͆'RU|#rVc̟ mI|O,]U%N_غ󿙞t,LKi;fRIaE^֒ĝH4E)e:O hUgt8'-(Tx:"#%'$y6Я Z΄e֞3' ,J,bj5% +`E㵙.RQ.I3 Ur[ڼ;Ylw؍NK~qV˩qLL;׏0b8^"*}B;F:q&S֭)Eƶil8e:Z ٦B>l=SxunOAXbhWだrE,%F]liShKᄣLf#ɫ0 8[A\:J(Il ㋒]Ϭy/WXi_.ecm?)3CEIv9p':4"&ͫx_+,uI#Uhq\j(TIk_4>aS :r^>hM~k5\W: f&xg8}O]WQ)~VX/5dee*mɝJW/fx|fۭ*3 ĠV +!Pٜ  kN&z~[نIH,ib*4?MXnV]ϥ:ͥԏ7"^r:Rᮛ0QW;/؜¬{inOA6̕&{ʢ*ii"S9}Ie(Fȍj ss{RUs$@6EL"@T`oCTtesŪmfG[I)SǞˉh:vuGMC2PWv"NM6b/؆g{tjQy&2)_e&tr֒fkHaCDl;Qlh[EUaGש6n5FMSCPOЃR֩pZ_ =8+(J_JWp(:48NGS"!D0i"!Iȟ1_dA8lY_P_$]nG̊h{smM8؃}C;ik^M"t{ k 3[r15}Ē2[ͰQIl-9(d8obrbs@Х@\7{ }k]ĤݖAǔ~ `Z$F{ $W6,m C]E(>wТ{bʀWvO"Q8^4yCb騥#ܟF3ɴ+fNV;h--+m= '[@% JVJW(߱OA躰/qWvG""!7ɋv#뿨Dp/;} ;]!_itE^ރʞs݉mYheV +}u!Y #p-IK:$B2\%hE} UGFi}DF e4%dΒE _)rv%5d숸%(]><[Bp.UVf)N&} H~d;z)RTvMTəvAY˘yb%&jrY3˜rwl;^d ;oa7WܩO,[-WЋIs!XV܎G}cwE5&Uo@i?\ J6䓶Ɖ$XԄ{M=Kr_(L N~B 4!%عAd}.naJniHR _d%Z]lIV|%&X*-"rc^i&ﴴ3ϧ|/yqzPԚOP,tXN/"mؔk.m@RJ:oƫA2w?'4fs2.imM5Q_DM5EâT-K,+NQVRhݶki7ܣ+\f[{}d"蕗9%ymdNnSK~[smJ-JYeV䄧7zr6i$w؟o IX57&V USS)P*\W"6Cq{ Poes=2q&L"،jؚI[^_B+g"؜_@3j+=_:]UcE +{ .hjǘ:6ȮP}RR/{2ekinhS3`t"ͻ% h՘Uv<lR}IF2{&Pfw`,P|ɭ>+D_ԗm&#&UoO*kWA+!9@b!C0` @1C@42#@ *0  @1 @`qU&k(,ͰM.r4ӒKI.ƈA2adZXc #)?6ц>ٖ,|^:4&GUKM=6C\{uaĪjŌ*V!EN\5Tqp{Y=R<$ݜtk@BHzSn=)/Jۚ|1:K!ܭ_HB5Y9KKW˒7'*mr>}Kq_zK}L|>ki#JSXnO&NT+59xV35JRtWA-/tsk5kʖ?%_ar[zI[T$K|?+MU%(2J8Wft>j<ÙߚWNKᵴr$g+?1YbkWwb򨟡\?-d#ɵ-i,K nZO\1> ̍ dtTYc|ê5͋ᘅhmtџ,{ḕQ<+]#џ*n-+܋b6qOnJB-K64iװ?ĬkR|fRYfA`+3,;3a0f `dVe+""L`́ \ “ `X``."-Xw +lFVCmJMܷ()jQD<&D\.]`ɆwA-Zle. r&dTdP]4˛6˜@ByUr]Sʺ "7&J݂UgQӋtb sJz]Гh,/V,O,_"p25a/,*̩kjlGh])̼w Ƭ1:uZ0ݟcb#N=zd㋪rucRNVO8-ˡ_4ftEXF}O0.]TxőR1:G.]|[ bhG9{X,T̒A9[Ӟ^^iiq5EC !<.O]4^$֋'6^gB(N?5cJda$eҾZ HijV\pO7hUS[n~pGn|v!,2f>S p+eE˂ yE\彜}y3m:T=3V7bCn%J5x^o%H5W²wȯ3Sj3)I.z_3_L367i)TYEˋcm'SWA|M{~ +vtC鿼O$|*zԠ9_1g]|-Z?f5r2+RNɤ>׺ɵQ 'ijC|)[< Ӗe{)sMJ^3Yfc qtxwiy.PwR*QZDZ1$= ](K,+:&/wbԾca|w+KU˅ٖ+tOs<&Ԫ*l1cd\܈ܸED\ԨrK@J+&QX j -tR9Oa 0Q%j 쀀?.]zf*WKy̮`"O(](e-Xg[, ZlN5jGB#\S'v+5iU0l`x6Uu} +FV"NJ_=谘*tҲIz$e\JĵlhCh}޿YrC"Ч D5ļKYW0rD\: !{[!kdM{Sv#G˝$s# SXԽ=gnK㶑ДMS%*{Ɂ\eo?(H/ն&Z&.iv#:vH++ɮQW+H0ViDBo*wW]d۶互k(SOV-4ŪrRfVم b@z$ͤ,K$5+"T숹[܃GK9?r2p{@rWor\J$]W$ʷ}IEtH Dfb_b.msJ 3.wS%`7'}eGd䀱JR ,$I |)`\dtݲ +'jT5(pbnQd\;kdp)TbJwa4V4er2Kx=a(t ǘlZ* e•L?-']VjzMM!@Cmr_p{ s@A L 4Еy 3{sٰFV|y9WAN<il,vG/({I~fJ.ш El86/RqoԖtDSίΊJe:2ODز5f&k\mhN)fW$W&q ?2WUv{OYIDrKȶagBV{M'*K}[J'S~u5ͶX;i';{O{J\H 2{IP\K-8HJIl|+H mieո455 {qB7|¬T%tEߗ܅VI=4DeGQ)ױ+Ir+5z6+-4[v+'^%e0qktHN֭{ "5:)sD<݁LZ .He0*IdӘ( +#K?bQzf~W{n odfu./zNQf&7oF&[ e"Fɩ(_UrD]bj{/ +nܵ$, )v+(G6N^)uHn"= V+qr.Dٽd}F@[yTlF5$MmTJ1\TG52/5M5Y] K]I#-OJ2qRݯ^ntW`"~L^ZNE ʈR1@*t%rBOm -"9P%MKtK>% jZ2K$?+B.65|]2ߐƲeO/mܪF͙̗%́sDnLћUb 00 h@   @! @1cBC*`0` `@N%GS%6R#iZiiaQ.Eerdq?DĶE'Ȳ4䑦[4 ʉG Y/^g28taA.E]E.r*eTit4-cb^Z`;k#)o#D) +2UD9IsE/$H5jsF򿬣Ȩ%sRحKr<(2Σ-CtZX.SU#l+tFlOؔc%#lf"cU7Ԙe{S#UY Igpr #I.`k%UaPӠ%ZK?>_YtKrʼn[r*j/l5+ bSϑuNeWom +7I ͖R V_R<K (ƮNT7^!,+ ʳ,ʇXʇ 14ʆkWO[I-G)c䵽`&gb2MW)2r[ք%jԃNc|+\7o5v)pi{K$M}DJ0 +k^LOϛy|&]#u#9nTOEkzr^Qo+Zr[s\_؄hmV)&qZHr]|3yWڸԓorjWυIF4ʤNtғ˒qW!+Mu/J{XUz[ٴôkR{I.=?2TL5́p^2r"DMċE\’P++DI v 2 %+ ]HvCd)l W`,ûp!j .|-(\^ѱ YV{t9"pi05XO!ʋi&W.UrL,^eN\)ajǓ^2ՏG}>BtE{bxX. +Z?SO{RJ/2;YɎ.d:kx3"3Z$M՟ Fya\ClqUS'*|6]K%i)>h5c}Dbx_kԎtx$Sr1|xgyU c!bf5(-F]l˨_vrOI2)1ϗvjB&xN?^]]\cG'u&rKX'gNoI#Krm'[drj^ʄ6ު0#NGMJ5#//aT%/V^(<"_,Q/*+ht]?+?}.+ZWO¹/%$k=64ˋKkq,DNSRF=9[J=:4x.+\<~ƅo9 +'ў:S?\^Մ<^:M?[=p3#z N+Q2tUpq؞X 5{ضzi_8Ԉy]5--jF/FjO͗ٛ))ys>Eˉ``}|3<%8S7V=ZMSaFKT'kpV!sO Kkpj[,=49N,JuXVFFYpilwstsGtCͩg j]96J|2_?B<dmf(O+.>:Uiڧ\jMJįB8- Iu>x|2s="lU3=|% +v+SF+ykաHԏI5p:.'brL^uKS6#谐3uմM[)}7(TiJㆧ5+v;2 Z?4Y8Z3~M^rC;/ZvKǬk%Rj.c O=t9xI4S{Ga]8ە` gQGM=}+~6^R}Gϡ#d~ׅ'=[wZG<VHrEdcJ3t}kRѡ:ҷ{ǀ iTxӨիjiLKa#M/{U|B~\gxLLT'zK4鿱#u/xQBI.'1+VoJhkpx(h-|%eRIYH{;w&UT^?tW;JN%Bkv#Zߕ#yuwtdW`@{~ #'r|RJ ;;"-*]@dIcMې u'͋--JI{}@d&רvyN&@J7НU YX[ilnn_ +JRA;ղJqKf]w}FhI80'Րs$''{hh^oV}\ؗyP +/h}3`(p؎[nD<'l"l$5_b*쌩.@G̗97 +kȼ-Fb9%(ܡ WvOB'nMak׻,|_KY!]zrK搼ۛpT_ebWM[,)J͍X 9;5.yT_Y\h.J}!p/SK}ǝjY odAcךDZ6ĮW&% KEP]'DiY87kv8m*B򟹫>rO`2vU(k+K /5yq`AYj )l\e͖ +`W]ج)a*+5C<2npY~ge%rOAW*R$|׷1_UةfZ:V٤fYl#S&4$J5=Ztv—[[E}*\8؊ط{Q\.+{#E {&mMv4yo-ϗeY$vՁC}Z].DH `b0q` C 1c CP! 0ab r M%0ғLFoeNs}5zi2Sr#8S[fxTKYFl)lW +b2'TdƼciz Zrzќ`Ȇ"ڛ4S7R+Y#oomDuɶW=(>A*2}H1D=\JAQesKZ Һ#*7dbһ ɓN;ܭӚ[ \')ǣenq_B`~mjܢPnȔj*im T/V CJJV,dݔ0?7NMAVoBFuem[ 6Lj_<L'f#w.%a؎f, X,G;,4~`ij̙4(WƤ0 wجȂjw ݈Bq|mtk\>R U`^V,49?p,%!|"IeHV Auf kRPڃ,FOKO5: V.~tGiTF\_ۖ3_3lq)&5-(q!shK$GERR76qzReӋ1DzOt6utV*Z wG!(OXPDkGiuIT)DE /3 .#_Z-=׸RK¬̱;9Pw_䄰k}VXd} ʇjYWAWK-4&Gqjdõ~_[ʗ})^M^t4^~Wor."/Fٙw4cJ[вoɗHyՆ6-[$ZJKZ4NT7j߸)VmK z3<:GirΏ0u?f7rE˗XssD|?֕fTT%!|sԮ[M?/Ԍ L{tffFo7{ Ө5LKFXX-{LKqY)X, cᬘ `\.@Y@XX   `էM^sHb ++T3NH(š:]Lˡq$Ms/ Nطq EGhcSib麭rRޤb3YHˀҧm|-VWɞ^aA Tp7l۹de]>lN_vˉ/ biKdMױڭ5UV5FC?GC/O31G1 +WMTAVsVr//8ɫrhOYSV 4*S_җ*%,|+7Q/e*.ٝՔev_婻<[+#J25_mB1$+Kr|ػ .KװRZ=%6 y\%|Poѕ)hN_E$~l^1vIIl6AAk'~qٲKv,|_k^^H_y\ =4 _+$4KY!f7Eϐ6fD\fL2`MM[f]oy4+y$ɩk$b?Q$zZ3k=&5)G7VFL}(NR{%ޟ̑/A۔m%8Y\ Kd%+tgQ7{O3{]JA|oB.s')?BI-~"nj֌e4*"A%-d_iDSrRMʹ*.yBTZKgdTPKЄvNߩ2kdK4^+fk?\%ݥMW ٥I`SdՈʜ4]6;$Kvŕ_fiI ;U-ܯKq(Ujc}ZjW3-PJ]@0sovcmV(Rj%-T!:+>zVO>MN3Oܚ/e*-ОeY 3k(soȋ\ MrWn2@NXeܮz[$')=*Rg &k#Zld +_݀ڧWI:J o@H>R@  0`1 `!@ 0`4!0C(` @1@ @'X)$͔Q6d)3frkBcE7r&[ض4Պ-a(t"Ma8A+\"B gd,!ж0)r"lP8ВVI2W0[. .9p}G>FD8SIsIm{yP˕ lj'dӚ5+ AtD%(.iʚd=e^eɚ=0F݋+\Bt,sCSRD^Lz'.UDቚ5J/?%uNTS,X'Ec ʖLN/t ^baT]B9ʴ%[Z ˳v^VS Z{ƼXclZf +qL.lpam:$`RRkbIV6TYՁ-zgW]BygvIUU]o3ZP/΃:(v}@3⵫?o/_]T<҇j\dZ w f'~~mxe-Rkf,EEZƬw.P^n?L:/*]S{~c̓ޜXF?brֿ5_0㹮cO ֝8> h9ȪG/4ْнZ5!TfiOmU\ 61{+۴yת1>dĺƥg˅ 5MzEuI(7QdW*&*4ڻ]qȰeb!De#S2_ +`'_5.)MK2ݣ6+bUGR. +UW_G;j?OG)u#0OO-WT_%7?Cт^~:1}#bʔ|8__hwdKtc|-E.. 5lv;X?9)iIw:Z39sdrה56ao2ZY79%ݕ~\3["Ҙ1L' V3UZRӧ~:8vqq TN=\Fi?-fmkRJb\뉦X>J2RcΤ0* +RN:E>:7 IGUT;М^J^R&qk`TlrVwԋum`%? cb8M%՟ˊ҃Aw-3cB<ȥK]YBsT8^9GVK|w9*kQVf&혛o>4iu +Iu,K;jnswFYMsbtkoܱ1i +Q ;'XӇy#WЎZ۩qXޣV|)\%6C"glYʼY迡 |(RԗUA/_0ȧb,K8:qKL+m= 6s+=&du1ֲ/)꽋!?e/E8N\5EZ~Ŏ_a~^,7.On\Y8bDuG#*dut1Y^b&T'ChEʬwvǂug=tU_QsoAaIN3W>n琕J>HԏO|I_HLJJhMnHȄJNRn9vR+ԝ ]|75=$+++7`\?N_AK-J?rG<*J=ɩKEgJ0-M$U#æ)jئZZ13NsoШ.&noJv1ƝDQX-c +*o婡|{QV*X g^3S֏Ҋej6V17GؓM< HױLN֑Wm%)=K JoQ@x7BK.HXi6mH 1wikO w_p3yWSW㭛3σb!sU dj7eB4RԘ-pZBހFnY+bpbT˳")=Z >L ]f7drrʐ]=btF-7ܹ/vR^$wAVМjEmpsmdR}d95r79` %7.Er3z{Iz*`{`'yZ݀'ՋO'$Ey 2VjJY٠-Rmroܧ̻Ǟ)io$Lꈹ~`AITIT($lJTEؗ2 +e";l^~v(# .or.S8[iItuztv!4v"W5ObY zu.@MMkFE`Kz"-[f'~2]5,*ס$ss7ȂMۘ5W-fdDdܔdɁ|b-!wW[%i;jy'ْB6^D{s`(d칅Vv},[&BQot |DYdNQOZ3Zz-S3y?2oUDٝJ\)u`_إJr7"jR<䊓[ݒR]@9zRnI{, +umdpj+v+_e#]DDYI"Ot~»{Q|ykoY}'g&KKdߨ-~\ղ梷dt|'DZ'>ޠW߰'г,B} T.\eZ .S}Rz? +_6+}\EsӻNJvqKy}kmvZEv}Wobnزnd0堭݀IUkS+KB~d*Mnɩ5FX#.Y)I .S&/S>wU'mJ[N/tE= %d[vJ7ˮAm䆥n|@0 @ ` !,0 c  C0 ā(}3mb5`mֆrFJFdVr5Sf:~^j OоA4BЌ{ABk/̊/L}Irk+ZEz +Ĭ6RT?7B/b9Pa5BY1H0a"f@N^7G^C3\?TIe{'LN-.mx Ń +2>dVQB7ǩ%4)qK T cl;">bQL/qR9"LiA0RrS͉*[2kR+ حOw`mUz+ʮ&.kz!N;_&[}]R=ˡZJ8)-+]#L'J} vBI=:okF\My]˔R Oyr^MlByYnB'* _NɅ)I(Mq<|C4<ϫiu%[,Qy2V&r2"a9RD5Ջ|N\ay%'Ʉج-1 QנX0&%[WZʄeu:TBFJ;ּCALEqĆ&q,&R6JqѬRM Kw(tF;ǥ͆2jCFUisdH=c5Ʃ/#M:/Y*71%ٺ|ۑɆ&=4Srap2W֍ߠD\_K#O3wD1ο*k@ӐC CӨ 3BI.g3ے%<%`QHv =nǯQ݃(`%vنh3G3 +ņT'[Ik>^N23;aby֒脼)b.f4k^;L>bxL%14˫qz҃aөԏ= zĵ649UvJ LD~QZ 3 y0+GWñ ^6jSi$srN~cZ;c9}:uS?U湲_SjgCκOz1O LS쑞TG8q|ʪF͝G u0ӖtÃtISӆեk$%՚M^|\%~'êhԌmzhϖP-_݊*xMFB.lRRm".F\RJWqRVW܌No?N3RxVMl 8Qڒ5xtt}H.=Zjթ9ʲv;3CTGhxg×f&NZEX%*|9XΌ lDur;C&PhTnbbVk M$梮vZlN) nk3lK摗cSli: VgK$ѯ&ߗJOM-Z;"&'?)r[19MfriK:ѰיYVh#~Uc%$bk]KG]/N܌yV(mY6iC{<ؽgǙ_b{t؏JO+1z5,,Rҡ/Nܽ};} Rqm`q3XYMQ,>q+F2Մ.k%|hӬTMtվdotctQO*v+~.v5CHq^MxkC_?r˚E{r^;¿ξƸKjpݶARkE4o`%_\T^鴵,018EQkg׊1)ܲ#WZ$k}=>#?C R ~&)zݟ<% ؜qOI?/>%(bU,x*Ku</14Z}l^x|BmR2v]A]\vkƜ)фng.ǚkh*CRH%My] +nmȶ![`mn +ޠ +v{_$yW*Lk{9RӨHk(IDX +a+h9vkm8OXGWwJ[A{tiz"˧*V%Mzeɶ^[\G-}R;s-qZt +\8бF eu[h%tע y;3K6Asr ^YG4y]2W 4]Q)_N|4ܹN-\J2vWUez4PZ_ g6J6>Hj5}#+d^v v@KBr 7z :YQ-H5Ĝ/Y$yffYe` >t o/`h%GEvo_6qzF qk >p6v^Z3 up$)Elmz3ObJV_".6Q]*Ie)󸲁ZgmYbuʏWp)vgȜlG$•5ՆY ߪJ\'4B>n!@1 C ` Б$0 0! 0 1 bd@@6Rf3E9&Tu),k6[cE63M6Elt_ , +h).]KɭB1,Q"j؜TV@[ +dg":kCW#hgxQzk5(U.K;URF]%EQh$~Ap{-屸AO6̢mPgJ Ȅ̺l qEnhůr\"LrAs$tmZY"RM$b~怦Td%Q}.'tW*PخT' 0VROpt:,XJ̮ jEiEa=1UkV& 2ْy2!v3,ta <-@%yQ b SWnLy j k+#,vAeZ krYƦ(.3G;Eb'*17؋.V*?6VBQݐ׸¯U乲K%3=@r&\,TF +3>gd7B_52.J^~WˇZZ+ApwEfR$ftg)GU0!92kfbIswjGvU)VkC`?Tyr?b>U_;1kܷ)ϧz|ype xڔ^p4kWi/=pީFXx"`0Wck|v{\'I{c~GN\+:j?tS. SzckqS,4^+\X{Yu>U!~}i5gl}?ep ]){XzWOiWA\31R'`C0fC+fCRC \2#".@ +2@QqON,: D.eBAt;.+2a].A] mZt.gd1Vem,zrr:iͬ3K||J$/&L%j2EtA7ZȾhybtt,qҒly-6|ګv"kuqMd+ĒCИ ,'DUh?0ȋ뮡r(xxt:D.bi*/N2Zesu5rg^hU7D + H2=9y.n:V(PD rgԥT䎝oNLyr%úKgn,yR{Æ5TOl \Ѩ՗9=qӨ&zW<,$k< xƧ%1|S^lOv>㴹.2-}cR[sc!<,:R\to Ν R-i,+I왽ʷ<"Y_˚&N]"zʖ"drAfF,ˣ]+ұRE&D[2nR"ܶad팧&ChN۶MR4IRBʕ8tebzP] 3JoXJx"/Ա')SVMcmZ+jovZ$G11$Pe,,bNv9ITd^c8(g'xD\iCloeMF[8򱞳6P՟0ӏ+&`u'Xx)lf5i=PorqBW_j9v }ʧBkK$3 +Uc+:u%?Y)NI}D^.6\ϧ9ka[ÚĕZzF|SoܔhHKTIu||BPz6N>NšgN{Ci,\E~6|*uV /ؽYI{AVZP%aEY<;M<XT)CRY^f}$ljuF-y_ETb?hwbpWtȮ]T~'Mq\5EhEu؅\M ƺK9VtkH+ԧS'^*jf}{]֍+0c2JotYVYݺ"r՜yKъ8j3vVpOAF]*Uy,#NJ7TRGvײാnOFe ҂%Oc9z 95$V2uwz(CT1Sb,fK'RnfZSjjR>=iKFoH+%mwgv_2N)_v:뵵Jj\52hw[U"QHӨEMu" qjp=v$Y)˨N MkcI$ٍA6@ToERV,$% T@ݷw%O+[cI=dZ+k2.2D[k݅W$?5L Kh^]{k/()+jIԯR\ܒ ̕{ S(̻^H,R³c }SM8 CEVz$7j/@aeorB} +=t%[B$h+JU[EQE7O{=qf_SO4.ovKoery=Ԍu76dNnTlq9cM|R]oqe@3ym䖱/jQ9I&nDdNhrvগ1oW،rPSRy\ Vf)$WʳK' n_NgPIt1혭J\8 t2«F1][!Ô>rͲ +Q|G؎UܯU`ucu9(gͮcN/ +BPF9z"WC2ÌMR* gJ\RZ)U92^c9Rk'{36N2oyX:oՖ^Lm. +R2.;":sX;;ԑ+5a颱A 0or >1D6ɍ;u/"R%DI>b@0  1`1h1 `h (` 01$D 6R/Vl% JTC.ɚ)z:/3D_3]9s ҥ56"7#O<ފ+;V{(dls iU{/bГާXM'n_p+XX"K NؒaQT)/IF h%hIǠ3>R|A𽐲v'tRCeNiuw ".xV +.<ǚ +B-*̽ \ɉǸ5bV@[ B/GU)'ʕoUH5 +2.v{Ԅ!w`iʙ(2D[\Sњ5$[ a$Th SO"*UP +T$Iz_0%FM*v7eO KD] rFzɁϕ8co5W/!?%R[DdkSk%RfftW'`QvkI81:q'B.S7$Q=}%,f@RMH}5~`EIij(4E{ӑNkډ=QDVȂI)@;QFP?ȂaKbqyʄ򦾋f)FY s^>btF&؎Vi'* >DչJ «v@b:3Tbtt4ti؉ʳUhGvS#*)vJKvN5 t%M%I1r18rqᝲ`TkZ'dcq]BafRILV'jh2auԧQbC3 +s%` =BY&3-3vAfeO:aq|:oܓ}nAbpk-^yJӑ$3ǝ4^Wv|,e@ʽBnDZU]{yH^P5 H+VKHYdl5ZXqo &j5-cTj9u'.[ۥ*z*aSq9>Ђ[fgxfOwZzS өlF'n2aYLN.ڡ1\rL\$ fca7B^`\.YpS +r|rۅ& "reC ȕ#<Н(2!XeUd^.טs)e|3uaYt\f?c`q] ҇+5EFE͝'D?t3˘,td-kA'A/4,U7K4Aj-1T8o5R/fNX$\+rClMfZNHNN+vը|5\43:yEV$Uf c,1w%nEVXVMH^D\e'uaU87ܾ̏±rgqخY,E>C)5aw{N1{EOM|}W#kt8fhє"" bbt{O 4CɒzK+5sØ_ѸڒGAѩHJftΒ|a-93I#tF3.zkh*Pzxh5s{3+h<;?M tn[!:EӚat]vC΅] щ JK9.f?2K.fm-nHe6wrel0%%V]UEc+hd^!\\ĪKOԄ9_Fa[XSB goҿT:,g\gD]h3pMNNb`*:M[(ӌ^.aF\(VhSlҜѱde>q1=ܷCosM +833ey'.PWy'Su*vDe9lɻjOI|ѹ_sZsSK 9=T,mI*k} .D,Q.Ib}UoyH? F.۲ȦWN'=6EʤoU؄MBىOesr\ +l_m,Q[/bN<#CЄSoC[Jc*\bH<-VrW\Fa kTO/|826"K\pW$E3 ]>+kj8xgQ^eV}Dwz^'Na$ӂ_oV+W59g<&QRpG5JKHԚ~bqLï3geNV2%IK5kDx|CNYi9ө9Mt3eI ѡ5)hN/գO%:0]nl1b%NT{oR[t*T7Vw.vPpM\JrnNLsIz؊W}[4`:S\ڸU/Er.ftNJl8UJYFXNK~e9hB.dxUTTa#uiaj~Fjz1*pU.e[:RJdՅGa˂ayISS竛(R1qҭςTOm |LWXY>!R8xC%AӨh3ֺ?_^vw-=zp/H^Sd~y.hwg>]|v]dl7TXt^o]l|[?pmYlb4A-9^IU50_+-Yo^BI;C݋" V Qw@w-}dĔ #m4wrJ PpR[6<@y)$S(nbQ}Ԥ[)$pӕNkTk>g T_0W%UM4Iko-~V$Jt'Ax=u $%mA̢4|˜#Y 0+רe}IdVU͍%Տ+Z%P E¹1Z[.?TEdwdIu$֗DJn_b[D 5 *2P-sѿvA՗D7ɒs蒷D%v\oLZ@Si>' -)%vweCpMk$-5OK]DVS%- mش\HyR)/\7 ܪܒmԒrkDV2YV´{NdBI>vy;obmɑcl"IhI=nܤJ#5FS%-)\MΒHEp7p'odI jJoR~^]¶nbp'I4U*\;D>Z YBnKHTaT,) !@10`44! @0``&!@@  'h .hY]$jI\4ɪHcubIQ|ce,KQ,):1Y"2p,VQz\)ug6PGE3 "[3<]9+[ZѢ ǭo% 5 +lbxkAWmu3G|5vsǓyPԺ\EK< +&.~@C̰F ilv;(imhWafN7MlIj;i)'c"U[Fqbiq؍QOfQbr3V +Q;4XKR +wp MN``$7~b Yu܋r}z}KLհH ]亂\ěKv h[3d%bN.;ԡO%%́94G]($_@#.dgw~7@QvY:ͲY9T4|kvS:k|\.e +$% &<WI\ ,2/3d\6k"'%Uyj;#:ǙhL3"NKRJ2gF@6[܋Ԣ:|Dܗ674rبLY2&.h^l(M8tZ,;#[do`?-*#*]UErǜ )tTKr͵6J['%Mrkh6B +n)f{" baUeg&/ɏA[C Ό5эJ=LI9=ftn1Δr[ܘbtexֹ-VgfGyA<:&zl1.'Qdq#3YjMUI@O%Qݢ7h f`ŠX g Y+ YPʺݏ 8bř +Yfݡ1f4C2$4d/YRM+Tp9A8E'a4(:q#hE[] d$<ȋ +q +MlBdIT}Z0MVk?=I= VO&,8n5W7MȺ4[D dfyPVyOy%mԩt7S'ئN^I~b^k&Ɏ3TEUS549ŭbV35zqz~aC5*1Mtl/K RbQQkIe/xJ|oFBXHFýxOiV֭Z R>RL38z#W= 9o}\'2*E%BVII{iv#+( J8D659c kQb xg +vlBnjX/){ )?k^R"|4JHWmgs^ۼw7V[ :o $_DcèIo^Z>b>O;pU$Lw.݉F9a MM'ʌM +qq!tYpVf6)ds1pBDE݅K=Ʌ,XXBn+ʷBTа,3nʥ IOv'".LxZV=NȻT9YGN?QtHJ.*XIcKI%rmՎqG,X2úI E\TάwՈ5VϞ\\WM[GYJ/fqׇ65^9'?;]emUxnZ԰[cxD4MI龢t݊WGJ[H%NgrVHy̆eq*ئVO,ce'OIZ(fkdݣorN1WR(ZT.aWu(l̺X%P +#][ʕ8/ArB+صyN:0yQ*7K hkRN9NKҶF_)T{XQs*xc ȪxyJT.d<6j/.VJ\S:.H8/*] *RjP&M,T(sF.I䲪=P*K-Ⅷ[s3wH*|5prԚmƩ"o*$EܹNS:OiTOܒ>QDQG$yvZ}I0(mH 5 61UkK"&o/do̿(41e0wsd},_N9{)1*5,ofMsA9_W9Th<(e+=-U9k3ݮnckbU|Bt67WJPҗ3^v:uȻp:':?ՑrEPťkv,,"`wŶt')-BO=Jwh}ȺtRǘZe.U*iN]e-J9Ӻmz2Y'a8M*]~&a NW&ٞekF/ivFipzS^>t`D^edI#K7'h>dv(=,6,OZ+p!߱%}jIheC݀uɰ&%wC pι\5ļN+AmQVfW̓5\2 ]Br$9>]I,^ *|(6=)t22I"Nne#ȹKMl'# +rɭݖ5IijON\ V؃(^CI ̿&IK1)Y`&5řW} ,݀Z[o$M`{+u9ikQ IsT-qHj/~WD]8v^Pp-Hˣ'ϛ%td%mYk{ +|"jIIBpo彈s +إš$4_&{#*7pz)y@4,86)|;DΣds2&ޤⶏ"Jo4Q M_ԋqĽSF\6,2Q0_bRt7 -J E bІ hH`0@ @1 b` @Pb`P "INLehͤٲڰ +v/C :niYk4#KU:!Q&!$SѢ z+N/ Q]”8HkdԺ2Fs͖ӫ>rLW`mY=bZ\*07*M&Xb#EDsdS>Ȳ9yɰ4&0jAz5ܲ8jɘ3 &!䵽.E/s;C*'Zjt'*$E$cJ +oĜ/ЬcyR[M}ܱu $XfiTs5f-*rAx=K57E5s?RnM*tp.'Fnzrkfo{>^^ ٞcf# +tƜ'**.sujDW#44e2FbĹo<`uOYd1vERSZ&W:LB+BÜ떡͜:g&tr;i!Iq]7Q>O`,%艦WIVl l-NOA DP!C 0! ! 4$0Ć! 0`1 @ +10CH$%*.QfM5A +MA(.slS耶6i#rD2/s\oF:1fxTˡUrQ\J?)z' RgS.FS|Er**S KV#,=/:r% iU#*vdI`BJMP;jVܖr WmX{n5Rk'I~%.F5Q3g/~rcζ큳LwOb"͗G 6,V+USq%3 +zTYd]M؋] +$Z6BT͖+JR nͧȄ-(KQ+_Pe~b.:dV86Akd\%SNlnfSU+&j]7P#dEdYrBmKpsKbN2+q>6ʚk`NJ ^ts=u6c=QbVUe` y.1;6܆>_R.)sU12b5yIF=MViu-!rʸ.-8HNB֌xy',mSxg3.W87ɱ{"e*jEawIt ES%C沄}K'|eRX\ۑҼ_A5л'Jȕ9r t;""ȱw9kKtg]FCԝ)4Ye©-8~o1,o:4СĞ~I?^%CG|!,6XxEsj;Rb< O ٢)צէn%kaL_;Fj2̹Jܲ 4ʔbu!{2Z/tB\}L*oЅv~f'NDG4ϠT\˞؟*() )ĩͥw~[ 15⤣E9_R+αQOpp]Nu|uoj)Z9F'+28j۞\' _7:F|<ӫ$MSӑާGIa#KOI̯2z%D{XK D.ҔM=]ʛ$7}k #0Ɇ.7P)N,~~zfrTaY#J>ɤְ}8o~obkce߱_R`Xx/a#b^ 1qc6>1_z_*1ek'a=4 7_ci3k&nO2:V֔cwJLXQVU)TRW!dsxe%4 J5ֹYqm):XN5km.M:q+e񯆤:H>WZ6Q;uh5rr_c0oO0%u^qK<-<.iԚQ5ԯ=-L1s2)JoA`'%D59[Пklc>+6(]E +viJ)$Jϔw:׊$aT+Ƌ`Stl +sQ+cZ%w0Y}`[Jj䪕F>XlW򬿹7ĘB +ʜb.Q,(*8Dt)׮T()JN0=TWm %n>yXGSZߔQwєVwչ[AKe[Jr5M~_ ~"4rӧ 'O`ppɭ!c,M +q$Tv;:hog5t[,4')ǭ^ժs\36lTSz+ 1zEϗ,nM+]F~h5'u#%bYmFHJsR kqIfwmוּ#*'TI(.y#5%P@/5IԗKlW+UC {=EkU SkܹRiu i^y-YEwг+o/2؄κ_jK_dEF˥)>Qn+{¢BI]K,yE6kR%5[W`!CVӑ(/bWKT;@%&0Ͳ g}Fmt\5$]ys`QBs}pK_p(̮5>]'"C`1 1 b hC1e@1 `1 @   +""q+E hLL _iDD:L 8MU+.Yh 4ŦPmdn =jf]uh Bqv"˨&>M[2,In:OKh*F8ֿ .ݕ;hO1圹^S-B578Օ$VMNK +35 ՊujObYy\z.OsU(u"Kol܀W4Y J婓+[$4 7»u΍IDjdE>o0,U_IbAY3űLIJ_0{DF]!&˴]+sk[#Lr}52շ!dQk/T#RN zjؚEJ6;دnDs˰>`IK$E_cV܃, +$!8;˚&V[l<;w"p kpnw+aVVM!8>Z:0tՕNJU9N[䪥)T- +/urvMs)l 6G2F e.'7#,)2┟Ά/&[}9r"7dhzSR噌VrqyG\VjmI?Qp;65WKyq*٥芧-K0zE-d!,}V?sʺ{ɿpܸ:bqjkhɞs7q}Fn|b_M58!ds3Y݆c2ޣ+"ޤ +y*{ɲ7jdY 0_0֓DʲˠHd%Bv* ]؜z>р!hN/\Vh5w舀`,ӰYQ"ܖPQَ̒y x[dFĜ荐Xi%aXWcZ..a&0  C ~J!v;W IS] awa\WY)1_@D2JmlWp)Rx.t#WZS<ɵkbgbtӓTSjƴpOK.$BLD0u5\C3Jχnr_9'Rd6i{/濠L:*>iz#:_K~H3׿d\I(5$ۓ.QkDj# taikؿ/dF.UFs]KS| S+FqD+423Ƨ.Rb!Uޱnd\&j/1S'SA[LVfypStpVp5MU9p^/Vh<(IvW">ubq'C3]:}yxL4B\2[^iϗ=N_\.%|~\>^_==21%5mXZ&cw~M)|;GxSSRq=bt=|KJJU?'tNvX1:1|HҤv9 S-t<5,8jy)'0ҩMZn&gOb\qˎ]?bW>i5uY%Q5c%Jffc.8}L|w#Iؓ-gwt:Z^%ʶeoN&sjPR\Q %~iiO)xzGNKTyo"҄D#K9gI+iIa3bVٟf^ޗG8U>;QF_Ĥ)IӒo433{.}<<\<7ЍF0c5|^"5GSs޾9M:feHi#Ze8~m7>uSQ蛓0u濇R1|"XwN%s"c*sWꎤx}9C\C!pM6ficM^K145^\/&lx̦oS[M. uhUѧIE,L,}7 +8:Krd9í')rӭJ-|MC4x9vAҌ>U/&[Rգ{%UgRKT꧶g"Mޭx6 =) +&{A={C:Q7odGY%7N')>sN8N̺x/jx*٘k_[(ՏZ.X}&%\VU[F?Oλxa+Yӗؾ7v,֒uz ?e,ע-8DG".Pd\2a|aVN0[,?0rU:m oSʲ`RCرX- +r7Ju8y+kn[HZ-bA&1|+v<.5n`y3DxO*˛^m?/] jЌ#CGmK27d%M*ua_l upqkZLZbU/|Thq\TSx9% ,R6N)Ԗ̯RRg$hԬg Kji#E] K?bOxfpEjuemԌғ^&njc*u '_ZRz*2~*.ӕ;*jt-s +f̚(T5h*CgFS=.\T+%[2-yS1WRi~y1OQu;)7]}(k$E>W7TucS 8sWM rxq9ª$I)Ǚ7>w݁;ov U]z qi]}{ݱ@K$z>Y2³\ƢKXP +2kt呛 {{inN he4(r3#i/ r W!wy7 vD%WDK"\AӕkY.صN6`3*m#z&։5)eߠP{'淠.Wde@ֶ*z%d=ZD5ح4v"C  ` b b`T01 @` 0@ CCDA/3E0p}9m#M;X ڗ}iT/F؉7(WFrDPD#mE&M špQZ>Zs%~@*Bпbp K)&^'Lly&FT ]`|ʕXKoȒi>Tzw#.L*p_M"-RWk}AǺD/q9"Kr~c &հ\Ks'%rQAwܪYB9gɁEKnEըv#otMUr'%d㊗P;J]sOFxKjBN;$AU5eʛi`_RE@nr%l_D^ym5ű#D +`ugԒňkās ˩BP'@RXTKyUC"3t")bub7rQ/ï\ Қ\ZVSfy[.cl|p_I-/a%8ٞz|pjb%?_rԸZ'˔KEmvsC.Q%w$jlgE@k4KF܊_Q%NKI-[$<)*ce$VKJSER +V A wdnl.At~ZXe{oipԦQ~$LGjrGA@&'qjpn6w!,IK%,w^`0r#v!hBp$¸\g.p_]8\C_P;\\voaضZv9}4F.ҝ@d^iǀC08z8pL:RlxV?һM<ź"JI|o0Ѥ1^QDM,&!N_bpozcm)=28T旡I3lp{8#*o0zF?b*KnL0*؞F$kR$ۥ& L *n&t)%M+d6VțK̆yd&,4Ь84QE'I B-wY`ʺgIKW4E" =JM>@"9_'agN+5̮)_+˾퇖?g)-YTAl"@V_$>Щ}lt3I2.NTrfӣVHEHՏ(?rV62O׫irm}ȪኰBN֌Qbee:X䴓HONz\& z&DĻ1!s +\bc 2>'цm7> +ljLV] EXz t]J FxFMnI=խ'(Eϸ5+;6Eb`"Hƀ`JðtBL(ʹ4VFt 5jlؖYS6'ZIi)I:U#gIu.YٖEMIQYRhQ*..٘˾ ҚiIl$.l`zFTdW̲dYetݴ6'""ʹ,r)k&U~Ennjnr,GFxSRE.ωX+w%nn+rK1חZOܑ3fJ*kԥI[ɿrQ^;$8A&ő.DM21kc(tLJG :'fpJWzQNiGyJK|Nǹq_Υ/s%N:_3r YUG@1'S/6oq'OS=3;vHTR}ꜧK*U8jwZ}dr0T?nzt-yo&FXVu~IM.lU9;7U#6CχR8mOPJjM{RlOk *z +S aS} Q'WM>|Cz'$ʧٞwF_\ce8Ca#I_, [J5llSITd]X|%O>9/*>) VI?sQ3=N:̫M<'X}G=$/gQU>p$MN KyPZ%D&pʖ˂NIIږ}[gTs}q2kTwLjyWhRI6oNLT{I6hN=e/dp {qܜ0Ԡ^o0,mtFYNwǡNgbP(f30FWК,S}+aоH6 9ҩV__ܭԩ}j_IixTcqh0̱"bXO/+%oR!j~GV^_5voS$.\.i8wg+SO]^5wF?KyWDxڔF]2>w" 4xv(7QPb$bxIoд~0RM]?M +U|EGSmfxZ*M˭Kj,+ QWKu*x]*Tù94֍^b LK ^bImq%ٝ>BFs]KZK{+P.X^rf)f\gkcNrbwM='c>%Mo;t)lWJgj=p:3Wz_bbjywxwt֮i9=aqn^rԗ6a\`uL|Z[/CKUy\W({3]\ \.;e DS.~yQZ I1v@ CIs` \Aa]f`rawpa!v0&:.,pDzup4K0fD.3$.\h %(WaWA6"TԀ9r܂w=:N]H4q9.H ӯe,uo 6Mb-2 +d; `cV'l + [vW^U_( U*1\][#U.̛fMdM34uW6Oc8ZFSKy~sL4$4(/%g 6JM6`aJ6GX(&+ +Yq*Yn.D!t+yKPԍ92v3 -v]Bq%͊[C'/![[%&5>@'!x/B&JN8QQjILjK5/>0e A>T'arv͗bpF1SUj4UTMs'T|OZ l5}&rb½%i,PKS<5mDiw.xIIen`("2'15GyqKn$Q>Mzk_sc6j s;^񵲌NqBע8r&,pJd 'w#Y)WD%!&\)T %dȴ)>J@`h|)q5-Qd2a b"̖4\˓ + þD̛aҒ&.8s%s*Qn9җ7[;6O +4"Z+18s.xvvE3efb|pQI%?FIG`prJR ԥ P>"BU&IKޓr7LtE3L6MXB2c0ɅG(1tbs 5tS_ÓVa_8-޴-+M?:G Xqݾ*po^txxtPIy}ei^;8Ny=$` + +Bd|b?{lR\k5crK(|죯ORinu?z%oa)`_^2GC+펑Y7D?{[xc8!iůf|ECzzq~g0~dG+ܟY :UejK>NTGL̽\';oVN ;eYgkǜ_f>/G$iPUov9v2VTe}fw i?9%F6%5n5Ñ,VA+J.lذ8T+KkS/^g&%0*i(Eԭiyr 9DClʮ*b'EZ8<<{f& +Q\/kQ^ثQvЗӔ;IɒP0$Nx)e5kTÖE#M*`$ʌ)ӹs:Qv3}Yp̜iyM#V-/MGSmy=iQKN]KNҏvyl5UMt8=IiJ N[>"mG RXL4='LbWwc|Ai/S?`i +uƺLv]*t_jʐ,zcgyJޥЯFzWC#ĭMݺ$gYB#ݻ)Лg)z)I];G_ ˗^sSvqSq͖Mw0AUoBiQ_;׊ӟ,f#'jINQ0l$G՝[vq-ҫce4ь:t#).Q\* +}MtZ8w.ՔZ4jnժHFx5 uhџAʮcðsnz30$&q^s%۩ʼnp&OE8۲'e*j*dQeñiwEs֧BǵXV6ȥ謊*P;F5m .Kzj ;mF +򖱊^pr'I qνN R+^Z6/ y~$.rFɅSh"RKh؆N{'l̃vP W&8Iz6 +%ta,[ثqK@M͎3|+USƪϡ6ϟح;cV{|b0bC`0`T00@P".0 @ 0I2(ȲȶRdX5RVb4˱|$FVjM7k#NCM:Aѧ(B fgRGru9V`/qRqMDŽ^RoKGՊXuH%'&G㒲oV)SٶR+@eq侖jRwmrܬ;4XyF]8AddrOR4ݷЫ-PEXRȽJܨȯD2%QljF?ESQ@t1d[9O|J- ּcN{h4Uio60;WuTw^՛OEl`vKM}W99d\#/ʛ!.)SRC.!Y^r֖ +\ :d\l\\zu۸Yu ; &Cf`?q\WcX,,+\, p\.\;&f"O0d@*B@qI,m"E \Zطoep.}[7&l i-+y往Wv=IbP X0Әh;v2 "?bV=9I8?Ok{H[kq6+kb̗ `MTLw*Q1J[E]O Z-9@Ѿ OxԾj p;pQd_OaV&Qmpz0i|$xx|]BOh[ =YmNO2` rdʸWpwu(#dhpT͊y!aT8N;SOԺ81`(Ob ke7yRjLNLv q#VkF]M)du̹܎UWPNL.ȒչEon eKia+'ZHzT[d5m'ȏ㿱,\_@^KoA_5ЪS}N-i;s+S_WY_HWxu_q=~*;XkEZ&J{)2qW||CU: +QjlY$AdEF&ꮂsBQq8Ϫ!:rRzH JḴ%2_`lWԶ18[d9BlA`XqhXc̺[LGq^WVD@4D X.Wwo&j;BQ\{yB8_rMIVWI"nF+#3_/{~h_U*T<[_dUF%Q cRQQMEr#3H&"Biۛa҃!4Jz ;Skv\. eѳWra YcP߱ %\r-n +>Ew2T*U$\3֘WD̺(H`rN_"C.L)t" hM"C bM+NB._"J|P掬|K +ƷCkI#t ;baf }EQsYcorSAo)6Ѱ,wgc݊3r[E;}+ɤa.Z8%_2'*-3?BeOviߡ[ZsDtWu%՚ ĈbqqIbbyg7nc\zmT|Vt~!P_]uR&fT~g|^8iw1bִ/eB..e+Zr)Qm-hԒ]P:/4 ONo-FX^<UdjM՛%±#wDhqGZWO[2xX+<|C;pcxMh⌟9U8evxaZ5su#WI.=eZ=-.Z[DxvFƣI˗-YN1EoVUzeK6%TQ#ӯl%9j&5voV(rwb)Ge}.^qa/ ;<>|}5dQS%Ւ]xoT։9{g +-$uIԖcBhU#;ojTм'=*`2R"5qJ8e(c{S0cǬ<ٗ~ EM8]Ql OkH̴džq <UIΝ4teUns#atkm#uj8tmUׂM(.QP_suV?N8SvUkKv˭OFSw.t"hӄ}ʇ'OI|~](j߱KŷVW]Uv+pڰZJOS}QW*aF^m[k`Tuݘ`(*[#~mo`;]^^s27~WV`Ch7S:3_5&=t_+'H7WeVܳ,^W rw$aQ 1 @0` 04@!!C!CR` `! "#@M+Denfh#E8l cST2KY +SIKH [oԱU̗}!NOV}s3E*a>Ǖ!>)[%NEΌ6If\C/2޵%WTV֏\P[?VyWZm4mx z+7l͞}H.\#.)F?,dD,Rqm#W.%Z܃rV[ɕNR{-\@ .@ Yt [\MkZv`Fu JKӓp,@e"lQ !fU#v=F MT& Juj%DŷxXǖovtB +_Rj_4ݕWRG /_ӡ4$!gyKtY$ܻ1fgMvAGHYVr|J &A$k^܃`.n)/[)Ej)UKT2/U/i[QLiS52Wݕʒ # OVx:!*ilV7ujI=ڠ1e]Q +s_ee{\/Q-,[yvBWWR%m>|靖P +{m[KA}(̞X+WKB֛MP[Bh4,_؜^,% +ZjNȺhnee +K ̷r@!ag6Te&UIu "k NB.LYnJ[ 9m1KN;?rq: E0躈~jDS1_,P;>3QʥūMMuD]UXخXެlx䗹]yy7C5 ʇ|Fweb~ ɫ~wfy̆W2֧-"5'EH&k3%Z4`CE FT0FCq_Na`R]!of_a8ߛ iƧY{MJ;ԏMΚ_ >~/2e}Hs`6/VJ5ҏVMF hUVII>Zӑ\29%&C%2Y2c Rr%t+,lJ5#nq1t;Um̛ͅawKR̒2&^ F |3\7FyY<>[KEh{\:׌֯igMKYmfn }W'-jw2T+x7)ђ)Qz֎&PJ?`Xl,J/җ1?pvfRYQO/W-[bk5O ߡTV?5)%1/Lq:V*eѕ+rI}g]DäjWN~jfp\" +dF +. ` °8E0|h\!xXESt7XE,"\ᤙTnvSR]tb{8[\{6v%U<"EB\>zI/dS,<&k1.shUtHi=];n, щ%Yv[ 3T<ֶbvI}p2InByZ%HeJ¤)l]ȧnDОJݿ PġuٝQICNVĝ<"VNR~6wic./Ee/ft`W8RPJRQ8?TK>+?ɶ}>$,-|SlM/cThI~S㸊lĖu<xJfW*6(>iIqheԯ:#zaݜGᴥNU+V]߫1'[b{t]<~emg_I{aI]_ᠿ9ӵXV7"+ԍMz>bfʯ+7QWSBpV#BIZz^j/fzt'\lF:LRV/X{j8z#$"sN?l +ӊҳ<8v̴vʷ6_N-if}&&;{E #BOf ] I7%jq)eE4 =B%ȥiGLxi&ke|[Su ʪn[ň+N7!ZR)Ъ\) SYT캃'3F -c' Rq5!ˆЏgQ*,M/6;?Z +D?U[R?#Lv&$%KI-i9zPƧrROԄiNd%'ю8,Op뵑mMt|ZGR7Oc=|*)53=$ۇ:XyZ5rtZrC2ba8̜t(Sk8So MmjN|~I,!!TeQK/"?{ҧ[ܺ8Lମx5q-su.+Mu#Ԫ8گMKĸkm|I4ŵz?TKXIz b$q^.>{^Q^IWWS\ܛ%T*Hw}cNdNW:Ƶ'vኢRԔeK*}ōj圦UtGHWN8w-!/:T=e"`q^*:-i2t3W +ݣFﻹELZ6b@/ˍ3#SMu:K ;K+l\%װf c{WF|@`b c"4H`4 2b +@1 `  @ 00` H%HX @6BnHbm|Ua՜Ջ"KSN)n▗~Ϩ5VocE>^b(%O"{Ⱦ]9}1]-}0Hƙ$ ~.oa:|R&\!&V@#w +(W+(qqFj+fAP"9&A _R!~b ff`+],aj `  pC]6+ Hr6&>e6cE^f<`\.P] $Ȱ,D!kH.{+Rwdά+ ͔=Bϛ#vJIەǛ + eЋw4+u~q}Da w we5,5duK%xql+t$䆚B膭@+X-d\%`"X`$0 $9=ŐW<;KcªRH 7[Eo#q'~~8ayFőחXdqak{"p}UȖ䬖GA|ӗlxuzoo⽋-Y+˶S3+([~nVhd+l] _Y2 l@2̋_r]Q*v$E YHeq.^ZIu c:Vء\y̒bVITyay6d2YK{(ur~ZkFheJ$Q<=deh@s] sH%ވ v =@ȹ%6ͮ)N/3M[܌Qő\d8,cmd,B^wQWEI[b3X Z9 E5B÷̒5uܞ˱(=.K( 7}eJVZ#M+lo$F̈́jרfM>My#G<ľEMEԛȃoV^Rm臒>-.8 Щ_Ћ&[mWWIEV<n7,CdkkԷ+E n+t[ SSDR(8d3i4]FC2yC706yɇ#,d2qKom)2FP4,ˡ(ŷr\-i-!MB e2RYY&JZ'R4g['YQmimK8A-YZ܌Ͳ :\[WK~g:ev ++3$Ȅi-zqXح`:qAI~'KI 41H .]3eL/r/B;ԏ LM \4~EN3E|{$npeoݔϋ{E"QݕTQ=O뷡T5%ՂYTtD~Rw_Ⱦ+El8wixrer`+w\&_] WbuT J[ɿVQpE`-*\ swdWqA{5gT-66 çKՍsU.3}ɆgNiqZRƘc)Ku*v(4tMYVЬdʭ1:}UN\BB*hM"`\q-s,UԾh`F\"V&clJTxm)ꬽ4#MUvbhN#RGfZFD{B314z:]?ܮT*_S)()z_)VijXJWWS\;_B!= +lE=r.wiI3Y{ierra-R; +-\-X.+pO0 $U,,^XIKnW<#\Εkt:urIG#*iN,:LX:RYs(Q=$rOEBsoحY4"iB[Y}f'ҥՑ>oR7):*u_p8U_i*cܙvgFв#s/w8{XzoT6ҷzO >%x4dUbMGrLZ^?_36дx{j+JuvlhV]O5,+'ڴq4{S7Ԭt:XV-JocL*qvpk}e񣆩Y{=j~bt58dohTԙq+PQ9xԓTOZm<8[zVT6q.B:]ʪp=B.:a1 wN\fS_tF=Q }N*.M@(IEJIӥg]&:ם`rջj"vO}}-k3vc0M,Ed +1S΅v0Qg:V2uJ\FZ=e{E."Mc_ĕun'Kѩ/2~oXXv"xBWMз/QkgcuRbd9H2*3|*N;#[;3\2GO:i92+)v#WܛX.䞬RʹXX-pr)X]B ԣuɝBХg:Wi5Õ[ rd%F~zs}Qآd3ь3BJ"2u`뱩d$+g\/Χ e2_>2}}G5˳ +iūҵ՛'\iȭpт3:+)䭗R-Әr.Q~좎!΢i^&* _&gݝ`]l 8\R7:U\ 2K4j҂hw!Rz(kho-ݧ]api.V'2O1U'{RӈOYzU,B_kjXs_|t0mrO3N} bJrdt&U_`scu既8Wr=}g#LbY6K՗I($9KR.wj2}??C  c $ b 0 ؀1 dFd+D"h2h"ȓEq,D84$F$IQhDiLD@ AbaZⵀD3ǙlW @LMaf;za .BmNn+}-OR}3QeG7q+!kO(\Dv.Ű 2>~Z&+7dlQ.l̕ #`wcv}By"Jw#fJ{ + Fp$;Fp%u.+DQ&;YX%Ԗ\ò-MEw$EV.h4*ᘚBެvW]jTÂIj!wR;&X5$MzϨ(˒=!\-LΨMeGg+ 8C<|aiG6^JO&G>2/zdxe%6]:N3C_C~ю׸8l#qV%Rx^S/OL#Z&$u_;}ѕEEŮƺemDizWBLQn³4N +:A]eV b'+1W[zED-eNb.W͉ڍH[%]u܋WYbQ{\&㼍V\FB\D PRRݕIs_0K2ݑq⢅.@,TdVotfw@|s#6~iE憢36UddHnm2ƺ[Z \kU#yg4RG2R/1.RD͕f''@Ml3>Mۓ +9-*O/|u`^GEw$~AcNH݊˓RcWőj<ɲJHw|T@`&,<q$O0m` Ndԗ"+/ \NHd~'·` p{3#d~q_BM=$pO[DZ.I\"R\[8նcn\М[dk_d_{ij/-_bVY}ɧ l3"q[?puGS,~^bz+H&R2F=b*q*Xc#eՏ81~.^u~&0旹*gN?s<90g苄u2+Xv07KRERzfRcrv]^Shש-/UvYl3_r&&0.ι.ЮWY!ijG75 QIC.Qq` øq,c"H=@ZnC0];R Yp vo`D!p&5.jAr ^qdt8hF+b%էG{i.L3:uKORѢ82_2F|Nwd>@ƚk)v9Ӵ:m ,8)H-#6'0с<( +;X#g 1+ @CQȻ%f +>2AE4_呕70+j&pY j5q%&ebmSW~hSDĻjK".qL.t \MYS\~2kl5+nY(%̭= ԑ%%d$8[; UkZ0.UْXsfpbmZ)ye533HtS ?N%RMTdVKfft޺q<%ho˱Stiu:Ѯ̓$:4SW9M&CKq5.Nx:3)>SKٙ#,݅`F)f5^rn0tݡUOw3e#u (  +\.FL \W+r e&E]I t[d; gtn+-v 2_IT3pEʕ6"ϡԔ-OQg9Ӈ7ʗT)%/qͺeRù?j%i;CUu4å.aR%ՎQvZStg6y[[y3Z&t?Ѽ͢!ŶIīpwNϱ},^"]%mj;s}68ngmyEZō;'W9GNt"]ǰ_&?%cԥ7HӜ]oBG_=&A峨 dq*nb)YFk`A_lR-?Lf;'ѫ{|_tBx?RY5uhKX&sC.yJykd#_X?rpKL}cʆ/xGV855Ci-Ƌ ;hDnؚuf|-JqDPOg )Gwg)]GN_3K\ +RYq~OBDj[YkxZ d{krŷd7:jkOh9SȢ +PڧpƒVS0VUZ+S'33u~giGǐ1uBWN;m=]+tV腇(fGYcRaZNOŊJwjtqبFʮ_b,Ejӭ7f{2ƌjYaz SnjU'^޼ k2<=\$$i`tx^9:kWspv~ +/%OvN矺|ּ6;WߋFIUl}Bȹ$=ӭ\FdRⓊ]Τe؋KFoIEfxA+OS2˯HLNOV\TDմSewn+陼OvቌQ)v\W#jƥؘjmTe0zܧ@3ˤ߆6V^ͳ{P֍}\J%ϕ%ݕJ_єTy4"XVļm.Xwjp m<]^n˹Tɕ n 5ֽoN͝?QnE!5rDNrqubv)^TRק]Zz +ܪL #q)fZWؓ,TW19A_,܋&`e/AؖD,$,9zCqhVwXz_BI@EZ*s|8ШQ+/G|ñч ؾ (G)2Ն&G4&^:)|}Jj6A<%TF2\߫,gl(dsBW] 2|Fo1z%ordguh8RGSkf] MH&MsN2٦3U#6QY0:Vs(e0P=t{,},̘4m1+rƅ`%$@,E>ArbrD&3:q{y0U6*Derٙ8lJP#@㼮5)a{:<M@SEA$IC][WcQ +W̗lbUt)Sa|0ʼ^&qF/Ī_%$AHV+XF'V'5.F`E +|2(;3H[!R m.f&ӉYa%ԏ#~eqB]M% wr&BueJ[&S,,z4gkN:'f? $ԛ^qq*sc Ǔ D׉]\.g7)IHaRq LwDi !AM WAp\`6$YF`RnH4 >E3 |+ٱ>D4k,MY|M4ipde3VIŽY\8YjgKmMDZZd.k5).od|+tv}#9riY+t.2Za{䵑MyY%yzayTm>JRCY:{ ˔u, 1&K +,7lX(>1jRߺ>%xkRk1ГZDt*E_DpFKPM"8诂.#rtu!?On]v=a񦺽N6+qu!(A|r%zʒ5Rcweu<4e̾%*$5Wcv@VӏoVU?.;(XmMKM=VŽ*7E97kU5nF_%_E&Y֒e]٣2_,_"%ARô)QywՉϺ7cM*j1(6!)nq Jw[حp2UͧbqrZZRٷFso!O,Vݒ-^MMDǾuihiz'}1)M/(7쎃4n"_- 9 ֛?B2;~to܄1r)[,f?mFhɕIǠzP^%Oa.KxԜ $v%R"*{C#lބ^k:#W5X]dS[,7:_Bx|;%أ,e2&֔߸㇌vY>~ 47$ vO؃ 4*ZOU]ޭ%+iJ͛Z`6KuQG>TpۥrJ]GH:4彭 tAghBE詹(Szӊ@SRIg" +c +:FQ7^Rz <Ֆl?g(5#dȜ8D;i(iEv ;;#TYx:tcRVܖk]G)BkxSK{ E7#*4eȧJkS+{K M?dkK!_!*-?8Ԏ1ԋO͗;!e.|*˛EG~L&֏+uo +$4A]MI4{Dc>9u"l ƢKVKΉOM> eV,xܩԏAyD$VꥲbU_$ܕ+ oS[_rq + JRl.%EmˊC1-DO+["v?5hWoDVU$0=#}ʧ{ni֖0lX8=ٓk_*=kgoba*Gl&עmm;#(4Z"&Ż.N+Mɧs.lGAك6E0ap\7ܨ!/RM +Y'kV=y(wE$Ͳ.L.'ܡI%VZ%ndcQKths#9äR,̾ji.NSAL;E5[Y#ǭZ +U$EeFf[]<6N:Z%& ǵLܞzziq:KN+l~l^LG3555RؓD#ڈשlZ?7&"|Z%$M5rBU'1ӯ?7O ޴S<=HBCVQNn*8CCl<=MӖCzOV'wO?TZ ROЦi'l]Nt%sqg)Җu=UdXdk"_"j3J1[MT]#Bf?`̺GYA)]uF +%N] > L'fMqCzƌOvHҒ̜[H%&Aln'KR\M$2m,~QUسKEsn[C8ԛ#_?D6ЮShK3A.dnfiT"95ss[vEKvcr|r03=b +ZU /嗔Vd5"+*.+esra +9/zybf?/ƫ#_>"|D㇔~9⚟ҋISQ@I7.,C C00`0`!C Ll@   `1`P"h$EhN%+l&ܒ@MD4&I0&%4ID`rJ7Ppi +Vf.<RYB .+#aeD #נ  J$+ ݑv+`D,O#7_آ8:%-?p1&8\弒/N٤vge +{G/2W㇜X6v1WQ~BOHFR}DC'?t8MinVv(ЮԱқؙ𘯚d]KQdpU2BNVURz·M=`ܞX%dKBRm&R,X-dVǖ+g صfuW^UZ[Arz+7eqMsбb&(eV;6 oԂU&䐝M֥,+hKLt-/rJ[i)I]KgWK#RWU'f +s{Fгk+?+̊@Hco"KkG,oP'jkoh"T`MF㝽F;E6 +p%Z) +˵׋vIV7\ukGɋ8gM I +Rfj/*o:>Uw}@ZtbMtGyTFICfS}Y^eRzlF]XVIn" oŖ/F9nUE@5{Dd̾l"C{]f,Ws$bVc{ٝ%ziGd)q.$o(^tS./SRӔ_q(Kg"\NGjQfby>t*o% o$sV)=ˁҖ2vm\B=uy[h~eĦG2ycixlʤ/ufwԮ{Yp 1C8glD\p&.`Bp'q\!p ˒#po\wh ȦP2'\#na~f<+ǔ,vP];YY@Qp ݅pf+ 7z$;w h 4fp {#(DFdO@F'i_`z6a %eb6Ȫ`-*_R*kԊgO.ڒ+X++I1tؾ87%+|sKT`N+Jq3 .+7 ~isw&0.x~"K& +Xv@v@F J-P.M!;p"@NbV,W p캅.aa]@\@ q܈\ \.Fp1UDRKfEǘ UX6TXr$L$'Gg6R4/m~6ۻ"Nx:٩NJ-{lnҳ@eJcL;ƤJc!܍ĥqI\. (MDeJMesnj%˓Q[Mٚvl-έ[m\YR˟#)f9ŧlT{f7R#Y'5G9sUpf=mIŞX(AqZV&2G՘}}=J"klX]&eJReDY/9REn11UHF?*^nL}ʟSQD_+r6q+f;' >DcYd\1-E*eK+Պ48BTle&0t{J&X({ITEI҃Z"Wƥ~I[VН*ҧF Z)hYN=-FWWF3JnܽT#Zgj:Z5%tFXk| +q i33zOb.qC2{iO1u #e\42*\fB<->e#Q\fNQ &֥Os5\L%j3.7kD[oKB_TBJE_klZ[[rSC_3^%RjOhi\n2n[Ԑy+:J7&E(fUFTR#Rg$6h>`ђݡ8刲G4ǨQA?л$z' +LX~PaϨ/*b&+&֟,N&OHke=:1=tv(ѯv7i.rr4gmtZݲ'Eߛ&[ڥSXe6 v|b@ 11 b00 @ b! C1 eb$Dh "iE"h Sdq`[TYlXMBLS'L`I"InE7a&4=H5$,#ao8Л/AU i= ˣk=`8\"p/O2E(Jv8:cN +[ iMԬIzN+#U(<}u>&BS=!¨-&YA=5߯N-%(_NZ*qJtiS+x条P-P|սN{ܟ/+kg8w&yP_,S}U6d%7}<\bIl фNҨH=8deVZk oB3_|n +V&UF!XVooRJy?d{''{&ltfS,ϗ% 4y+FMQEwqk[ ,X+]{M?FXEr;M$K7{%.H<ؾ@(K.޷#=e9tp.De +vYszGI4vLeo)U}(ɮ ]7rn6Kao;pʼntBwpVJ2{iA?EC%6r|MA|w,GH?kiYњIْp:?Q.׹]Z42nIBWO؂,&W!EjJZ)hs$_*P{wk8Em5~xyKW%`K/{|oK4yQ__ط5.i;*(glo@O]d))=v+ɮ`NYy Y=EiJ[/`.W|Q N1@MWղq2R %&vJ1kds3$f\2VtҶmR{_oޛ |:jf^=dͷ"_]} ~eQ0ԕ{#tRoBX c% $ez"GI DLKTREr1#ͫ+Ez;[>&l`zEZK)o4yVl66I,m5R?yyr\V q<;cp|VnU>//_Q;@ϋIV#]Aru>>!UF$G[#loBbygW-u&g͕ BXyB9s舷qj=;Vl 7b^˘@lfȠp`;خ=@31݈` e@k* tdu0#~`%d \@;⽃0.)5;n2LeN_298Ff^-rPVc5l_Mz^ЪNsGOԧ2tSvEKRhЮ֑M|OK9)VN7țQ(N?415}M>*;2+nIM]H%t +]r7ӗ"vn'+K3Jxqp^S_Aҋ#Raiw>NWe8J܎Ro8kRH4Iԕ0/FjFQGcۧ,pD\YrL_64Eû.YTBS#Etp|zΛE{i2QmlSCYr4d^d6D_%LTƩf{H[VT5ԋl\TTs5̚ݕRez&&rɾMT˴Q8ͼLm;YV.Vȋ R%*)!Mf[,w5ݎLVN/?!ϩC8uLOYFk檋%%gQלh馮Jupէs<#ONkV[:{CVRlkg:r[*M{o_ڡOK~dgFÅYCtk5-.[BHY FT_[)[MSOf [BWrē)uJAa`XAfa2?aUW1+Uǜ`l#NHπ@@0 `0 01 b 1 ` @  h H' "h4,4Y'2{"RɢxZM4}Yn,{7yGJM#{"J1ᠴEJ;S95Ymˡ~P痲EУ&Uk5lxMyvI-")l7U>AowbaWE_TbdbXj+RЏe9FJ*Z ̩8Sxh={E۟? zL2[YjT RAr[H)RdgRF)ҧob.0= I_Y;zpg7ܭhE`Y9Eo%Wgon fФ,ҩl1)m4;op'#M|J˱'ZR/]HrMNiI? FD<ĺ".w %%6AT] +zisK Evm!fIir} + 9YbdEUw')FIM7i2X;bn_K(R؆N`NqyOK9-WZ4ХaeQ(H |- eةRq^䓇:b~)UO؃A-N;ƪKEg9I”c;gAƶ]Ȕ_ Q\ i_bwrlݾ:7V9D$nuilU}1ʧw%/o *;N'RJ5 b]LDdS˒@p^FTĩy#r_K [TJy-p].EE6}V,r"5J[IJ>lcpxkL'm#F%<}%ܥ +]eV7֣~Uzff)%S p:j [#T{hEb'}fUc'aA!Q@&0vD%2 w*ƘSC0jn`D=AM`E Ԛ~l@'ϨVKX\ iiW:]qJm5e}7Rl#nƺI\&+ YLi?A+Q[2@i.pٓ6f6ٓ\䩽( J,i=b7cZ*w@_EP[.`Pa2͟';.jN?HV^ĬK8NT._KR5yKlewIr3Ÿ2wZ+::&!1S|%N}I4>awT +:is\Mʁ$7&+e(Wp6J6 z ` @bC1 @@LC  b0   1"QQEb, (i)&4ө0/&TP^Hשli_[)B+l L+E|^x-'EЧnMx:odMTK~>*Kf.$cYIRsi{cBM^Iۼ5pOAЧF2W%[RO3IvE',krES~U)}݊J %/@,D~.Q{DeqMK(ڒvVD^7$̲Wܦ^d`:A~>q^fԽT|36Mmޅ$IJߩLbe.QjYYF?)fiwD2[Yt4t~fݯDQT9\ɿsKD#kodȲ0'96w){p;)fװvEǣl䧫mqI`gWM/mz1F w F j 3}+e FV؜^Y/.7&'6zrO($z"NV?r0qJگrV܀RVDbM`Mŋ._ވ,r{ 5 ݹ2WKeag\b}gVSNci՝D'%jDi%1sQ!yL^t(K̗E%V-`^JMMSies˲irZ䍞3G[/qKCkHW2N++2V}WqKˊKO |׹p:2#g6XeA⪿`u]:ql#R{^9>o\i$^.ޢ8}Da +ki\q[%9-[r2GA*QEsWocr-:Tbp'Obl6 vA̡/W , ܃l.,]\ h+yo` p6PW$hP\,aX h26CP, 2  0\` , +p`@jIJR bw!%pp1]Hln b7%$@ eOWJ'Yg'N#V`Qf+3d)ҒJThFC5jI2E2L2XpLA~MI!S -S{sUPl [%%NO[e#I"׶yo*l1N@TA"e ^s#d,#OG v<#4YZF \pX,C\. k +f"IWpp.ƛ"w 4&TI2 7L2>;uF7Qqq10:u*XԆ4SratgѠ9T8^_sedj(Նk*㌣mau%ЊKsVwղU.ff+ҩ/Eܪ*Obm%uӇMMJy6ث24{jVhL龆S1QjW5(-`j\MmƪlԔb1ׇQצXwќ'㪱6͗COdE3B*LmkfuB̉t>hjhAs(J}Q I\-r/ЄF +$$bTzTM5h AfM + u5j)[S4W/Ӝ;.D#i2kǢ5=4 +D[Gt53(_΄cJRRrɉ7G$͑]w̔g/S$9oeװ޼ ܋1\ +wN d +X,evĭMx/rʛb2.Q8btvxi&Zdԗ+Jlvyww$%<Onq㼫t$['1EV{?KGfMחЗgk>+п4sɨ}:t-y:NKY7BXH}K.vhx =/ b @!0 0 @00&1b0@1 E&1DhزȲD ou43< %ܺB+rYlVY+$1djmrVhI?g{̋*3‚Ft% ˨A.j1[$F~9՛vsos\b%ՓO2G{_ ~'my-⬬j A%IJe}ܺkiY'mR'XF%'| SoC{vZ%=y{4(ך2KpK<b\~Ua,eg_dG=c+.ȋSA$%ģ}S6C,7R+[\ߡ!*`PֿN*ױ֤ޒHXr`hԦTwvd%U_Y_&%-ti'{k&m%2KP{z9NJڻԜS!SEdVjяb2G _,Vrm(ҔcO- +kx>i; KHq刨"L6+#I>R!bX5@$AB w&ð +zzXvA@;\\+\W0  +pX.4V i`D.Mr"aðtAa^{at;p0\.YGp$DF D ]a$Jb$~V. Bc V؈,Y\! +5ZqfOUpmq_ R Q[ 00-aY$|~Rc#@\W(w /.v#`jL327;7.a~.`@ _"Я`,$p;!jqص`+Y` 6wE "j7E`c\k @^Zz;wp0\!\.`mI0ža" tV\ ].)\.182&NEš:HJW=.pQc+z + .S3I*Is.;hTm[Q怔,'C(r0%+r +thITmU#$5`k:+mHwd@ UX@|% +/r؋u rLZwf" 56 OvWq \hNhW`2˦ D +ōtD^Fai.z _`  @ 2E i݉e~ +D++L TbSOA-0{]7KH[qFT"քۗ;J[q25fB6eW$IVΕO n\lyŚ/rXٙ^/;ئmxRj.Iz6Kw=h/;[$3J ȵFs{;{I hiu +EѬFS%L,gM/={';*GsN]|{nEfZlj7Y>7˩+,NxO?9KՐ_RsJH)o*u_:Fz'[/iBMu8&Ee4*U7IVD:9z|Q6R(bqs_E{/ވu=-تJ4Due9o7i*kW/ԪR}j/rov؞Nm;zى tLK& Kixk"/Y"͍-"ޣ T{ȴ`If+`l.+IKM_W`Z6)cASo]=@b.Wb¤E̒v +]FfP t 7]`6A`VAw Y 1َo^`?pӸds`%dP4@I4HaYdP[[C q-`nȀP!\0 ` "44.QP 'r{&TL@HBqXw 7 +f+!0t4 aq[7 \ $;L. #k $/q/Q布PU.OA; n45pPרXy{g͆Q.bjcV|b{5W \wI4;ݎ . Ue`FwcqXp +at+w +y HV@̃2#`Whv-:v H@ \4`C @@ +a14X [Pp  +HWp$C"0AphvH cN& HfatI 4!qܗ@ &mV MRI t] +ZUEOe.("JI +u!fo1XWa Q-sD3%v49rl,kP{#\WW]ƭ._ i^ V$Y&O(Iw}@5D9=M5G Q|>rrQrdsdNR-Z_ +GJڔᘙm z)\28งJ1._]o;6]rC# A|ҔpڕspeHdgWN+ؕ$[$Jߡ)%,譫AtmdTmP$$$+0ɇ9J43[)ӘJqt +}D "v"z`Jv$'` 1 Vz, fFF@WMW¤(ȃ1T[%v;5ّIH)42[t+ *EP@O" ]0hWDTDI-ZwCL.S!ٶTYtT࣫ Ś,ɗY=&zE*J.MʜoZ)t3 ι+ +  Ydfص;PղߕϕurQoFY?U(ۑrSJ]$ŚWКoR1=;eܶ]KQjsēnp,ħ] +RS8I!8qA-ZkHEgc5NT˳fUQ6FGeR8/b>jo$d,MÔϤ.~ރԷd<=в8mk+*ugJRWHDJZ;2Qeq.ȵwtcN{z4C7+rٻ UZWI21(=ӉN&/[kWV9m,ǟ88Μۧ[DFZgFXMnYL:Εo8Q[I-p7nkٙ͵+[ٓȦjƳk=z`   @ b C` 1 1 +! -*EE9)ɭel _f*mh5ȷrط˜#B jVscdc>J[}N/ps{E bG *>`MG;Tlr{?O?FEONLn,m.*?$lsUdF _c+dKXʯU\j]{͑u&Ohr}Xv7f v E_!8 +V9t~eV.5Y Mۑ^ÿ@'b{Ysb\*,w~`! @w,Si[荃flKP @i4qX¸ jĭ@;hY4 0 {;[@]!+!.8́!Y4=FFTdVkD].`n@+ߐ+eZyy\7I` Bba\,+h.Ř, V`1܍yU f`H3 3ȻϨ; Z. u93 +SR/^.40Iidf+]r} +n@43 ;\ h 0CvXpXv`$3 +b \,G`E4!i'q1d Yp@; "7'nMCC~c;ujxçqtu"zՈ\.E14P]ۨ " *$.2N(~c2%ԍi,ƅu͊;R +DPv^p/q,݅Q\d!E L Q:X< Irdm̭}Ho M!!y C 7XpLVb.]!`1hapb1\0q p%\@\V b%~r +ȅ0Ԋ]4 +DǙq\`P 0qqJD,U*Zy4 + JN/b`ԠI$8Ҕ@Uaߙs$D2)idB apCZ4QMJېm "|۩'Qr(vB!-W%%#` @|N4jKhI%6_Oז@bOu!T^ŋS[L{;_jwerèG*4g/G ?cvV!Id21HC F>.Ə%ŕ~\UE[[\[]?LQZO^ڌy\?X_2BxU%REr+USdiAkV2wі$ 5yzzFdi1)B;X6ӜfcѲs6SBU;1qa̴5S~aiiصl +li`AVԓv4GeD,4'`errN^0Yq\35%6AzS +G)$;}'ԅ<3!+ qa ǹ4E> ԓ}\.l )RS{ L jW)21|ϩ% /qogayKv̲3МcnS +byP1ЬGIjJ-|SeҏB.f'\e7B&%Md%Ez%i'.o~fQ}:rG2_*$]s5NUI ̱" 3Y].M-P *tܓnND&%ZDIJ9' ?7#uk<+_KPYN2\$e{[:YKRb1O3\fYAСoتT魙)fНZH\6QvlJOfVˈgG nQfh3̾&=sJ%)g.f10D00! 001  0@ C1 0(@&1 0$4'H9u&2i'ܚ+ɫb}TM ,Leq&l2)D(LfEY0+o2LY +7Rn)s"I)>bǚ2: Cp,. N+4uمXV @;!j.\w[` =vt#)9nڀƢ;WA~`4ǘdՀwo`_A7t+Lp @X9` + X57&tjJ*1] kʣMfcW(]m]H ȓkrr,- &g͉h;0@ ć`ajM6  +X1ZQw@FVd 0ϩ + .&p$EI;.Dn h X Ep p pB,bX\L$7 qJ%6C`}~1hJJ,pE>睻s1X)rȍ4Z{w3$e+R& נg]ATI| +N ʧdA<݅umw y{hl\fw`4-weiH v ǒdlD\ +r.t! lWA;CefƘ` @;+q\p@J#p@;.r+Q۸l4 Я 0pW ,0$`L.j+*jXVQ;{D(ʀ \D$FW`#,ĔX`ZdSԂM&Ȏő8+L7BjBUEA #=e-e +¥(_hخQqܱO9d߰MZ_-9}c±ReGB-GU[~GÅ᣺r/jke^r4-ŐW=%BJS|L>K՗ǃOvudr}soо/ fa; cҊ$mˠDʺIr0?Ris[l +ok[3.CtU:J@`sd';t4UDQe\)[d +أL#=Y8djIBIv3] }a2¢Ȓ.lTJ[nW#iIAۛD, 5e8I|HErrF)6ٺ*LrOIU'ڀS)nXsiUPjim}4ɧp}"rsbщnJce Wؚ 4E]P^>,2GEgAJ9 |/v!b܆%;_@:q" WDÔfF&`!`1܃b1]4+0q s0{LqQY! +p$Ө.S{.׸U")i4+#aXLR@,EרduVf|˞MwIXr+WBi뽌M^=ivzep뱎ь>O"س*w'10tiA1AkrYeĠٓ`ܮJ̴%Le]94iʓLBV,-je$↘5p" OD`L)"MfD &؋˜іkSTʧLKՁ-w-q|E#YpۂԶ;NhAѸۓ 'IzD`DZ2m2Ww!9= LC?KXXF@"q:=,M$^r"2iJ&)F2b׸,M4'N̾Xyt+xwr%|1@ 0@0 @`!  b@&!!"H$$Hh%q,D4B$E+dX^ IL_$ +(WdsXi$'+vܠ}Kp`Bzw+ ++ՁfkrD\}`Q " c ;ހ!\{PwHw Mbނ@ F[i6K%"^6;c\fp#ng;lA\5{[Aq;5`%wHV= ߐ +e.4FVz9"6øG(,-=4 [ŢH`F㸚%v>\j?P%pȎ ]twD.Y\z 0 v `V`ނ `QԈ1h2 ˡ "Ww XLVcЈ렬 .D`JFPpbbĆ-Ga $\b5 c#PVJP!5 G -@n_ m͑MMa4=Dԡ1 Z'dNr+,XEp%a؅0\2!.ܮ"M0m"!p &ԖIsV![m$;\ihI;υsl!qX,Gw 4 ++X,4`\.27 at+0@]$ړTt68DA$J&;;_Nd Hŷ~a5ДTת ;qCVU A `@-,C@ ,UDf"w+ 2Pj .NA8Щ-߱l0mMBk/]WrLYN8Mғ/ 3ΨEQ=hR⽉"e\ +x*G\hds𘯚Fp+xjMȦ:1ښƜ"JWd&E4JHvLMVr:s 't Hw* 6WRj~\VCZ +]@5r)P\@)$΍$Sþl괙Tό"-NSԭӂ Br܎NJeZq*ϒ ]Ӷe5j'{Dm-Q ,:q֤ʳ_{+\ VVv6Oy۲+Qa vDTR캓dlROb)TSdBpj8.TD\OngN좥B1I$P2W[+DNP̈e5q^W^"n^Rbaq+x ֺ +Ÿ$is^'A:khItrM/+KQ3L&p^#'ƽ >XNYvK˨,73K. M^GÜa&z#DE~i6Q6tOw],+)LM$ ,p^FM1{fEɅlfDWᙽ!>IW͠-U-͖FW314}kMqEw_2Ћc?J/Z}I'p!0m90ً'хIl9FerݥfaaoF 2)t|'^O/Kv_'_scaINHm!NI}>6rǺ}\4ۼtP10^)fZ݅RF.+K3C(߰_;GPש, j%"6QX.X,w`XCj@XpC]Bs f`-IW@0bwb @`,10BDCP"sРC4 @=9 .@v(.E2q QCr$6`#v;`pP+`ЀMͅ@H 1\bCP\@Lw#;"IȌqCI0!\.+@ :!J` >tP\GV4w5wp$&+wj D,6,VP 0 ;9nJD} ; ;`ܑXv\h:4jh*\*m*Ҩ!~'r3!w(,1\ Pv` ~3v P .vj1j0; V\,`E +ROfu`F8whV_ZƝG2 %+UlW`Wy'Q&ûarzj#v`+@J#`@F.\CJOh2pWN_bpxՁw$ y622)͔0w;#*UcSKJTdʼ04]ynSqz2`=_4CP[f.t&FXp<RaCY[$-K +dKN@~\j̢:sЖ\'W\B/]u 4CY@yA 2\7@$$GpW]Mea[5 ZۨN$v^E^dV%M9u9`*)Xwɂ.n_Ew"E.NG%M^iPߙGSdɫ%ԛNggКy2eщ[آ+#m!y7} ht\{:i-ؾV4L>fJY")Y +9C'bZHKeu(S1yU[E!uGK귡T՟6$zI(ySPͿCev.b|b ܢbTﲹ5IE]>%^_U +g=)gQHO )VOH9N[ +2|eo6( sF)<^)PCw抜)Tv%&+ax/ᒾՒ6up3N"xob઻jgZEJUPHi.dz0G㗥8:o o6uǭM-^H2ɗ nL$SG F8.EA36JJ(Ìᑫd34pw ȅU/p+o}I;w@~/nHL,n\^&dw+lv}ҿ1Z=a;s!dk`5BQ{z3$[-.qD%U fE2BQ}K\`Z| Yt\*]dFP̛ +FfYnD}"`@?;%DL R&+f2ekJ|gE=^~zZ.=D-*F/k#_SK,L3RuV835}>*IRF\̲30WR%}ߡoV +HwDG\ 2Rbm[|EIF:BJT4?1~tY%r SԚfZ ~[p.IVcpՍs+.ӎjQ茳gcRV5 ӂNqRNkciJ|H3h{k2qa]18جuUHb'6:r|0ӜH7i`156/CVKX$\|` @ `0! `! @ b  DI &&ȕIJ N%d"M4YMbdZ&&; CIȓEqV,X,}m14cH͒Kk]@W ++ ]tqj+ua_ z+^ #`qP^1e~H5` XRMw +J`p,{ch!Vb-4a+B(wcpW]ُP%!+_Q .fWHy,n $ߠ`=CQj`I!؂4 +°++ wXC,VV~'phhM|DɽȒD +°؀4  `Xw}@܂m08HgucMugAxm78yI*׋"roő6ؤ ;.W I\Wz'dWzV;_+Sĺjьv)*yhNCP&vy 0\,@=4 !0E> P7Ly[GaflYAaX`q]Kq@inKbbp. 1 AD d]C*\YfFMTjKhɁV[n5C^[S-_&= ܰ#EEdrF{#U_՚!iN#*1)mႭ=zHӧ)z"W~<*%XEKk$v!_ؙyÆ+4)!UQ(4rIz"+"z$_ G&c̒P[J7FDNV( 1#Yب:m;3 r"$Mx$%1£\7 +moM:{ũw&A|\V3%В|՝*' CVB7(] ߨAf`; +3 +'+[bD3w$`G^~ 4&e nDs!, { qD;D X, +] 'pWd]&JӘd|=5k iz dBTʒ["ZZUaM{!9F;)2V{*L,r_$_zЋ$re^j~:2GyQ,E(}W9XV$LS- Q.I=ݐŔ`rE$<7bTh~;Xq\S_Z|+n;%\D0_\^60spVg^$ 䑣&ՍX~ңB,F|# o+N뜕΅:4+S`+_t|w 3\CgJgSHz>/iThk`6ͶwLﷴ̳8L,mҧlQ1Fr<QfrbYG*)2IYV-H$ȴ?V&bwlzwFWഫ ߱'62SRrcIhzq%~!!^/Ṭs9S@w8jRnTb,pӫi0LMboMqݾvU$ILwOm.=@aQ;u'&ЈnlY̪(mtd!.4&Sq~d\o̯1%0.'Bi\Y2 +o&EH*J]řa %'N +8W"7y _;3NŒM_ԓ ze'e%3qzA{4\0ijc=j*9\^Jѷěe#-#9kaJ"KOZ%5\-y_3#NTKBZ)峳]T#+%fdbaK#h `LPp.IYhH4\T_F܋ 6\3$S=yʥLKg +oTi1$Qi]$IX[\PU*NOܛiWKD|[`1 0@b!`! C1 0! @ C DQ$4AEDY@Z"U\I$"bI5bJ$4EzN0j\&Xw@jK0 + .lh @%nWc2 +\,~MX&[&!]Q_w1f@;lJ@.!;\w+t=`! ,AX\ WXC~z(`GPՍ+j܍pLpXXC`4$ (Ü;2rPn?pɦAJᨄb A((W1`#`lAlt+rv0;@h± `V -t a܎+Y@yc!q0'gb,f5vAq(J[T 6`@;45v h,P[ArC#® WDKzk~[ׇ(w. Jx +_؃4(_-{Ԡ qZ t'Q5V0\eOLEm؂!S\%+jIV\y'5KhR 7b@m|ܶ3*$6d5Id5Jv[;vgiw +4cw'uTe3Rjy4l\`.u#F3:ю^|٘3"Ԧfl%+FKbCRa(u$e72NEdj%/;nQzܜ+rkEU}KԹ5SPA-1Y;+Mvh ه+mDG{f ++h DIEkR]Gb:V"0`8w`Cvȴli^K]y&+6M&LVKqz'rI*O" -lʧPؒSSa㴜 +'ƢJmGg\'};>1YJ'ı3kbGRHx4>j<՞Oacz#=N5 KHqZҾXbޣ*Hj%Io&^bȶ$\+/.Pk*]} !kwՑq+qA^ճ:tWwvv~Rb'QZ"f~T#E'l[> ӓ\t#PV#wLx&89SOFv0T5W>::.3:y:^QִT{'a!).rW;3M|oZp& ﴍITiR?H֓{3*H0)#3Iq)W[@슭.WkQ…'Ț]lIM"JdI+@)=cEQijLv"г2-P +!7nrE& Дs>@Š1+ 5juSM.))֋S=(;31x-ҖZ؜**rdڊ5tt2;Gh6=Ju(-H48& \A_O0]7 NW$XnAǨ2M"@܋Ϩ"qzw(̷m֐]rR"a`M HH*"Nei܋nfN,}ɤ4IȚHM 4MbۨURds5Ȕ.JS%&L_E + %g˩J3IS}pZզK.jR/CպMUVR{$d]:Squve.T̓auê'gΛ)3=H>8"n씯}&YJ&i>L&% +JXgt^rS7 "`ZW$"4<*m>AN,K՞hqF0P*m$U8ߑ \emljGKDeOUs]m??>`C`  b @ @0 C DQ$4B$Q4N$"YY&"I4ɦA"I4IXLi2tR%bh,D V$v 1X,At Iv6Lc#=2WQ&An~+XC[!,!W(5 B/6.>& z +4w `[AdR[ jXI>k ^  1X"YD5P#XtB]I.H4AY+;,iVȅD2MMVlW;wVat i`&h4Dz. + 4fP;uJnA6I67!baTnĂ(Ka%ZĔaQuݜ_thEth+d'96^l4`I%`F'2Ir$'4kn6ݡ[ _ $Ð +$+.  c` +awuV 1 fb  AE>û&vhG.J @ WWa`` +WCe 2II'3`)i +Åח:^SLz:|+ ++OH&`yTf=Lp(QTcG4SU庱#;Abj x4y7RbʣLd8u5_dpTV \U["B:Tvizzew ]U٢膣K,mf&_2{ Fh;\xѫ--nVD/m#IKEШ:z> 7Vl8"?+|m>TFGy*yG[<]hWThۤQDiίݐwV:~ڏģ0o&,2V'26թo!Re~Xv]GVT0-n* /7sir/J1pPD3>?Z$ALm kpR2mGTB+eᷗdQ +/S<-ES7=Kx[_bkk*!sP|שtc:_y3ޫ΢IDJNO܍M@Uj,9uQ&Hs(".aUv%'3vGo+ Ut=VH.@\ @ @ `fN]Y`rw.ƣpX4a!;vC D jX@@= +;s0 \lY 4 @@+c Q;, (EE6;1ۡ%)dh_,. +aXCT{|)}R_CEo>~*roHajK'zHХ?؛ % mRGU1Aeh IipH5zRG[ˌz/a&F~Kز<7 +nߗ_QJKU a"N4X |D^UqzJzA%H-}I8Fl_ +T\$QՊ?ν5pzq(٩~mUs=.$WN0WgйONQ][ɑg/)J lj=(QW5SH +IHNUصB^u[Z=-ˡfe +{ 6őD+BTe*Q6m,+}BòoԚzf%ɿRJ$$FδJ+>;NeO\~]f<[ԌdFjWrQ7M\VV*䀡M2v^&0S-r{E/`,̹k^e 7֖nSfUͯ?2/f"+ ~.]]s^7ޥu^aI5!PSw) M|RHΖ"IEtEO32z]tǒȲ +obP䈺)Ɠ{I%FxЊݗAF:-F"6zhɋ*ei%H=Μ_rjw+,?XV3BpsU)/7oamcE).lXg7U׷SJl ;G=*gbW0.މ/cL#^Q%d/6i+YE.&i{TZI>#S(A 88$>j_?J#VBUCWbUʜzɿqzZG fi/-0.Z|Z=Lv*jdG]Qp!:eNO܂]KeJB \eaU2l K(a+ՒTJwW n+\$Bp{ E=x׫N'GBf#|ASnыϭa|)k sԡaըaS(G0^Xy8:%c6"*+>es3p,Du,9; &Y)0tmJJѕ3.sQ i^OS]:0mA[rC)]Aؚ]IHb 4 ;O5I .qb@AE zlNjġW!(DT4gkU- R' *qݶ]NP_J)9@.q)Fdݭp٨skR7zT,>.9|yQ|򹞶o(߆_2IzH݅ƦrLQSd+Mf]DDR /ȣ9,[,Y_ҸBJ7%rWH؝gHN3mWlugĨSw9V+ɩa O,b=j)ivܢZݜ +EMoC-Yԟ9?soJ^:>jOяܽ +5n4˧SMq,D +4n 4Gje̜l}^/%cVA; +i0 +ˢ?gVv*ٓu"ЋSBI"i)}1j-[NrZnB8GdLzmcfov ܪoZ_`WN;+'O\Rn"\SlSCEG*[-S:2DMʓKd?qFrXZ*:X2<k':\Ɍe[&73'O}Z4í1Zŷ0hZw?[YNV]#3 +.[{jL=S*{S ̜e/VI;{"Sf5\.Wq)SK2rhRzEU(Nk[TXrV,/` C  @0   C 0$h "hIh V,Eh@XeqDbI"h 2*@jja9XC[MTKh#NOVsl%6"X.;*b 6܅QH@l-+ v /Pp fC"v 4 5 +6\ `_P` .2"VIh@+˨4+tb;w6l ww`-Fw.Pm ;Lz Bbvvb/q@zP[¸yU vP A$X=W 0%qݑe dF  +`L  a\ni&I ; +z\N A0V f& 5Q]QME $,` /A y_Bٰ&)9G`jl<6 Y:ʎxTb|*/yF^2I=xU9_K`єiSdXI8JaIšW}7/w&!uc<%Qqc=t8<#-4՗4["7~X$eR/LؕI%TRRFV2[/vFU *-EP[EՙV/dˡ n{e#től)$YQ?@sK?*/窽UHB7@{"*SnoU?|%(X}]XGzȯ̔I&I]e#v\v^ +>%j◫&BJ7_2`S.{">dߩ|Q w^jcX{GA/+Ⓙ-%Mf4G%G]>lTP9"R䜙|>lK|FPݧrR[~7 F:ƪzE$S+Xs4 +&" P"PdKv([&HD{4JQ[;}:q,UZueebq : + +j#5R>9n&;[~[^ĪWVoڸDBxٍf|5ML,V\?-$v(u֐I_$Y<12[!7"n>p1dl;jKOG(Q@RA']'PՅ,P]~W5qO5i(+X*:vaӻݖ۹R{ +fQ [2Hj7nd[wiX* 7ͤޡtVprWmN2~Fi(S$gŨEYfG|gS~|^[Dv{W?+ezإԜ~ZX4dï#S"<}wH`p,xޣsbX5 e}# \Sm\6LO Ra)z#5a*Yq.⨖Sz?ճRs!'9lL<=o'%J#o l5p\t`4Mv&%xobv05,NݟKQVEkz7 4,8lufU7so@Ff3*ha(IQN_)dҸg"[&m.dO" +CM%d;""+ ]v%rySZfstqBhQdZ'`hr9L Ӊ-/7'o`7E74pDc8yY_dI6ԖdԮUR&+7DFQ`gtl١Юiw +I cB`Ib9m.v W?!f{9htj}S:;Ǒ Չܚzj6Ӷ^16,;0I3a%6RɦZqAX5i /.}{A,@Lvhu @5\. +`cV @ 5Ln{ +pWbiV\ 1݉ܠYX, @.biu`ahvMQ\\.q((d̋lZ RvȻuj @/@n4'rZF·rn" @ !'~}hAt 0L +1Ahw||@n"MB1@$}C i0[T*Kh?EVWe]yoa:땋)dʸ =>B;G FA{5=Im[W4AvDC{džQj2q`iɬ5(E_8OQL)[E/T[*rm'D_z`3:2/qIIhzdU8N[oW +R6߲jqbN]쀛;gH1Isv۠=S->dU"eӻQЂ%5lN T*K،2 귱8[. .DRJ*˲ -]ĥoܚZkܙD]K.nW"iz wDԧ}iy/rZ{NQ_T8>)ErL䦬07'8\G|F"*O. *q +pw.՟ҤS,R1V.cU:&) +!a$l;jI!%j 9Bő'׆xCJ q+)~ uIR_vp'hwm!>W +o1Tl/ aRTpnynɾ| x%' RIUtWKSjYhʭg:m +[nY6)rEDucYW$IIWoQ"RLWT^"_ ZL$-ܙ6Ȩ;-b +Npm[ܡ4ҲdZ/cJ/h*RIBq6f T䖲ғzܢ)s-SQ@iSV<2yɩJ!Q mh̓qUQJR/rJ?4R:iu+voE("A8{)/ʟ&o^bnMVwI|H7ݷeEp*YVi$bKbQ^ +9?b.oV_:ovS5g3%>ZVlKy}I]A/rUmfoK&v2'jJN+W(>n众-TfW54Ɯc+F̪ǖ(?VAZ܌0gt_yv*s)zCn۴8͵waUΊݲƜvRlr'Qj\ʥHsS˵neA0H*u4߱nkvGpմ 8+E8K*DɩrVU+Hwqz+ !vCEy_Ы,cwd)1ʺ6F)/fJr+zA7姬8;.Ϫ ]6ƌ5I7gUi"Q;*ErV[JR{M"bf4m݅濠[A)h_ԚQ ̯d\"T8YTЩSK_7fUd&רV_;`ku9Ҏ~r l.G|9/|\ե/I>矕joAɽG^3ps"tqY}ˉWұ B.2zyFbr{ɱ7rJ!kC%>bVp!`Գ*}C*WrI1MEeT,5Kc =}j*pa@jKbqø'z'$#.W#SN4%'[>.TW 0kyxZzsjwV C~,=Iz#kݏƄ`fyOɫqh+|7e$_wcK8ԕ˙C`0իaEHF]Kģ>fffQd ֲeW*NH3K-V7VIO)Ar9)RUFqdFbMP{&\ [ BKv;>ImON(, )e _q-{"[aVIP/ƭu1ZfE I2:6K5v5UcZ.Df O-XRy6m\d1E45fV3w+{%vƽJc|Jjq98 ޶;Jئ<=/cf/&74J:I6iyugJ/U)I*Y*Z_Jl z &Wsb^™x8j)2qqtq<>jBqwMi[j|?l7^ݚb#)qjQ1e\-Ɣ'SGQ9N_3oՖ"-Q5 9Τ8t-Ȼ3;\M.WbN] @5*cLA-z-Le'ԞVL.Rs"D"\!\= !It#y+h2)~m,q( !6Xr [7V) ϱb LRhCbʹ +j! bO;$Ĉ~jϑ2`&&a+2qZ%fDYrIfB:vb/USb'RF fT/56z3I^NHSv3 +Imu>mÔNPk] ۡC,W VO-تGAYvmEbͲvw Obס _`/gq25)!ܦ3,RDLB"2o\kݍ0HI*q L#=[r}8",9]U);b+LvʙF+yE^K_p`y?$5-%7UO&tVk'{Ⱥ;þU)_URhf52<ݶStjyLV +/}NY4B,Liˋ1ԦQ-&j/ ݚiͤ& +{ 0 C C   `! `P C@IDQ$A8"&q I >!S4N1HX"7ۨ] Hy@W VC-V]@I{:ȓ]4li7I&VaaوĒDFvЄX؜-f=Ep 1ً3@~ 0,;A0`d+!0E 5`@FV'a! w "q4 Z$\- D[P[Ja,iv"`,\,I&D.qXW`{`+خpGdFvnaf&bM; &  ,Z .+! +6`!nO-p+ k4Jj- d6N02k Z[ASksB6C֖}>)?VI:0ɑ8ќ= <-hIrz8:edV;j ۓ#.l<*TьwoPw8F>20F;ຝ*1V % Yk%@8J ~%EMNb Ud)A+-r$Q9J;bWJ~Y)dv"v\M *oy26z_im/szB 2I]ENK3ue6F^^'g#Efդ5^•J@tUi-# r*lbN(%Q~(\v!7/D >PbvnL6$HcУ<&{twlyW={K~*hR&MkqKh+|T.!']7Ej%Wҟ$^ 'M*۶rWQ6ʚ9zg|]aY.K +5&"e'Ͷ_ՑJ,JVըoS^UcH d7F&Ԣw&tܽ]J%Ii]嵬v 8ϯWm:tAӡ}@ȸN\݉A|׹7'nH + %eIeɡyA;(:SCR*"*֒A(?BSMsHJ[cVMoBPw($k3R%'КqKWvZkԾYf,IZ숉(.(')J1^ k@XGW2OEyub53(iI+$9Qdo-B,NorM/ZIsl-P<[ՐRY<_D}"$FNщ[wa:$JkNbQs\Nwr2wQ,%O2"+eH.EU+A; 1YkB)-[Ũ6ͭy2ݶs~N?%(kR2%28里\Ş>!y?O]WF;KТX/-4\+LjQDu_oB!=y%R~IZP\ vVXz! j;61 +(%г'Q.@W2IS|q&(OZ)^߅?Jhaq.:䆠밾T(S]:OѧgJ]L;ɇ)=8~"J)Wx_ˆ6tapœ-"o{e8Zl7jX} )lFjyp|l2%AF1^V?H}Lc(өMDұd%$[}DZd}I^ۀD$ȱ[b +ȼصG@IBTf޲/< mj'VX[HjEF>]P.Rz\2ZztDDN)Vf (5n;[nD&e$,'Z8]X]u2A yȤTITARCP{mw nZ0j@TSHy "YVEk̖R\եI@' +(|8r}8Ve؋Byy_ExZkߍ{7vzu>>q=߹['7^9dH'1~a5eXۋճQU򫈖e5)9MBR{̉Z<׼Yn+h_Vd)ӊ4D;#3vj5zV1%ui4˵ɺdVZ+a3Uz3$Q uKA6TA4!SHVwmLEY5'ȫBJV$͐p7Xi[Y"_H+c aL.T;Q&< +/,Wl5 Hmi*hb*%Ɛ"ԓ{X"Eso‰ԷPJV{Bjp3FԔd"cv1\e # +ɂW&hc)pd]aIN=X]#,X2`M^)ūGOx54&%f:Q,2rN\ÄKCxX}Rg87fHK:(B˕D~CUBcd\(_Րe( +5_T_ #"H0L421w$dI1\8' ` 0\ fב 0 +TZTƝ₰JA~(JU#}K;[:kj%Q&\_>KpXFZne4vF1i"HBkvFJrjG-1RYUيe2;sЭQyVY 8r]% 1փf8)Rذ,Ȣ/;QNhkWÀ~` @    1010 P @0$"( KZ,Ht&,@J:E.d"N YMD5`I0V%p `!f;ZtdI6"dd%"m]^е'p, C Ј;+@נ wa=B,q4 1 zRK 4Ȏ6`\@  C hq@_/䄟,^M@*OJ+‰:OЊoۻd$}gc'*ih[_NSofj_*&ݚnѧEEejr$49Trܢ&We-W'7@oVhy"ސp E9t^)]5Gkda6K\.nr%^]= |ڭirߢ65膤+(Sl5jʉ/1FXԟ9RrSmrČM2~T&ɔԌ`~j'*i['h,NNSlrRB/Ż@S|evE{kHSW슋}Y% DsK${-Inr)?R|kW3,CZ(/}:Iv"#(ͻ.ʤ^boؠ~엛l\zGiG,};ͮt6W MGEoͫ ,SnQDd>S64f\"[|5!c6*VvԸFt8K!a+K^rՖe*̗90mq00 q(.-ǰ; n4$NE`QKu"DYfQ>Ugj:*raSHD\ #Q;8_qE0VueN:GuɨD6{$.R;?p6s57V<|yI7a&;o' R]Nҋ]˅dz^a[5(OH-Ǵcs.8C<>JcY{еؕMuj+q^ɳ3{H .4}bJ-87;v[IFnЋ1p))[Ju%wrWJ wՌ"*n"Td+yskeJ"5ՓKV +݆laVw~v TSWRVݒ4+kG>wVevGFt2ףpR~efY:5QFIj-tR.Q<鉰"P5}MJQSِeA(T_H|k}BTi$V5)_x7$Lzs^-F$)ke8i|#%~ǖfq ֥֓I&9>I7gV-D!%r$9oi\a~ѧbeл36rB~[,;]e[J+.'~D/h'>"\96Ew&=ME,B.-ȄؘEsv?pR+42]]Etw;\ƛ +$"kYpio (R{Xn"ɿPODs+[bArl)تrJU%Mj)OdYaOV՞x{g]w+-nLCh$4' qo:D4ɤM +-:vE fNacC  @ @ @1 `! ``!b  h" ,4WȕE N%!Bh N$8dQ4VM4;(履.2\U؋H!\M@&-2^hqՀZnEۛ +/-5#bn}Vbd[QwAٰ+} Wb%q\] BϨ rL hXJV (e]moREFa,qYuY!Wdr$dAA +L^nKNhm + +,w";ص{聀$E'a\,ap\k0Vb0A2D~{ v|2J\Ұe5V%npuEQ29Qѹׇۗ|(SN# =Im-X*;j2_B^ĽL,p^S:\ܗK{+f0_M[/ak̙<5RYc8J?r -d|ơHK%kV#\wح&~_D$얖EI4LnK`IZ\E=5Msd-dԋŽvv+HD6^ K4W'JFB7I+,hWR')I%&)$DQ8.P/SBW@TmJ=nܻUQEMTұdOZ-t5eɰrTP7/ΫFUX|ݕԭVzF6nrKYK[_Ԧ*%%^ K (ϫepm=/Qm""deíniloYc{ +6DFMj|W%M=j9>ȋS{ +O܄cꝋ]6">Lޮ-.QwѾ_b*/TbW$+{K%)F[$G,_ ?P%.QH2J45 svMle $ǕFN_@(ъɕp'ATc͇oI= ߸XI%̛`i:w`S(W[doVKC["UeSqNЌ[9$$Wv+z;ŽN5B9sE3UeY+7]E4+R_"8}\쀔b3oH2r U8Bs֠M%u<# z)Q E=$e\?&H~SzB# >Vd'RAEψ[+ω'.'*oYlܸͨʽIo697 ^vKqv C+1,ID,^$ǗR؛dpv$%TA!K#FR1\)k Mm)Щ/Hu q*Iz Exoq +ΡMwgS K'HaT:"q[#x_p)f:s ^&ɰ'vFr7ֳrv>B8+B #BZ36`4#'KN"U?u&:q8Pm/2nv牅%PFPs㥛NK_(zF]UmI0φV<۲eKZY`{(ܱK ,ƸNkl/nDQVWkD*]EF*TgFA\oo оMm/N:L F5Z]UX.r9O[d#_H%<#,)JbF2{M$+1Yǘ 6ZBmb l"Q.e tb]"LtK[1剧e4jq:=c^- u98$/gīK!Z[hQ*eM,y{w +ܟ=AzdGXTbJ+'#L͂bV$LTPԶVC"Yv2̄2FEj)@[BEɉ9f1z7ܶi3Q8E9HQ!]!92M7,FAb6R2|8OrHj&2lYIqdTR$hv rI M TM^QM.Cʗ"^gԹ0V Q%bd»$$L 1ݎ6IjF⿨;$E" `I ˠ!݈u%t@W+[b >Hu5VC"v-Me0Z+>g4+edl1$%t&Q5&f(I$d+|EB&U 1[Rv`.L]{ 0A5rw]d¼,'cYL H9t'"=ı0YBmt:DrɊxAoK#[vTOkKM't<ܒLNhq9"WT&a;@F"EoH߱T|]buL=Km+NIXԿ3!$T1K7RI`K3crma,NMb征ZeT`~ބfI+n@dʳ2ID72) k@%t\ .ՊY*뮣REmK&FD%R,}Ns\:VaZ'esma4u˟mK"*̐-)W2BJ'c LC ` @` 0b`1 b $"(ȓ\KQ8D%@N((Qb@I"jQ$%E44v%+CH j0 M|NLZ7t++RaEͲ73\ [XY%w#}^`#d- 2,. ^|+7WmtPjv+@ƛ[CaQ{+. "$ 0`+4W [`! `FƐ !;X4@Yu +\9|lӐqX i= Eyod6co, 0-# q[B#vV9\u+=^yHjEN4)*ZbNRK$mhvSD%5II-Y0jĬn64M2_&^}&5*Zބ ݕ&WdӓȂ̲zh/*3 4'NWVئfkGL}+2ٶ7FɥNIʧ=l A+EAN\}oVj+戹nEOy\$som +[Wi5}CBcv P7^e‰&퉸 ;GP/Pk$ԓVAgROv*qo{FM@U'ZR5nz@Aϐ8In į}`5׫d) U Uv+yOWdX%\dhlQWeز>\v`nIjOGrM/R-5P{ 97!˫n^oR ˪BemQFBgC=Zu46E8ǫEF}KCcSwqgu١eSc2TRWPzN"*1t-%7B&lɳ$;{G AC\ +ᅅ?UOܛFyK(\FnA H r/.\9s-4jq,Dy}$ve/qERJ5KIש?movwgS꟱ʸj\#t|+x +K܄3{Tw36:T6Ov߸\ ,;.+sWiW$nBt #IYnRc,4$(Hv6 b^]Sf !5Pt*J"\I;(ez*uVyAv~Z"jNɪoSkg>+L?Tm{7V >kK Z)^a|=kYKQIF Ei֣ g |xWMwf~?d{SO$[F +ԪMTNdw e*pA/' O9*Œ;\TdͥVGWDaKR%Q,1*|a +dTyi(-I +P̷#"3/rtܟDN.d,F`ʩ[FUP[ûߩz]Y5 50륊eot# /Ȝvv]ym/m7G؃)"pfT*x%7 +-M+nJWaa%ENLy=mӑdpoQ \~WUӶ3Th$Z)^c:mEU~^YZ:\0jОfӎ>[g/ ¯)(Z)lm+m3Q_{;Kaisi[}G@ V"MQH^/IMl O"'U<:%:n&]u8\Jq5O"NYv x\G#:_5yoAr5m}B}ȇ/bqI#8o$InUmJ*QdX$rܝvt(h/$gzoMK{ۼwɨn@֖ Tzi$R_bjrs$2 IG $;,~ޠBIFFNᴺB,f2>~^dfcia\S+/;+ +SlIn¡&J qnratZY dt\Ś+YdWsċTPRFIHbQ]D溎YeDeQ"F($&A9>Dq I "J-32D_2V32a+\A-v;؏'a7P-u,V dDM$#p l.92V} +fd[c_1|oj +&GC*\Ej:rj% +:"WaQ6N } Lo{n%6p BhiiC}D5~@IET;ʋ1+$-IBI&FLm _3qUХ+lkjekW4CBf9MTI;szţ'9]y+GK4]g6xM}Ѷ_&;cØD!14䐹@ vؖТ~'tFMWRbMuFkMحDW45㦮I*Qo`T+iFe&F5&@ & 肛kԗR6HUB̺<]_m O9_;[Po`,>4!E"KA .44`3*d (']t1* ̵amm\Lľ)$\|sb 0 C `0 44A@MD4TN%eh N7,IĚ`Z%A@M"H&h"0B  a[+.ÿ@ +ϠǨ[TZ"z +A` -f" 1ݲ:lŠV +nt' HyER7 @4,@.!v[A` /qh÷Q7kG V<?bJm:oQf|>שr5^rC̹pT3ϨN[hjiF)|0,ѓ&ugy'~\OqŇCMNO9ikz"de)jOh u )sEߓ&dF0tRBO9 .eM}N kDq-2҂ICЋKI'P1ܖY/&* +~W:}KC4=ܬ|pNl/%i2s߫ )|K# 3@]$e~aJDA ;(+yk˱l!BǷ›(VAӿD[)E|]X="/DRByﯨHS{(RmX$MU:sor6y7DN_4w-d[N.׽ #qqJdqOw'N0R*u%+맫 +NB^쟨9IzRJ2},Ց@~j\wR*wDֿ +T8%U[K^'&4cqՒ*n'%o@_$+U,9Inœ=Kݎ.Kk6jIm?w<ԉ/2۲W66䵿 O4{'BJ7ٷAfw}ga9G䶶2k9`-i'mUJD]&yE?YTET_rHn[Uhq -潁TaMDMdW Kv5Ң)=45cٝ=[݂H1^uT~CMHliLr1Zʑ]rT[[ĖD.IDnWRْRI%3?Ҿ$e~]i?_v<پ[ A(o-Ԋ%n@BRWorQPOԃq]Q/1@])~m6Mʴ/B|;{4^)(.w3E=)ԪM_4Bz]{Zi|J+z J; )slJ<u2޴/puzJ RMj +?>-<ӓ{0:ո;S~_$-sq|Fi{KZ[eBөp&&Šp h[]H9w YisZvvi;QCR{ #`K;6AwȒAE&aFܒLj=S(Yt,PohqԞl`›) v H5øи\8V$#-kU:O`Rum<|Sod]KV:X nrw7P.5o~ÜCo/ =ya*[PqV_V,N?3 $1r}.Sѹ,gRx6,-$幺BW4ƚPQLcJmk{(󿡳NnMEQWN"r›͚^MD4R#$V?~VJr UZEܥVprN$уv,>!SI(ͯFf:j/CRo|XFhۻgVԕEIm +)~VJ.jvKrPgI?Y?3!(F:IM5["sLH  I?AmbInjsh9D%&%-՗fTӃ&亂erm|5O%v)KT`Vr`-4;>K޶,rTIa$)^]uhUjUjJ +^1vreM+-1n|+%fk*\P\-6VMɑ7'Y$|hN2'y= .e.tWrTDiu7 S2<%{(݋a=6*"bp^Mu!,>YHYJ4ɩE-.p݊+a9I%`dQME7쉩[ -mRJְ&ފ]ȟĖWI 4TW,vM")E^Ȣ74܆Us$7QLgT 7BRd Iŭncp2hSKbGMꗢ+sy7qk} +eVrr~lF;r/Qԟ»|4]UE3<-X 1Hx-aXuj=nصJs dGRWinE=^I$+$;_jeAbV+I.@+ v}Eu6a+Xm77`\alX #`&JUvabytFl.I4Qxd7W`p5ڽ,c%LXLc*Ĩߩ/)}K(zszuL>cOZ)z#e.kaT}=P F$Eþ̃Oc*eZ y%?D{"1_Hmdfu'¸8o `)Yʚo _ *qF=ſ3dS OQn18'˸ +֛$"JH_%bH&!hĩ&V@"rI0}QTQ[ranHzðʢ24جƗVW E=Ǡ"7Вr-YB̡}eRtTpв; E8-QCHM{E]l'{P.rV5d; &U8_gbnnjSIVZM"Ž1O:kP1n0f(2}p'Ph&r/A,ʉ'q82P$y{+a+ +GdWf;>ĜY^rrbͷk"cX,BMR!deh +\!b.S +ǯB L[\fbp,|2#C8*["-IPI(jƚ]ƥqt1yv\țµ}t5$ǡ pHIYU̱(Ӌ+f!$"bjVW#[XE*e\oqQN,cݷ;5yd&}/F) $%JOB/bv]I5E8HsK-vS|DOMr 6/`:`[Rй_ ]a>쌕pNI"%T؃Fz ,BJvW"إ$P6 ֤wikIXM "- F؛/p) 9F6Uw&VĔAbhW#J101Y̾Zw10 @1b!0$@MN N$ED8D&EL hyF@h%`$$?P_.cp `{PoV( NJ+#av]k "&'T]"Mh 4B%a۸] Xj{&lhM_O^-01yxV#H<-rN^Q;]4%- +>#e|9mDQ[S *qKH2<0u7X}nvGnN++H%294-\6Zɿc_mZ-{!lcQ^s$ʪ; ^J/2u4 +rtMAG<ЕɔJ4ݖFk 5{\4")H4GiI/BwF!z_,o% ]eoQ]| 4پe}Z)o&\JF0bYd!G'T l |Jh[Dʳv'Q-`Y'm.%')}6aNlQѯwg'^ "RJ%ȹ]7nȲJ<`W-$A*kh%aS_LQ 5_5M'N´eVԭNfRڐ;Q B)hܔ8*t\F3.z{uLީum*H^Ū /RQUdcdcQuK\c-~9~Y&'oByoݑ){nm(SoF܌Rod +%iIdBnEVOg+udqe%(js{F/pB+J96SMj]$ѱO_rN3{ޅn[(V՞r]Xzw #vgBP+ԦJI/O@woB_Bo^(ɠsIs+%NIBv&֭RY/V_(R%(8 hAmr{OdM%"9ܗ'+Hlmo5UTl |EI4"u~nKE[/V7;Fg3AW)/ʉtIԟ8<p t!&n50,wВ[&J-ģ}13or.OS+yeuR$6w~m~_K1KQ[EKп=̗KV[ɗQ/s9؛c>#_[~i:wa'K3.MFZhgHcӨ#D*I _b wWӚD6 c4 M0h+X{Ǣ ${5=%nH/}]Ga &>KRj88V?@HV%q.B̞[nJ0mhFn5hr-iQԗXGp +uƚt()Si+_Q:G"xji菣|7([=?1W;|RoX1a>-Gu0 5l_ϥ(Y|9}a'Ӳ3 +oGO?؝L7]T4mu#nfy9t8NG J=vi1]rnߨU#v38qbrJYk(۰ztbjj~XRrT?XyT_r̩)TAjhb"A0_H5TwE1R~"Zr}ވ)'. + .ƪPʾ%bP⬛cLS[E{ؽ)[{{d\] %I̹jr +z+EjVܛS*ZF .h]fxBuyE{ AR8N$K|aL/`L y&ZsPorQz%mrY9 qkaFVUͫ ;5[0b;|juU6\W("N`.:?cU84dXI/R-Ww~_VZM{tԕ )D x9%c8 QmހumrD\S$t!տD +yE[5`"'h$qhpTiHLi7WFXblN+ܓzy\"tn+4C4c-׼Veٞ)rq)'81s4S*|߱9v牊/#%Ro[TzC5M=.Z_$cRN'~T=8EOW/Ъ[^r('fy2oW[N3J4/dK^V!o+{UBRJٌeW9>mSHT% X8{e/'J3+m'MrI&.G<^@Q쇥W/QŤKԨSDc(Rʹk4eubᤵ4--:La5{j[WsR&8RI0SD"+>pd@Z(E6 +ˢ+wlJl=I(>AfU-9UiM 6M6Ɲ-I%U N¦.R"Y%؊M%N]8++rCXyƛ&v#~t0aklRb0-CөZhW10B2"] +ðA_+~[dB#f#=@ӏ!\Ƙ WِBZ 27}︜WSP/r6]Gt$=:$F _$;"-I$+l960 "1M5mJHT+ w @WىXeԨYBJl]0c\.Z+!SZǔ-LNEnxm%_4j_'"\ܺ煮WcR+⺌ +d''ȍ@v!)>C؛5^Kqlm6f #;K2*[ ̘L+u ܍5ɻIߩ \9YgSq<i3p:wd,m+7},\w,'d2BS I\WRH+IX*}PRFw"TZs%w#%̮n1 [+{2{AS7koPid~c+'|0w$cRWZ% a/Riw2'h-zy ^e1K& +IZ"&dS:ET/BO %5ȋuW&]ͶǙ=HMG j+EZǙ"$dElY(5s38X@v{!`0 , D@1b @0@ "I4MD4VTMD88,Z,Eؚd"I4ɦVX $ $` 0(@H@̐X wƩCP,eodʪ;2J2" FpDv=F .u(/Lf&nv<6~B ؙ `w|/e_,=GVY Y})zXcݒ&G.2oQj_5OT?N+M#u.rlp#֣"J)rLdeTi/!sdJնB.["KВr '5*Vb~ [7wV\"IFUQv$-Bыq]ЫB#+^))U +ZWKOH }=ˁ%)K䦂TjYe(,6WTvYd(FT .0iM{F/vg218^Roӱj^Ro5hJdO%Ml:쏝.QdD%pl~dؔd {uWvE8?1Sowح+m`2*RY\JW"{Z%T[9ErEXnW 7 |ʜQғ*]%jFQy'S"^qf_W Jϛ wH3C+aS}mfw7`r{9(rl .mwz" ԔC.W4K+{V'Ξ=?vU,mWp:մKNwjQ?4[S[[97z,ty+D̪%}ޜOD*b nE&{͐7̒*>Г`&"I.l, @Ir \PpLv,4kjf?q4 ;l}+G`~kam5V@Y\,V {)Kh\."HCbk4ќxWVIP]eqp^ǮK8a|ZcɇPou<%JmGӰTEX߲-%gD.\/8m'FSgzQwF +3:#6`0pmv1kJqP]t'E[Dfg)k9KIх`mw'7:)i?AFW9[r՝*Oy} +{)}"hd{QwowR.F ʜNuqT"QIfܹ:tƱ +NտpaS~gJ #E$RHF1oRz?DMT4`%)B->핺q%JoT߫5R[M87m'򤽁\-&$=X8'QoR{e蚃ovTzh{"-K* 4XֱwEEP + +e=Bd F?ވQ\]~i vDU8?LJ/ZУ֩"@,"%ȽF+5 -3Wt7I>\.S$ܿ.QM=.^!Fo*E]cwlIJobbibr6",޲q,ޥiG7u_MӇp#oMΔ&3N#]cgv37 +ɳZN4&wq+E)2Du*g`gV'}+@ D$܋eT9adRPN[6ZYSEɴFT eR,<2EOul?EЅl21w̔pD&1wdnI ]K])$ VS*s/9`ZTcJ=1Ji|EimlO+K)i}ʩ1/\D*j_v]PZMsTr'I~[#9RdM[BHmylf!(MG@N(Q7$'[Nz C `&0  @1 DQ$MD4AQ4MH@IDI hD}h@2қ,)$M"a>Fx +Utdž_6f28[݆ +ri-)Z[Sg(MF뿤*;ʻs294COEQ_<&lsMQI]Lu/[58!h"As_a [%,I_*T^e)}Ei)Bԏ[S}7).isd/bKز\7* 3fO$Բ4FU9_.液%:KJ)l eKZTW;c}m4+h⽀FLVtٞz? Fձ>V' 5NUgɤS9IPE|< J~7~2i|~MՋ\-ڊ)|kwyX.r*/^эK݀QE)֕ED!I|p!ʣd]1BR4`ƘiiԙcAӱlcoՔMIz(ݭ߲$ӯvC=)]l<:E)o$~y&(s~rRoKb?&"PEsm?ä)E{Ν궾oR +RoVT[[_aQ[ɱ@%Qէ"dƗPvՕKLS" SodȩKebI~T?/ݎ7IQrtJOEV#8:q:d^~R?W|~2R\0/[~,%9]!rA5 IROMPz;h{TF#Z7tt׻*6۩md-սB,NPN [.HqWFYnĕ~uRVѿ} FU:5E+|L%(W_4_`-}oG^mjKDEj8ՋfH7 QP"=~9TMd]fSKCP}$j>2)[:MwU*3KI+2Seاp̞seLlA&0:̒A[T{;z1D!DKI}W9.!Iܶn犨ʴ弙1XnO#{@m +mVE\.@+=-G~UvCdXCpZ7avMLz.B@ +P.a`E +݆Qݐ+5 5biͅj(pC5]ORa)z"W ;l7bTת3$WN[-Ʃx&i7j:3ɺaaKhp]ghQcnN)w6Ɯi+ {|!V٠o 㲊,$bܦæi7ݖХi۹ +VE,>UwrbYQK^BIE{pI^)Y7+}'pJ< 4cWzKKԒz/|?+vYd7rJ <*TrG[fsޭ +ѥoV8sqo)Yݸ 7X?sjӋ֢-X+w&F&i{"rLIZKtL@L>%rlֽĻ^dw8ݐDWn3J<ji9]&IjfJlkҕ4|:W3erي_ ߲'ݛv^[N?Y|9M<׼j) Y=ewB"֩"|b'ן2CVmŰ(BƬDWiEz{n p!Г =DҶ37W@+Rej +KS5Z[~(/H^zkʢI.Q8~9LywTQ;0RnΣKSrzղ 1檗匊Zfs+^YcJ%|]9W2.''حҾI.YKyzFݖ+-deޑ(Җl5FpZ-I٤j:+23 R\Ѿ.?6=Yύx'h՗2좽[ _k!ƣ{65J kbqPzE;pRkT߹7|z%mzk0s{;2PD))7^~{YZn4تTQiN1`WJ $-cJY|RIFb+_&e'B=$AMĶV+ԝ8c$S*R +>Օ7B>]5|P]fuv*MçFKVv@,IFN 8/o%'"j|Q}2(-erԵI>Ϊ.ɻvV5PyD S]߳"IrW1M-5'L5iނHʔddS{ViV_p[ %W+8Gy] iN_]Zo$Lo[WSJP&s4BJ{y[T+kҽv˭:܊*bv9u8Rx#8i̺u8-WE,^ޮW<7Ie{ ["*y݋ɏK{qזPqiFioQ~ݞk ZM܈őj_7X%2j?ڇEB 2Cw{ݍ-6"ZskI;`NC*pi>ohߡ螬F_-8V[z#nݽ)f&e㹂pW7E{*v)If5+-nYʜd|{0?GC4_!M_1$f!WK;1IІEy"f;r%ˬcUۼV~^։yL8~D%oj+xU(IvFa̋[;P'.O]LYS. +TrJOԮ͵ؕl=x/JO5_4lj#>RS݊[(+I7exmKNeZ'׹-\e=cdEI}%[K +<5mC:Z.OMqJ4DA//ܟZ60{Y"*Q. +OyܶL׎od59'5s+J;+yS2r՝VV%˔SZ̹E/Q$E~+D ToK3 _h1gRL hU3~-RZgD-&boMY֊]NZ71&W +q dI4A4M J1hC%R܈$H%0u_eL@wL, [-nB@FqL,[r.,ԋ4HID d +$(R(YGd-/RM`E6 +v5rIr d'>1`5JO} =F,/pqX!eP1e,yAJRW%TPX ܒDǔvrR.+ȶmwr-˩5nԗB屍$4ErD\: 0'܈JmNyIUQS+cnC[̄Clσ-R2~8Rfvx2! d@K]a\} Eϡbm.iVfDNd[B+2dۏBW"m0ki𛒍Y,=yen*[Nj[;F:4xL? ]ݙՇ )rC*c&z8(h"y#WK3K鷩 +i$v>vGxbu,R٪ -ӯj7U 58mb -b";C)$- +0R*-ӐNKCmr#q0PS,<1FI#]S՞ zz˅.F*rQԮ1)-K#kԋdeMC"&Tbr.JJx-戼Bk~KDWf˒18Ą7 ZZ~i +r(ZaU%,xV+rr#)2Jb vgԚ/4%]BMR#BR֟fQTHʁ˲A!;hKՑJ̐Kh4BD|hrHΧR[ tKw``Y#=JeJ/Fg +{ݶDnarPQBRoa$G~@ ВdCB #%Զ-"i-3/z  `01 b !bI@D hQE0/v._[FVE W9E.E]YTˡ |Qjl"FF0NiE76ҔɿbCM`kS^S31ݲȴdEZh"2"\*R}OD{\ + WA +2$dwlNËDKe`dEEm.B2{D-դ(}6_Sʶ`k r{\JID$9Ir_rg#yܗ /ވi=AR:p&OWpir+IUJRZ2DV[ģ~\?ރQoy?rq%]D*ZI'$v3Y{,u#kMhT jtV+ըE''hQ&Q3l}^')ӎ"QM<)ɵaF1J hȪ)'t/Vb,4$[6Kh$p>r^\X.~ |AӌV9/$-%*hEOfA=GEmD%NR{Q*{+{Ro݁sil+kv\dܖ`$ ԭ][`NQ[t%+vMeKݑrk['Dkԯq_JoV OR[ܯkk".7@Ձcɱg}h[)m2_SlU.Hk|L Qo~c[S3:|vYTsT3H31ONE2R[;A6G"\R[B%3՗4\۫}H^^H9'i>gGTKQL7txuML8z`߱/p-z\Υ &JM.1u 'S }mg_ϣ,fWHRs=['2U̧°4W4G ivPR)3FYQȯ݋uU[Rmu&q,S[,}<.+3h)FmER 8+ZJe_\.!M9liPWK^ oꋊ,SRR)J1VI>\mwyKWwyv4t$rE1_2`첥_NpͻMҧueqRE-fEX<I9w9rYT[*`+szIrՐ6ɮ_3hMiЮ +IɵJPoqFҟ܍} mtPE$요WDAG޲K*Կ˿5'yɾ?6t$Zҕ:U7r{\9)2 yB3FI?ޠ;Z1*''y w,$TTQ9TQYc( +.RDqTӳq`[y%}(|ݲ''ݍN-4KMl/br4(Ҝ%j0*/)-K#NyI8J3J]HnʥWZ3SJ$[`T҇?rM;R3kdUs83.Iv#+U:kl%SW?q/(u=癳n:٨әue9܄{%7UNQUu8YE.}1D(ly|p,EY|bIK]_45^ֳqXY$?*OndrWSep.QO]eB :v[iǔKjFs>letZs.+rv.ޥۃ+%\/m݉+ܻ'b571BO3iZ ]VFp'ܢ, ʖ!W]B'9E=ZEj:+f'*NR~̣֭Ylz"z^캖ZzFiz", ++ueʄ/Ќ$ߩdjùm>eoRY;+{]wfG5u:Bn1FȸyݨI7}ŧ=HND|L%S"{&),P4hIEFT^ȸDhS+.,LAȮT#;e^S{7=⟰.J$i+hؼ+jMXMeC˦"bvX,M-2?ޕ F2QL?=6%S$"K9C,5MχҖ̱I!ZSEzFؕNUr/ҝV4̈́TES_WQ/M+}[+U^wOؘTz{OJD"ղ +N}O-~O+UE㺺!_N WmxʲZ9NrnQ=e&]oou)F(]/NQWnkQ5]L^t(1rznR28 b+_B̹3q+%+˹dYxi\K.nuasGN^14\I٢ +IZ]"JD@!j`b~$w"۹Du|a݆V#q)t.A6;;`pqf#qw}47݉ذ݈_bw!2I ~$ ۨK~c܊  ' +.$\0Jد0%(.E.\`ND\;,Bd`GJ*F$B1} XĂo&NM;QD\Hز5ؓWZ"ДD?cC\W:X2i+Rg[[g2~iMYo⨮gJr9ի?ͯCN,>xk1[Jj6F)tskiz σrrUfe k&I/֛={ѡ|_)/tu:B HEz!< g1a?e#"V쑺:Qݙԗ-OQZɛܒs] :f,Jh?,"DGXGfr1BqK:A%nDq$KK`#w )Wy}˛AmwC2V&@dbY;7">b\2.d^Y{bMK3.75 +TUsx+\,ɖ-[劧/f߱]I[vxZ*Q&)91)-ӯMo4bbAS[I-lrm>z  `0`10C @BH"YE)/˙Tn[.WI`/mrFRܦ4m%>238eM%% MDݷI$3 ǔ9Imp{6BRBlTD_Bq$$dUxrcRO'<%HQav+N]BI_~\4 l+y ;΢﬙=m&ݹ&'=6S&&HR|).E[&ޭ/rv2B/iB;9B$IJ6Vj6ZF"ToDVL 96)V*Y? թoݫJԭ|NURZ&WR|e8Eo +li[ݖ„6,;ZʠXA-Z E|qDR RAis֗%( +{R|Cwٰ/S2Y"`gKuoЭY H57BoMŧ2h|@BԖT8]hv +K(%@N4g-ñp]aK'JK7C"aX2\|Q+147jUBf <w.Uڝ9KFE/vY%jR6I.>Y%V{ɷKg<Ќ+{# g:Nu[^+cvITt,>#DI/jN5cSzm*1RROIKi9vl + hW:ZSUWnv1*UQݑz5$}U4dN袈S 8I7dad&eEKlX^vk՗J95y)OՁ (EYMB2wq~MIA甽6*U6% i|{ U%Bߡ:qwRb9QP[ſViUV +ThWN*0XY6I-yHi=DPgIW9\j"2Q*ҟ%FjFR8QVW$A۴טjȶ1I]L"IUGF_rR9k){&]w% ZK*ovASoA8ŲD&S:[&EJ>,Z(R5%Zʻו:+nJ[EgVv/UOHՌ*ޤ7W%"R +gdU,D(E>p4▒~u$k%\L+-kjVq2kEbdrVެoخqMDJ'N%x)#'S~QJP-#jk{ZZCʃz+}E;*k%k%u36#]|ire47R?I\BQkvXmqH4&"Fu d+$KMH3H숷͏.E~lMBrq9.lJQ(rP`D.Wf2+5LS~[hEs*G%IotՔTMjE|#:(4W䋌SKSQUhu3.V"Ol.M _}1Õㆯ=Űḉ=4-ᙼ29ۘ/k_Oҏ܏M~>݉ԇ%IBrb)(iYB K/C~>YWX:ڛ@}D;/S^bmZg+S~Ǣ1̙`SdY=iFawqm"]S&f0|8x/UsL0Ez#DTr[teZя$*}jVH>tcT4CM+iJ0Z%#F$E)lIVBN@i&Řq%m@+EZ.I.Af@Br["̱ZGX"*3e:͂$["Qܒ{jbij"- ^r0"$ Jn1owL8|GOl.gFZSWҖ4Wq'_O@Eqz?̫ϺC[KA2.ilE5 :Q縿Ԍ >ULKFmPg㴕$e;b;y%s&:e7bQ&9NE7eZfm, dBKog2I[d5"dN1(K6;$W6'Րmw`ѶA= +r}##i $_diX*9V<}I(Jt ;5g Is_`M+[e`&FKQhM.Bc&PbBVՅYFZ"7kd&r2 Yɫ `:>J3UB oތ # ¨9ϱʞL +ӹC8 -+|LԵR9ա\W@6 Cb `1 b   BC@IĮ(( ˡr@ ˡwT}4N[D}M0]HF6"ĺȊI,$B6'K*١zA6Z[bRI)`Y^iջ"1q_MɩMe:0#]7J*7fjTi{dvYzhRV]Ir]”Qݢ3l*ۧNl/̓">rlIw~NݔC| ࣼ)_Dm` 7-Jnqؾ0ʵ\)[yV+7erTnm|SKvS*RH쵒EМ9NF*a*IsU)[HI)7Ȳw )TjOl0[]ec"㼣O4#W;'Dc([LTM E"րŢJir2~2;|By7"{sg)}1l|N, պ;.O͕i*k"KcBcxEh _#U8?h+Ѩ- mNd) GJ a򰑋\t^yMz ,#r}MEQQl"A)S,i7hzF*rOܙB_tS}f +EԒ'7N? WU*xک$cqyʷ;v ע*&j_M/w*3KH[VhaI|1rV8IkbҏėHOr2pzns){0ԢO~욍wrڼ5Ts-H(-/D:q3LJ˾ bK4~e2+E"ɶv 7"'{f9N?.HI4)e{ T $)6/%∻o*CTiߡ +ndӾ"q-m4Uze.;8WDGt׻-.j#tܱ*>hXlHIJco?-JY #%m-ʿ2 X"\D.PBq[ZR$dR)or+jA4RQ/(eݫU0L*^5q)'gvs'6֥OB4s3hRuz’yvr1\f;PR~ΣKmjG.N |DvzKG+,ғ;tZ;.v1˓}Z֤ݟbRIg7m1exI/dEF;*D]Z8O{5ᅽXLTsitݷ.Rjjr¨QHuޒBPKUmiE=]ȓkJ*m(5M.Ve[t' [KD5mZWI2Q.HNݲ3K+#Y\fvD/s>s+|NTޤ2eؔbvB뛷d 'oݕ2S柡^f!9%2]M{Q^m.h%R+dfM=YGVJqj# +ɽ"?.WbbB)J[FcN+W}&`U4j'h`"%!\|reQ+d,udBϖҾ5篸Rྲ5(cH[4*wի\gI<˕ЮWZCQm,B͓2 ["U^Hbi3U^m7B_ [.te ٿVXL9owh +zͳ]j)(/D-L, M +>dOg)1`JJZjSZ+Л}S?AJZJ5ԧN>*Qݛu#l$RŇԒJ+ͿjJ,NYuv"hVlɿBrhdk +32Mc#C7蛝SktS,kY+9ٷ59ɧ:r"e7KB&J7J4F=j%k&G0OfEP#8Y%+hs}& vAwbF"5Ѳn,s5dF=Q\ǖ= -ǠK`4iTl +4ܙ NVE_riadKEY ѧ&EEɤ ěE.ߠ*0[" 2*(>Kf7Zsa`isV"n'Ir4eD$':QJ+cxb)30ZɞNI%Aoq+,1|݈>oヱ$/۟Fy*x|_c]*c*r(B3ƶMYa(˲7e.ļmő ݍ[ԍ%r. >Į4e& jeeر9ٝ ʒ|g eeŧ6W9="ҺhMR.Kl08MYZԆ'%W:/_bpQ=C8¤cc5i)zucyx:Åb%D#x-(fu%Ç]OӔ3VSѣh״37!pښ-TEK6kS'՝b=3nUG*2ZXN;Ԗ[o.ׯ+oS?WsUu̽YZR_J ^d N77nZԫƄzA`-"19KԪZf쎆QP^]E!;"o2R艬%?lӇ$*q9Z&&W„#4N?JG6|b H^X$yoW촵*)v֔T%'"w D/w~~J=!ЙT~*ht2zɨ_* $q^l^#FDs\FaMy\UU)}Z>}^bKB $C{.lkVU$ 2I$h"Edr.H,saw@drV= Df@-y Aű# -Mm" &Hn|[ +6K$ABM+F~mR.F,hw`JVHzj$ECʛљ (+c& m9}>|c @0  C1  (`  @!@DY%Y-q.B&PTiRKRlAl)-bw*8aWFIlNM[m$~d?س/jO|hBQ[&yڗh褛#6)6/dhkQ(9WӔr'X#QOmې)mi~'Rܗ[_aMsD}J'?C_-ȧMYkR{mѦT%ukzɤDHo)N_ ߢ-RKf/ԣEU89!tʬFZ؋s*'-g.op:S\G6X:M\hqH*{&K>?RlkAo/ɸ\ag6W.%`st06%SHY-Yi &戺?1[*7^gՒdB݀ MwNZWw ^,X򄖂@; !YO`@ qz[P+-=I^bVX/ЊMQcʺZA`w >n DvH},W@p=ܡ W"d[Ũ aYZX,ǫЇ`v*=خ=Y~},P;6ktj;0#a(>vorJ#Q} HSbu<"YiMDbL22|?o SXaӫˏryulO_9N|6_k.vh5FoX0BhKuwY|/G˰ E>oCUy5UmO~v TEs3yl7pIԕI+ +^WdW:*5JR]R37%jTܢQR{"Y'NRffDLI˞lJ+ԥTžP/'':3XR_#l' 4-jOhE9[6_D\e֚SE§vMt#ڝ'?bb2*-|)KIz +?*mBumO*"qk7hOhQvbǝui!h+?V  %Lt`_hj.UI[Yʔʢe,U EhA)뷩g޷)ev5U/aB$mKFRs _V蝊O#NqNl}d'@oei?BGNݿ`uiRr>vUI, 6KJ+h.푄cg:j'S9H8Epmh"2n +;{ieGB~ +ISȗeWsANuEw䕬љ׌vb&L꾶gt̽ʞ6IqKm}sX+v!,RZ,8_rzEۻ%#dq_+]yrR؃Jɔ杊gu8O_.]iV֥X :ji붾}7mo'SE+zjKY9?VWB:$8UGFH!)OjqlOZhIjfSJ.mv!_a*J\ +tҽrk߱eU.IFyn_HTZoHw#F1R׸#ľQvz叢 jrc:Y~i&SR1@k{Az]+[dQ:7'W]t+nM_,W2e5eJmw ^ƓOEkA)w(y={2SKxDPM^rE+U*oT}Y%V_\[}J,j]% ]e2R$R h$n.OJ8m+NkXF* 'HsIzɽbJZzv1*B+حIKH Soዓ&Q5P/aEnMlWֹq(br͕1}1v5'Υ$0&y#?pſ舩gDFJO} -Ē|왁^K[hwY=[nw2a-݆ndg2"I$P'R)lSRݓ'=5N +ҋw.Yc򴈵z{II&ʵ"6ԱXL6j{R9!2!pE~)+v aw݋"[&]x#YMǒD%UM3U:Jީ-t9ӝDV]K)K_W,˦iG̐WԾ劬yjq5"JI2{D*K6ʴ\,I'1PZFK"ET!)݆a) ɓ n$+?Sq%b6n ]v4#e݅ o(40Rj,vL^į&'Q-sL\Ȫ)hV52&'b\iS)]R/, L;׆36Su1v~yExvf>@LÇa_ -XGJ5Rbekv0H*=iGtKGM#e.I||rqq;Wӯhg|-<;SO0tV#*4IA\ ".l@+ {o -Ll)-%d_g>\J*ܸ\d³{N^(b+,U*=n8I?IF9WKy[؊զ{Ir9-? Bőp()N:R썔8%ZռNeW^/)0a8>gb p +1jU'ҤK/3&PJ ;"!i셧@ f @ԟ`EBde$gvu.E\R؋}ǹ;RRKV,1U>}_Ej ֡KcraRr{ +8L4LViլ%3q CFmˤb,!΅+_%ҜMIZSLo5+:7fgZ +5cDZr9qi6pՂi\j չ/`;V},;m+46{,E+n0Jz P$K/) %ICZ5ݑzF8Ҕ_׵+.CQ=~ة:!tEVIV&b<|ADBrz&Qkaɚpz?{}WkͯC((.h;+>iPgv!.W:Xo!g79ۮ94fu$qpK&\ڹѥO䤣i{A"J;ecTa{,~ljɑ D(% s dodSmHQҒ*(?q[bJZ/PrdRZԚ^V6oAd~1AӾpʕPvbqVЌ_gU+E7(TM1~6#VB_D;%Vin9vk$!OK?Qq%)l#%oW%N/V!)&6 27V^#˞*/D]wm#dBSQ%6،4v +$kMzA{!8Wee*.OF4#oغb>KQmnek2;ى h̛7}'/I'6;g]&~ykȌme]J1_sE<]R)w֥Iز0ϼk1_! +O+'l;iJov!*{-: +K%8Y]S$I+ƕ Mo+z"-=z-OO 4U943;Z+&[cR(^7+IO.XGkb#\$rֵ"в앲|7I\#Omvh2 xʿ-ס%A?VbvXL1TIؚE%s$9F>p<#}VĜ[+nLh/BK^1*=N*kƭW'r,YR})-*C7g +VoqϢK%uN17Z ,m;ꈹ{M/bw֥v0er;i_ƿ7տQ)oA|\ LF+ͿԦ!EO^%Yݕa['cJZj:\W&oaimRbuL_ 9Cg?2 yzK(H§nы¥oR&T?^T| aRu_ܳ|?bjey4z#:T!&:P_(V(RZR_8̩F.~S PIXZ9UH\AjH V\>矪-GK ܅ ]]žDIe|,W;IߓRqPm*1+weB2R e)$E'}ġI.W,Qy-`W̖2aSLII-r*ĵ}s!ebiuE E%ԛd L#S!(&j%˫)EEi~gH94>崫T]XtTmR5$TޟfF n[+RrbZt9er}JwXWnE"k(jĬ<v]G3DAB2BU_CVL("k쎱Ig&ݖF(!JfF iEi^ RÝS_K.JqWTRJ/*7&Xآk25~T) &rI wBq&M[TaF)#mZKS%lE>Z(V$pT}gqIsIh?VEӟCOMiij8+e<Y/ )Ch"Hy<#QF OY,Ϲ~~"a #dXK(VB&]EHy\Ϡ؁ +!)ӎ*&yL ܚQLRUc5^#N:fFiX7g+kR娬hm9;eRcq?/W,uynp^ƝiCv珣 Ur2F|˭SÒl\JoFѶǒv ƍZ獯/Nio6PՂ\=u-ƜBM':yN3Zڞ^Э[ +_Wfb|Z- sfDeQGvT4W\ay5g*|-9JM 1]u5w@ބ.ɹ$؅'evEXafv'##a(2o:_TcuFdz)XNj۶gyrW&WP!kq,]oh{t?SN{k=&jO4*;Q[N%$xh뜼ͧ2U&㊻ ˒=jz"t6œ/_ +ME%]M+o ~ԆnE{۾Q"Ԟԅg}nNEn^R(hri섮މN}m8jV$d1)[D + --\[$/P2ih徬{ ݄EabQHDBlԀEmW&0] Jc VFW]upLGBW\Ƽ9oM 䅪;ivҬk6ZݗVqmXx=ϐ10@1  @P0 1 l@K"T "M.fErjnXdxfrqL r$"c,C=%b$\ yL$jsjy6E\b EJݠ@ "Y_T=CN$D@6 =9 j+Ց:JX_$k_$ې۴bl4Ũ+1 Qd \-~c +  &}P@$Ǖ ԓduw z$=z6!!E&K{ z7BF+^ab*+;[OP2ߩfB +(w'VN@d<$z *a]r{+(Ug:5%苅bQBw7CR0'C("j-U˯#({BOۇT~p=/(Diig|+<%Ī5%a=#{-s'<àwRoK Npo:)?OГULB? +R)WhFR/IM|^KS335jUl*IZӛ}E")ʴQBn-E?}ˣEv@F_<5N)|W0!ݍGCyz\YaOn!E=oM*\R_m+}gD$OԓܦVCFW$wd}ğˢ_ )sk)wKG~M;ʾ騛RWU;KՊk*KL،"Sp4߱ejs}ވ "׻??{dD&Q=ڿeQ- +Iǣ`m%)I|1rMTT}XLS7=!VJr~AS +Po}FERT+gr&}@}Nv]w}}8( r~잚/MHjݰ(r!A9Q)*ԥ rIv&i씫(6}9 er )+SiDV3+)5h*!wK0KM-%C=L[_"{Vr+V"em})[Sq+G&Xk,ZVM}_jd54ᵗ:m>yNOіB2-&-bvs]S3*sCaW}pi.:s™/6TV5r8[j)SgGIJ̖k*m\:mV/a +nMZֲm-bB9ɷʭݱum R&*'8K&%5n¯+rM]ÔՑwcqRJ hkՑEv+G=#-{")YeueR[Yz"1JrdE\z2y[,M-.Si݁IkmmafQudc /==DErdZY һD# ,% +z$,,,5NkNˣF&fF0˖UmGؒffrr${+zf$6wԌ}亶E=4'wW +6 ȏv[Y2)AGho$BIsfٿpLP;}*y$ڋȪO/nj#87]PO┤]9m TݚaJN$#RLܩBP_L~s" 9JJWvEa_}TXsev+|u&4.Ei'ENRɻ>LH1^#$WDrKH"mnY-[TQ㪒DINNcm4$ Oru=u&-]v+y%0e,96S:E.OklZ>rKlΏשv{Lubwcub֬mj*msC,ZI/VBW):QJ/N`Y.Q\rE|S5^+m} |*OrY-*{+PRV$E$!Jii Л +*=*w%h40qln0U%/95 +gI⽮Xg{N9W*=:hgHSP{jU⥼ueO5&}(s.{qFII!J+Ls'aUFڼ'j2VNv5VkZKF!//C1%<-Zd] +P,PʭcCU_d^|ƜQѨ1lj\bu:"خQI_{bq[$A7Zn +Ih$ݶ5͖eA6 }"`M!+VlcmVk#M[(I_rJ=&CO%v%FXN=&iw&k%v gKFa#eyu%~sb(݊4Rjf/ -5mʥDW*Љ'I#]I|gR4=ӯhfm,t4!3U:P"%cDGfrKZeY=@f Y]`l}ױ]b4+6ƀXgk+6vr IA܊[ 'DD칓"(u#劧2eh2M.g:x3_RKtfa}6LSx}+31IayDM*ZɶlF +EnVvKiC*E!As-[HUFXqv2/SݔT +/BM;*h.w9U85ݔω' q:u-Em.ϛ}H_4:v)y3oӎFg䟹8g#3aO~TQ>#V_*sO5[yt([,EYo"NrL/Ww:R!qdYfvTc{q;k[B$DJIA$boUjƢ"3eNV,+,̫KKQ63d?PhD32DZBy1f:WF(uc.sxú\%-R|M[YWDzۿG+kDvzj=JFGS-jgE5ѡ +K4iC؛| !0n6o0gp/ބ:3WpW7a+N{QxuYhrm{E|F ,oգE:,Q>c:kS;FTa{gtԥJ!V˰irQ] R)nQE E-DETKIs{mE9J0{Ɂ/5Ś1٦F>PZe~r!d jR[(8<$lU^3+DV" X];ZlrJ:XjOk%I%S3S5M(mm"4Zmlu(-R{< KЍmZ;V#7ò+Gm,H#(?VRJrcO(;-}J)T2S(z%PջW)[#h/LM|.샧9s&)Ԋ_Tx8ŷMٔΤ[\Phҝ8oݐNYQ_,#ՉB2)E +.|Y ')e(JJV2"uyiܒe0*M_%ыm^YEkZu7724A|SKʾ%'՘kcm?C??~;ʺuE%r'U%jvo|VI6tszG.T!feRʖ6|4xe.Llmf2+曛1+z ݷ>!h~X|JbN/Zp..N&8+N┥%QnO8[ZVZZ)q35*jNjYBꬿQw-LdGY; :rk{dԴiSK3Ĥ^;(UILp%ʚ^ wI˻ecwvgԈNot.$'Rm MW.O2Q3r}J< FZzfW'N?r}lglMY2Emeut$.Sw)w?&Y|*tNRd6)kȎFtA=ٽ ͭ!8WMZLM*G-;hj$RrWAƬ~/a_%t53m{q鯡&Wҽvf.U3+Iv@ȩTJބc/@T\ M-tD(ͳL4ءI"UG)̪zRO,r9^O+OVPo+RZ ]F2ݡY.o؂}cW2v\7qn5N`Aw`ݙjՒP7BKr|Ѣq쉼.Vӿ+I>ЎE]Ʌ9e}ݲsN[;z#Q3!Ij7ggeBSիǰ+z+u`"[Xkk;{솧"N*N^ģO+oݑu$².r|}F%2JBOEwܯ^rh.lS+d +܋{E2՚e;I-3d2Fa2IEUd{gKwFz*^ooYc٧kBIvH7N\5B1_ Bܑ[97;|ܓiaS9+mz KݎӓtZḫS4SWBVKvܟȗÙȌ+zC_ԔD)on&L+|"Xiҩ'4;ͯoQ4WYzS'(G&F2Yy +9}քVfd1ImoS3ķS^^}ɷЧ}z]Q:tZz2~+SJvVr(܆xOK7L6/܄Jj$חw*[]Yz('6gT嬟+M_ +gMfs%k(>!e7ґ+/ރVi5eJ5ᨴ,[%~b؜@JVíIJF[ 8ƧX!˛NGW#kI.<v+VCkMY2IڲJ72ڽqU)RMDѧmec&S;FQ"Y3 =B=_b.'ܝ+`K3fhnm'byɑmV^$q]Ʉ_RJ-$̖%؆pɉj]o0-RDMPr2lɕّ$ʳ$+Od]m*S=4u-ᙴ1~Hu:d[ y\˒ҔX + O =U#̳:7O^f|&G%T V7ˋK~Kэ/SD47JXjpV/-LdG*v"ܒ!)HSlJ܋pQK`NiF($d\y^dV`; Xz&E w%af${;Vߒ R6 %U\d)|}s+q䉊?z6_V鯝J޵$j7Q1#Wo[6S$Nrvdh\SrG>R[q5ԗɡy6ҭ?qV_WΏ9vfSVEUqz)#&Se5n4%&&U"ec׻w:8<U4i+xS޵FiȜo-NMN(hSTgV{QKK,E(mb[ (z +0Zl[ӎƔ[(=~t[V߫"5Ba҆sbVk۫l,+qoK_^PR~ nKs"Ћ}}nr{"*%_t`V0}ˣb+،-mEn[\=JJ C+zɍJDg_2Qh Ti$7(dVU\pYaQ:ѣ:яkoԸolBrm*J7C"=؋ X~ѽ`Ǖ}a̓WO8)I4C բ1(F +iZȒDct3W*n6[=]*7(۶DeJBr}Hvw<~t`1 1bcb `!0C1  !h "h&&"h IJ%q,*&N^Պ,F#bH cՉzN܀iXv ZDNO@6 6$05` ǡDB{쁧 wdt zb(V@wg}@`<2!+vLopu@`;6+h+&XwH$+T,ϐwLϪBvPo+v#g2'a ++,ʇtyQb|!7hSo3۱%).F^U*O} #Roᄟ>gtYm<&)=o>eCc+??cCœBNtI?#+.ѴPee'Y^7;y,?4JG;(zerox~-5ZR)44G3TbPR?gt:_ ":psս:lIԤ'c9j%rKsz\U15wz- ee- ƥQ|}d«Mbr[hgJ= +Kq!^Q)%2ysRjM靁lg";j=d#ZM%݀#5/Ty^W֭ϴQ<5''w-+%XاY܍8HJ76Oz +UZm˥U%Xr؂T7쉹[;ɿݢDQ}(+ԷɓW5վ졫%(;;E\Vkp謹SRNZFN*IidNٹJoԲ1IQSd\li艥+jML$gȨ7~d(ǭƖvb$sZ.jKHTKy8uqՖ+*o+w{.v%y~yQIWd/rԟҽ5.+Ro]vEoCeN_W,jRg qwN"^jaI+jc(~D{yol"0zsRDTvj)1W +U5k{YVJ^9-U&ݔ"d=qOyT! +wY[xE/s*mR_M4E)-*w&$szw&UgJ*Il\F+$4Ƚ[{)/Y/d\&Z[vdJLry7"*{E[A_KV[nS!-:qKWܓW_| fڴ_K4#ܤ"9%A)dٜ*֔J-lGdJ4/Rkf#4']GIҦM5Q(}QjMZ7]%RY("NѪq# 8Z )yO7.#}JlV%Qq+lzRQOfR~u7A'79(PdlmidIB6QbM/Ii7E@{I- ׫,ь}J擺ѿCQGvI䅮QӴmcNOYhd]mxW) )7_-cme=0`V[Y"ͯAR_d)Le;ʹl-XG9'W8K&FRH1 d^re^f KMSeQ.v*i=l12+Ukm6$2!)ir.M ?k sRJ]Vm؜ͻ?$n06nѧeՎ8wIBNM|+u3s5(CEq9%qil}y[v&')K#isCyB/B\lpgjJSYGky:p;c+Yo/PPVɵgƯFd·O_*Ij6asٌUq\Z[XSO&޺:7&f"m$Y_gJ136\)ъ]_SmfR+{L#ꕇhЩI%MM\H%mUH)}7-sYIГTBGг4WM)%BdPݾ ,m멢6oܬgpʩJ.v(l$isZr_dXmh{76hD]jlN$^:JߩwEmkʟ fz6AM(]5U*"NE??rWytDegV|4ԅ8d߹Li:W*+Єz-xDjO؏g'Voq MTMU+m<7R%G;!VԖpM.qqYNuZqND] +W§tdu#r[!ܪ)ݒuTIH-e5*OI+2eUR\T[+Yc'^M2ͧ'R{"՚!z BvDҗ@Qob9̪ [I)%ZDs$̘ +#MM2)Fl5d[$M]Hr5L]*=4-nI _ "h*C8-I'>^<4pzKt3z\gCh%hǢ=)cK֞ަwIN$K _ LJ)Eit.CR̲ƌcD;6FiKJD֐fu7NiayЪ0Ֆ :.lYܚ`kS]I)ǩ2eY]ӝr KKV3.du"tR.$b\Q!!캀Ye~I)HR+viaWRMsJ*c#ؙ\Vj W'6*].c+FG*/JOEj-c^ZrGN;Y1Qgs-eZ LV6'nӆ_5/qz3>q^YIIqȯ+zE_kZTtQjcj9}9ÿɾZYEn/R'9K#%n+rF'^JP.1\Z.S~bxṵ#+$d)2[FLn-HӀTa0Tdy5xȯJFbU:!E|칕Rev=Bt#yKbJp.1gp+R%Rn-'hQЙE62QMtBuLIscQUR&ٖw5gX2Tiek舺s+q +4~iC ~7(ݞpz N;r)$تEI֫Qu$m>2ԗ0C#Ji6fL߫iGVnȺ# IN)>INXeV^%6R.&ŊQeЩ+s${RKRL,R IZFUX{$ Zz񅷜RWYRݲFy_juiG뿢+" h:.ijxM8͉ש7h-K2(iEڳWũV:iFnrvH3&:<39%n,Ͱz8ABIK"_!e]1"y0TFH)v"{ GilGr3Ijm-݊牄6՘ܧ-E EWJ]SNe-+D@ 'TrSd""1^>Qd_r%J2fJI#L0|.TIm q|t0o/ћ^]Y(ŒVZ$+$|H@wTgeadda-/_6z&n.UE_r|)} +*jEge2fޝl +e)(:=/ 1`k`@1 ` b`0 @b @0 9 10 b(! 6  $N$d@I'&&IJ$#88InD#4& +б$\`b7c[[vbHerPZ#fJYJO_1$96ܔ!I,ܒHVmB0 Esh%Y]"iimAG.+v[}Ewp/P$){vYisFfݘ ZKWIG$ +5Ij(%ВI-ᗱn@U܉eYmN:KTU.G **)K4S.ÛDᇜݢG38xxݳ~Y0ױ&b >qCb|f|)Μ bS*gחj%t ZJϖ>>Zsm-:+T!CRNrZ>Ȳ9}#.(MYQ("''ޥRvSd%rRJn)'EPov5$ +Zg'bqWEr  K*2\8F0n1K +i-Tb +%"u'& jJExKԾF'p܈qDߦmB/⿻,F4㫵p#2b2%9M)7}8G%p׌vW/vF*.˰I~mkRގ8JNM*OCE-$TN7ӧx&2٭vW6JݲybUVdFIyfv-Pm@*RէodLe N'dWʯ8-%G&B +ij_bصfE7NOb ƒM%ЂXk\r--jU6吜I-Zew|:T -HyorY9䓌wJXd^Es@.v!9;nAU[)5-ħ&d:6!'m'(֭Qɬ߈j+J.IX26NRM"{ymψo>!MofTOl[t'n29bjUw)VQ|!MqHQ7RK)"|:iEeBYeI9vQd)Mɓ+i8"b ]KR.E.U.-8IS~!N +7BVVN(-\S_vVdaJ7&Kqݥ%yIԄi^i'4StR_Ԛ3It$ܮZ6bJ2! V۵3lRݿr/&pdXwa3Bq[H=u&V +-Mn+8%ur3P~iJKdJГlB'^I[6Xՠٍ^U-&߸\dQMQQ([KܙlO]_rWHK,DW Um슦ڎb6DMíXqne7(orejĉGb`ʹ۾"@sbK24#=ʣ'O2mjv&0lfЭӻ¿%' s~=u%4 S뼾%v,Q[IRJ2-{ $֣q +5c)25~JM]LYlRo5F*$&6Lܡ>YR-&2-rKk?D&=[N{r"&{M/qr"JةEIJq)I~kvD,jcp]|ГEw RjI$[~lUZ&K̺}ٍIY q 'M"O]biyƣtBʖAY<^%s/Wpume{ \*.˜RұsjMz Wwآ0M^CFvQkJqzTRk NVݙZdh"-9nIܛU7+RqJͫ"bNaXkTB[$MnYWDt冒ESkVlő714떧Y-)ϑBkԚ_30%R3&|Zrl_Iiұl#E|O(EI멶8ACFʥ Rh ;6T16QenxtȶC[+QAOLf݉1Z1VŒЩ7m;L-=2VKgRlHiD5҄[WGzpd#tBOtzM3 +${i.sC Zfp%v▅#^NIq4ŰlA^e hWlt,:DvL;0iEkВLap ILh [e0^6؀M"//BM r8S"ӎ.) ).) {T+X$.t]k{OS]YrvZi} \MB$E >Ic@4XHh4cH2ؙnVSR#*ԚN9wLVEsfJ9*M3-Zc,Iw9UM7imZ;IrAkaޥ^+ +VscުgW [cz^݊-rtJҎs-Ɯ3B5Ւ/ +]cTR乞kkZ[RkWdBjt֬Rvͯ&竸f2dQJ\LIf rq=6 +8Y`FtJyqp\RjU#RMqK׽b# $5vN)XRpʠItfDKCz2nHwIcQY#Ժ)[c3Vܚ[!{36[R}SR+gte ȹM͂d`zM#&M.d%Q-۾I2FEͅFq|m.Xl &&,9X_ddR,ДhEkn"l"m+e]7v7'GW6Yx%=.D[&@ !Y?VBJ]$#&T/}:V9 $ .VEszK5*퐓i;NM]lBd^rb4ˆ,ϛa==.AkZ -E=_Pc;F6XJ %ЉOhUzfYcJ#AmV2&Uƚ' IB;u'd  >Hܚ&J܉YؚJ*9b[I#N8lsThfܝ̵[> +stream +x흇bֲe-*,Y_: Z{ՕOPRÔ +nݒ+woB.Jn_]w޽sΝ ݿA;BȩݹwG^߾~w-7d@+Fȷ- >j$"w"/E.O>C|A|˗?>|1w-wa)w!܋"=]̽&E݌Ϟ-ڨ[j'Q}.~o߿_ۗ_>oibv[&"m|wEEQMHDH"MT#~_?7Z["#4j"ouڨ&"t6Q;nŷnV"mnD:ISnZ4}~B ߊn=ߋ6 M A_~{QFE7w&E"jF!`3CR![_?zt;-݃+{"4h!B留j܊Hyg颛H?m42"= 4ZQ7*>5LE%, oyz^gPA ;Q]T idu3>}.jۑ.^ͨ.>BCk6R]uL*N~O AOtQćtQE5Q]7^HDT?o4]J 6}YrV:@q>pN}p+FAVF"OEE/~_@EtVüF.P/ɟ\p\Ù +Z"o:P)^08h_,韡t6r'b{##=DGB-H"\݋K!‹E/qi\^GƠ16/e`5_ު>@q݊jHHi_^hڨM5Eý]ΖE0. EІ1NrN 8c;,?:KWnwEiHEnE1"M-r7i#]tgY8(trht 9H@;xɏn( s04B1>vVw(j~FEm+ f{Q?i"&~vÕu"$>y4ʗ+!5JE].nJt:U"c*j㻷U_?|j""MHDZ?|.|;Ch MyxP.S]1IAJ! Jc*mCnD#`=E۞0=&=|՛Q^FG(qPmTiT9V>:HE@E6~P4F4C/$=% +_ A7_^?9~rp_~w5hbw{([y0?y tNXAElA-EuV0-9K1HeHEM I/L&j'/|@{Sg+"h3Q(UfzT7ڎ3Pj:#X2xX +b)w@ߺk>*_نyljr^z5PiRf vW&IzAk)*K3M +dRӫQz:{gC:q/.asqɨ4 (o\r܋.hN̸ +[g7>i2@~/T5c$ H$P΀XԘPH^ȳBTvM B0ʃcg` &iFnF$B4r@4YnH5iJ ~+BBsJvMB, 򸆎=˸.Ks +UKĆqs(ޛX) 2ꛜ"!!T'ZTB:qQȡ6B^"6TC{G߇^=xw&Y5^&lMt"ȍpefB-,rJjqٷTc֠H" + k}ٻ쾃DF~P!#NF(wT 2.`ž5ThmVւ03j T+^njQ&W+']Bhؚ;PIǚW% 52R5zxw 帘BĔ)j@5B \ 66!GJy "j(4Ǒ\POFYl}_{72,w +c3yoz] &gwCXOtoۃNa1Ηx\sgy{vad#0ʴr4+S ݙH e +˰'Fx +e:]=a4ïȩ.1dDPA6e&U 9B!Np8Pq Ë2r,I@: rWgx=!3m##@D'p:a)IM]$T$+5PBnC{T:VTZӾ"Qn»㚫ߨ !ŴbuŸ#ěvf]0NG#"enp^ŴbY4tpܳH5=K' j#{ +q[y(i ,Sp{@U(G鉪K10>:=>nX/${͸"#񝱄/xb)ft iPz +jI K +*(P3;& IFAأWe6:pb#8%|Z0ЋQZ*AMM,d%N.lU'6BAc`y78H:a kvA7%X<5D ++Z2R RtY$I 'w{x\ڃ6r{+ڄE exIf " IۃMF`5zĨt tFH4LfM`+ڠtFKa,7ơF8䌟^ig ̣uL" ۓխBnCL0hv-" A5NKl¯\?k^{iYic  5 l"5 lLdhdhtdk8bN$㪆ޡ[we= ka_eĴ'!te]5p[(BN&_I– hP1- kanCl?ix8%B#!>6)vCM ʤԌH-t$-bea%= ЈP *)u9C{ȮHm`1 \h \IdIӗK¨!VR+z V-[,FC9"]NVBPoAU)(P@S4p" ,} (D}BXa;#eCr2S[pTлw5BeX&d) %7 %D8&ޖ XIHˊf|9)+'ׯ{O~8×;^u='#h召Xd}u52z,qlTرUCfRG踪3 Gn0h"NKiJ& Jzqd9iXB|u0 [%7IPKs5+ξyrx#Fwaj&эڇdh.!.a2O:pkp,6x x#2|dy\Ãힽ'0n=Ev PC8@Ǔ-B0'iF?A{3_/ DxM3G- h"eVYu>t@da_ۉ+:mƼdfgp 9, wMcqM`V!b̑G#t"LZM!,S(-SL԰-iΘ 2ho9h +aq-=Ug~̨ MIb9\DtES>5y9n}̄*(F03؝q|[w4pȾ47qm7(v@Uޓ 1nrY " X|QBIHȑ_=ϪgtE8k'Kb-kcif A[>RPU +mI5[߹<=~{sE.(3ȗa#zJJOɰ6hH $@줯+KLm_Jƒ<_+l-h+(2=r{bTFdfj? +;rY g/D_~ξ53vm8_͈8^L0q1ɘGk؆r ǦZqkͺKZxg>0RGi4JAVCF.9aImx +ʝAo f,KX OC&ڕ/lq"J([r)c)(ZQ>I9pHpQVJgw׼Kg'80ވK@\XMfL3 C%TBm7\Bsrq#GZ*8PYс h "0>5\~e$ݤ n\UG)Nçp@dg}F{5ܳQp8D " 5r7HjAJϴM \F,: + 2?@q Ri[DB"ӌꮅ6Bcg5 0VAC[W#/G4#Nڍ4Fj"#ˀNJy\akjƺcR࠼4A[b):*_.0ͪT +<)԰Tgւ.HAVn?Qg> \ц #BQbt:2xʢEf%D`$M2c(Am5[go:)~2D){3iV[C#@j<>dz"} @3r옧wt1 +lcG4'tH15("p`8u8Vh=5ӨO d'#rqw8 }ɿr$ ;trvQh'/ 3hԷ^;[%!+HN6 +蔑 P=yFg{G-&b#t`#3A;!C[XS٠z9dF2%S +<EVoKS2>#I#etp\#b oYiFR2>#pg<ۚX`v&q6 t+spmeusi7!`CEN.Ga{gu6$2zwi3W +:$ BWõ(%[̠f)ɠz<;샗Q\,R̛I\@42p-\1 +?4EagWh;ATEҏ/^#Ƃȯ}ȜnM;ldl҆rBD 'b96&:i( N&s?~8>IgbsRjx:}L8[!0Rd (zD:/"EF&I{pHq 3?;˃_3p-'Ys :^I'Y`TŨLHF JANTG_?:z0 6;#^dD)5" >ȑ,FVxHf':L& 흽 +mheRE5;0+Dts}QF(dzE59Yf4;RE5C#F*Qn9*ҥ$yr|iMwj8!Kbqi8,St  HHC>ͭOyȌ#7}Fv8 ewa-@DvggØɯ\?xvGz)bMrFN +50XW +҉2#mKep k% FA]&teg_kJUPh/԰pDm3 /r-z-8e%kHL]ӆ2x gHъA_}1mgzZy)RFwSy,`풯r22D/4N4_²_f,[0":v:Lcz3 DzSՋ-KM?X0#(H"anypYKc<#'Z ]{ @,^4 ň1र I, 12YcAM\i B,!0igR pfDc*QF&+5dnh8t, D&"bx\sOV!D:b`Zb'o{:@` uhWmlg\Ukc݉4d hJ,\Y&)nEMT$p_/v>b D#%V"VEl\ё$?" #raK.axi(Iw4)AWX!/Y9ĘH sRܳ<[;,˜>aU䄺HTNsurNB,`'0 Et@%ƃ*j2!˽gy)!;X [rj +B]7?l1)-8)kak# ?v4ʚ~Xjo*pTf;(ķ"Zd󣄘:=S$QXxFLyRASaMXP_)Ÿ)J8x.~MEDa*0+#AY +]t 5vS瀦!eNє FW2%,-cc mnfPlMP8iD\: *ON~T=KN +SV(A;eԽ +Su4fgiA%fP:ʨଠ82FlyS❬ndr! +.BoÌ-TSP:b+:{r r$(6밤 ֯\2e1mRA|@X ܆#HP 'g,aגp%i 4(]TG#A9@]l0Ƴe0K2yv֏kY8Ă./+l1ހ|̍Hc&%HANCDƩ7CBXC#*쿩pKLjFW E[,.=%Rc ?bTmYo{BpV"u^=F¸g=I0:C؂q iTz +{kÂ"؜…bf4*OaR@GCB؂lrPiD2qF9AT6+cN1Fk`FY LTvg̤|1vg'ɚ"Vl:noPȢ(ZyP 8 QVeЅTl#$KxLJ rFs"ǯtxNGo.-}~sP Tɖ%UTۉ#3l:) +|g{gvtAVk"C,FTt1CmhxmT&qb<)ڄ]HLgJo_?=<㫏g!ְ і4 B6]H]aW¾`CaB|+\xSp"ڒ&DP?lΎaflƙ|]clmı࠷"Aƒ tA[[hK6j ,ҜK\1=b2'Oh +Z\^r)BNh؀hXT4v{GF EV ,-`rU1'"D 6^Z,`* aR@M 6 +EVFWhXH)8~{V^ȂrRg$) յ`1 K,D>A&!& NYɫQ$ը# FI{K}~o1Ђz ?1xi,ם͠2PBdi`\sO5^㚺0KN+@QH/LK5NW(\ݳ/RPL^`ӌK똟+p +bd//NK:q(YzKA1 +x4oﳞ8XP -f8ݱ~`)P0bb ^i:;qb@Z$ߵ[@=~6c9HHs# 瑞`o3PvBEjrwbBXhx,R$\ k^<|n0K W(bK\# A>aPj:|A~Y(']M :Bm1-ɮ6bWn|2r"f3Cq +Rh:nYM">d6#&K=mڠrPA.d O%[2k E `xIAT+ήo&}3-UTb/Q]✕XyDr|H4.QeDMp !"E9i7"b/Q]A,k2S{ޞƴ cP:,$}$g2%2lbl҈~nu_ˬ.{]h8s'p5fES!uYj5Cа2zR*yILAڇ=*qa:ze+8䴻w-^sO ]h¤BtDD,uߺ~׮[ؓ-#G׃sD[8w8Gx'8A(A+g׮_}qB!$U\ž֛-cP:H(A+IJL_#=q>*5Ga͈I+112񦧢^"dr]mĜ^b"&s9/, +1eYkr cn&e߽>m:E'/frV+KMv#} +,3]P捑fq-+.#V\+0%+KyFgv]<L`[Sh3 )fN31 iʰ^=;A9y撤_TtfQ4 ̏kxxQ~ЅaϠ7(Wpr%JXcV$푺j0+e+S%1]h xx ltW:b4_ +r(-^#8ֱ9l ƻ)Q TAwsսQ0BR~SG_ loW] rc~"G-r=Ҙ%gB,;AB,Dp",\Z:C~vY01FN/dnP4y7dPG +f olƨq͡|@596B# zLO +FKP(FZ!LkJ AKC#; +ۻ1Rp8l#&pukFƙ `S4-r3b^& -bƫ|:cd8FK"x fchLٸie>x{c<q + +ޛ!PΔK =#u iEec=p5:Peg+5#Nd "bʙr +YٵTRFEp$_bEE&e~v,khJ hWlN9\2vq3b#RasG؃]F\Y8phƩ.9R-N47!Bn#.^;Kll.* W50?xy5̹b҉>D^pd٧.N@z%K4z&0@+~ybۋr8, C;D^91X2BT6Ldw.15T)ަP Ꭷa$"Vdp"X*Ez)a֘cC ꆼx ܪMb,:dq#F=[W# Z˔+4(z_C^HU*TGu΋вX(Wx[i6h./FvAXA۲+~"S@8)V:͚x_i`BP,`Y7\{G'sKe=g7 } 8 k5oZǚٱ1"PKIX 9BY.I-w5yx)҂,2j =9dVd <{#G&Z~JF YKS\w9BEPwZC*R1wXXk =QLmIM#F Γ +plkן5gt@b~TSk +6i,+֋L"z)O75ѽpSe?7ZW1plىE\l"#3O<0L֤=*P$ xa|az#Z.[.ʆ*bOw(JAGa}e c3@0HS-ceeq8`戩qFSd*Ef;1jȔ8~v5d)Jv ]#p|O la/6tT^n&18T >_l<0 8iسO`O,P1UIOUtT^n~rKl*h9yFML^L! fRԌ9vlMѱ&:3ξ–h)81EϳM{$ 0@l::b `+&dV5+L'c0:=߮n&f@fX#lpRD[ B af$s&.3H-p]޿|: >~Oņp0#3V:{4Ɨu 46uDJ6۪,,X=vp^Jׯ_Ox@g]0V1VqvrgZPCv(p~FANpHQ"5cj8 ' wT=|O?.>~_>}xCѷ3"-P'[{!t* R8캘Q /#THͧ?Ĵݻo߾yW^|O?#r6bFe: Ѐ4섯 4L]mP#6EHŇt6.|"m|鳧O<}G>|{wno Ych:sNæT!Rty.8AMTRaF7+]w}S݋!]|&gj5]t޻{܆[N塂gpf)ƊPBe\оIJJjSb9R9IMGHi(>&nt>{ +܊jGtY6޾}u@ᡂK/pn1PK 'd9XwNzHMz.gt/~Ps3/EbHi㝻۴P\а_fϔ7l"2"A-h?,@D|O^DX|Gϟ{Zm]}ĴnFxu5E:Cwd">th1""ʭla%t HlKD|G}X;Z7r'EX]V܌/i!Mf[.&; WE}{8]co\rRS4 2 @'/m$q 1O/ ?[ MtQiohȽHA] }t.."@YZG"G2FK/5J)!%yܯ湃o7=TD52?[wE3.ȭHMA],>b^%„A6eۭߎ!|>?t/vi"]4?]zW.B- +51r]܋h"7gokvTgRkuMO 7h#܌裺H_z{m74&|KB;y{z_vjRZH -[#Q?}B"MԭH"mԽhHw4]~VD)qo߾rviLqGaO^}۵hߤKp/Q.Oݴh.EM.ݨ.3.FD =44ho\ݹ廏Fo.t܊BMͨoi5EHq]i&t"_5՝~i&E&Ƶj-I6Ҿ+.n{/'Pi"miG܉風.^>>^޹wnŇ/}䏌H~Jjn\]qh^r +ÿZG0h{ +endstream +endobj + +362 0 obj + 17920 +endobj + +363 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 364 0 R + /Height 248 + /SMask 361 0 R + /Width 346 + /ColorSpace 288 0 R + /Filter [ /DCTDecode ] + >> +stream +JFIFICC_PROFILE0mntrRGB XYZ acsp- desc$rXYZgXYZ(bXYZ<wtptPrTRCd(gTRCd(bTRCd(cprt۳pzky:-^SmKJ~52/N;]*W5hwSMԥI斸HA  f̴'] Utэ:MO5VϥDN@LH>.15n6ޓz Y@܅՜u+Ts5'*9pZw + suS/YmIKi> pt??L5Jz+R`,5:^w&IvH$wU$2gRӣ+Σea{44#ӊM5^sT]NZO:7`dcuBUoQM*~i9, qn rI荮o.@۹}K>= jwASv:qcj\WEgicC>n9bֹ hA΢'Q ]w>vWS1:}^YXCAdHNq/KVwO{B#ej̪[Χd@;qѥvKK-*ê9{ku4Z8I"Fڤl +thfPԩXviw!IѤR;z:e7u^6ͻ+ݞyDHikHwT]BfJҤd?hh02g+ҦsN{/Nm]w64-U{Ƈ O v{G4{Akդ8\1R +V_mk+R$5P<@pc!ŀDkiG.kyľqtogWs0Z5ځDZsTֲ̲Λ+ +l ?Mv3S\H&ѤƶAT2D@2'IH0H!zoѦ"=9iF=>ZV5LԷci&Z0gdХR7.:{\Q$8cG-rDlVOL0#pp"pa&AWs2 F ʘ&1)3̟B6p8AJGr??SD FP|" r}Mp8@2ELpA8g7W]60znP휺;ffmHŏ2_gChA ++>U8Wc3I'8B|!S(QT>Nc芼)(*O(7 'JC ȀATp?DSlE(!1EPChA ++`&tQ )DLN1`c_TBʁ#Q.s#vqqjzwo*4:EIZ 'v'O}&qr?[$A^5;jzΦFtHhq!Hh0-eSp}~8>d*avEgWdM?9;J '(*sU8MӲF 1;BDSq(qn0"t)P|&ȝ' +vD@BʝQAOD sCSm0;"G4UINnʋ5苺44a^U"j+IaؗDe?uze@ޏz-aکڒ4A%H-!IW}g'*b;șQ>76O ((*"A~02Q2O(,D 7Nml|1 +!yg DS;"fyD +'@QJpQXɯqE轶)k2͒ N^&7hF#kQSZs d9v`>Ӝ :\<ӖOkR|dH#ߴfFK4J޻DS]#x# $aWpHDGr|NerR86D $ (!" '(ba +|e9O y  pTO ))B)h @!Q)̠NS3FS)Ġk.Im-6~YN sP5썭?ýfSMa{Dv/w|h/"NwBPlS@9MDUBqHwAPS^*F!l +q#? M?T8N{ |G8D<+䧄 NIW Arg;' BhQ^5\6a s mwZ+ru*LuBXtGi;Onjh:ݵ̩M9x\Z<郺ϒL @u1ը[P::4j95\nih$A1&&s5\jlfQl|?dc@'n&)@ + nP! ʨPAc)PD9 T&SbEF? $ +̩vn*'(OAE0LPx DB»lzE3'p{mZ+Ig3iZ{*-n>jNQppDD˒}Bu +̭hlvW]!ĸAH9]Φ~ȶ>WD|$I6?Qo +lePdNS?T*(6Bde!XOx@;*JrQC$BD +>Q?d^oQ +"xD>$l*6Xԩ5>.Ihh8$RP3:epA;^wf=`xe1Q@20$v#]&>R-P>%@DPc"8DD#>ʩA|'%6DMB &yD}0t=DH!U@!]P( +yHʨ'}@HAmԮ4R6TԜ!Ťq1$ #6Uo{JJb(MŞ5c^NZ4HU]VcXaKh 'rdI%sWJޝV[P}JPׇhphsO8lv56z)o/AL('*x@6Na>P>txO +&ț"Q{N0AI(w@toaB9WU9( n)R>%ETwko*T@>C4ď宓X LXvh]JN=>Pڎ%`rf~өWmjVJYKOQu7;Hu?^Pddi>WR3 YD/EBDD*8(i0t@rQN<'|&>P%<'(SES*"nQP9)xD;"8DE C )P(Pʪ(0|BITJAD41'㟅r(mjT@p +IO(g|p0Z$LOs2]m 'I&6{exksXsL&v{ d9KA'nWuJ +?f4!q dIr̰IYll+Wj5i`$AcLkP"yQ4. L &1zf'/HpU} bŠsTOO:lxa jm*W7mVmMڞ f@7@ecZC5A!d !P\ښ-lx.mju]bt u$Z6ˉ<,ujomf  ˀAb'zM[$hii"7$}E=MӧQm + kCYL|f?( ']SI'q"]y*˛!yE\ړLը)7[A ft.b`zmsI9-%^~W^ۂVޫi?Aߔ\:ֵk-Zri:[KAA8H"',<\߱MB貣K @  GTR +Vijs?㬹YE9ycuOmFؚ*H)˜}w84S/@;qE9&!^ԻiRPCPdiӆS h3ܯunoӝQsƲ\n^x#Bl+;Yi"?(쭿VV,tXmhZh4R!q$bI(4PDDD@DDD@DDD@DDD@DDD@DD +endstream +endobj + +364 0 obj + 7693 +endobj + +365 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +366 0 obj + 2567 +endobj + +367 0 obj + [ /ICCBased 365 0 R ] +endobj + +368 0 obj + << /Filter /FlateDecode + /Type /XObject + /Length 369 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 367 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +x]Q! D9ec1r|̮=b^U._a3fϚ׳BeȬ:N[.?>K^7bc7XN>iMĒ:`0VFLU= E9ujgO6#3'ccYR +n:UE!*`NF3N(W;'rk@;ib]B |6IJ=gC>f:db +ݎu6}䛲խ@{Ccn1fcUL=z4`>K`h4c!HZ$C; #fŏ)4]62*ɦĶo- c)HW{쩩>yL;zw a$5 ? AJƀ`ܗ!a]hMx_W]d\xB- 91 9c%6[# _a8J]HH 2uQHxMcO[s^v`j utD8—O,t^ +endstream +endobj + +369 0 obj + 522 +endobj + +370 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 371 0 R + /Height 2789 + /Width 393 + /ColorSpace /DeviceGray + /Filter [ /FlateDecode ] + >> +stream +x1 g +?(W[ +endstream +endobj + +371 0 obj + 1085 +endobj + +372 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +373 0 obj + 2567 +endobj + +374 0 obj + [ /ICCBased 372 0 R ] +endobj + +375 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 376 0 R + /Height 2789 + /SMask 370 0 R + /Width 393 + /ColorSpace 374 0 R + /Filter [ /DCTDecode ] + >> +stream +JFIFICC_PROFILE0mntrRGB XYZ acsp- desc$rXYZgXYZ(bXYZ<wtptPrTRCd(gTRCd(bTRCd(cprtJINQPTIHplU q2Fʎv]E\T z(**]'7H7qlC aW~hBoUown:Dij10`\7#XU`x*Øap= + +$J-;v\eSUqc*> Oe7W`yP6J + wzt ٠)Ka#+U2WMmZUH#!iFiFs+B=Qn5:oUeTE$=&t}"r N0%;OL1p99'>>*ʠ`*D^ܴsguYc=Qe "v$iʵiݹʓi+@rm#bg-.c$ǨjUl{i凪\ +ܮ^G_/$U Uq}vvn}*ôvJW 1ʴduY/{]܎)0Ԕ$c܁Nj4"@s y +%\ٻC?PF2w)g9ڰJcɖGUaOrQF;F䙭wKA$B:x.c\H-H||jVF7.y ۴9$`ukZw*zv$m\a FZYcv`N1*>7FH9nZSMC;Ӝvqk'p-aq7~4;y,gwnpV"q`] eew~ +$;*Z)0?Z$x|0_ᅜXSˬ2F1h%Ssw9%Ts\)C):z11̋&KY$x=#OUtPH.guzQ6Bs\rXI2Cgm}mhJ0F̾U!mH1#,=Ұv{#ܯaHAp^q,svklFS,p4vf!?T]/lNtl#[ns1 orz6LS/Do.oݦg$ ܴgIz㋭`E-T,z#2î:x⼜Jw$ ;8ry{[D!࿣2frH:5k[WsIylpsrʹ{/?I_Nz01\?K*YSڅO.4ӟrѶRz?د}@468^ZmFױuj:RG$y#~?V,ߨUdmת`L.ivu*GB7u+T¢ub#e\W=nmu|?enAU+DR]-wT]AUkCӸiGUm8.5O pN7D8hK145u2S bÎw/cagES7KuZ+.5վÆe'/~əE-ximfM <W4n|Wu7o]<f75i'$dxv4U1/MQ:D񃡸~ߺr= hW[3ݣ`â#$,wa.{W.vn,Qo\ÀUnA+ m,&ԵJX9lA..:t %lO1cs $Psazܢ " .&N[I $ erk$tCiq +B[! uC^# 8M\/CbjNlV[K^go-ûйcm8\s2EyCt[e9%Ѿ|'٧N߳ o UG]OOG D15p@$g= i S$5g[Ѷ2qu}WۧT)l%c ѫۑY QODlT,Ml{:F:6@ Á8nk Ʈ} \q8-k&6l @|2I#ع!uHIt]8:cwF+L/A8:qܪ+2HQ;$d5?g[$AAǤg$mfZF Ϩp:ac<ϚEV o|f'騕;+$7-@]b2n{ic;NEK42D>pF0z Y.14TAKk9MˏT1 .WÆ6 #Srw$^߇@p}dE%4U41Se{&35ǖ3|pUvflRR=m`A(GPyc#8_ C2 ۪2c1O޳35LtD&k"t:Wqsi@ל`ǎq'w+uTDܶGhh/CKsY$ Sm qZM Gg$:u[v-v\顮rh%U}Bs-n";M2C_G1ަywN%9_7 [o&:յpҼ9cwoQp1QK=EpMVCoTFgN;7ZsqHx4Ǘ`3Nb-HF*ZuVls/4 =Cd +>89P ,:|ַfc $p|juZbMH*85z`VrvkM,\yTqp8 Vu+f̝ٙyM)j+ 6Y?rM$GNKE_ D602Y 6f|R5İ_o{7sy-I1<ӫRuXDO:sn0Zfek8+\|!'$!:*ZG9^KӚ[Gyi6)Gu`Y!<5~̫ꨝF14~z+ά'>^ s[HWF0FYcc.iqyr.cE9VTY [IT[݅+LFў4\;P| +-"R;E.-’*挰87QtʹnQB4e[TqTaTi08sS Ǽ4H#u};^H8\G\l~^yo:w1-'tdC593%퀈ۤ~wtQ?lWccd{NV#&܍ӭWյgKxgR6+&á;w+4U360 mΌ79 vQq˳liԭD{rRe)j)tr?_+ ՑT=KSXϙ#`iܭJ^{/kXC Eyf~16[OV#?{ǹyl>'p#ˉ^yIܕ^`7V|Bi +>'r7U@ӑJTEKdk^湡۴1+`cZgur{ec|7&_Ps4mGϧ݅5T-VMMّ= +yv"Җd}Nֈ(05㢦m2B:;bIGڎwy$+;lxsBo)rc:㢵Vt* {r"sXcD`L;[Q  ?..ssFRj"LTBin'j^Jqw;w0[0=YqX$` {tYL-p1L+Z: 47ڢ(حl9Y@'9jHN Up0RSgX*}*K^AYuj Xoړn1#)lgU`rشBaX2|ٍ , b%[&/3gڰ7R}?Y]S${$ECu=1,8=@I'̫2cӞqՎ&|ak0T 4($өKL48@',0e#pՖqGxQ]9Ķ.h.$38.l2}@[ΚYdgୡQ$Ny{45vF%6)GN +זa1ؗ,ӑ.b*Χq,8NX#ccCRs ?(Į>PDZVFN!T#o.G;VrJU<ӝ>+VkhҋVmǰ{KO@ܭIw<0!pv Y +\UwwQ{ W1|9vWE;0P\|v-p3ԭ~YܐY槕̱f \I6[55/ dlOjfZ%dJ0: +LlQW24f +%v9FQ#v>tPqO'MVoէg~k3| ö6hDEpIR$`ӟYڻ'wsadm;ܳZ!x #>]J ro-mݒ:r[G[*_<- ; /+YFZAUQgj :e_F6=>a*J1!,#aV;$b-2<0cX3pVf{z~!n1,Nzx~՚-GX>,7?zn; us)q΂Y*fLo@=eu+\F?V CED%.^:Oh{u4YoV{~ұ0 yWP2ݚ%ڑ6mQӡK|-Y*׌g%zbr p7J)Į:Y\ӳ7畛NtRO"|6av=Vk#c q,4Tk;쏠we[ l$ɸ!Q=ztgfUJIГ@wVrZ@yZ44*6z!n1ذA䲲A/oV h'r +>HTcyޯs%hTU$vmjvTU:UJZABn=@ + tn#qW۝${|q2I*Kyd \ӝd|0ϪY7d#af"#s3asKC>K+ZUs&i>D}uVِտ\Yi[Eq,xk2 ]CnI*18!mUe pPF %qîٞP44gTv4~NVںW ,c))#J\w>zڣop;aILG9{-iaj뫺f>[VVPYNO3[$]cçY-f>'lI;{^v<5v{h[ZhMHzõ6[; CNzgW=<pakgkep#\Z8aQGݕZV,|8FdoۥH(|\:|}xrL K#`TF}:c(璠 d2n4Rjj#8>-_jz&ՁU}YMH:wNNUt9\s>#q>F>*EsA +18s6;(Ю<d+QLc;,k#~Jw T[ʬWc.EUfvѻ+=@䤐8pܜh6'rz2?It uI){,'mg+ۆ( %c=VZL.c|Z\F7[4}]lխj ؜aO~d{dVjXꑺ27ZvNZs0Gڤcq3+ze*zi1ѿT[cv)Wcf<<~䴞[.Z܍9iB|Ua"[p3 ݀NdH*F%bykշ@=n ܰ4ʨ \2T7TĎXx)Ov\_wUwddrՒ#wRbY`rNJ 岸{ڰ0Uc$;cWᗳBFyOI?Ս# +=ɉxzhy Gnx*_.o/$}+AWct;~]-`D>8nzjΑ yBZqY<<4u+k -|r46-Wj;é_b_2+f:?e54{B5qTx n[-m4GijTzJ^]9:{hdEdbq}3儌wD,ֳ^Z2p6H;5ȭۜԕL{dlbG ޷୒ +9 ( ׸X2:|͹Z[H~dc>l|B{dH9saKO2?(눇h pv:OU#|Ŭ{NX\7NYבic;N3ZzEl8&7=D#AkvlW7b>*-oY4(K_PK8΄+vp+Qbt8jVk4'_w+ H=B%8;+QfgF+nPH%r +[e,Zi$?b!ˠE&AV./Wd4+t5s@ǚ`+Wϗx i{A%Azkʰ: XnQN72F>8Z)hL?Rf1iF}9}3sqē-vu++6U 7=JX,fGQY$41z+AwZ ӴӼ<>x>kes([OuDm{k{[xx6rՁ$4Hvbs 1fJ̌Vj؜Q,n%fr01V0v!\&WxoRTV)bt;[,R7d`#D|FH;I{yߕ&q %T +XN[JtG34x u=ς9#'9Z633J{۟>Y2Ӻz۴|5F kk:` ϫu@#Fތ9~sb*ǗK)w[B|Rzr|zsFUA⢲eT°xP^UaReuݤSQ[aP`s~:[ {Ncŧ^wS n>GѾ{l?n{tuLBU|ad #U!t in kEc2k6C%q559Y ^>WM 1ѶA3}}L%Æo7dџo0a߰H?mK[U؟OGKnZ:FGZcpBF1gzH n=d>B:'j;rnV:ZZha}6͝ݲ}\O3>t g`q ~µr'?)?+q)ǷZVMN@qנKVTT?bדwуz9 #8'*._Gte7|d~{ ˌ#HԥZ+@8T{l~0Dz>cr6u Tav6R\%gl9_L鹲ǭH3GgQl-~GCvxئkH>?:| ;g{ j(㒪&^؋0!܀uNHpX2pK}BԦ|#pF?tHȵQApy9tӖ"&ICZG\YlS*KtSd`a:bֱ7 @z@x"1O|~Xp>_%kTI aevq0 z#5eKCkY ./8Lj'`DK{T̏'hcR#+ 8޲;W :院67}ܐԺ2{4=A#o‡hލ6Wj[u;$CSV];b 8zg aҴeg?Hg#0=Qș1U +N<5uW%i?b+O.G<GBsT + WK\>sь6;͌pe 4u+MLv7éX,i?jm2Vetv+ ̎Xi?QV}j!2ԭsGp*KUJenޟz՚fv][L9ڱ.VKD=cr*<]IqUCB7?׭.](@QSR?[#Gij's*4'{W&fvLvg# ,uR=-1 `9/?j `ׂ;uz35WٚȒY4lwe^9F@tURɸIG%5l,a|c\hǑ+ucŦ#,H-hv GO,ZM+˛31_MUCKLrRLS7sŭo 袐U<{9~?N[I{fmc;\%ik |xW3;T@tx|MظwveOOtQ抖&￞0N +^!k$4f7Z#4`kKtc!ON;o6l6k!sa|,g.$ܤs6&=FPe7`yeC_b[]gkY h t9h +$DPT'A9!$8`|x W[[D֘#ѩVkh9㪥=UE+ =ҵөJ.oOn6'5H}_GuQn};M i'a.eJc㗐CSq8vzV]ЇP5H}VtU/j킹n Ӹ:GRښZNtuM{:23|bbXF&Ue^c12FF%fGHeLPp}sXy3"s%`=$Ԇ+=\|13$K٣mNOtZ^,{6{\R[)Ñ!9' efy&&'  TT|tSh0ӝZK>㿡۸^͹2 +6 wt.V..e[{m.n:)Y\/N d]mM]l?a?c96nwKR2rxꩣe4E)-dd d֦]_4iT툓H8| sJRk`9:FI5~e)*\)Ĕ5LSKJM;W|Y3Q><jn 89I!n۽^k%4C sekN$qzf2 +ii\gP{49P>)mN 8im"&왈A^8>JzA/f^ֵשޮ6?1M*~8`Z $c*BHrG deCX=ڴ9_M]xCA!\Aq$:&y)٠7WlӢߢ*}K璾F#W7hp\Oz4tA:X:+51aѦgtOEk1F:4T,gnWUn[۞tQ32c=H?jU `tǙ(*N~*ÎgEDacrY? +;Lod<H+ r?,*pwTklrtdtn¦ TZpXv܆7*;swܭOܲ߹]iS"ƳZبX}pS;n01tv`}WYMcO\gLhK  XG3RMI&X.i؃+Q,2OuI#F?\7VisJb7Xw>#+3\64܉ I#*M@Gv pG>{O6i +n0د3=,x9"s_;W))M[KE-=ihӜ>ݩ3 v5rh=@+ k(EkwA^hJo}ژWyYKЃ^yjzZޱK`rdl½04<w<Tf7߼-^LOg 'xn%\Ъ +~qk5]eS%QPַP*ܪ*Ij $yhYhmԸ Y6]* +i婩8u%öH2?r9N8WʹeB+}zpϽPMNqZOME>cU nNz 58#UsZ\G_Eʟa*;H069XvI'ިl?WMW|]:*guaĂ7\@ + oVIJ;MXVVc2G]X#p.Ed!\H V,q8j72p˷f31rueP +Qv;cω<<7h)iU2E A+H Pgp58,EF2g9tZ!TRىӬ8٬u?jIGS]Fڬ'c|HַۜӁ-#i滹!cK`}3L-- .JS5StVѨGyc[H@d =ӌ,S+]-լgqmx=£⨩vvUϛ=畏Q*wkş?a$>x__@{z^ϟ>+ލZEkOm_2{<z7oŚW{'Yco8Ϳj"%ڞdxq`VuŇci8!5hڟx(sy/A?CKޑ=,cZb|͵p77_ѯg|<=?_Eډ׳_ߏ?OW7 n| lƾP{E=N;G~rqs]ƶ?\u=Ӡ%ep X׻Owxiǀ>_E"B׻/k$pAo%k?4χo_G +'Z?4?ГĬ~+DND]DD@DDD@DDD@DDD@DDD@DDD@DDD@DDް:G/>b?5Q#NJ2 VUDEA];Dcq-vHZ1+m=eEL"%i˜^z"`U.'ި2""" """ """ """ 7wϨy3\m"Ј +UY/ʱk"Ȉ4 G5Usx\, lWbt#ObsKNiQ8`L5Q\rtA_X +"Јϫ8e/4F:*r50DpN"=\Խ8\ǍZyfz\tV%\&kx-/vOrQ`4g##Iϖګxj|1d JO%ݸbMKk!GUGK,&vɨcO_!4?]MK!].9dk=q+loή)G0`c>#= ']j}vNޚ CAeΒG-Hyk{IscdӒ}; EGo[{⩴7KpΎ8m ++M 4մ۽=ee,-ai9OOغ?C_NVMN'3:: cط8kZw>՚uJ}5|P5++ ͎)X puH؝;x3 ' Xm|Acd9\#9hA'brN.C諏#6nbWs|A|Ifc44ᷘ^+@uY{eT!-QSMGtd'ѹdX. _ u5*WHƹS7`܍H#;/RE@pIxVHi+˥M4 Kxˎ@a̰N{b{"" /pVn '{u4vRTDEh:l,YeسyNd+5JD]DD ŝa̹ۺ*""" """ """ """ """ """ ""חy +Zj+QtANxZ8)10\ UϳMb?V+0XVDT$4dii+YVGwniDAYV8=Od\( T[GZuImD@DDVVŠLD+1kY gL?D,Nqq*DB""" ؈b0V0W.SݡD@DDjfpi50D%v #>ziTJȘ^Þp ֏$hŚ*g͛\mNN|sG^iۊYOOZ]n7%u7A,CY-cd/ Xp܆=GgP(6NsY-hcUsnNW8`Ԉ;cz>'h&L3^mFL29g+,w|k.3qN2;/-\_np&դA!NGGGL!|TCa0[o*#,ovwGXTZI 3"}3[FZ:019%ɷ)Dh#k]%~Xؼezs:{mʢ:FG-m=0tlpdÚIn22ѕ9KaZ\ꢤuu]QtU2D#K6~eoS4Nke/idŐ4z`nT衧J1B2,!tӓsV[OM9ٌx-Ao7V~V(] '28K<[PQR@{$Kin .rGxڍ$rO5Sk17@ #rdvvlQu gW՗C]i?=de62EOXݩ&46zL'QH)Ӈ@ Cv sK#(5e>9ӰPE)Hvo}+86r٪Y 匏[.#9qVZmKe, F\9gT4d1ȥ# o kQ2|K[a_ !:\--qcp1$Z"q;tR6[U,F>a#[ ^02p00QUfVV[Wn,M$-sۂHÈĒeDpq,8= $5;OI-$hl2IQ,BTL K KIs:I#o_+U:(=DDt`cj: . +usmJt{åc”=|0dWڭj:h߆G|6gX\3"Gs܀dy 5]U#c#h kZ0 +" "*jp6""ЈjlBeFpdcP>uY G7VQI[Xi㪷ʈLv*ږ7iQ:6تi'MSfivpatv=rqE,=aylI4W: ii*TQ >N t58تR"ت(mD +s 72F]!ĕ]SqD$hسq5\xNu::rmk*X#{iy8še5uBCI|v2Eðˈ$n59ՍӐs;.A]M-\#2@ZdgŠu +m_KTLpf>AeK,WNjDm u\ +k7 }s>JdH G/gіDC H .USx{~>zA_K-[sd24KA⃜M;x̫iӚu=6 ݻ;.0guWu|ZbfĎCciv v4w**z@eknvVm:ap,F4Hyo,. tuAKx<=nC}p-t 04iվKϫhs +G5J]d\ XqfφVo[):.&V Fv=7duJ)**)kH..n@AکfMte$p\%nI~{(s.8q ;?|õ&q'UITjz_[hq]]7*fB˅8}CH|o,I5F7MA36QMUY= k"RўPnix`F`nR:RnTIq=ъV +CӰɊuvQ/Zbu}?6ĀVѱ1ݭ1%!yyzc't eʮW :KKs+#97">1ᙹbAu},U,lw9c;$ q- x.f:$L#~އAW SRWSO1kIh p⃖ቫ K$5td`H40c2[U횫RʯE[jH dF^5dlg[by\5P8-=A );Mª345F9Xtg#p}ѯ6*JKkywp_q)KKQqF[ K$|O#gcccrZB󖁜%_= oUG4 dt#rOc%!q{c']-=N VU_j(hRn Od{Ӎ_@(OYNp!ZcOuĿ@u[q] + ’AJvqo9(#Rp"*6X^@@ 8f]uWEUDe9Ξ-MsF᰷m.oWj  žSP:*Xc2FFgGM_GF=V -r;",ȝ_[өk`stw-/P܆Kq6١^,iyC/d,i`UQAQNs9{m;u4tVhHD}7Asz;s*[yLbw{Z[ dj]pf`KZ}.]/\+(;};jhX$ #9;s䯧RTO42Ӳ##;i6r +dq.rZmlhl5ECFH'KNܶP+Stm {dq2\$|ݍX.|C.&H 8ʾ{ +yMR7ֺPziGKUJsؚ^֜t\OC\++Nsfxv7Ր7SL5OT,pQ7k88uܫ&0""ʈ +)):+K?[1C4 r.'c)5UfhZ]#rH +\cocem=dPKHye4Oפg Cgdn/8Z#euS24:W<8 X!s;Vo]_Y(45ZK|4D``aW1ƔI)kiH)h2G0FsFZFFqN!zҊXe쑍NӇd8AdQqi!J\HdSZf7r7QUUy1O,q61.?a;v8Acrtq/ٷ#341рstm.k$# ޺wHs!8Ýss̵5wXo6g9~J7$gLt9[Ң[ȡmc"J ?фާ9Kg|0ۃe2ʨk)87G80jNF3MueE3YKaɕ ў=Phɩ*!kUG-2K ީ᫥yhOPE9,s!q: hVJ)#tnQ `Π F(+5 Lvڙ"v\X\ojPkخ;e}l5H0Ѹ4aplJUP\M!-//!tmh.p9鞫~>6::Kgl0WkDQs}`܇$fc^<[V6]hp}< {)j+sbk@vGeu>SZE;% D'S\c?lYVӲ72l[ȕH38jZK~<$5lGvo +׊G@&JTt8x\=XF1AvpVnC#ium8dqh:Arszoijjgkdi~iSG\$5ICOK[Q#*(iZ\Z4|F8n[gvGIM[[W#cssCrH' V.EJ3QR|ipkFFAyJ.$p;X1h%fIsKzy(⒚jfkr4`KIF$[!2i L@H[CnV'lt;/2aα:'FTiFpmI;((5-eK#VGY1 qÜ5n{-'e2# 7m˜ִmԑ pD5N7 Md9$  FRpUЮU衡cx{ItCvu[%E3T_CMr|%F7nodB)hu5\̧z2X×y;p4/5[q D1-MX0GFK''S4m決FDt~s8U8UO=%e?*)kc@Hըuj d novK=ƪS۪y"#b.cpzĖ-*$[Ctwj̞]:HoYqX˩e8~㺥[u +jYRㅰ499 o  ne&=^5?C٥yŤol Ca9}3 k@1C4$4'IeY=_=lsSs#"儇avF^*xrlLP֘;$ipA,uԖۼI.52J9tlf ܑ(ڻLuGE[D&9r9z 53Ht:yzbis#BTZ!U6CO4kY7,83FPj_7 +%=8m杒>W4'-sW_fk54FtW?K4COA mO*VA=D1GhsZzi$p$XƁ>*wA-M=CnqfHq7#qJw eSV=<`x0:n^LZ[C$t?1,tokp> t] TZFC ;.Á# eVbPRIE2R)s EUŔ068j*&Z aǒ;.pN*P?OSfƦȠΈ*KC=$I3Hچ9M#^Z1Z)O +z'$7+DA%VVVTx"dSXӗgHFB y*j&I=H-k@rsAC°Qipt4rK%5#9Q Gx.86khbMI tг:Cin>tȂ)GErU+'XZ#,.kXùav ch#>xK^g};)89-A  S_EDm|Ψu;t:G7׏jwo[#%K1k_\EѢZn)(嚲ZJV^`|:t^NI4o 5$uPIKSSP7AϑHÖ. \͢v`Xin5Bb|023;;\ ^ *~ +U=²VkUbac|9zKz;Ӯ"rb6Hs^x;q8n:62qsGY-I8LmگfVMQn/  to$A jK%NMUT\U$cqZF[sx-8:5agae\r p5AiwI s[-Pm9HrOܰ7 MPj+-UU,jju/7!ől9n7_W)iɦ>&p>69p \`2F(!;A?V ӤB xN nm7 +^F!60Ov2Iƽ'[ig2MD i,3SF9 2UA+tbI?G{Y,/@d\ 㯎I?2:. s Q][;)+Xv$L5+mVTO+C941#cp'RRaIтAm–DX5̞VOQM#F449Nkё:pp]pvy+k&jZh^Y9p0ѫVy-|4k(f}YS;2PaIF2l7W53ȩeMiK&';4A͞ m< 0>w-{s p\F1aOjhc^N dYQ`8" 7>FF*3c` iё,ZmMQ=,TD`G#HݾDL[#2J"t\3:8LJbz:?)ĺD\ӽ F>Ƹ_Iyfz`A)'wS0m/>:yFOZz\Kӽg O3 5?c-cπm9$Xzl786 ɺȼO<+݊w!-i? kmbGL16֑xזr81דEZ۳,dvS0(*NX||=3T3hR=P'>E"3Y2Fq%mRV.SHr8mC ֥'{k+kfKK>%.~й E} +2A2|0Apѵnޜ1&#Crw)w^O.IC"OMZᴔlĬg:k雟 +ݖQ̮qJx{V'ZbF~!uI\D%E#Zc wpxgmG +G$aޑx巔~Ņy=쭐~ª>Eq,s we?6bGZ(}=ސT\j h=|]E)KtU/205᤬۩"FBlZ8`޷18W-$>뙚1/٘psRBI$78DOG%l.s 񃌃~p̾w}kxoYp3m@j٭,9as\5+ =ጿ[6]֘\d +9C۬7l}a֑IR;aD~)_ӑE@듅Νo]Jҿr ^ʞ]L6>[ZI +`$]ˀ p&^[&n~^K5\!/׻y?ah'THv㒥ɝp1>kBgUmscZBpwyE%Kt94ZG0OE4͞Y sZS,WSn7丌 񝏏g5jj -lmk58Ư-|pƚ +O_ަqnXVK#$ w5ۺn06zD|RPLH8_X+0yN#:B43kZOܕ-8; 9ӝgWM;;Vs+nRU?.pƝG:~ E{qN+9.XXZU/ Y%v!kY$v9CBN\ָ ޳d05ަվjB݆'-ͣu\JpZ4ahZH ϗS)JeŬ. +ӞRj-Dhk9 -cv0rLe\}+f!>A{o`ie/3C cT0FMhoN{ob[JCv>N v=WF `rwbܷgzvl"T9xu?i׸q+|1[ұd4>GMs4y]EoULHS|?C~kcR^_PԱ60 U1sG,%~|m2?o6Q[ewp#ja>WxGvDil bJoag*D喞z ,NWl[|7t}Cd`R|@ID&&c19fK3w䲙=] [垊Aa;):i9iH?^ n(bI)'/+DWVQ9|KF'. 8 s׀Ookq*6ک$]f:F$yDt\56*)kt=g xJTH^ds˛$٨Hۮz7hd}n29x*>N]?1/0~PWc,ZF%e[n"d 9ʕ g>]_IM1x'=:~?'P/ 7'au|OUM})4]cp>kB@9YH}/s@-#|9!B0t^=W8t|$/;S ;RiS-9oue9|co:؆2u;(`ssSTյ@Ѭnq C{L-C@!  +בNw5o1N_>sCv-GxWvsԨHK[6;;әt0k^"#:FG]~ JIcr:53@ݭ$t NG1ŠdmZse! 5@\ @w$|)@C,MJ~Y:Hxx׳&ӯn1$ p_޼R(c\F]#zg^޻ýLÍY;?O_jgvqÁb>ך`DLپz1~F#x!xdQs=89Fp<8+2m&. yU-R9AϪ$xZ{ }?g>^W#ۀh*U>2M.pSi6rc8vˉF˵?oG3zcOeF13Ǽ䒵d:J{aeL -{SY ӤU 0Iq=5۪BZ#륥ԟ¶-=.7=IGOCZZ>xYʌm`r ;Kpp_N"Xk(Lr%#W/d ַQ>+9Ft+3x54[dԺ9iD9zdc0=ua,$ u4ڥ]dlTT$򽣼}VS kvZoEҎ;1suJ +ȟVCXEdQ4=ŭnOx{1`/k j%ݾ=n1^W%԰LƟ aʉG$V:y#Wz6W lGbʠ+Ye-~ q w./)cVsjI%S<*^zf *=".sU#a~ w:nBA$OZx-FFçޤp?%ay܏\9c/؊)Ic{_)`*rk>ӷ[Xa?/i {=7_NbkyqW||AL:7Ni~ܚ`#-'[29sۣ|?Z55q!#:>~!sìNTG;Xdyī$sucTN0n ~f-Xfs19PRN#:vrU##H £깃 p-1N -cHv{+Fa :rRH{-'8FvjaqfZ=FJy~ 8Gjc>x?O:FW%cn ! $o⼎9:zdxzm;?f'冭 Z÷ar;ٖj;25=p^Ǝ{8>)Jjߦ?/_N5-.ޟRt3 NvewOy\qsrU{|4` +ii㖵5:e~V C!=3E`wW$F+=3ug}&[5RSDR<micLpKS#uW +kg ,}O*UJ 2fSS h1.cȖv+ֺ5övWn߳@0:ŲiW5Þ RELGfd'~R 4.s/{rd/'0>k#֣mC3&^&X.ˁo:͓[AX~K< 788֤jWo:v C+g\Dȉ+_C#4x>J!C8_;m4R/l󶭗*Fk,:GGP eުO>hbqzѼqEd| -`8(qQ0-cCA/TV؈yfbZV\r!hZWr܂"Db03V,<U`T}'ϔSN +?{uFyUi^^Ld?z@R 5N IruQc:lV9%x`drX_qj1GOzt Uq H̵tqVYB$I.XXnPӍwT,|GX6`Oy<2K3Z|/՚FqNa>\}3UL6#K04|}> LY/ۨ*ρ%yCAʓX2l41mR\*%n"i=랥ty죢J@d#x$q}]Ky$䕦WM*lu7+J,VzNMt5sI.^Csh>sn{R{,25#c2yFѤZg.~n[_lq8ݕ +-7 +i*LnlA[_kdUѤӝ$mx[kt1 ݑ[K#-x|WR<ul-/kPVJ%W $W!Mw|6c;S\FcI>I k4+hOwR_m|E B{Lë{GŜ 6}wU 9@9&[/V*F\UBڸ TNe=M>TY7@} Vy,2b+_ez"~F>q6B_azvE@>(mwҏuDC7|^Bw v"nhՒOW)E`}$Ox`FҎtaX0XhCN5doڞtX̄=Ӈ& ''U%ʵ=C;}h[iffǫk p`xp'4HF3Tf s)`ՒyǿaUs>\t.p`.7W1~\cDfq8_EY|U6  N>dynR!i/yW3^O>;O<> WpdY$j@ϟ)㧵ANr9gߧc1Z>ܫۆ 8ZI-'$I[:[XJ1I'bTz[&FHe(id{CK9vz;<" 5|Jk/:37XNNH$7;\-RdL.gM]?2X[&aspkEY1׈!i|IծŹ~_Ŵd1qn{{t );aۏ%ހJ}xn[Xӽ%ͺM+;kLY꾠n3|p@MH͢NqY 9c?;, 6ӾV[l^s-k5 >!KVcZZ'k%n>եJgogin$Dn R m0z,WR;:[J{k,ݭ'*/or\HfxUqHylh`]?%>;*ZU+8l,E46=*̑RTe dALEf<]#C$s${6^MiڑjQ 9=z2A<Dr쿔is '$en3x[j9i . ?-i.΁'B +㓀1ᳶ.4|e1/_ VB$k@g*fZI$&n#; +#WR +]lzĕ4C# eCčH=tcn_>A +*}y)Xǩ(LB=ڽY=SP?ނ/L3_Rbr޾xfnF̨?{o`N{|M6ɩ3)݃\ ǘ\c3<$d +J s1>s[ڤ> PS~ֈ/ɤs֟#O!==o:̧W1wp&xXZdD682V+z+jL1ǙN+WbjŦ_?VԷhwẕ1?[oL:'[R4wdv3|H|;soMTHp?)ç_??1 k]O`3Klݱ +;tU/QNH3F:(}2N =D/s#sq=3rpƷc5ΆKa#9s*WWYb!=@p}Bl';>f3&nZN|͕PtDy~WqRh{NwSH_ MFd\Y!-''[޷1:"anprv.AVz1 զx?z3=C%%6+.vl-wEERe%ok#>a Ĺni"ujjwՔ儱ah3c l]kib4)8RW +^+e2Nz7zeV?fxfIXWrqXzսuiRE>Yn2SP)hi{-G1սTy4 vG]4hÖf+.㘜,Ά9/gm;uL3pԬv%Ube;B8f 䵩u6Mo ɬ&Hhh۫v>ԖI-᲋C_q])yܹޑ_xqԲdܵL/3W>MMݥƍˠx _ _v3]4#:Fv*Jg6'j488I$;8p|VbY`cMY=D1 4csakX&K@lL LqkgI!buW#iZ\<\:_`rpy#XkΟvVݸRIHMXq +#GqhZCLȣhGד^m[nGgm:{ ب$k=›|W$1n1攼+> -IO6[.EB'NJ1}kVI]v_fԍX|jSȨ+QskPTկ'knsXVxnn^h roR;'XK͐:?5y/ht-p ]nu߉fK৮6pk|랄N )&5w8^8AW]SLl=nclimF]K3h+L: )pzeE:nYCA'IrD|MAqk{9 8,_:;1?뙗d8 n+agږ6l7 CTNc/4' + +89T;@NWԟɕ8cks_-KyVAzM +>ɈO^A $ +Xqvoz>*y,`*r}8%W-S#+A¯(y d}_}(HY #+u}g92$p:|c^kKb!gGrLʖ"z6|Qfv{>buwzzU\OpOK QJe\ ]=No+ЧRTEʖ$g}/سZZ*#]}n~sp A'%{VG\!pBXH g˧wj &b5Tn&2 ^ t+}FՖ-u`k^?/l[i/?g$q巚8^ckÖHȈ{};,Jٮ~gK*3W&|2tAi_ >wR5<7:Z~\I?wÓQ冡ҌG] x)q &)QLlE 뭩3ٛiiUU(}3V 7 +1ߎb^8& +~B˅aEeu#׹i|゘ˬ[4x֢F G05OHE@^(=}s,*,ZAJSj&yLd4`RӾ g3rzf>u]Nk {z) +Μg5";9 +yh<"s \$t3m54oylU>v.\[CE\#.f w i1˃ h-p|Uf42 zaKz]hzζM&m*i㯊I`|NeWAN|aװrre{g%d|p;p+#K3sy؏rzI'  ﻼ/x꒮ i;=Jw޵XjWwٸW0ejjV@?XWwO Ri^2T4ܔf[c!#z8}j4J=IGaM7JSPem8A_PݤMВyULߢa7b$߱6Jnb}?%æ͍{as?HBϘ[vZSObRmޔc 䯴W^x#}qJ)ߤ<_YtS$C܅x]_[\ꨰ M k۷uX10B^Kӡ[)NT**'.f@JQst5EgING陇{b"Z`^ :?x9X[:Cdk<},1u90 9 hzFR]<IU+^X ֍H37EKv.4!.=v7}V&V@'(:8̅KRi?YqiܯJG;~*נepgQmXˉr'VT*ҪUEџA/Qs_C$1՚c 5 jINvi_7KY#WҜd4 C>(F1qW;jCúkj0z pGo8 spkqNj=2E,;Hg èOs4>d^G淠>%6p`qw4//+?YL}"[ ^֒EMW#sai$+N(]:;hcq 3 +؊#^>kDW?h={6ӏ'.$;EO^;_UNx,Wɞ9Aüi^#_Q"t K8udoq U}6(k>gol@ķ-i_a1yq`_F"t*[ g^ru3kΨ`.FϞW18>o>C4Lز3_mc|/n} +V6L8a?BX(Vaz k.D|A!oz5dz*.p2|ֽ$d UgiR\GE^^aٞyMex϶c^tA3W:xz7,c-9mП4WZ9z9c3k8߽NVfp8k)ϝ Gt( 9gZ}1+38jh[[cRIk[mn|hf!L?%ۈee8N>&ᚋp59N"ڎvb1bPK\ak3?QVm KLa d/`r@(ۇY0iF%}JْGjTsMr!J Zfo(̩qx-ӯ.wϒx+ҊjkC#i PI"lR[ڑ9Q \r1mmҎJul5T8F쵤H'APo"qe}*᥈Z܍!HޭtU!@D]E }E[REB,l5NY;5;=Ζ'U>@54 8MtD1mLvz>Df(-Q2Kd4Ōt pivz4(VaiCsv?4i.4dcsKvX\s쓿@D-n:qM +ZZ&VE5,٘湾`nK5Ib+&>kPo  TP<'Ŷ$4qվ 洑%٦kT]}3$9BGCA*^]=$ s2{ᕻ'YApuҗT; P[#[`  4Zk7YSK2H\3z+u[)+ceT,e-FF.rtu|UWÕq:)I@VÏ]xޣ;:dD@DDD@DDD@DDD@DDD@DDD@\֚MmG] )R"!vldApڅZ'eL24N =v9h~b44VZoa;Bcwug0v8[o0R[+qR2 1 Z;c/+==M k.RQ,9OlND]+4B!4w2}K-Dž(}A&f+DD6!pЖ\X;]`5%7 KFrNst%Dmh]B71PV\wtp8}]p=McKձv1HV7n=꯰ޜ]wPtxӬ|Wt8C`TZOK+*ohi0!َ`8\< . ᫭ƾ0HoTC$B649lò 9bqW+=E5EB*jYu<Ѵ08 <@,pNS\Cjw1\Ɛ @pik |U"Ȣcc5hhkZk?QR: +Fs o8~v~tFxG-i|DzoIvR i#=mhTnS׈*SQfGļv!-1}|R"j]hv䁅c}%H/8IFc|D q^LmDa᧦FW#ދ4f@t[ihyHrG= """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ ""'E@构 " """ """ """ """ """ """ """ """ "2-Q95ϙ KcՍ˺4n&n\QgLg/ưGOw 0N.6&.'Uu}1ԕ7V>K2:)c(i >L9 un2HwV?v[K2w5BZ@8 lBAO=3Om)$A<3@m6:TخUUOlsZLPS&x jm"wYmU>Z9"3$10}ه[hSnTji꨹c~FA pxۇlWj粎cK<4 b-5HTHʩ3@`!324/: pSugO QŌ=. ;qWM]fmxn0ѷ3'3m5EM4 +3 +i9R=iqY8\1oʇRDHN:qW<)yq m;gIsOQ@\Eg m"tO{ w!0Ju3ZG,t{$|SCZKuES 35r@ qz(_*~}2'Es#:e$ 5k!Kd$T<苤cc$xFwA)w]~!WY +fպV6'D)O |R#L &{G1à 8 |s+{_O5{u*z%Z@ϐ;y)>PXkaZa6K(\#_[H;Aзߓ}OcmG%M@3vY69by\i<2'5표d/9 }>i8ѹE]\yz@ӌݺ+/<2˕%C;T֍#\їdd5vdDDD@DDD@DDD@DD Z<GfݖsQ*35VTV8]S}O +E05_SV&aj;MWMK}O +v[i5_SQ7ǃ .U?)jno]S}O +D 4MWi𕺉<QFUsQ".̈!-oElE{w\5\իh,HXH=u'ΈB" """ """ """ """ """ """ """ DEّptM  5ʕX.x҇9/8k wrKmVA=3.MdO%at[69-wˌR(gK%MŲ; vI ð8S#B@qtpv:ŶJ-.SC^@['sMrkXW,,cLCj8=A B1W GV8jv#v]DPdy47T yn\YӆFwZqUP^.} ՑrF82'r-=cv!qjq(>d3F,aN?q 8vz䨎p |;&0Ѹ%z V'| p5d縲5%ւfYhi]V0ȲsGtF +-wgZeɶQpE;7xf9YSTUWWrtamȪ+o^ AsԅwnvXq 8YCSqaHkeD\FNɥttVWx ^USvm;Fust5F8Gwc丢e$6/s]˃@gu< +eD!IFmN5?Vtl^oF[YslIS#u;Dp<9F 9=1jSqE٥cnf9i[SZNd95q uA d^x&4ͯ*{e3;do.dXۥN3 }mֲqznOiCYեӜt8MlRBA@ᜲDHyZidyk-%@#G{#}vOSL&-EmEK)XE+jwt7$(;ҩv.(">Fr0CF>Pwې5 g:C[QH^ODݦ#csڙ Zdqe\EywCd124lcN=u%ZiBB%Fg-8w= +KsX櫾5T7Ţ;b;o;@A$ ܸ:Z+s.}#2 ăq-kT$-&ᆘ#Ӝ>;V@9-IuumD@DDDA10|fTEpcQςb,BYA mtSkT&l83'ȸ.KE$F׶N&>7>^yqu*xb%MΒzJxM*Cs1UMˇb0 +A)^y%mzJ'Qҽбc]7pKv'bqe:V5`n7N--a`7WQ٩bVnj;=?V}]0kXZ06"c c! +m$WZsvF5U:dVffUSڝ+lueI0K6ns[Iz5tTYֹSSdᅭ᪚K eiVKW>45ބx80W#z%'6s^L-9`:vZWmO[SUu|Mst8rpN;2pr3ޣ.ns'>ܺcɒ($5љ1ؕ5hvi-u$4D <6G1qNztnU36Jђ#a{ \1W-uKj8.)׊GQ FHqkc-n' ]bHLM8?Q;o÷Ǟ  #pÀ#ȨN(3=)SG q7h51nZ[(MZˍs& m"vl0gO 5tRV;L7[ݤ#u:gov9Xd0$/xntK~Ӏaz5#diimvZG4ڶFB֬4.FJfs$a3ŀA 8rESӱZJ:Z:0@0Jg$톆[Wen:F,l[+it +')lI##cAƑW[i+uEKtl)|^O(61l[-(X-4ԑr uCKwz`w`Cp \]-yuJ1n29oi$4:#Y<;=, @ ,PiOPz4sChi9k lz.vZV-ϩ"F[,$@pnR}Zc o4:-Od13yfAlt XcKGcy22Z @}\=Gt3 8Y,@ɑΉivOtRV>kt(M[縳/-c-s !=A^|jtSQ ;RB72\Z2֝密dkTAO;"':HCCN恨7qEz{EBU$R\L_%xcuWV𽲚ӱ7V8 c99DDD@DDD@DDD@PljX2R +l|܆Ks;`%N.ffZ[(Ess퇖i#-@ASVZjjzk%QdO~ CAع[4NMKqOS$hޞ<{[>O^[CiK,54nujRnCUpK !#t?X' ۫k7Hy/ .cy\Zv WĖ;-kׁinp j[zdςL|;儷 ;dN컷rs/~ǻA".$*ݩcg'ZjEOT]3d"LOk 4 $ F ̽8@n-r;12eMxӐOop T>,Ux H,;O㧠!jۮ>: +#&@kaÛZ6n,VC)0U6zF4ŏtnvt-iveUtշHie=D(zuIӌ:y6)TV{[\6,0p㿞;Wz9lIp!8_Nt Oqj$oۥSssI"(^Ct9Ɯg8f,d2H[8/:pZT55-m U5tz+exCS75pÛu8ܭvݣG6Z4gvug?wނx45R%ω2Hf@A>fjyb9Q[>7t4Ӡj |BYedt7- \jpBեښVxPߤqƝΉMDivMqZyLƲ'Α5~#!lr'YLcWwNq|N̔rPS\ڙjN\HQ> rGYOFjVl9 z_\^rCps<2fOoSx[>P=Due-#dWAMoS^^ipZƷZ\70qWd}5EOn >'2p@IkqISMQQT'8kcLZ9^FHs7>Rӹ'ǵy.9'HGS\adA6'JIbs jhi.9ؕ]q4K}?Xӥܭ .õ  +Bڮvnd:4^띰=YmWNF+HdG3Y-hO,aK8#҆T]%L7KrƗt8)][jeӴ4ѽ{$h.8dHc98P<)POs1KXLjǴ89|:>As2&&;KWB\y7F[kp8qЃGICdsj[Qnllng yc*qHNX009f;i>> =m)DLt1yjk"xjO<%ćcg#sEE7ht59t1u75"mdqhM$t΍uFV[6QW3 (Y9L]m CECgn!uiם=W7W? S3tPFHHcA- +\EeΚZy$_腰5`ifG> >Mp*^\Kp]x{G\b" """ """ """ xPSP:e :t:|*3}LTl0SK]Jyp4a1e;Kg )q+c:t\|O -:-P6'QIJ\dh}VrvA'KIJ_ribĂYZi89Հა],{Z*eȆk/k2[V[{4I3 QH*e3v9wxiPi,6W$qHi|̒Y#\]Z^"\o6+i Nn1.f%uEO+EOZm?2Q1VCt?l4uS3j { q9Yv$vgSSSH⦁lu3T-GqV]tpӲA a s 4H̨*T /-֝-%rs͊ZɧHS#X4iƃ`m6׈U$MwcK:ush WBa|̐̕.q,Ӏ̍:g8*ՔuuWԵ(*cZd5 \]h[}f]"guV623,̤e+h&:AB֙q9 s@:F,04 ghsaq:n`4 p3H8YsEMEOuN9'9dIv;lLSp=K$TI,Hij.swqŸ9|;l2Fi娍^_&H;9ĖmACƎ,Y*ys+Z@9ځd0o'e5%EuUKQ 1sYlR;DLǡ2׸91y 1`+O Z Rdty]Zs}+-Ou4192r< oܣ)覧:Q5G!pkXwqwz [CIZM%MK饂XʖS!k'Al𝛲RH̎* =X߇w7|C-SG[KAnmmmLr,Xu`܀ ZN(sC#n_nIgNFFGLG߻/6 DT>lᩄ'[:ݧ/.:#c\t265긞:i4tw{ Hk[6\w8nضq}3զaMyxs ^tӟ\aL]oG[EJj]$QC/y=Rダ3lz-cM7cmׯ^eibs ugwǽ%? KRn3PRǭI'Z @lӒ3ЃQŵuv o29$| ],U2.ki]qI㌭HxJ%g"i,L22,C2d ٻUk-RWVp8W #Fc5TLH. ?w 4'aM3R +d4hp/l5v``= [ₚUM-[f,fynqpkIsp1e۪uE$"&#^@8xŒjZG,PM !|1TA~P;QNH's<S ѭ|dDDD@DDD@DDD@DDD@DDD@DDD@\ n->[ht:hӹ-ZcDc{[* UZXbk!du24\8B)捜oo1O7h^ѧPd?נ H|p3o惊K]4"jdp ٤F|spNJ*b!Gspl- cwp!7lj%`I) c\ H Z3e:8_7gi58G7k48y +[32)L蝠dj  m+Dhb:y9iAVd @DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DD="pcwmlׅ%Y;KGv}ut4=i"k.`cg:[=nGK biyAP}1f'j?lt3}+fiĿp=]IEVآ2 HwVF<OC.jk[{F=6ǒ}df79W/XuhW5;=..r<֬Qpn1P]s֨dbklϗ]lKu*{8Y?Cp]q#n]bߤ/3}E,9᪻ǍX*L ń1ۇg~\e [.t(>E?q'pt|e_S#4Q },W]lu5GDhh +750G,CHv0rspNhy|x' `=`O,O-N[Kb@@k|zuX{똓*^AL}F.3JuaςK+[{tgҿχ?Xj-a ѫ@vG'n/=Nhk}2%-4tLgsߗhQ.zHT 29\A;jAL:6vUFc'FN!8/X$5tO 2cƝ{wR^xÌ8򊖖fXi#{I$c}Orel$r]d@l,ڛ{]Mݒt\A \<ό-uޚcچ[E + `nvwW)F;|\na螟. =B~h" xǟWA~xZ\|3Gp{ͷS9=}4gv7DW&xWntUVXFe3ܹOB]Ҍ[tTtd'I.;bp`X#f@z_+S[kઢ a7{'ݕ)n'JOf\$mw1T2G42@9u௅d }Ƃ2>r}·[,j9+ 30J)=3vSHiƯ[dg)rr@LLzG?Ҷ6Bۄcb4{g%lX#ci+44E}#oMq38t얻ߥ.40PO#f§;6 e:gAqǞ06JYywy6v>![U3{ܳbIK:n\N@Q-”VTTU3W=,弑# +!Ֆ}mG=2.:Cݱ.. .\KW] $k\@8=V2*u T5vfgSt\äO-GƓޛz-l3 S =ѷQ) \%YQ;C,g<={{s9iֽ-踏Mp]y'[-> 3t/G׋u%ETkq8zOFq%qSǗI; n59˿T.%<[ΪAJ/el7Ih(n= ֪7QypFW|@iWY*m׆~E{;o fCΗ7V> =3zZq CZڗ:p%nwX'8Zru%\A퉦-r w՜wv-2MNVyϝ8"Tu ??W @Fz*y=Awh؂+׹9rS$n0wbVLC(xV5;.i{pte-) تڑ V ៊*p2wb:cO}DkM-Z5EВC[V~ki\ZS9qZM#>K\ywZ+ٝb8bs%aG<v;+Aն=Ìnl,?ex,`mЕv|GjL֍;6=:3yR[J^l)SZƵgQr>8`LqA;x&p, l:Vi<ɌX%%O`Uv]&[E2GZNVoUrp6Y^/s] TVGEWy+!.t :(L69)un3t71߾hc1iL.ΝP\4`N?jl͠5NT=)XKCx8̹93=H|?Cu<Zva`I)e7;rK'e3ϖVkEvrרw&=Zz(%2$w~*fzoukpj5KLNB]^GG@WClp4**{'xkeNH-sdnK +Z!s?iWwehkYܬ,F%rep=}E9Uu8dIH$j6MYj#bʉ`xg,mke` ~Ֆ8bnZ[2Ot6<`9v1V&;K|{:W] 6dxV! U IE0ڬycb?r,Daή#4$k|vcO'sI:O \Cv?yZb0r1m8K Xf2ע:Fkvu. Г1 >+D 8 }2܃kpS2i4Hq=zߒ89[:gܣj'Jуr;o6i]Q nr^Htv#poH1Li_٫12O7꺇r#5Z c̬%*9"dÿ wnS]QA3F|Z7M&Rҟl֍W0q܁kIՌk̒\ˊ_1s7GV]>Ivcy*R>1Z>K|zTtg:[+[a徔sQ_o|:7=~Ӓ3H'=wAðH~"vQ& Z^+S3ݘZF 8!T6gŢJ3#A9;CL <3zowߺ߭-\E،KpэW1oTG1csz:j'@bs +*T#fۤ~ݖlj.6Se 'G z$sKrUs# 5a$3VvKjx8h[R1J9ܓ v]$8k(1 +-9KWy_HUh$Q<`"Vq-(ۉ} 3G3^|:}cP {# Hӥy1ciskrq9,LAhcr2NST6B[ FBxRL$sm9z#e s@GPT#+RNع5.kt l 3JY:z-~ka.%z\2Hon V 4p3UeV56Ui[ ig\P>ǐPvKH uXCw +F2x䙚 Xjjccó7dTI6uTp̱yjque +;G M;$yR +Levpq,ӘM[S͊ǒHϭmZG(KwIRUS2ycZ +1@L0?8RYwֵ=g2vZHVU- ,ӑZX|(IwA ~*> 6> +ars #fŤ +ĮeW2'zm +wVS@9egǼ,g4,M<.c)Kņ+| ڥT2zZw@m3hO>"%H]Y2:]CE?>*N69++RN=I'4~k,tBCwM˚zRIqc#o^nV(O9vŮ$5r;Qv@#Qf5>^2F!k#9C:`,s#- ώ3Ty#z'm5Mf638#ݣuxVfe"6LҶFeEQEӻEpE>ÕRH[I_\BF$vXc! $ [֮+ y9kDgpT${ud'Eg]ǚ81#=jG[ĭ+˿Ј>.( Pfl8j9`/#N I$-f},̬BoSC*Ĝ-87xy| *rKs.v snVb< ˆ[z|bq88>${|3SO5C]!Xo|p|7c(W ei赎"ꦶHsU fv*~I-P@ Kd؜roA +zwDeoV{*Igd-8l(I9A,q*uUZq`\'4Pk~ 7rHi$wNH> E;T;Ryڔm +wZ7So?qDD-NGOd0[l4kxj YcϖV8:}Lͧdk٨cs+hq:-b0I;{fOxebssUi$E5R6jO$*dc[o[$`za'2.1BܐD˘dc%uf[huc>S+Xqa+Z7zp>9#?W4x4Z`Wʢ4X +>6TA-g;>〲gv1yAAOL-*xꂁl[zMb- Hn=u}Vcg } LL&L g+Onh`t{F M $org;V/n5Lay!=}%Zp-ogsy.Ƒ~B0L}{^nw%s\%׈6[!TÏ.%K۸OimT7W5ǤxFd[䠩1iKT 8*F?M9pbvX7n4N}ߩW[OB}~h9¿^q\XwG$.TlXzֻfx$+&G{D\?Ui>#*;gdO"C|u!qF_̪ +/Ry/2|(-zRiy4y.WQ %rG*Q-f޲f(e|Vio\ [q8- Ë6{S(Z sp0+=jWjWDmXla0 *rGELӸEp/qd-s["npA'vSзx>{eeLRTs0Z7^LOtxƦtϡ| p$dd +_ۮbE42 CྸD5(;/˗m0M##lzop= /g(aݽ1׻KO)̐D`+ZK-_[(rLKam^ԔO4E3P v?z6[%ֲ +3Y[+jfl871_Kœ9.y SUg-i8%ξ|{@KhnwE5[caVl=;e[|蛪.`OF'{oZz(I=nPp~-I}U[CA=[`>hXF|!,V/;qS3Cjl۪)= z?a;DX. hu.kdZ#e#Ҷ0`eF;_-vNl3XGC7@ +f$ek'+ܰCy54A1_i1w4R#5cpxx?@>8c8FTsc<8݌5uq^YRWn>n(ik;3 tXn4+m>\Gn❁Ѿb5v/WX})啭c}'p>.fQӴI~3ڽ);^\jZH$|ZoA5[oUkS5ŮcPvl/?F6,VZQ+\톃ޯ#T wK]^Ukc.iv /E\[K=_3kťc UѯA.z~/ ?-. 9 >=Py/F:=a0r^s-#lIx6;ښQSQA9ty ˎ:zc{*H*`H8:u*.苏lpx&朲wN".8;f?qTecKneO5E7sS<蚻xJ;T׾6r[ a=u/]WS8 V;=擞Rސx{_v:5c9CA|"!SJ RkcA<jhmKM=ΪsH2ָ%j|/ CTups6gg@(_H\T" ,ǧz==-y-RINO[(:Ns%LIÖ'PAKeV?E`Zz13->Zb'>nx^-i= +=A\=wȃGn;}TLpk+f MG;K~2iGD^A1o_5DUHsNsbzd[q-lCWXɋ[3aꨃˮvuwMӈj$d6ǂmuw**78c{rz^x׍cemYMwc9 l^RO}&x5:KHʹjK7).cK(..+Kie,̪1=jkAxn`*I Cz @G5/l}YZ5kv[O]5iVx,&] >X67;ƝǮuHz>%uƮKS-<}9ds^Ƨ8~M֕?ESóܡt#Pֺ7 jCn5jn@Μ|U5uƃ^eh*=\6hkN`9eE\CvZ8 e%tle\݂ʒp[nqv$qƲ)i%Wx4q㎸ ^)m qq:B{A ^)0D_p}uU]]u*$UT)IR07,ƐjQG,x#%;[4-qoypF +~ ;ƦڸW1 ~hF6AhkƲ_qUOc{Npgp:xFnQOuKԵ4R:fj4[ZkWh_ =TJg +eassէpWpJ))"|o+ x8Aۈ'X^'3}-1sÜItVz'7%nO,6c2 4r|ԕ}J{ QT30# zv ς.t0[}4p(Q)2蚩`3GpKxZ۔t!rtrTW\Np psԠ^O |gIi +zk $1<;.2:-,J[AC!]Klu4D1#XpWloZ;Sgj$Zyb7~u,h&̵rMfIS.y:'.ӓXM$o6:I0:N17 *vZm m#Cc3t)Np{yZ~NZ3X(#2 }8,an0[%--ok;9g;Tcv8=r-P[hig9%t#aT-tgS42AŸG};S9GlEI=$v&fnqP{uX𫡊cvhY7yicv8=r/Oh6_2vf/C;窑5T_|4p{yN~NP;4&{@iw[U}Sjkmu3, 댑{cv8=r +Vn58Yg3:d};S9G[l5}GQQ:N[F=ddltȣowEWU9ǐᡸKѝۇ[ďAI}D ~HHHh'HwQGkBO3$Jp8HӤxU\VYV%ч@A9eL*}R2f&c$A9-vCpvXG\Phfyyά:ss \hk=A,2 fx20˙dS:6Ӱj ]k< c| s9aԔUՓJA]$-]ö~!Sk, +Ka ^֖Nuj%thZ3K5sj!)0^F # +OÆ7H&T6jbdl'K@\汭$XzZ1q`AEnO)@{=s;t=߈\ේZtd0 Ü }ی\j*DWpPְǮ8ߜ;nq H:4Ta.`%d{U@DDD@DDD@DDE +9Ԉz ˜wDVM$c${kzv.=7F+}SSQ=#K<|=FxA5N#ڊ15E}tA1O02nU[WYTjctqcKX5Ig$8j +K૩c3;0#=8NKc'8w*G$N3RE72H12:*v0B)[@Gr)+cR9$&I̎ZZb-x_ƺ]K5]# 1=7z@w|`}-;Nl.Џ"<04X*WO#SǓd:\]#>b>oZmCiyӧ|`;lqe%5 +:Kp_̝ctznY2AUYgWVAW[oԲ>=##}Վ])%Դutk:vrzBp,ϕo}FkE{"mF51{l*VFn,tʶ s]ΔP3H::/_m66X"%`>~+f*gQkKj 2\v;g$^t k).:l5&i*{b>2 +\Wٝzl1cV^X ⃳ +:Zh# rh%:XH dE>AL [oNk Yj*.Lvp&C- c[nX(w94ndp0$g8AKM9XdP8-.oÈq*Q|04HZ6[zN+m.)eR O8" z1pÆ䜅%Ĵ5ə(ib>H,QrY~> PkU-Y@r{O_2]CH҉ˌc&@\;/|FnN4!{j5CgK,cz7ܬv;D-׀}J^SHrp{yvkedH*_4pvN]w;2oV\>jEL#7H˥EC\+(/䇿F [ -;Qjo1FʆX*$s#:4Uc N*6([K*4&iC ^ S_2I WB%lcA{220NGbZakꡝH!Ό;Ղ[A n1 +FGESO+X)HqưHv%( tu2SOCi-ĜTZNڸnn5qU2[(< +p`n!m^yqTۭʙ:AS #(_-ղ:K[+{)`{G鑣Hng'ARKpuk䨎6qU;d3k=P.f7cS]8'Tf6=hf< I餁= *n4θ;2fe$lܓ;gjHtMdp13U٬2o58;(uk)SQ+(AQa:PFN +vF^S3fʲƍ 8 Og9؝wSR2E -`k@hiu(TE3&0D4c=퍼+5M5o@ۋn6'Es\wPv;u[7{q6PDHG,s9:ӺtMQLcK$rW `|J%6!a L #uֺvӋsDq4$BS%:L>U'eo! OuDYN#01~-pM#(bųdY4vN;2vm}:fk'13=`ѹw!2 / GF⑮t$034dBi(uho*9g.qu8DxrIt cve yN\5wH"4T;k4j˚Cruqco[5մTuqKSC'*x\ik]3-KQ*9w\5Em%ֆt)%=kLQ 鈑u yZn:V:+{.4-Qa#{8zCWlK({dsg=Ih :Gt%LqWS=f{_%C6DhtT3vq(xBQԶ*)|Rx{50Aq97ifu5*iΨ0K$Xvؓ[OYKR#40%kj 8u+{lnl +Ft8Nt += J:g6<ӖZr6ͬ6:RZOl12 uq+VD +zHk\z ^h#<B|?[kQ\muzwSUca/8j55}-lKM 6GOt8:' 4 K9\ a5}5Š8k뤃=˟ᙤoIɤ[tPѝN 2B4KOXANj) ryI2 ܑ EL_Qq-vHA Z;|T7<2v;6:z^if|1X=FvHm][u%4kpܱqT>g"{^DZ Flu!mOtUIS]M TS f2NJ$ҙcjpZvoةŶ).5lCY4ZfZ4PƧvo"/rq?wU+jxOL &g-W95#P{.ft湾,ѣN@  +T]UQIm-lC:b61mˉ;w!%rnIUUvk6gCs0 cqk(e +:XZ #c}.z>-&e6-ާ_E[dgH)馔8sN(d*+^Xɢ19za>=+_[!B飦{=~OU̧ExZ .Jwǀ1kvOSneu݊ +i(4] kgG ~31vu5" b,$1I s z7'Ǡ$c۫*d {H ,7j k+P:@rZinq*"3۝b ӷR'O|˾o : C tT2Y0.ҴH:]mOSUMH3Qfit#c=ߵB_U-RiqX$SS]`qPpOc45tp2G9&PsƁ`.n}=TڇSWRD9u`z ^(X:9]8l]NCl[@xi_AIn!Cc?-cZdVXn}UVQYqUSU=1 $pUI>C\&k[ rN3v-Az64-{Nڇ*e?A$7I;CYQwѠ$wZ$oJ D@DDD@DDD@DDD@DDD@DDD@DD-Qݱu&"`| i9M(md2Nmd[V :1Ar쵲PLjFֶթr;,N,^<;u5Hd_{#'Ar}l4d/u ].;0v^wn3s:neeS!AɞiFm%iljtA㡞̞RPJs\:t:$(nۥ QxI@ΠX\ x||BwQ%±SRӴ^r땟)-eT^>q c44I$KCՕtUld7\й q#pᑐYTRJʛeɎe]_E,Oss~q!7\V\+@X!:-R䜓y-ۨI.bmKeʻFo0 KU|kDn{G99iH׼IPh3 u9iiOYUH0`{\<;xO@x~aGNۨAK}=pMKۅke !3ZoF3ޭ~n 3TX~oaq=$:9j諤k*~O9έݑu?~GS.ul5l/Liؒq/DTgAl(h=CBpbY–'cR41tzm0ڛ_D\o9\ ^)oCdK v_ 뀺j7.+YzٟM{]rz 躷Xx]M E;cu ^Z0F YmnmӖ Îm]~4Jtb'K*'_ŜS".QbӾzZZ0w@7N\r([l"nF+f~5{Z]p7[cq4:g#6K Fબ&KcsL`p{yN[b;S}gDo&!};VtMb;S}gDo&!};VtMb;S}gDo&!};VtMb;S}gDo&!};$Wu6UeDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDorIGmhWb#v"9'>ar=&S<uUL82cO|~|{}.cu+OvIYx{$@}~ҹjʚT3.?zAQre-fI_xO]MG U,g@>+F?馍9zKuj)~jVe#1MC B*Kc >|<ͧ ͢#2kۈꀞq`sرzO]XtZt,#?zԪʜR634c|g~9\ܴ9Fz,ޓmm.g>KC a=rzCwm]:?qA-K::$1zg.LJVۍPXq%|;[dCFퟔ>E7N! +GE>*Uu15H" ",s$/A_1zeQ1PIMi?MV3.-mMH3iIIG/DD6ܪ+F1~е[q[O8Ǒԯ?|Y=WNqWZ |mzl8Z1"". n2 u?09 {ן]O+L@8;?֛ڪJme ` ck,?sX{cKe N9+5 Ą$xwʊy^)؝7t[>JxhSr؝[zkDRq?tMp|;xZWgV@]EZ{ ch,%=1z{\CVi[ Ü6,|<>Knգ"r۰O-=' [pG;~LFIov! F% SW@moeu%PMz-x*)mu=SH1ϏpLjFrgCVtm7'uk $CPǘq'+覹hss\29/eK0Ά<<= _*I'~7CYҭ;ռ^c".B" h$ CTHKh='n m3$E 뿆/:j)xqʱp'4>Ӱegzx֜GY\hܹ4qW u+kTjgdo~l1ゲz:٫k?)=Cx3SJon%TN;VDF93 g9suD-(#\<ak񟤺ۗRI$1+̴isA . JʰyYOikpdyuNRpֺB_4Oa]1_QfLk)ϊWXO{0H|HW`' +?또A83ȕ{QmDD@DDD@DDƥ՗ +y]!>dz%|i[k'xâё ta]o*>}J #l>K^—fsFJGC~;ۏ2zZՏ+ՏlAK a.$p>(:G.9a? ~9zM\tt lntbGJHoi˝=C~-=c_uGsYI>]t4WpĮΈp{-DUS>)ZW^)%ڮL'r3}M};F3;[LEfpΏѭK8#N #yG:Lh$_^b|YD^1k]d0B|VԼ3֒Fi< +捲D~\%8Rqn?-"%dM7C\G}yQ]hNrKqs퐼MLZTZX +{7ڻ|uRF"; ࠩiIxu4en-2Xêq$Tn2,l΃q3Scun2H /*6G$5R Z|A^!S$I-'.SKM]>ȯ>^Ј"")d}ޅ9SNVk[sh |ս8]kJ[5dT>Ac#pwpv4%ˉ_IXcZ1绰+yfk QJkS<9l@#ߕT%\ &e[*\A Zu֗0#F$Zl|6;nz*N[ *;C'M o$wzȏjav͗T45; ̝ \͉4êvB&ݮhG;]ejh6v:Ӄl@ g;f"k8%w:t{psz`,+ĔىרE5t AatX:Ps^s5gqsW9XφQ.GZk9wJH67 u)v1[Q'llhp=B*'2oD!'$|7^Kd˝{>F# 2|=jMg Zjuᐟ<ޤ֕VJ +WS"pKZvnȈZhuiuvϘx}UUkw8TA7t'r; _e?mq/WZmab[e7/-VANZiNFRЧgtM##y p_'C57ֶgLV!;53#0U9q +uG`d~W*8tqt'ڕc']"e6k}5QR0׼8? j +tcB.qw|EpQzlڢw#o1RMe Hn_­ZWZԉ8֋hMX8lc"ڣcᎄR6;™4trK 3 =~Š'swkYѶv33/yu}Z_V]!$mCGȸzWp +3Gvy+^Q}әpdDD/6-wjsi'pb##o;մRl!~LpMʎ"bDK3}}Ont5f ozw a.JG]M=dNvpCWq\)e"(BF :;+VmY).N89Gѥ׉it?zщMU!k*&t˳JY*R ple'iXj9F69SI,,I8AxnOgo -]BT.1RgQV#566Ylqu5SI%G&JiL{RkXo;?'#Pݟ}}3R'$u QXUݎ5`7qx0w` +do|ԬkX45 him~DE1y .?o=mk@w#բScsZF\u_]\ivs)ctR78\0w_:SX/Oq4Ds4p,[L wmZM{(9g>ÿOúw42Ydo.wy[N&rYQ[4ml1"w`UlvU6y91m~TX)#gްSpu^ڝ.pH]j/^fs,+3PM#~TH21-SỄkIN*y8u4&t'=U撜=w!guP#scڲ6^LJ;-CtÞ?kޭf֜`p-xi Qx^ +G6~}$1Tgt>8É[};a'9.'X4nV6H \  +ATpSqvR֏c?M{EfRS$snֺvY3xOC+= K`e>$/xG3lD;$=˜]G-֪o.$Zn9$s-]T\K;KL#$ph^z=oImVl@~F3>{ttizO}Kxsi?w=M{^"=DXyD@DD{Z=pdm~{Ssm28X=v=>g4 AigCN!p,m<6[Nqz=دIUl?EV?$򛘞27D\[n{=$uoAFEFRcut3y?j۝tm{o~IJTO57R<~)>+gRTTtfFK8lb4g#;cF ZnC{~>o58ZuHmr.qqkG{,KiABe-qQ82|Oip_ +}Ziæ?x8""" (N,~!c)o>I&W;7c|tJzs3{Ay4*fOF>` z4 9Z9ʘ`q9k.1΄cnem j@!wmJo^uy -59<ب'pym#˧[[3!a)H'2WacKU잭!4hi r%&\pT9}6vs7ڽMk֌ +ָsh`x~VE2S1ߴ)V&cѤڨGl#3 g=D@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDEėlZ0KY~sX.pj $\/].4Ij4fpC rjc0KZHf]k-9] {d1<E +x]ӛuX㎮GڍMiN OC +2CK;[csu5hssc:\oih&*P \N4dm9 +qU$l:Hryql|Lq5P)'sGIӦ7U[5%5|FHH'8cZ q T\ŋi.jji,ݹg&'Y-O- eo6y'*wiA$n8terۢ Q[s[3LnadncRKqj5$5Z PUe` D#xcZ]{XuPOYHFiKDhFo"کkg8m*\s9i 7$=9y2W[/02X2F@sF._aII_qdS`cbi n?H{[YXZd1=˃X 2;%hy:SE/ZRÑ+Z$j8-*v@4~A$>MppΉyk48@${T] XYM֎* 1G9΍v49 ^ dCMJv܆:gL-kq+~_KtvO(:^އ=ApA6QA?0tw8)'Kq?6I8tV!{u\20@C5I ~oQ({mҵz8b|x˃#=z W:vsA_D[7bT40rvA, +n3k83e0?էKݍ,%QY/|Sg +ZER̡ Zcr=g`lwA2q;S ZXllks4d[oŖJz 1cK NB Q*F:nBY[c2/{Hh-.T]*THi뭒29c>ShKĜWi\(b}G]4ZXFt9ۨ]d[?U7Mc|}JVs0ZDyjxdLr=뤝س .0,fID. A࿗w\'jzwEKDkҗT4no؍EDE;ecV{E|RF!潍sDwΝtb[W02E6]u7W!CDQEVvX,P6]a{d$gF4m|;^-W^fHykKulG]"6w]ym)Dz6AyRp:jk_UGK+5*^^ Z =Бٮ8k:KᵱR2#5̐; 2FH3㒿QZ(к`z 8Ӓ]> Dxk40ֱO\< `۽jG_4F[j*#lɦ#\7, #!zB *ilLXΩpgj|./-d:$+>.w5k:5ӍZvpG,|7'\9-Zu\` +׼PT7Sn3%dJv''~W66P4sƼ5A.6"IiU2g`{sAk,\5tw +fh -$sX3 vK AVŴюrPg8u -Ko4SuC XKOc % VZwv˲D/ʖmU kOycnVˆM:pV䆲8\rqHD9֊A#9rDi8NvZ'k4Q2!cZ5''J" """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ ".jizڊ1J'J=#.:TZ_CS`yunݧEZ=E-z:GVG;^ep483VJY$)&+ #c2"" """ ""(]Wq/2[gӇ7?K]Â@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@^on_ UZ`Tsu4GHW.j\;sjeYiBZ֒< : Q]WYVPS#n2QٜȜ3[QY|9O4VkkLf/m1nrL-MT𭚮CO#c$8H]8pspMY %<5MT$4äq.p%=eWÎ2UIP;ISZ8`x{fngxIٌq[.Q˝ݔ7ln77ٻ#iӧVut9Ͻ]p[67ki5H.9; ;/qOPOKD[ɤlّ> +VgqYi#V55e|8w1٭emF0pXtGx:fԑTKRQIUW-Ast L ob;u4 +VtqL̸/>7bJg ]sAAQ>jYةkd e֬3Q9'O3ۮ*YjnH0FF +%EkggjGARk]Pd,89]e%]m$Vy)hdr:Rr5Tz]VؙlZX5bֿp*afU*i$Pr[qݪ)}qu_ 9scw: Mcmx.h{vI@.o)^01s\N䓾IVxrSMU TRH%Y4^ÝqX[wkeSo-G[C;leu!++ [juur@T2 .޵odW]Mj=.匁8i : N&}#EMgTU4| K[䃸5}-]E5hE6I|l:@88ԏbG9DpĠ,0ܜ _mqmm[Cs[`X̳]hh KIޗyQgyH7߾X6ρ )L;;\\:Gt᫔{%5uM3f\.رA u>!jA]YhXr;p" """ """ """ [?eNLnNq +q¡).zj:[i%3Cdkf2֝v]"|ʸbn$h2KH ~ վIGdTPw^#k3w|6 ߋ~xj i3HCrH;Z9Wp_R9N05s]vpz;]Gpƞ9Z(mKx:CH bׇxhD˅Top qc@|qkT4L9ѓSsMv,]E?W/m>-ɏ$ 8zv򩾈|ɾGCl;yxd(m\_mggt99p> tk. uA>5նX+ˋ]5ť~4ښ@|2xwmSm-xtEK2F5B}vTTrF:~os)mgm i&,nkqkqpO LնИ!x-sItgI1rN] +"" """ """ """ """ +]#p絧U.qq9%t7$辵ֳEӣYܘE`辵:'F<辵ֳDǓrcֳs~PnLs~Nt_Z +MɎt_Z ΋YCtcɹ1΋Y9}k?X(tNy7&9}k?X':/gя&:/gs\2 +m\ynv-ʖeb$piCXsʱpg3s~Ptc;辵ֳB@;Ǔrcֳs~PnLs~Nt_Z +MɎt_Z ΋YCtcɹ1΋Y9}k?X(tNy7&9}k?X':/gя&:/gE`:1ܘE`75'Ӣtcɹ4ȉtLqZ +y"Pik\0F˾ZV\2 gV6H25N^Zw!6@o]\NݺK|a4a> e47eFXXz6* id =AͫQ!g8תls?'l([264uPaIbDD^]~t#f-k`uId qਪ" """ """ "*^t~z[W u@DDD@DDkc\Ɠ +Ag&/gLPEs"L_T ɋ^rb~NL_T +Lȳ3Brb~WfE3B2,LP虑g&/gLPD̋91}S?T'&/gz&dYɋ\ֆ4<&d`TPYɋ91}S?T+\ȳ3Brb~WfE3B2,LP虑g&/gLPD̋91}S?T'&/gz&dYɋ91}S?T+3"L_T ɋ^rb~UlQh>`+3 " """ """ -]Y}TѺfEKC=Kq1 oj㮤x_ ݏp\o_ YTyEtQ CQaj ,:84 ` yU~.\)7wvF`]o`٨<y#w!BJ9%vﵤ=1D]Mpe5GC,co|ny|*g(袤' %8Ux{3Œ=?M{ ٣vqpKeIjEUX<0>'8–ZU +맦c˔S0IOsn""" """ """ """ """ """ """ """ """ """ "(*e{sG t&pEΗ9cX9cX:_ϓrX UDsNtX)џ&(tX)Η:3ܗEΗ9cXF|9cX:_ϓr]G:_KbnKKb~S>MtQ~S/?tgɹ.#/?sN7%DsNtX)џ&(tX)Η:3ܗEΗ9cXF|9cX:_ϓr]G:_KbnKKb~S>MtQ~S/?tgɹ.#/?sN7%DsUl9S>MdVlk*šB)aY;wsFޯXj59cXkx`eCPA'Gôg8Vw 4L^i]n]l0Ýs܃KL,9[U;srcqg@6Vq)6B=f* +IPXd;X[pio>t{{Z]rk.kNv'1>gB4j-h`#`<! `6Le$a-_^)cw1PZڠXiA;PTP\p 5qSK_#  +45nKqTZ*u22eqn3#9d.:o0 qԜX~9A%CF.v~T5L^sZ ݣ捦.R<1Νဲ:xC767\ӌdgS $Vg[,{$2D?GQ?#d+׆{""" ""ג)]i>El"3`~ "E򘆯`~ "Do&!"vඑ7Ɉj/i1-Mb/i1'`~ i}`~ "Do&!"vඑ7Ɉj/i1-Mb/i1'`~ i}`~ "Do&!"vඑ7Ɉj/i1-Mb/i1'`~ i}`~ "Do&!"vඑ7Ɉj/i1-Mb/i1'`~ i}`~ "Do&!"hbiq+e}DDD@DDD@DDF4u.8YQQ4\ډ=Mn4e5'Ē$.FnzHOm% )i*|$v$0d{5||?6{S Att|t`dwZgH#z4eq̫)j`h RWm-ƽ6gt K݋NAn[]i5,3n5R2G6!wu2d9ȼ[numdϤi ;)tˤsZQ?+,4I,+2־YY{Vq iNqq.$ $rY݈o0s~$ 5c叴^mWtw#<;v9\mDI Uw)5mkdvq㎽GNC@8~$M,#12FF4i'rF2CEQq}Kð@fA%mTTf5758;/>I#e'Oq:u4I9 c,odj+xz[W]Ye(g@$pV[onNiRTI ?KZ'mR_e#og)ұ[M%CwC<˄NNoh[ka4|rS}䜓sY?v}|+g[ENuEMTc:5Hpp7QUG.)9}Te1F6)/ϑSX u-Ű6.h1#Zv;;u$WILuGj=0c8/wAX;|>GN/ϑSct5%;TQ5GNd]Q>sTK;dqa=Qݾ_e#og)ұ(|>GN/ϑSct$QGv}|❾_e#JH,;|>GNБEY?v}|+";,:V7BEwog)Y?tn(/ϑSX Qݾ_e#og)ұ(|>GN/ϑSct$QGv}|3kqNАEF:UɡB)?lXX痒q2p>Ҳ+&k04]Џ%ݖ7#H{Zw#|GUL4u2y  |ǍO3dp9ۂ m`?C,cѵ$oQN?+:A96Xo,FNpF3ޑC 1 `ݶ>$8ݥy'ׂN>)=ɶ }V8s#i#1 dmDo8kzǻVSl `X!@ D' +)1i56Pe5m䬞9pl?%lthf6;`),+LՒNGO"*&)1GW)1GW u@DDD@DD%ɍ|Ek&2L;>gR(ղmw`g %?D/ϙK3"ձ݂_i3'`g +Ecl#cI%?D/ϙK3"ձ݂_i3'`g +Ecl#>gN/ϙ'VGv }|_i3)NL;>gR([a%?v }|Q:6;K3LHulmw`g %?D/ϙK3"ձ݂_i3'`g +Ecl#>gN/ϙ'VGv }|_i3)NL;>gR([a%?hH"ulmZ:4""" """ ""-inPCC-]M-hQL kɩ7Y1SidQF1 kZ:@@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DD%lq,:[ᲒPD,ٟpN?}`Em|3gsgpX6gsgpX6gsgpX6gsgpX6gsgpX6gsgpX6gsgpX6gsgpX6gsgpX6gsgpX6gsgpX6gsgpX6gsgpX6gsgpX6gsgpX6gsgpX6gsgpX6gsg[Y0 "D_e408t#*G=DPB)?lXXjdm?d A+-F=sK]\XàfRK$9=@m6=c\:(ƖA$;f;K[Yi!s&N1XܲnUHdcpϒm/{dLH،I,sYv{Ƒs ue;u5hsA2[gH]llhNsl9m: l5la8NN + n$6|H "" """ """ """ """ """ ^^3DE"PѣńD]LSb?دVSb?د^"" +MEb".숈&)1GW)1GW u@DDD@DD"havDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DD+Ք+׆{""" ""Sjz4~ذ"" """ """ """ """ """ """ """ """ "" GG=DDPB)?lXDEݑ?#e?#"(ڄ^,""Ȉbt~zt~zwQD@DDD@PmB/FwdDDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDDA1O?bYO?bxg" """ (E6G""" """ """ """ """ """ """ """ """ ^^3DE"PѣńD]LSb?دVSb?د^"" +MEb".숈&)1GW)1GW u@DDD@DD"havDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DD+Ք+׆{""" ""SkFJJ6-/ϙK3}|jL;>gMbZ>gN/ϙ}|-/ϙK3_&%kK3L7ɉjL;>gMbZ>gN/ϙ}|-/ϙK3_&%kK3L7ɉjL;>gMbZ>gN/ϙ}|-/ϙK3_&%kK3L7ɉjL;>gMbZ>gN/ϙ}|-/ϙK3_&%kK3L7ɉjL;>gMbZ>gUms@&1-G U^It@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@E׿ 8a}Ro郎A 0qH?=*^`{;UJ/;)'׿ w_+Lw{RO郎A qW(V8^⯪Q|0qH??;)'=_T[`Lw{ROg0{E׿ 8`}Ro郎A 0qH?=*^`{;UJ/;)'׿ w_+Lw{RO郎A qW(V8^⯪Q|0qH??;)'=_T[`Lw{ROg0{E׿ 8`}Ro郎A 0qH?=*^`{;UJ/;)'׿ w_+Lw{RO郎A qW(V8^⯪Q|0qH??;)'=_T[`Lw{ROg0{E׿ 8`p舾""" """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """Y_l@$ycwhqdS7p-eT5ábi·zx\C#x*@/aC%;]c4b3iffF&;5z/ Z8.ĮC1|rژ] hv +иM?Aͨ}8I \jyIQw8.0-!=okDqϊ֪x<5mHzI[p᭓l;u{ԃd^ ?PI e1 ㋖ #%81ڼwtvW OQg u s`q#b2#V4p7 z5]ڮ-itO:M$φH; +"\5qs!RT8 q Ϟ@$a"x\!|eƪ6USY pFX GUS_MqLɒ=HcRM&lsG#dco$5q޽:Ö} QM-D`g0+ـ׽ GxK**+*JJA $XGOqcu)9ɐqώ3.Wv|VO"" '7^ Ų9 S8Fr=I#wq4:9}?ќcܳh5Y.8ֆtUp(g):G!o1:vKvg;#l]^uEWSATʪi#9d؍‘#cYUƽY#sNZ>.}9šI%˟yEtϥcp˚я wqKZ% tB)]/~ɿ-`Lr[[O/>KӼf]A ;u/OM|= Kas[d}^h8됧 *>^Ic-ssRi?PhnHR7)] (c%-:\dБ)N/epʰFӻgGI Ĭ~7/6[M}uQacq;/$>jioJ5{m/\eB=l^- +SG#cHq[KJidg4Y\'rI=J]9O~bchIy&#' ;.|C4[$XrXc4|<גQq_R6p`c bG#{r8J3K>ޫfzf&2)1q#mÚGT7[ivϬ:i2<6 +qMFi-תZsCPg;}GAJiavʹK7$璧Jح|.ϔR"/C 5eUZ:#I|O,8XQ][*UQsY<D@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDEmܮAl֘4t䝆)ix[aMaFƌ:@ۅjboP7ai;gtc+ZuQagC!au4l +K}]]+*u5gG_ dlHӒ5B^?g꫗em|﨩G3].1X.KZkD$P{ kCK LpEeEpQܛjED7icZצ~(yVQ)f^\SAnz,Qj(^s'ty&C;66u&Ly pË-uն~hx&|{Aէr?m7Wڮ{mUAN9n#Sp9OOcQ oh Vޟ3]-) plj{\f)(cU?DP}׭z?p%ŖxrlNxZk)[~-Q[8Z[7ۜ~c\ӥ[#Zq> E]BaFdA+F i9 =},_Rbx!otKbIG|yI*H؛4Ixic\k/;r\( VL0a_H{֓䟀riKF"B*ctYO%V롌k@ pÆ*)]ʖ +08)@9i I\2Ne\kmuMI;vA!c吵k<]ĆOn nsL-*[ʒ-ªT2g I˳m L.^t 6I@kڹ\pA*tsqsIsrI*̷׫ۮ5t. kr@nYi㯖XȆ3[]1e#r  pQRNtG{|z(N=6tQcook17*.fL|@;zڻKkf޴<;ȈZlW `TDזs  p;x4A IQXk}T[ˀ7n$"p\.n/0>OJ*;144?QN|s+[ô5mW(%r\9mq1FME3n᪫ z7n 'ᅹpqGL[)f3R: 얹a#d&m4G xݕPҺvFp #x.9"rL`DEMbno"j5Hp%kHk0G@\myP*L$7Zt Á|fiY!J +jcOF(VV qN0UKu (lܻ{h䢚Ogltjm\&7K<]lVR M{|+g~l@:; 쎊7&7~Qo" )&sq,Gӳ#tyxy"DGdȈnfnW:H(_ xly^6t ~*R 3UWM<2D٠,l9Ӏ}8Yq-Ef\)J\i%5@ 8CA|swhTTuP6/*9y|dôgv;0bP+xNOY3D0f $ߤF?uR CĠkH#c8&bQ*xNM+jځOMs6WLZYrr~*wٝCQ8s8`7WɶP÷w]>e lõNM 3Kµ_7x*l=kxk#=<`y2v 'g߅ tndDC L0ϿQ8=.mq<*kcpmEwx#tt+Mt\j*!A1Hi' C[SA$RJbt> !`Sot-S-At18<9;zsY(ED,l=jӪ'4.)]v $l\ssH/tgQ˴'awKEA3OkOq CgDbrM"""" """ """ """ """ """ """ """ """ "4BۉC#9׮Eg}!DfiÎ g30G۳[]-cgF^HhsH۫tPTֺ:Q>YH jq8mp!0D8Ӓ<20O_2zg<4D7J>Kv*{h4Zdx:Z>ep4娷[ݛua{#k<+7'>/;xri맭uVi9M#h_׺N   Z7:I8=BMF+ZG2gmLTaI8o%œ 7[S*)cN*,]=4 F"@6hρ9i-=6(9 i ^7TqUl5u1N cEXӇ0l A.1<ȈMQN؝Q $I=FA܃" ",A4̕E$sZHcrI |HA=8g̑ ў; +@DW&棔HvfV37 wk(xwthujJJFp=8pꖎ8Kx1sWT4lh4 +MT>ViQf'8ƣd] ,yu\b<<zyaq9t0륰X)iLg6ffykc̖=NGEp5jE'hs9Y0V6vFmPq=bd:#t̉FӒ00H+T닭3mhm/qO-'|WmvKwݩH.%sO.|;cMY)3ZR'9.S ni9ӦsAp6Y^d͚9xՇ.ݸUlW5T51U[S5㤌avsmnGCi^c2uM;&sSKp8q"0\(lVKӭ)'Klw<1m;gcEUqE֦s40'::zx'ֆH$-&+ l-אjõ l+0/TJTGOouK**awt< G$`eŸ  ZtsSM48ccfSDɦhCC;9;g*: +)dBƐu=nvHLxv[=2B+Qڞd`D;Oup'dXm\sDʛD AK9y #Vr.Dr&ȏ?|:c=6꾞TKG3ISilecZ 9/c Q5PCkkqU9jNH^ a qց.'EK#X%[qxeShcJ@jῑ>eFwZwT=4 ˂5d n[lKv 4u̥l45 ! K]` $n8+\/K`[8̷On*HhcF'q2|˳ǣpGlr̆Yc; 02O*WRXbf.GT=L[]T1#Soٌ`Y\,w;}$Nfp\lhx'+ԯ.YKd o5&+dfJdn@4CIw bܯ4 +5L2V 8;I!8Ml]ek//U[gd76, Fs wبU Uuh"ĺfIbz EpSn}KtUs #1v, w ]W;m& a7; MQvF\AWYMhY u&jqo'\l@@ss{|-$u+Zm53\LN7K + U_i3mg2 +wI̍505`I=6ʛev˖E9+]|2H(ʗ .q9z5}τ(LQSNRE&׵kwoWtg {t +pv_Ne՞IcHҗ +p}t]NdHՒCMe"<+-=re3*9|56;K~8'hq { [uT,Mcv5gD 10E%ö:!+sX^#t>GidqeqnI kT7}t63b =} 6 +.Unp ̺!iRU#_CYo ̚H{)Wl]{}׿8[e~#$0gc$ׅ+8B uE-K,,q uR/YDYZJ:TQ% zl6,$d"qձ4`0V5)s3>]y k++hK)5ՠ?E-+*é(eOi%yR>)$Os4nG{Svk޺ cw9 ʶә>ҷ?Js4U,$; X%g>>ѽIE G.@>80\kmuMI;vA!c吤q/:I]$5m\.8-3},^8˧QZx.zgdu'%-Hv𜇅:-#|e+2?yի;+-ueM®Z䨨|8>V|3ㇰzEGQ.vu?g)#ϐ\Ex~Ml.4NnI ok6nUtBO\A3su\q59,HAFAV[v>_k'-?X?^0py{^qi,͑ed`wzf+Op@7rrpw9+?]AXǯ'$*aYČB & +@ƥJs," """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ """ڴ۪.J[uC*l1p58d5Qzwz6ẃo^(s|taqǨ?k?>t V'O:taZ=q@\"L:v6o;tV6WC #SN[ӆfQmttKl֨{Ed5&-ȞYKݚybo"2W̸T^\F +;LW)r6-v:;<;oAnpMe1·2G&WS?K5ÕDEс׆G,TkD,~j,Z؜Dec/*Ev%^nP[힎m55SLq?2v ;-ƾ +*${dv3@|V-q1<R]G/4TOM]<179~E.9`DEAu^8V2]*KiٙfqU?C`a'"G24/讚Zɲ}Ai$l 9Դs彑#-tv^$槠ԕ4S3wAp uZ3 Z6$DE\Gt; 8.lY l;8kFB? ((ԙ:l/9E.#^$RYjx ++{km;j stK|H +,[6h;8ij5f%"" """ ""I.3c\=\qfx*z1I bCUPN=;7#^DvkߣUڊQ2ie#/FAz@_5[s-ºwT43ǂut. FvK]eq8iØ:d>Mծa#9{[s=l9k4A {~x|Guv +)S,L̓`;>X\w[8WH%ܷh= Ţڙ LLS.yw1w%{(x:x]AUQCCJ]OTpyL{S~!uۄÇ}==E<^2$/sG v?+n@8zF}E-M;Fcws\f#IzP +lmʍkS\>+ՃFzDq'ISkAGqƆGg)e7-żO\wlv5zBVX}fs3.DDzt;p*wAq??igx*m/-#fhsv9Ɯ~V^5#GݮvTxRҊc̷@hTwWoumIe,m1ܰrCs~kRrOKU[S5=?F"I\GvIbY;Dr\}|CY޹A>Ͼ!\׮{w^3xE+= 7 ؠs{uE3qsuwG>W[L<<~/U]ؠfjӜco'fj> i`5wJaɖ=K2u #ߟ1p+wKnʗ۪ak;tlYb 67s% :y~6\3"7Iϑu9$^/X=[mF:sudP*xxT[er)sKC]P@tR?ON +Cׇ[ilQ-UQŀf@Kt=\7G'uUNce&`H9$ҳ'kcsr< +_Ý5tD]܄D@DDD@DDDA+AtMr |qqr\.W:3Zx]+p{CpjO{ONR"9PDDh(jJzK\&[ -WS1J8:w\B,ڕxXiw 㭥e ur+eֺZۍLU2Y]Zȕk yiD@],>+]DB=?bQfխŦ;;oKKK'2T/5GBƜ|BĆ~yկYW|=*xk}Op2WM+Nq$XFD@Yk*mUO%=D.H +ˆ=M|iMce-fq>̂cق\:Էs5U8cS4y6z"!"*JUv[},x~zJMg_0^rRg3 o@ƕTτVp'8GY$s\8zUjL$mDDZdDDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDD@DDQn1۾kݺREsΔGn)Qn1۾iJA1۾io:REsΔGn)Qn1۾iJA1۾io:REsΔGn)Qn1۾iJA1۾io:REsΔGn)Qn1۾iJA1۾io:REsΔGn)Qn1۾iJA1۾io:REsΔGn)Qn1۾iJA1۾io:R7qOn[6H&ek*E qe,q$lxI8^*)*)LS'Ә23hppi`+Yl:VX4^0wn:-\>Rۨl4lhlļ$5g i>KkX"Qvn ^ƹsEh%=n|$09 d;-2j m<1g)qps^;r3r*u7N̼t#K^g8!|9>G вFmu¢8D'<Z5g#ZU3U GjL;qn8:qX9 Io.*:JhdQᑙLK.N䫥z-씢}` ƭ#f ðEx}TTPVGLWjd0O:xgFa(IË_Eڣ>Md)tmU%43*T sp)藞"oSSA`؋F;!@!dmRpD|TFǻ\T/vq W•2&/R$X%ҺtX0w-/Ν8;g8%Dž+hc"jc>>gNZ8'udMQ5PIK!dn9~F ѱsKrvn4A5Sۥq9\+ ʮ#pOK}TэE^@=HJ& +i6IZ\4700va [olRNYS\TpIhϻ✍ɸV)o顂0L\9zAẾn 2:8(POovi<ծ kW\j lNuItaX19|~em|b_~7) +Z丂H$8h5sJJ +DWrcHA 0r0JA]E3B?]D1k;8qkiqLEoo&!kCW8OU"N'ya;|X~J@yqOIWR٢JxKt@n6'pV4tu +8jd5LƖ]XܐN=&qU:ʺD1OU,3ܟ0:OQh ύCӭ惑# %m4kq5,}74[ nܡةs { }Hj ʖeGY%Hc$gB`NKt >X8dpH&ևH[Z֓R<=/bocZ%{ '4 E=P: +{ /E`gUISL&K"ӣ ա3r#~mCG+n&8F\4CS_%lT4UR>ʔl] wX+x8)s%j˥kqx [.*UG=% +WlB٦ÆSpZ_nvSSԇr.KN֐FG7%t WU>KYMap;3-|[hc94#!^Ssrq] |-?%iiac @Iz 5ޏ(//^, FY;aqq *PVۨl'g5Ѹa@@#<^{G# k*b>6ᥤisxݣ+^5r5lOMQ1ávO$,r2]#4kdhi i@#crFg{-xS^ftbtvw=MuWH|T rW5Lh)mG5 bCb^UF6S,nujY!> + /Subtype /Form + /Resources << /XObject << /X1 375 0 R >> + /ColorSpace << /C1 374 0 R >> + >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +0.998950 -0.045809 0.045809 0.998950 931.971619 390.002716 cm +0.000000 204.544342 m +92.347031 204.544342 l +92.347031 4.019806 l +0.000000 4.019806 l +0.000000 204.544342 l +h +W +n +q +92.347031 0.000000 0.000000 657.731812 -0.000000 -453.109680 cm +/X1 Do +Q +n +Q + +endstream +endobj + +378 0 obj + 257 +endobj + +379 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 380 0 R + /Height 468 + /Width 262 + /ColorSpace /DeviceGray + /Filter [ /FlateDecode ] + >> +stream +x7ҭ~c6lm}7ugEHpثPHLIBJed?CP?/CΧҠֵ\0^".9H#\N"ǥ@Ɂ%Ʀm6hH2p_c^P9Gs DMKmiJ_@oy %)jap9XTtFN?m:/oƛo)oi!Q61 /&PA\/Cf%@N_ Hd~ͷoQD9 L<#T# pyICHVidRQ A;h#t;|F;wcvU +Fj5 r\Dd6 >DUg.ƥi^I{7 EP-9X̀Z3 V+h~TG@g 7.E!5zC:/|P '~8 rR X##F%x)0epA8_Cp˗~Y1Apr.#H@B0 !uPFI`H,*Fg/tG!&̙' +"+BhHʐbyVCf"`N0"0\{P{p>JM;~cpիW?_C\#$GQpB&`F Cel f$(E'D dY`½\(臗+v=$ j׮_v*ԃX)\vÅ 9|N +Z!@L rAaKCa<"ͷh@+ pSq3@ n~zSjB)@^4gAB + BΠGJ$F!D`D98O`.ӽ׮1 >ug#>\Y>T!rgx ʰ8Sd#PBG1U4,\*_xـ1j:C? ޽P* o2C\9#3BIf!`1 ;%42El`,%pkx>PR(_|_KJ- 8@ eJ ՀN:h!6 5bAD`4 "C*<XX~WYnU~ΠW_  rBp#oBPcv2H̄h `D`0 tdAEX/uuCqЖ.59{/_?믿1 +҇_?|HCx 1ʌQfԈ /545gSQ##N (D k^1?.]zX7]f2^k'C="%-@7~/Cx1$/ʠ`8w$XXp0i!@ +Ńpu`<0qMh;|GYn޺T|Èc|Od(z84m`2ЃlX U9#`' rb+]ի,4?2B惻wNR +d3F%B `f +&J"rK)^CB>\*`q˃7_9!  $p$|!ܻo{3&m{9@-W{䀡C+k$`NP \?2^ӛo10/o iDD@M/%e2`Ũˏ +x)bSO9pr%Ƃi@&>uc!4D)A'o[wC߹bB~D$$"*jJMX%@ )9(+si`{ LE! #zA: A +GPya$ cEI<JXU !,4b +, +_ ᧟fACM9`|VThIȌ( JD0혙!0h4޻2'OA Mu6L_(0b ? +Ct8=Vp! ^ObZR,Q>ijg÷_Cu <\10W!a4wyɍ2{L|(( hID,' %N2$xTs(>yCogcY,Qe +. +OCJ}b " E +KZG%RALAf(h d.d@65o~טˮc^a 1;USpא2$oȐ$? dyӐ +ó<n|r$4lă3SX~.f%p84$rYcC74@.!a"0VIh`R|q'sw7c8Yb +=}|`<}e/"yLlXT"rkQ@(?ďt7hkf +^w\ ?b x( 150rUA3BY@teq"7KY8K&!n gL:$)I@ǐLAa651=vJ6dN|Y-Pɗ6GskQGg-p U{Y%3i` ?b ywP,0SeMa]m#,( % +C@H8l&a Gw!ijYXyd Y)czAԍL ᗟ~GYw4p4Q8z֝Z846Gop@(#I" +@#\Įa1%)ૻ+?^&#5 E|ً#B$ء^G2kFI1BH2@O_fɔϔy,}EÔ8BB(BnϞi( dZtN (U +M!tT#~X~ZDgy|-- l]y96h)IFF2U0tҜgl$zj1suȺPiW-` /_<>gI0p>K],o}ƹ-,gl!! 囡 !(ŕR"BBd)j¦E'Ъ@llGYVɌ=gpr w`~(m&@dHl!m:[d%,|Q?X#wJ4@5: (UDR,&w3/nw} w]3f67k\$Atrr +b YF@\aQ+CLp`k #}N 5#XxWˌG|@; c(3.5I=ucɋƂ%O%LX'(^fFB|вI/h {kX-d3Jȡp "Stґb ! ƕ'F;N^ir7Sd[pFPM!}]XrxLt%x5.[{_nJpx?=܎8ÂHKRT'C봓0k,Fa$u`w[3b#,Έ7GQwqz.N aE Tߌ;PR*Uْm -k؂3B[@;#q,v5>X]m1A A쓁H3;rHc b r|bd`!d3,.3#f,0#`A[`A[pq?M Rv;`<Gv_pP3c;k ^{jnA2Md()6  0V=+#gbTX`G~)\{JT4\!q5,` }W.3#`3#FⲀ- )"{P^GDT#;@ +ynWC,.pĽpbA#f^('KyYHRbK/$zPHKF!iEeb _|ΌX8;#G` یM[;,TK@% וJlfļVF?u/,-^Нb[,|#eQk^S҄lmh[e@8BAa21hb<:P+ {7^ɂ3B3XYhYU61@]#J 0Mֺ<6\W"_d 3b (xezP,]PQ8G#AVʺDdr@?:‚WG8ܜF` a Ό(N. ͂,h یh(#R=bVJ!J G{XRQ)! BXF) m!v ؂#d2OStAu+%APYOa+?u;u|'l[0ewbה8⋅u]P B5c\1N'-Zd"Z7_8^BB9qA|m[ xuBQ}>?$D1]q^i(\Mp׿.,8#>{Y])1@ίDшʥQ-QZIBTET FB#l\_^|u]=3GWq/ČxӋy 6TֈMޖ .X@)8I-EQj)1X,|GJX`tAj,)1huM@r%lë$025DFIalA!AA cBvM'i܎ڂnǰPN$؈h}qHVNnMS%$.R4IX)NXɂ-fF\:I,` :_?눱.` YD[1B +aWS73QH~{[]My17p5 RY` 60`7gek}ZA +8Ή*+p`YXϼ`k\MOt5gu0Z"Vw2JBA$gWr >Rb ϝ,\:g v-H蒑(CWUsdODS(aR@\car.7X8E,0#p~XPt/4ЀCc*@r(&9D(Ib\N4LehdȌAW3B[x'9' cB9Y̖A=f-#ͪWEÃ( +cK!3Bd.@[t#v\X1LKԑ*(P%26uZ/B"p o#pc 81,Ԍ,[p\MaGFIa. [_cf#> +&Dq;2#x{L#> `-[Տ2uj#In^BG  >R1 ؂hwFK4V}yPiɌ*# Onä8`2#%X`FlGʰbE g/9`y IdDt;2#ۑ{ƌw80'Ms#Ը`rs3p@ zi"X`Fjru5,\lPb JNQҜ i(7ఴI`l{pLX8EB#`lAER +W##)Z$.U +mOE3Qn#H@-p,d]8_O c]\MyΌh[.LPG@* ,6LN[Js>e eօ*10!xe]3JfD +m^MD7n +kY-lAZ71]9uS9*2,i|{]XȌ8ACXx]k?9Sf R\ΚP:YB SfCSG"Msh_܎Nl9[pFv/_j5m`9-tR`i`⯍x܎\[7Ч~-\u,` ێ=##% D"mH>qĚi[rQLX薦f (Ց|q/pd͌89!n8u;~zD &;.."!4SR2KE׺ER@,8_u d8pW! qНCXQXe;#`Ba~aƨ6pЯ# S g.&D!w@NX3eb#%TI +Mގ-4 lwb,t|Ȅ!FKTX\™ԃ墉{r&$ ƌa](B'Y Wq5MpWeW +"XNvǼH=,Gq/B daG-:plձXp@#`EQX.-4(C(PN,\:,.b~!laud)(82p t +Aq,0% ^օS4wX@O-׍TFejbị}`s}`::j UWGngcق7YpuQ,Н]k䅒-V *E*ri#P%vK)AfDXȌvy`]Nɀ[R[xCmXx+UsafDlزjƢQ"TĖ/&BPeS,m  =Gʲݎߗ#[V@{xx9:gELNZX(n6!;Xb pH`B tz[?hqkH *\O9GGD$0QPiəҢwJYpF.,` tNz.lX"`h,j%Aq)2$C(]`ƨR,ELr$HQ?ޠ$Luhfi]FX0{aTH1a0,ľnXz cFwHY`+Xpέ  #wJlAG,.pl!+[6Jcѭw֭\IRf\06PiugvMOW)q,AgF]4_Xd&Mk,%$qpGRJ9X{A[ X4h 3[̈XGP,Wz{J6BlanG6/0XY. 8Y`l63_"0^t,9RB~դ7l#,v,WM>M1ޣ([н Yp5.†G"fsN2 +'ۘX z3,u,.wc/[6H^# +8^aDJ,:BfDN"`sF-0#x*=8QˉB҈*NЀ(yP7KX4i /̈n@;#t5|-̂ J LC#RqBX"Ert]1"S¥3`)Hye&+2p)9lQ:W(0UO%`BL[Z3B[,P,p˯|GJvM3#X"fR4j<P*q +*uF- + =#. !.b$H( 80QXd@5E, ۑu#Q񾏔)N܎ #hb>vwH [(aٌ)aAp¹_;b lasA0[`F@ {ekFP-G^Ȝزp2m(lq`  me + ̈R2#d!B[goXpl]7_Yc 4@@}@BJiWTNl'zP@% Py B^Mq5׎lՑBX/xXAH1$-k,ؕIՆj \pvtFn*[wkGXp]`uѐ^# b r +Siش#8aё a aa/BX# m iX݊)*:V=šal3XZ,h o\Քuc8B=XvE[н c6.W#,^^: 6mѧJ@J/Sb³'t/ԌvЧ [>?53B[B598[!,eVpj!BS0Rw9L:% 8+:L-+q/.|ui6b< _*Z - +SJ@sF1b W\:"$ lY`3 tÍ ZIH8vPCJBEG|! Gh ?1—)p,f-.?Fm8x2`>M$RalW!j`*~[߂|a ++3-lny a-*|W둩G9_|RrVi2g8Y ",` b wX`Fl|MtCFPQOY.#G +#T@.1fRp="3[Fy ltvCMffAc@X`-/\= +MX`FLtA?-zvjOa[Fm,E TBGez"H`8Yt5 nǏ/k )[رptuX&<xFԈJC}5KVvc- l#a>buA\Ю5#daPH>Ո4<(f:.qAI0Rꂖ-& ؂D[܎B ,ld[Q.v,iԂN`:ZqH褚_1a 5#Xԇ),o™kcFL[(^_ 4@#~T1M $`7 ʕ,T'@ + n3'>3̺m#x\MkNBHBAQȉl"x%UH-|vğ-84h EW7\,8#b q N.0X`-|?Y-xX aiж@P' }w@pXN)JS5ԙ-b᳕fI` Pp;∟.hD0>ڑN"B QJ`QŚU7 Ε-Lt-cĴ]M-||:vNL'3,5.12Vi]BĚQ|eFjp&DUp?߈ q $@yBe+#< +.O@@F=F` /| d᝿˂`nu;HH Pe tB6WG# ؒ+h܎¼G`1yM X([HcA,=_Ŗ9UJdS,2#ꏲ xޑB^G3B+,wZh$ؘX wKDiyzQb^-)eu)ShX2Y @|:#EƖ; +  …$ɑQ`l1-|:#,.Ed  44B *+Fй$aq ] 뗾Y`y{!¥dA[͈-^-pV %;A a^!%Q¬Xj bB qvK#^5#x |))3YxY4f/2G: %hP2@TNUX*,^ Qb oBlh(d@W̧݀.٩P|@=DJJP-pdF0Ō(B)_NɢE[pFG?w}dA23vиvxĖQ2zeQ9_e )f/e`#,` 1"I A%@F| +#VsE4l!S-evA?44Md$ua +[ Z[:i BV#TMUv'ɝx X`F8N0YxSv|Ȍ#IH<A؃ܰpPtٸ "Ql,-^h>6iXp;wnqAהorLt;t 9څGAG/@pa{S$h [  6Bcsm`*{P\W@!IAa,` ^23"|4Yl:P)HHBP}!D^3>dF^)fD\M!YpF/.,褡N_L6TV|rЉX3KG! Y "7M,|{_Ք#,BBQ9&\,ڤ1L`P,_A^X ghh[nꏲH=wHmB"::c"z+,J6maFHY{tBpALق|p5&4hL!"Gj@*0c;I8$ь"PRbLv $DѶP&X[[ěrp)ecp- ~GOF +%C5HxlvW]M'IpFt/<E&2kvd(:QE˹DJiPN<qut}#,` ̈,,_AÂWVDZw$@@Ph‚:=G2JjV""T [Kx8ׅKgn + (A'3;8N$AT` V$3_v,[4` GW],8o%T P"Cat!In 9g/e^{[ "X;,` X߂},ڂ/OC-#vؕ!^5SKR.R;Og2#$jz-|,h , aab4J%Ihi`9JK6ff*9#H c q;6 킶PvՄub!M(cd*PƑ .b\`g܂AB,@,vS8]`FNw75M}JH*PKz:34e=& +AgAI ,:YXvnXAo,v :fD(i"p&( ~#TJ5F9 ΒJNQbAjIq` Y`WSX([ÅdAjC$ƀ%VRb0n0& q~-^`a_Е-jX`@( xBAe^ĸsR4+U@qA]pFU[ȯA/*[5T$.;0=(%,=I- 8YtA0u}^G` NV7e;en]0Ġ+(ШӪ 4<"QiɠT(E@CKYo}`G >`WS?2#Q1[$aw-˔ +*Y +X@_&Pj"-Y!],dF^⯠Yh[|еyץXr\/@%uC +˨z몘3v]S4kׅb竏8lhjE##:)V qCeeAJFa߇u -Ģ38lUb |սcDǓ48!Xt_ڿ|zF)eF6*3$! Za(kduZG!i['|fu|#[ZfW]nPehnE$4ӰAh S@eJ.i /Xp/|/_c -0`Fp|faB3DR:UK +J]IF(`8Ghih@f,/Yn~-:u-u/5S\61݀N!^"d9( )1E̬d!g [N) 8_ϳuAG| u3ڛ&ء^+Ϛ@RL$t؂,<]Mgp;jq|U+$H?TfA'01SAsA<-~k a{,@é)X6/E|X%@ QR$LxB`jT![tudu2#,uD9_a,,AQ[&I5)jQ8YrS6b.H!5hY_eWS8p^ֿSڈ-7иek, +X`FZx],0# 4@yuľ +# {M".v dFxČW}c,G oOa?uD9܊PrVk2&EcNĢ +)-+6M̈bQ& .0#~ݼ+t/Y1#UJ,E6ĉdJEPJ`a{ :^h Ef`[w "`.LTRUF%١*\GH#2lb 8_ދ-! N yvX2P1$H P*S!.H:V5+-.dFd)VGʀ7"q;j ?;Q[4VD+5lA3(5F\T9|KR&]7eFBfָta Y Uf`!8e-?Ȃ}v9JUԤ@V* O3,`A[ȯ:B[NI{@J1!`9`(9^v u̫fOqdfD8xU pjʺ]`qdFHCŞɈJ >!G2Ӏ +Xa=#teF.:"&pÔ78Y7Ь\8*Ɓٺ4T3fCPTER/C\< +p YD32#p/: Q|p5d_~#\M4B7&6"h( :?D!.0;kGXL(} y5ۇXÂx,q@3lfc ؂̢v*{PB0&#'`WD6XQ) + q/.d}hF-:r+43/s +% 'Fic[C +,X-yϩ"C +L[,` l5#pi`!)q;_`uR\Qp L*" P`€9![!$4`{DXɂ-L&X8MCg5uՌgD`M;@L1 X:Rr$FiEΑ 8 YpuSflH?uzA!b&/BD,ipIfDOa2h܎'mA>f,p6/ I+GfQԂ23`1,-|eFp ,  +@$:KTMfQD]cZ&`aWvdהLjS4lx?MwŠљ*)!Ad`_:r3W,!$"d+n/b::gYp;‚5/exvM,5cIr018 aP%D\rڂ3{lƃuvMgYN) :v-Hɮe&(Ɇ%[ʐ~DBchvR@f9(8gtvl>`AG<+Xẍ4AS`E>@#@AF H$6VeK +5p7J#`{XZ1U0Yܿ- !$A A.1H3;Z%1B[R[`]rGv_` ,pgY`ĺB9_,OI xPB%Ԧl !ʹ#\~&n m#̈8_q5p-pcc3IE0Sc(k(Y |ؕLhLlu[4lq@Cx8!cڰR%Bt#J"` Od`0!laq`],6ЙB\M8_elԈ`'%(Bd&fF օp : ^a pv5,` #h!DD,8(%pP6$¼,Snaᚶ X|0,` #LTNQNn Ơ(jF G#b 8`km#, QȪ}Q"i l!WX-,.#-H +4X-dX#Z::T&:Y|H.B"C%r@.wtԯ#Y`F|-k-#1AM]ָXbeZ _N uJtT\b ܎shfDw>q:j?: & Hː#X ,яaN1.B' O\:#t:La_~ÌkXl8G2#ugV\. yY8N>.7a wR&3^Sjta%"`42(#bjS)9I&Ja luj{Ax ܎ ovxm!lC"\@rBb@eq/ƷdeD /ea,8_Yaկ)VP,ԌputL; uBbQv5N$q㨃%,]x=B[/p+օB[(2#nW>3# 4 ch4"TAOXR:Qp + ÍF| u-lxXh6tO!@%A;KjH@㯃\M+-]M̈x\M mС`<+ETClk8bN ZɊ*-d͌)XZ[`t_A3# ýd* +:c6GǰwźeaYn߸SH'K녅 +@ίDшʥQ-QZIBTET FB:YK*p5]r;zܺ40ML$ml*LpJ IBh,jPN Ȃd :,-@C,0B{WyCGcB)%VRu&nE EPF2 YD#S3¿;\M.rte |.0#/b:1WʨD( >X^aX3B'>̈pjJb[8}p$5|X)OãI :t5MpcFvπ# lgDօ̈+JR4uBc*@}QLsPTŸh6Jg.r]iIw1X,/[pTcR1".ڬ\}.FQ a BXSjJkO1lXٱP*w0RPGBLxx#Li]bb Yp[ 'WGX`u@n~vwza *]C [!:\1q:FJh}*V̈B_l!,\:m /`!KqAg'6Nr9}jzJ"H&;F\l'ł3~;, S?f7%"TQN + +j+&Dq.l\M͂l`Yf7VGYo>FV%p@&0a@vm*`:Yef[Մí8_GY,h ^w~ה `*`U fq!.CF#v$ 0N + [ȯ`{1,nGY:ׅMh1P4 R FZreP@I@-Z'v- BXu)@Ca,ݎB9_i톏8бDcW,Ϛ̨2 挂1#r; uXxinojbFv=fp5eFHL$aA<@UR2'WLĆryuX + :ʌ`̈SXW8܊a Ά(FyE g/9`y Id) R.Gʰ[8B%n4MMSwMLCHa,dLJ &G`q*gj_/W^|*a W5 m$V% +TK04PraRzkʼ+q5B `wޏu I"D^L~"β-/}3XlY]2~ԁ UXlqĚi[s 5,JM!,kT,i-lϋr/j԰ڦ &@ո/fS)K" k]@"Z[-YL#1B`Q&mNօ4BCCXQXe;#`B!?aƨ׼,0,0#.R,1# ڑ$1(Sdb5rĚi=G-) +ftB܎:ybB3ELfLj̈3ea4 +!FKTX\™ԃ,3Qgw N#pB\M cut1#z]L`[Rj +"XNvǼH= +]L<1,h =` -=u[pͥ~A6r$F1ccIi1@ExAvZ^YB95q}J)~uG +m< +pB^@856)5#duWnGW[8BlA#,| ΈUٚ +]*1*bị}`s}`:¶:>wu<5#A\=X=">Du(eD&@uPIb,!Y"ǵQ0 U=_S|+8Yt;.Ԍ8;hl^Sfu`aU (!l({TK "TĖݓB~[ ڂΐ-d)[p]ϗ%&B:gθV&<}79{&V,V1j;g- qA_ʇf1#/ԿlzF A(4..,r=aD +jp +TFA-q;Bp:+hܲ%낶x-E'=:Ƣ^D"C(A2fGclAG^Mv? hp]pȺ~!,ʚ)^܇7Z[peԈ !SEH$:.^xƒunWv$em!3{D?S2#5A3Bh9nILP dƢ +[b! PIQ{XXgIׅmF䏸պP,̗S&FP} C:M9W o_SvH3jbSN6E."5T0;IX t[&PM vHpYՄ-i*ꑒpJlppdax,.&vN4BcŦՌ;ǐ榮b138P:W(0J7g"|;iLqy?fy) &7Չ`0H0;bl~H&RI*qWoBm~v.F@/>)5BbTt gXs{ +06ga.cZ0'TJ+䀂bѭw֭\IRf\06` +^ǎ_qna!Tã'Ecs?d&Mk,%$qpGR ,/~8,ŲhOYr3%+CωXUD) :hQ DR"pu ),TN*0 + e!c/ iV1}%0/4, LFU##I+$'68^@#T@E-C7L!?>ɲ݂/E` >]}|%ͷ H+ڨ$(n3"hdb\?.L/\\} q2!^5#]#&nyx PAF0 M(-'*p>tm 8σ:40'BCx(~?Dh@ V ^"0Dv*D8!dYJ҅%X{3^\,| Р5ܾŗ? ȄTH'j iV`dVB vBQB*'Ld*"3Ix]{F嫀)VHҷH'ON:D$^RCb.R49#JJ `J"9 nϟ=-KpQ|IX4ubR0'\!?s4ܼ/y{1 DH)|$L(4!hQpm#$Y`(k )n}~.D{CT#B@0#7gƂ1t"rIFLt2,7I&c +%c"4` ZHcx`^|9 Pq>4k1&G x  (ŜRPcdHJ;`2|=E•?di,UZXn1LX >}|+<|@~C>'L(l\z`^dF<AB@Q0s+$` E,P6D@w9\¼ D05w.1%Pbr K +V@ |Ͳl} H~\L42OueY4<|tq ln!/DGn`"G 9 Gy8frfa&A$M{_}qp,w(P4%hAs\(% @x3Bn `% F1JLSps!ps(BBAmq spqxy`^@3*2'^nܸ /pS|@Lٌqjb7B_Jb J(0Ad=}g2>) ='יoD\&> +&;I 'Hܸ@n4/^X5E 4܀ +8| +0^ݡ2V`nplkڋ~Rj>N\n.CtHX8B]n ~s}3w_P4 x}W !q\Ȉ +0s5*R\/ YO#/hg@Ns %ux ba@`b@&:f>A|V> 5J% RZ  bd( nrg2BL=#dn Y_+$p2pZ`B20 LC@-IBLH!j&DX{/!5փpP$d 8B PՆE\wy< DGDGCPbjH,R +3 +vp"C056 4"oildM Xp!`>&B"'zNHhbl@Տ qP"l(W&p1p)%A_`Z "-Fivۆ +}wrE{w)"9;'`ʁ/%?53wjȺ8`@-Vq4t*?3±G1PQd]WC-C +0e +|鼜DZxE“,fn 76(|ru+2gJQL1e)l0d@oUmLK0 +(ܖE۱Ew#'ˣWA 1Ț%$႗̱( +&f`+# %]?uU"(Ny"_ŨzCx ʵ tLo$O%dQce"тn3a$p ^T4M` YVl*kw!ф'>ӐsIS,7Uj/ f|Ԕ>4B3zp\w> +stream +JFIFICC_PROFILE0mntrRGB XYZ acsp- desc$rXYZgXYZ(bXYZ<wtptPrTRCd(gTRCd(bTRCd(cprtG龳[@#*@# t := MT[[21%M[.kguHu>ӓy:/k.m*O(WP*6튠7n[eڃ{8k1.y-v] Qk4Zh U66bG*SZ('<}5zUSOnsU+b-Om6+ap]{Yhvsvc ryNs]j߿jH?.ܑ{;p wӾU-=N?RIn +AL (P,KΧjՠulmGS[=d+ d#MYE]Lc7 v#xnH9VҀǏyOkU ȹY]7=#rH.c%A׮{YNt ],QK,T\9Eq +p5ߑ8ʪf#8+yRԨW\ r0Fߗ1^jjlrV1Wb0F> ٧:FT髯ӲjS0-` b.J2*o,?.G>  ʮEkԠk͐F!Nw4:VYikZ+|ɜn%XmQ[ozSVu-VQP\XCY 欐UHImUMBMN=g!dsz.-ꪲs]إY UvƳqv#rڠt=wM?Ftj!-~=D[ T,YhkGˋ4ڊlVz 9- Wsc%Pn::ʛlF֫˅@mgʂP>:2uεWe> ]]aAH] nB'^r4sjl.j#x,`]Z<ޟh马Pբj+YS('}VfHSDtmfUҪ~'QȪ86ooU0l! +hu:vl, +=' +V#z:-:.ц2S}d=cN+RCl's f? -_tgPzVn6C*#6Fa]At_eHjl2N‚1;zztֺuTMp?F= ߢ[PC;,VVXd0*"" lRڝETVkW)ŭA',R@geuPRэOO3VM`%T=2*vi@UgBd b HfiPKj¸ ;qF ;7~P On+<`{@Fs>b${@~D;{G۴@q @$ q  ~sV cgi'=CejjGoc+-u9 r<]MޓMN߅s]ֵhr轅fkbݸ qFtZӥjzvӾ`6*ePŘg +I #A} y>@D}1|G ;hĜ`$~KpvvNePa֊^-(FYNõթl7iY@CxϰpqoZs[ֳ^cYFA%6|WKԴzC֫PvNpv^T" zυ6QujZXXN]٨9 &W\ԻC`6g\{.:K=GNgui\:`A9[iBTcCI<`c04HǘH0hGc081q~GhXiPWfiղGO8L { 4IE:~bijZ]VT+5jlf`H 3.IJ%1X5bPP+]w؊vn x`_;tUznnbJP!V#ɢW\\|ˍ2]uvjF]H]UHR+{Y|j7h.Kd>x9""#>x"<@f}9Lj@DDA8I`d^9eJ};R}GfJ(Pb|jňSɗ +4}n;M#h|pf\&ܧGK[ek XU +(gRO::_lޝ?lPU7['"]$g<ɼ7%vqώwӨD]2ЎY:TְofʔF/?6@n 8"A9Ql)qq=N3c#{@sD<@ D@G@@@x"< =䓂#'F0 +l Nq4mw19ωNyyD>b31c }0{|"3y0wyp9cb@?z=?M_Ϊ=vj4QZ5Ce +@X;p@;{߶%uS6F4uXQ#>r=]M>F ߌB,r1sQF?ڭto#u(& H"<`v}`#?@Ds < y#0|G#S%Q/+iymG©V%)ST[lV֧ձ0!62 Xnt뒚 Mr= + )9,ف~b`WDSk5\ÿ{l6{ʏWM=6wKJ[Q_M jtk2)E2)u5(>u*تrbǏFe,UX6v#{:*UZu:Υ]͎+AA;*,D@NovMa(7 YH"YXg`8e5mto-IVS'U`]m=|I-w9f18%yvKnʵ7ړ-nr'1@ch%o9?*T.FJ9'ۿ&iNڃ[*+ԔXR9ݹ84WCڤ &,Iseھ-Rouj⽵o1ʀV+~" %E}*JvU euV,nH~/zUl隝6El%t]hWf%]r%U +98 p9>q:u%%e +!r1ǏlqGOn?܈1x1>?x'A&#D}<`i}2xh+238].zBꙵ2*Z(W'jWJCbI +19YUm}<ڍU/9*X(TR.0;tMou +ꪫB{ ř*Jo#*?1R磦O:.t`ӮR~@a +\B 62m(߿] Uw8y9c@{@gb><}խK+ޗc+Y2;J|{]9]!ʢI߄ۜ :>-h5`g]VPZ_hNձ+_pO]tK4ߧVX]lM{EW6~c Yt.}CS"F +`%ʍ + 8n86FF2f۔8*.A?^l疁#13G`h1Q1";@G?XDFbyh 30?3R؁էZ=%.+HWlmFOxOPӦYeTSVYRY;NAeh:U^j}Ө$0p݉^kw~>_prD4Z֦ڠCaQNI!wUӞ{Z9ZX_½gٶ;-b0F<!@cUïcܓc$F9@v'G##};@><#c@Ds`G">x$}Hϴ9{i H=xzh.j+juZY+~b,[8(ՎGcȁO!tt1o>ڭ(`m;NR[mkh}>mj=٭iU_26xD +ۑF0[6GL'?Ds @8"G8 wۼ}Dbcc%@V {6&*{ otګ ׭VfXշ[k Wv(÷W[hZƯ#7/[c1T<+ނ" 'Tfiz%X.7#͌Ali-uVY]@쫞HR@'23'7eh, +7 *PpN !O +~LUAbN=ñ#?Yc~DsGDd?";@0;ӈHx>Ds~?HQzee*jkZrE qЀHe#;KEGzרb_B.~{q*>Qzn=GM=ږ:UH;]|%z=&jiӛiJ-eZPKB8m9Vl`Qq67m>#`Oa""G#= ##>b<@yY;˴v:,QXTLc` +v=G^[٫w-W\ ); {q4oᖫn?#7S0;$v6MmuVX[m;x]f7郙9Lؓ$>2~G19G @G @s##GA02^=:%B{`^pW!~hZC1*||c OckSNzmCewXCra԰yizu FEԺ1,s++Y n'h@0@>s8OuƚUf )W' Yk/J_-psi$y#mˏnd{yx㘏G@x~x f@󙺐7\Ad$pNMVu!:v32.}FNy {+`67•@DD ',v=n==67of|&}bƳj,_[xŻUv8aM:Wjt nYd0!RFҩm%vr'@>8/H,Hϼ @yh#DqrG2;) +sN8;lU8;N}Cgg9IŊ@N08zN.ӴFNUat`O9n>11wXeUTcL\`2HϑϷ}̩?6gˈYѭP6aWKE.GS{Wi$3L/ +( WDD@DDTsQzm&WځMvcͪS! xqKfuoqqqH߹w?wm*zou.=I'ҾθrXv6QPDeWJ\[eizzvk#r`@)V"sIwAOEgMOElXgwgpTS:kz? ްfT.v* YK,H 1-9/p+#=>pf#ͳjV$3g';5ZZ3I^?}A/ֈk;׀1l>Y ]` [jAPr⴮N]*dWr6@$<YrQr 1= }Fk(תsZʅdazhzvg/Umi5֋tΞE 9O\ٸIfNBV.7q|CWxʹ`T9?QjJuZ,^>iXmnY7ebwo:} +SW֯`? +F5LAʌ;J|$wNs~ӳZhڻC+ +H`{'vA՞]]oC^^5^5D16݀9 !Kcq'cV#B7z_EzkܗR3طUY<Jp re5ZF]3եz=DP Ҋ@*I G +H?1w+8žUjht:zGXzVƠ` W+&Yj#=P=JDg!Ô VF8Aݎxi$mOI}oVՓoZ1tvK&]Tk1TeP~}B8b *U g>ǿBXmL<{s[_ө#Q.eMF ˸Zgiʮ]3ES=J5^RVkCPX`\+Nܛۿb8*['hݐeMMuӺ-HEJ +ΈHR| +zHVhzYR'fP`/elqb3)zUvUMXMyưjIڻSE.CΣiVm6BluWp, )e}ZX +endstream +endobj + +382 0 obj + 13019 +endobj + +383 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +384 0 obj + 2567 +endobj + +385 0 obj + [ /ICCBased 383 0 R ] +endobj + +386 0 obj + << /Filter /FlateDecode + /Type /XObject + /Length 387 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ExtGState << /E2 << /ca 0.400000 >> + /E1 << /SMask << /Type /Mask + /G 368 0 R + /S /Alpha + >> + /Type /ExtGState + >> + >> + /XObject << /X2 377 0 R + /X1 381 0 R + >> + /ColorSpace << /C1 385 0 R >> + >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +xKdDo56+?skyހAK>Jf5ڪ5;2L~os W(up[ \#ˣv0R/0<9Bi˯ D{rҜɭ1Kt`zWAe@92pp/eΰcΞ@>Z[d Ik_?Ϗ_?m&3|rM +c%]c+X Ҙh+ bx< ܞb#~"[xK;lv($1  +syn +*8tNoRؾE!hKAO覰~B*sA`G6>AZCd oi-خ*wVomcޡ_aarWf y-7CH aE1F\ cՔ)[b/|~`l(`@c'/xEZYcVgH.UIu> Kg_>~G|?͵,mΌ5b3Zg RXǕ hfa) \g* +XolXeg(ZN-IaAI%&;FQgWC-fѡ _m4@ (EDhd 4KPHY vEUNRjqTibXq6 b94`,~+&4;.t 0 :CwXEL&3Z…x`y-᪅ݱF5 \Q묲GdX^rs/kn-NVi2]Vwj&;GB ph:Q!P7SP| +k WXnMQ9t68H<=z.O0VGZꞅT!9E-jM-&G6;jxPRX76cjY% +f'*fw e*N0pA)hHMK̉ΕYXT-,L˞dž +NYOF 'ՃFt "z|FtNBo/j9q8ax3>b=:aop-~a Jb*wI; (ڨ 4l[+wl1 O Ӕ:JBILl,E{%.Pڔ46"i!>`:3WmeaY>  |C^z,G "[:Wl2 h(ڬ?G4_ \m;PS Yq{W:.e=HdzS7Rg/ځ'+D!D asM>0 z^%3[/C-rpω.LyRomc52HHXVe/=M21R^fي7|± 0@BEبrWMk82^;!+j@"^50ٸHXp@)ol7x<`>0 \@ q:yu}qlf6E$ӝ >{g@U +q\&U 4=hyx lu92,x3}i\TqO1'Pb'C (ECoDd'lIAhN9l*an۱dkȤ {T($Y$֞bxZtW&ƾo֑!an웡@,u~_js퟈=cc'|7cgan 姟_{u S)6f9/l|Vǃ»㑀;PNWvЃe`[P): 1ޙ(Jfpb3=!(@0Vd0,6!?p㜐Fv@iB#[6[/#unn6gmPn/G_N%TPjH/A>FgR %89!DQ5 Wٖ qf^%3۟~NR}y1BsE34ŬUSMHE1 ^gT!<$YCkWnOJB65*7G|8E0&^Y4:n>yeso#/vm~4`i53@kJ+'rܺ x 1;6q`3CzyNDzಷAՁКB9Ay0B8H>:#3̢7`vCh[p5 +endstream +endobj + +387 0 obj + 2530 +endobj + +388 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 389 0 R + /Height 346 + /Width 480 + /ColorSpace /DeviceGray + /Filter [ /FlateDecode ] + >> +stream +x lՑԜB A, (!~?}<]YTV6[Ή=Ľ˿{Ut"G2} @;4š'7%n)RVQob2";Th +!FvZ#24EpcPyaf@ '[1tYS}<(>E +U%,=t=?A׷m*-a V;Qc#'abP!>IG?ߧhK SLU{ w*~/t`L>G l?oQ}=HT v$ۘ2W0N?P6?I4jR2D"F%&=lƾrwv\ a% 8Sa #ŀ\\_ +Hx3rCtWun_~hz|ˊboooi&=q +山dd$yVzgg}G8|*xp_7 \ +3`^V=Z/ +#ƍ1 ,' ?XڇfK2|sz91>8rBHk +ӱ3 ΤEvZrl=c%#1 Hdq+'yx&/sL /<20esӟzgޯt _FS~* 1 $swPn33r+'#ع | *mV*nWK₍?2K_K;a,A1_` =` N7n"60%E]DvcP7/"| l[0''ͼ|KPs˯Rz+ҋ~~0lb}K|{|+uEB:*p^jYW|uw–"IVP96lK4``rF#Jxy)]fnM>rkK ʯ^㲓suma_tߧ`~!h@̟@D4UCN`&^;)*Vn///7 /lLT=lp3s򉝹٘/̵9Y.^{u^/_׃77\ }:ܳoZWeM:W!&qGEPeVrPq02r84O~r1/mɱSac'L;ybdMV23vF7o۳Nmq? ww7?矏}l6<,w#G? 5qI`cS<$e䂓 &^BlL P^>٘MNNp؛6&;nx=1xw5~-u`+tT| UVēzp}e`cuo8<`a$8j[J<0Yc"b& 1個 ^梍9evr>ڟ漙9^:3_ﺚ1f{=tᅲoz_ y# + +0. GŠ# +a .ChS"wVx&ڔŸ9 |)pR 9Ϙkͬ1r(#[t%7LOv +f VvwKf13;o~[ ~?golsfYlU'abq`c>62Fn`g'1s ~ںrH&M5s#=oOTc; \d]͇Lf+af^;[c';޸{q|߇YGq5J{~ುY^XFZ?k=f&nϝ?d᠝/M>X9^lܽ89`$7-[st?K\;]f9)`ߜܮZyL>\7>~wF3؋z +32z`SA;? Ŝ+$p2.^ \ l\ʲ^Y?ۜ50fkJV/]y|6Fx53'^JNfzys/>4?(}7ҋ/v0ײpc? +f,7!/ v惝7Y̱s^q^ +pAϘ,.3eg5r1fGbN\6\ؚ9`%073Śic{7:^vq3psd傝怕73N^3?=nr??= 'X>3 Spseih^vJ'͹AVK,1#qHd&zNaf.89^GNV2Ngەy}fQouRR0r϶&d%p&/CVoBO5nlcgoXyۙ99TXicr}yY2SSzF^+yc *@y`;o ߾oz_A{|*2ԛm^ںəYte1x3~<ᤝ)^%؝7;mMV +6&8 ~89mOsR77Ir mr p]|0s ^ޛ%{WxWVbq௽h~O>Co.sZ2 +.9\LNxM|psɼ,'6&#ŀ&/7).G2rs`qle!?VzVo`@8[Sz.80s'0߮m^/syCO{o31xn^?+L`&/3a1k-YWZfZacK/1' Y؉R.Zxd .YgєVb5g=+ > 8OH.^9۽^^[sl WZ^ > +pY9f }5rx|dh6_a4Vp0+3Y9>3le##[〉ܴ9|%$_`r`Zw!7S ) ptz}|9wZ,/?YygҎ,id^ZV9`b,iSN~Qq0>}a/+.Ȑ{ 8F +o1OJjR i8 <н;^` !yGBt/7dnֶCsӓf//[f#1s_>k˜ +.|p1\,X.\`,wc祿YطbRs F pV>y-8(@={[OɷU}wx;0nrR\q&?.7;%#Ɯ_#Yf& +<1/:Y@X>5P:Hw2LSZ+`!H Pvij goVv~g_/?򫿲y]ms˒Kc^ei7hd})7nn ̔xw/+2Q]фG* i9f OI:j\6pz{~b}g^Zٽo2~guͼO(Rs 5]dyͱ3Av2䂃CJVrQ>ڒxwq3=Hlz h +q4Jc*T!vM@bE,:*8{/ h_V>={+^{iVv>ظz$rr7'oVF.foXXm)CN!7lCX1@k/)[NIc \ -"O} rTF0HQԠQ>uo]wQ4kfuq\?'ch[37paWưOE-\aDm{0|eҺ|o S΢tN_hbڥщ PEZqE {{k~@'`q=?zg\ޮͿȍ3oe+<9`e <[%qӟIĿcr.T6*A}\>~T)#*ZR VcP5b*ViZQ1_XyO~0Kڻ_|?pM;-`%'Fr3r\|̓2q0)*;4;qY4sLSTKS!fM#yH/@bUѺVȎ !{|anrsw}v/lx>}ڻcdsd ̮Tȋs}XdD+E_[ߎànsT$%ni`F4lӓT25rXJ mн|'#`@ǯ^~A)E۾?g_߼n?~d%bqx(3a(K]Xޯ2k6"(A.x%pNQMJX8hp%RUʺ@O3Ads!Cٿb+^|/]9{<*JX^ʡb:_QE[+ͦ=N"&ɠ$4Zf@ +(G;(i*74}o>i/soomg_W}/loӵpK[1Xar 5 A85tx>T-PE;kИb4:CJOiqP5д~y Fm37Dz6^oo]?/.{.\nx+>Fb4D._ }u0Uh(Cc O,9TN}P=E_:!ZxIjc+mE ^ʹX+Od~p={<'54#xy.쟮\VHVt AjcW{1yn&#JP@Q )f&ĩPq[!6X-8QA+ٿ+X4]I]}|Ͼ:e#"=3SF\52:ITaErh҅vY]:us@E8:eW3_yos۷Vn{{xkyt \%Au +FC򊒕3S 99 +#ݞSFST]98eN ^%Au +FCr.ΟWݿߘ+Xtߞ~_c.=~_< o=H_ VXV`Y + X4_B- 0Ot-54CbqN_{ %}fonx}~~<8σaE6԰iBn$'V1)M9sKIXSk"NTtj΁!7 ߮Ͽ[/#hھ~?vy}g8 +UҲH:)2:MN&@XuZ<2^ق-KT0@fRTJUbtZZW|}n1 6|v_{|<Hъ\@ۂ 9Yyin gnG'^>ystol_8 j'&HE{#FNk$`Ս?@DsU^=5g@qbw|H͌vohVV) :iWHt5U i-1jb;>JLfF;ķs4+Lg<7@? [aQgmE#">2)Y)d]t w8=q%V4d&8ڴyY-sOE# AJDVjWo> +<:+?)XEBc[uz "Y(˛U4HmPpݗDqԩH` +ƈnU$4U0* 2i]ES>{7ۿ?SR毛}¼{6EHF#r0jXE'MHNgV-nh ZL)U AѢQd0HC|2(PV,FTojS+ ZL)U AѢQd0GoϿs}~&3K޾zm_GV)!TȈ&)RbdXNL C$I],u= @4"RCR;XeM RjȰ<=zq X,}^_WoobЏJ- \as`bD; X+SxBlebSMdZhhx@ "Ye5u2L{L@,7m^_l>_37߮k~}c?fRL22Y:}9 5XDxD,WہͩJGFX FbZRL22Y:}9 5Xu}?8>{=!ւh\@YXBv0CF l{;NbT'oфbœ Ղh\@YXBv0CFncX?w~>]^(F EZ@l)Fj8WhF8.צ7qgPA$EnSh"9M\nۨVH :: H9\ +1Mo>?AxCe>/)^_]`~_gnE,4pH3*Кa +Ԓx@;2ԅ6LJJP&| 2 +Eu?'絷OJ`€&VXVW4&}ȲQS&&uȚQ$&Tf +Ag_TpLEV4 +ƤY6 +Su¤٤;7]_WOBɹ^`@=NśpdW`HW%Țo!$+pF)a.RdyFFhMhI-޼# +C",W-Apx !Ul>/`>G`3/㯟UСXU Nj,] + ^N9#,C|T-bCɑG_숑5زp: Z%РrڥPT\v%|m>磞7~>Jn#Kʺ1*BTDRUkf5 j)CJg8:L+94J(OO: tME$^o=Ͽn^ۿ_~},SxSkCHg F͢`*HHE)J&M?1p! +Ug|h0өYB:c0Bo]PHDBb ߷ߜ_x%_l>~ι>=FzHPfPr1' Tq0c<,fSBIc@#d4KDD̝)K agH8vSY̠rbN`>.9yXP_`󟿝_򗣏/~ٿ'J㡰& +=Rx3)kjHt4,:M7yi9w]!a!rVQ6uuǦbALʚ)Z1) n vހGaGߟW_>bth446V,xR !#n$akOpH@3gDim 3*XZ:&(1B&G`u/>գ5(>,&bI˖5$ 9d6 +Rk©F5Vʄמˡx*(YZ.~(Ȫ$ lQH +RwۿO߇_zÏ]`}ya%2mQӀ+鼝t@%=7=mY&G a`) 2! I1LX9NN?_?y > X_#9Ͽ # #Pi2i289aD-UQaX6J&C"e8)jbH9gBHPL#GH4C,!_?{ozs}ߟAKe@ +ڇ($ޢ:|jJ<">=8DXu\kMQ` + +QIE%uԔ@3xLE>|zp n^8kfag73>/|~f2yhJI ꙡ$bċX%(G8+J!3I!՝PlV&M 8iAT?X=3S ;ۯ@kxٿ߹ﻗ~_|JMܖ.G9 t> JY-ѱjVAzt(EW3t +>r +9 ht8QhUS{ou'v/ؿk_9z#VF*#%|uer/ CS)<SPiavBDԊ%pZtd!Yqad4 )[O9SgHg7G~7ѪI a +N-"Vv&b- +0s0RZhդEֈNEDȰVFK7O?_go`_g7_{_wK\Hj(vahpjrU"]Ej N +0rrł(ٚE+P!4" &iۿ˷_n?ޠdP JJ;*2YXUN5O 5IOCFA4$#&;u8t@VɒƪrY|je,4Gu=7gzfcٿ@__>`7GJqad9=zg~xQ 8Y0N#U(8I49+Nj06bKm۾80M p+w $g  ΢T;ՎXV)|߽ }ڿn ?\;!=V5%hBsg.9mM`yPDBW?<XOp , 6(AOp@sh;=sImk`O~<> nڿ!zRoUe4 +X"9/CX̱ +GXAO3ՙGtSgU!jj.tSoUe4 +X"9/CX̱J+]{<=z7? j+ UPڢpZ 9 J5nSBEk(Spztf'@Xah(hzXVAWhk5g7Os+ոN {~v}n>}MnH~Χa4D)&ϑ@MiDV bu/92jBŠ*pt1Y{`4D)&ϑ@MiDV D!=Ol`7~ /poϿ>9xQH 3(=bbd4`8v0 +GB4ltpD` O,Pg-@eqEaoow=o`q1{}s7_y0hܵ85%T`bb:)8(y1f4KXQ)Ql6ũ)هɯoHoۿ#n H=vk=POrp\e:~.($RܰzH9 oЈ([#S*<g9Y0lk1 u4,?@ߛ/wooPgkp '1@TBIlFItbuV,g5AmŚpr>/NH +A̢)W L%Vjd[@GOLy߿?|ڿ{}gl BA\PiIO!D= Ŋ$ SICb`sP@;2L#p*\5qҒ +۟ 0;0+NmR&r7g>_XyaAoo zOca,XaŎjipJ]\(U*㊺,,%(D'6 {VDP7PU&&yC<4 +i +%..QG*o?__ Q\g{ͷu󃿥@=)(zkQwkt#Aſ>DȉV1iZB+H0= >({'Eo-nndT^=O| vۿϺ>߼/<O ٿn =~ɋHQq)$8c-2mLSH8%[h0F%8,)R424@,Sæ#EIǥtrȴaR3qO!x߯ `n0xO;n0x}~g(9Ce1\Ƴj&C%-(H{UD>ڊntW֩{ k,A\Ƴj&C%-(H{U_n0|;7~d}=W>qހ߿c{$f7}.QrjlR*A= ubNGULF3*CW: 5bI*M@j=[) @_]{~F~ ~nzǜ2ATN!P40%\jARB*R0%w>HBE: +QS]w~cXOaw! קBUZ d"B\8 f#3w\PT9T Ug23L4:yX!dePK@FA!-"TʅӀh6:suj ]oPp'uR|SP݂ih-Ns$0TOj\8VZġq 7I8pꬸ@Q* LDkq3%3_? +7_ w>nIsHn𻁴g'vA b0qFeJ3|rQRŅ :{ðF)9 Ѱ 5FVY U j;42(CUs*.d=A?]_vu^y |w=`ؚX| a + M*U9ՊTYDRikqTt;B*hBMakbEN>X%#,UU!GZox ¹o>e/ۿ7x8 2lC?0㫨 +hZGl:0 SdT18a|ޥa(WQ5ȁ 9wo? O1x78 ߯~v}vHƐtဵ4]ˁM,>0MHC!0Dd4(A!5U@h@2 uؤaZlb |/p/_qbSpソ4{brÁR'a*{beLv%=*Z޶XH+a k:" + +rԆ|@IX-X(ӡ{_ ~Gn?/輞?_8#ԖN@8F#vF;JRZeNSš' ƏX<^!A$$vz A5:3Q5e,J +ν=57>{+mnޠ_nAy> +U10MG&Rz #+;Z+Xr|&8EMh5Ю$΂"(b`fML+G(u6/;BC>; 78kRBE6L:qGtި4^<:L+zҬM/D +Lj><#%Td,wT@JŃm{ۿw?? ߟ n l~3=Ga'=+ģFVC,:`Qi >@A141PDQa$ՠI VV jѨ UvCnX Ee4Ha~>jݿ_o_{Fϧ' kV #a=2O man蔨,Tu&Wv<athIPTm kV #a=2O ma( ٿ s}\@Z}zq}@Ι4azsik:. %T'T'%Y #,iW :gjp +"JRl4>4w#`7<s7tU*4o/_7_7o>n/xl `cĮr\tNYqSfDS O[t At kF̑)C;bWc9q]tNYqSf7_8 ~~n >/`/|?>0& V-fHHtC'>`R/(T %v7dz_X]}_Gox!UH6 D%1n+x2\uSrBe=6_q@BZQE *pCĬ% J"J8._v}~vrٿO ߧ7Rh Myy *5)@XUPR0Y"0IV,jKVo/P~sp+^?᝿]1ÎYN[F"%69:-F;=Ĩ)8# 4:/AYN[F"%69:-F;=~nwA߻_8~ 8zHh+S ȥu VGYBcb$g 3ESC[ +L%V vP4&XKg uU״Ͽ `> {_}~ +"Ͱ:eseŪ;§$J!FDw ʳj rR/1Lm!>dH=4Rfbjћ`hLbAT+1LAUC*'FC#@C!el!;7GgSekAo~<҅U zhl)ZTW(+DjϺJ!\U!1]W;@AM<0šYpk+Wc հj0$ʢ! +!QWuo7{_f>iuͷwAڸXyO +>*Jg8'A܁Gї*dƩ,#b@381R6.V`G꓇IF#w?p o? Ÿ^|nڿgJ5IauZ/|n /;E>;7]}vouzt`a1ya>t"W%:7?yup' _?v +zQiZTkbDd.Tᦶ>*OYXz6K&}P9BD%LsJx4-5b1"2\\pS[ [_op {{_}".> ℙD +3pJ jZF́QiCӚMf".v"F8a&. ,5R-V)ڿK7g>mv{~cu'ਊ쀘QQBX f3 NV8bkV8IJJiҗV2KS椄쀘QQBXY_o7ٿk"=7ۿޠKvRY֪'Kwᤙ\EL:Gw出j2cHULN;)PCQLe,kU%p § |wAғh͕-:Bn=gxV dS Ԕ& :$ZZB*AC[+sϿg><x@j> +],RZAM(H.ȑӐ&5)S.}\=QK<31hP>@?$aU.w5 N#GNC֔çlhNA_7o  7aYOqP@tz%FӔ2‚-84@h0z0 q R0 +v/`yn}\V*bh%J)ÛhPd* >eLU'.OGNhԁ*nEo!V2EF)bW7|o7f>60@ l {kcJU&|׎s v7VLA#;mqS +Qꈚl)1VD/|߳ h17_\˹?C ySXT0%M@-A-F80esp$r`wvXNg]*,wr1Nț\ŢJ)l +j j1)sT(e{_qy8 yߞoa ZaZ@ +FtAHpxEѕ I=C6j2bs+-$Ț]a:C+LH/hfZm +#9ݿ^_A 4{7X?Ͽ }n ٿ ,ߣh]e; +ك>CWnpDb~_po5ڿP aenZ( $ݠib0 QSw6Ā}.W`ri aenZ( $ݛZpϿ/1Ͽ>#E=(4ND\-fi[ۇe0Hbg ^H +y['Lf +KSDD)xn}XXou}_? ٿ{N7 ab``yP"]S˚"r`j GZy͉mŢTxrP9m0HAbv沦H,9Dy껿y7fw"8zmv盿~0}jߣ@J,N;=˛|@htEYRעQ)-1J &2Cqg2XvzZA au׿W t~^r?E7w){$ ґ6J12Z +:9pA\10O#Xt% +IjFX9QA'=E)n*-PP]V>x7_ u/C#^AF[A9r+Чvj<#;Sg&MaZ3+q'$eJ #JíIĕxSR;5UCA߮n0k uq];7a;eCSh ӡcI<31YTHh *Jy`@֜jh/d I!)2ٿ/ X׿ ӊ|( 7Xn0 e#8n0H{|ۿ%,dH D;>%A:nԁJ1S1(MQ&8ԜRePGz$0l阺Sf"( ~7?> >?ck_iBz0V +a :4iatJՏZ9\)pId V%K>|pu0[lծnCFTQkz}Wdz/ţ`yn?iP;^`5;kb1O$6!@IABU4Ґ.H膜?e Jx*-:np  :n > o@wo>>5Y"Gn`s±$pLV`ԁl t>GYEHϪ=|9r[]4%qa~A< O~ ~7zx4S64. KDSĠҶ09C#kV*v0gM-m<%͆tʆF٥9ahx*R[ږ>SF:$"_)^_ٿn o D2[,L΁Ja&m ~J]K CH\́Qb 5x~iRCB-sV09*D%t)u- ZP"q(x}| a ~sw<^?Gh$8P+ѤҊg(TLi!pQh<0D; !u#b:RZAn0ؿng ~ko_|n­ yd# +0ON{cLG9+(Bvʀ! bEGi`6a +0ON{cLG.u}履_0`ߧ8'` v78s{mD #Gj 6O9>Јʊ[_q* CX.ԍr$ȑv6`4bn ٿ}kn G;7҃X0zzS|&F#I=r%nЩҕD¨nu3:`20[lՎ8Phiatz +:b_?g}cW]A '< R H*vEiF@egrpuC79k+[e!iK* Kj<1iОu ݰGpݿۿ<ڽZϿn o=4m&`!5h"U +7AD˹qH ׀ +!P&A5j[]4m&`!5h"U +7h _znڿn_ohb8C WT+75HL) _K#e)(:YgL`q-Y)V nQkD;S7(_h{xBnzkn} h兣xT)@f-1$a%jԉ9RIÚ +5X%:<-}āԌ`%$DmP:1G/y-A߮~@zA378svy/q)NtDuf(` ިMLi:AlE dHDWh^֕ \ ºpS3wf0M i_]և_XIo<|wn#7 -aK +̑`c BZ)뮝@Wn,V9X{ +tXdXCs4tЧwʺk!bR/7ڿO 1 Jڿ/$]瞇Bz1R0L#­P]QS c %hG w.JHHVXkLPI !Q)N V`Ԩ=oCt_??/o7_@=ebi68j5@&wuDCK!h%uİ3ceL, ۡ&Gܵ(d ϿޠC wio>H\= +M RSA +JB)Phb\!dP_k*zvB'Y;bR;a"@EA Dj*HAU(M+ *q n  y#c{A[V Ar-K +V ̩K3D[f)h5i 㻁f[F.hHFҺttGn0n?]R 'ǰsFbDShA֩+\Rvi +&"%; jMhr0 ( XL#cϿwvvI X} ޽AjT(3rmH< &AC DH^a|)T Y9F)b"(3.B\0]21#*цb4oϿ mAn tۿuA9g1%icl:a^hC' F#"7г*CG֭HBN Oh&f;th`4"b1QuϿn0O58 ~73ۿ=( a8HTP\qu1')ԋvLa:@ɠg, jp4 +6o"5cTSAqEŜR?_o`n =7q{Y>ڿ ~1Z%O3 *Q 7/;:aջF)ȠB%:aZl9BZDTP9#pcsqp &KP9z@i7ۿQ 6!a*GTDsL8I%[Lq?b:%E[:Pt#7Qt#$L9Ce5shWzc  /o@ |tK1(BV#3ޝIrWnqw 6b-ľ ZO]53όZR75;v3*Gdx"k`D**1*&@΢*Ѧj9uAF +Uժ5!*x : +DN%!vb`D**1*&@΢*Ѧb'oh87\uOf>&O`hz$=CgX85i*knQ5e1=pAOE:icctTtCoo {? W IR2xHVʋ"Z[-1%Z=|G䆜SʈB@T'p#RV^o"lLD-ro\gϿn pmfShp~m~e]C¨A Gs–>KRMxu>ZDlD,d|iZҊT.<AU#@-},*@M}p չ^?w|S |yϞ_oPw? V M[)(?D-(KSL(P!bXXFʉ0KdZWDXXJРhBJ DI !jwD3>;x`uiOhQR#c~`[kOŊI:F 294Ȑ'í ⰥWppd3Jul=+"$* 6$vyݛA^?/0ޠ|ny.>9bX1XԔa&b +[ a͆TtbP+(ڪ[}4!D8pİb))+`kLMpI1k@z B7ۿOon{01,D9m`De 4n:expi"}͔#7hu28rɃaX֝rx(8 liHuʲ3Sڿq{ߧ]}ߐa7ihH!udj &`/Qj@ą:ĕ(Ԓ#"aX:ƺ@o hB*&&07uǫ] ,As{@%R!Gdxdt pK K\AV;}0%0ʀi6*;8cYr@jq  30NS7Vٿ_mBڿ~߽nO =-CbqsxbgܐrL߁N +PȇStAPWn`h"aP=X=7#w`)~g~ǯzHw~n :߿O;Pz dm :C4MTcky]'J'M@t9EUqSdt6\QB&5oߟ ?Dknv}ٿ}}h N6)oTA-ʐ2!Phy4= bhO_j ;MH;(=>oso|]O.Pe cj5q0@GꚓR EȨ TT ]@ic+K: +TYh7FQ #J t9Y R'7877aٿ;zҡ,O٠R9Ü"88MX-2 +N:Uz:\(QA1 W]IgQfWno_83yzFoϿ{vay$rb0FX3$Jԩsh QЈQRHS4BZDw4AQ2K`8gI +#:*S_f{} (AxvQ>Qb`$bbh)vN#,ӗAP`^GT]j3p@X@=&$X-q050Z:87nۿz}7~B\pDT»F9*eTdipaU:>EuE7ty +Cx(T\#윊,mCx~@vo7?3L\{߹nz}t=pup^eɁB881PuI@ALٺTC W +BM55PLp*Oaĉ*|ЬKx `opϿ]_{߻;'iO!l)IC) 'I-J# +#%"RIB@jvO\#CCR)&4R$lVOL3k; m_O ooP32ހv}o7|;<ȲVZBոEa΀t:AS,:&qP[W@UdPl5@hX 3`4"_߮V ^`y߮!X@MM8Wȸ2֠P +P&jQzt<<8qllW-pk ۚ(qXqeRAšF#M/`h~:?` {  z}ezf~A7+rhdRQCpP`zQDu'5H$!h + +ɍ򊨜+Y-@4)) o7Gk=n~~JVءlp*0gZ2!N T'WWP C H7Eg"JC`"T&E9qaΚ02?c0{u?g,jJr k+F&5#Z[ +ZܡV[ !!e@#:p(UYԔAPVLjfGh>s}3|}} s oivhOwwh*EBgrLEb + 1mp +mћhե`*Uk $.Tkzv/v^a1)?io>_] 4P%-&5pRMD B<:W(brjB. ;hjI9\eDF_w}j>7A}ߠ3ݿ9ܧhuB(zP\HRPmpo>yy@JUq +T6&@ +ȸ +a ++ѤFVaT.aD4Â'Mb4‚GeSR#QC4X;G‘jia +0G*BZ0"EDZaA 挓&1п{{o7Ou 7|ew X1VMADU-:6s"12&`dX5YW` T|0rw7$8>Әwn{S zԕ,ӗd #A'JWS!EGǨYp"ԃK8@xHoQ}r2 +ca@U s}krڽ>ٿ8!< qj"'HPUհFB(μ2UV)I )"#ʜ,jHD,O.:a9P#C97_Ͽwހs(?6߳?=^ώ=\%V#Se%`[+UjD\./P'}ңʒn4| Gvڲ*l'(c-CZR~xpw@;Agg{znzu 7zn X>>!d2Ф,@T=Tb+bt舢80X(v`Qe RLCgAjP: TPU0oact} ﭿn`ɧUK# el g*iPPja pĕHᨢ x7OZŻ4 yRvp&iݝU߹?W{߹>.s}@( p aDmg]jjр"e-91O!CE6h`ZVV$#|Qܬ +FԖxլ (OXހ|y}v{ogק8ER|&a!!23nZ?9 +Y9&Ui@ER|&a!!23nZn^w}Hߧ;77p߮##*nϟi8@es"%R" Vt[E rǘsޑ]8zΛ#T6*Y2N+U* M7w` ^zu7=vfFV:885*d JP)B¼hM5S&Ѭ`J#d 82kuqpjT͕$' #R>&WwAgnznoP/=GRoSDHJ"aΰZ,͆FP6"c* 5YjP PSDHJ"aΰZ,Me_7 +_o`\S7}_K[T(ՠGaZ$a–XGL +PP)&[ UUkX;%-*jP0-Ͱ@a|VcO ݿ?;o`} ٿs=rߡ@ΨuCE%,*$E-4r(# J0 +S#z,@[BtFDU"j Kʣ%V ~謿_L =o7y1/#,ut1̀^2M6R$B[ QR#RC`&VT4zy@7~hH.`׿yxk vC_7A̺ qUP.;E5Wr 0nLT!0j)D) YH.s.T!5څaM_}oh_{n0ؿϼl>z }7n 0{#V*"OtVPoUSBJUI`V!MAKjL +j!%bE]œv(TLtVPoUSBvoXu} ߯=JRb :nhJl!khFw4T[SQ}A'b[)hO V VԍUB"&Uީ4\mwux~@g7H,4Oâ[Ł٠*cD uGR*$9XW>dZ.) %͆#2Vq`6n0 s_78ǰ= ~ߞW~LGZrUbP%!T9\+- +Ez":9:tf(c-wl_jCϿwl?AGSq9;# d$IJ5,(ae,$&dAT3EPHHgF9GB\vFLIjYPXH,oϿ輚]Y{mߛ |i~Cyau"\e*QPGKUj2B-*!rRoMuAY1p4*$fWClJdGaaSKn0|~C!3 ~C_wDx4Xˠ!'hU"|iuYar@'$RFR\ 9Sttao?{=>훿?Ozmz>?q_ނC%d,eNsR JtaH1':+bj$-sDY󪚄Dyaf'9)b: H?r'7$^_= ŦBY\YԊ(7e'Y-a-YpH0<MlsDH%F"PHljQEW-bA +jk iIf~X߹A}ֹ>lw0n0|}£FT@ꦄӨ@,axi8G4Mje@8ձA6"|R#V +P215M Q%P#TY |m w~F7 q@9e@TMEX8x fILbP9 9$HD(HJ2(dCV!rʀL+8m:p ̒R]`>`r@3B,'[t|JIzJ6GF$`bd$+ Ѧ@3B,'[t|JIzJ6/n0;7`d + hF[#.C*O3|eDW%tC4xpHE>d>U \Ⱥ߿/^?~Ê^9Fm4]7;aԙdAMdAދ*%XȩD|=в9DO +GM1aԙb -Nv佨+Y߮W;|+o~7>w ;P<: mIZDq Ts\5{N zᄒz)q* _X57 ?27z)0X3XP³0eh1uH;RE-a #&n,[EGK+EXP³0eh1??s'/ݿ?~ot!shjI\AL*:@bpJXEPT +tpz;4rxډQ!!*5\@Q$ +AOiBh 18%tc+Wu f~S0/_as>{EDրQTeLuޙUDFT<8 %M:g)'Ž*$JX*#,`ά'"a^W3?_pꎿ|r ݗW=:e(E+̨) G RH\EЄLcZ!qhpN,uEY\k5(:G+̨) G RH\Ex흗Wo^hs_}o?_A$TA$ZŜ( C A"*&hrB#`@HJ4SPmd%%e1P)C݆.{ӯo=eӧOGFs(vRG*#RM*59:CpdU$czr$1e9^>* !28IfJ5P[@qP=fw峷7޾lno_1GU[JM8 %Po\)#P7ec4I + Pfj[ +B+C4ejR8yBbIj(SjS {۾sw./~_.OgOnx3x̸TtDi KP[6lSuqt7 CKՉr0"28:a Ш(-a)76!m;nmھ.}~4/Uv>zO ĉj OX5JEDR):KXB\MuR-ò^ƻ +> 5颦ZA.N 0[ۿ߼:}}~~]`/ Ͽno7߽OYB +uCb4 +p"B6f:+HekoezXK !a,: :|p'C[#HTe4`&'Q-?iÙ Zq 8fxA6,b!+|oS?|YջOuy~w)+11v8`G)aZNZ$}`C@LiZT^Pzwp,Oȗ T`*p;O? 曯{?7___+'yuo@w +߁J_Kтf40$%.P3tU +4VV`1id)W._N`ʿڊ +3O26睏a=7n7?{r^`2FD+'TȠŋ~*0D`|*؄So#6g0V +.b`OurEwPs{hk'e5W1|×=~ч ml_Ͼm_/,{7wo`2zo)C6؀NQfr@b :$ $İ<0_W"{q}<.;Ç m^d(e/s X+᫯(%ksϼp9{]{+}>'T} _U!U46@Y[.'чu7Z>FR!OUI`"ؙ|<`c 6qf`tX0//x܏? ߻7ٿ < |aSh&@s & Q9 䄴5Åo9)Fd_Nq\D_C']}4Jm6U]2T.FhX6i#rp"GFRژ|b_E%',8^Vz`f| |?Qч"|}wOޙk+coOmߞ},P 7?T~;z=2AB$":C,z Ľ13QbS 6̔9GNAN/.BWZVclFZ{k#l /n??ixo{6K='ߵkcz 7y JO; RSi<т?Hȡ"Oy:NERr) FZ]fIր7ٗHV6$/ۘ}$>l!^7[|w9 +L|}v6c~0{Χag{ 8{X7H.ÍuM6B_\ſ-Zx<<2ؕ4#`e\heqD^~Ev'/O򀣌0QfړYf' ׋\X9{U+^zIL.Yٻ?=W0cߑއ+9*zX`i˃ă.KӅoNz v2͙F*-偍9L9ƅ} V2^#%#is2s|/OKixa5/2fr(3%'KN_ڶ[;wݝw58DO}[? <8&:$v%O7/MrHƵ##و*+ɌJ6n&7#\d3Srs_UOXݗ3#MN'O)q +(rd}:ZC/2Es 5#3?9 ?qs7sܽ3N>BsWXowg3xɈld$_ڝ\rŃuEK)sܴ33\eۜ,>/4nٚ^F;koven7Y9f^;lKV2 gm7mF*+7& sDSR\hN^~3w+ WhoB7zw};jf#1״⋇Yn~c('K&|xs9%]V.;Ol} ;?7'6悗\8+e`倏Х6?x/3&?o`1l0~qlj`8Y Ήoq %oz{?`Vv \0#\<Z.QN^e[n]e |坛ژ\/ϳ3+ư;3'KYfቓ&v%=yn|;|r!Sy&@'-{Hl\?4  NVx 6'+Ld9muɓwK/rsf$//7U>d/s73I^Cd k(ؔg/dlA>VrY)89t.p߅c<25oϱfn^~9)ք' f +y]i]k3KlͽsN=flk5X9ࢋ<']9`r53+7Zq&Qbfg:<NڜQ iUpVsz7FMo^z= Hg{qVf>*ɓwZ9p瀏$/&K%0򂍹nzT 5t$/<V-9^LK#/S}C%򑙾ְwPq܇QR(oЇP v^doHszΔΓw\7@\+wc'a傟?zy2؜ 8 ;01]h "ycop| _۾[0Z@X=Ö?FY1y{ +ÌY?y;QNa僙'yyJx}<~1k ^R,XJvJ[AO8s$ 3Ȣ۲Jăy-80"x>_4_{\_a_bP Z<}O7WEL@ܼ'ɒ%'999^ 0+LnRa"5˳7]d K,ႅ%_I./LkҾhC_]_gH$Mv>?.?i;5x!ͨ<62py;0{spq 3 +rJRǜी!VJVeiO.$όo?U[拄a#*L=?;#lPF I;sٓMX9&.g(+# u.q#zA?X/v%%6SseUK/; ^T6b)}2ؗ9? ^v=[s d ٹVck(C88mCSw0Ub!o*}}}}3.0I9,.^Qh0`O<7/ ߊ?wTDG/MbM@K= W>Fa']` A\>|SKicyM&|C'Wچd0o mY8|r0# R^|r@!8XeVX|awO%pQ{/9 > +stream +JFIFICC_PROFILE0mntrRGB XYZ acsp- desc$rXYZgXYZ(bXYZ<wtptPrTRCd(gTRCd(bTRCd(cprt rSKk ˸y㌰OK?$=1|#kһ~sΛ%t^L*3ri;׋ڜS^#S{@($^%ѷ .mݵWcVƩ0]GW)::`2x>#5h IEͿE.=-*w!eĉX +=*w K#D;OL(Ų$S6?134^N./ȑ$HbGrHȖܬ0і=+>5ͽD92Wey"nhVBɖaҴ} +{-٦y8|Hm. *0=AY^I- ztkĒ4eDZ{rY.=.\ĶԲHZPd֬@a +*xl]ObYy-LF7˹lh %9r/,/. +̈b$;JD$1"bp)WMׯn-o%ތLd$Ŏ*A\ =SGi6ɿi#.+ "-FBV7@Ҭc{c,cFsX0خ +^cOcyiby!e,36Xd +Ut'еymJKZ t{wS4`ޒ ֮zw 1cQer +j!Aa%V(GCٵ +[^Ħ MV7b(\RBLMGT[߼G<]=yz,w Լ=]yig|Yq(;kJ!T%C`uyܯEܒ$R xwWěpR-wİlXa3c"2Uv &pI Y%YC+`*A BAImiK\$`%vHǎT6Cym$6ԛQ Na_N1Ysgx/gx1U_*vĝnYxZFFD[{ybZ8Wt I'$[`]@rA,8;Ƨh*R) قEhK{%Fٛ%Ke!FGqu$ )im#1.ْ08=Ñy[= r8B$-!8 b5ג\bXd2̱#DW%*9m&7ye[B(gȏ͑)E+yZ1ܪ]\' ͐G9QCxsHJN&=>iE"*b8YPb|5Ӵ+_;[ۨ`F@I rBjW +5;ԧk_(ߣWky* r9Ns, ԌZ'w0q(a5s OP[69nQd⻓s'>tma0UNefX3E+&j9O\H1Θge1u'A o\ilw)H`h 9V XȍuJѵ{nu;t[b#n_=ȋļ*IW19<½-j7V9璹y'gm4Hum#T\Zn u+I$`3D߉W[]-nɤbV7A pѪdS59-ceȴiV28 A>t-JKBo l0ArYr]킓o`FFXdrk,VZP`Z^ܼcGJ4a +6bBoP.lR99wmNmіPH;3ũ麮=^cqqyѬ\\gDtR->X&]KÒjͤAoLiw YI YA̠mqRM;id V0O,vp: Z~ocX]+Hb9Y|,Ξ['PQY$"ٽ7F3)8suy5 Ӵ22.=[@;WE7-afrϲ4GNϠ+CK\] }B{FXYUG6Y32qy7 +|nukkPu$2-@$ʕ +)h0Su7n乍KV/ ͹ @G8C-GldDܕ#GmjmyNV%\F`ͼ\JPCao-Qq'B5o.[λՃ* +\aAxHZxk -NacZM;D)22bvkXmm@ekD28wL[W>X^}RH]-aз`KT6ryϷ_Y%׬.{G=[Сث@́H#YZnop!g])P wVdW$t+?zn!B%A ~ Z_d\L4Wv,JB v噌XOp.ey^2sGgV|f(upNqUc>t{==(;W蠆?=YR =͎ ^&5eI#AP='nH0 k-DwE۷{g$61:[)Abx9 |nxVD9BF.1>WRIlA7`󑃻 Fyokdڲ'qnKٛ~R +ocPnfب\2d2')$+L 91`@*zޱk}ޮFw?O"Mb z*݂ސ}TdcFQڼ`(|sX=V@ +*=X,\o$:^dSr k!z2y9h]b[1߿̜z{ ͟-,8'yF$Vnph$`~bfoްǰA$I;GMGqQz չ@_sn?lV'?1PI &j- +:=kS<0㨯H ""'Wڳ^=(;j1XѤͼ.6NܒMj<&uH_.9$+& +r ո)j(RPwy9횸jl %?2 :4pѪ<S\CR ܋>Jh|;`&F:`VnkvcZF"[I(V GAA`tn ]Mi-Ni!cU!Qdu+]D#>'9%O.`oY[rX39`?(lksNl$E2V.u{7:_8-ی"CrP+a&- Ӯk{k$J0=@99! extgI.䑛h+x3q^2*a<рp$?AgU=!gvkx85*:t֠nII_bđ#t1'PNV +qHɟwA^G_ zsTy?ǃp1Lcێ:qQڂ[ P|A5N=@j:dSqQ׾zJ zӡSE#⟽ʠqߥ;Ij:SNr1QO(*GN GzPOzzPO?FhzvsCP}PRM3NҔRT{)PuQCJ:uOqRzuiai8{s3ƺEͽŬHdGYmG| +Hノ;ݰݭySyd$aG 7]T<< |Ci_Ob}<֛m2(YrP[͂隥Ŋ_Zj u#9220N4A4Z于rG--i^K"wB PM|&+&U| Hln Y ֝9Z & Kk(ZtYJ0 )e+OPki daG<8D(*(±P )OOFyO9uJS)(?JPwOTS杨zt1zCӽ)ځJ~})()JSE?|ޟ))@(?JPwOTS杨$~pp@qu]<.|\ ;d"qWت ޲iM%4Lă@o$u2|vvF`61sA=xSA>8;OAQJP>)N3@=)J=LP?ڟ@NN +RZcq@?zR)N +Sa@Nހ1S=@A=E)@8P(1@j|RևS:;)J(=QyGG]}8OI%E R0;+!<[v2qx֠!9=H(_Cc dcW'Gb#d^\<\xR&X7hcEA$8(]PAi" +wo c*G;@F)ZɺfS#|,xקoDn2AvGͼfi"dPeٴSx5(b,BĐfx}q'dO#zTFMqw~(s@)@>(h~((uށJuR@>:>iڜv4J +P)Oϊgӵ?C&iޟ9RR4 +|S +|ҁ:҇@:P)Jvfih59GyfܣzjL6Y;@ o5"bYFG ' pO ^N r: +"F4x)-=DrqA<,nax-kDʚXTT>,91@0 M'M 5YNYBX#ŧ]A:m,sc_&VXaa $`Y(icjH'hP:tt;;;s귗O`, $"H +1m1H'a. %g{3dsAsǷZԞמ;<{>i߷4z18vh((ڄP~ڔ@<ӭ?jw@(iߚvj(i@8@4Nا +R ҔqJP>)R)߷4z18vh((ڄP~ڔ@<ӭ?jw@(iߚvj1CSA#q޶n4pcENGzqVŘx2mBXx#\jO"XQ-wLP&7E*#_!ϋo^& =m")MޟQ%dM2~uA`O|"iϲ_)@|P;HbaNtYnD>K-ґ0ڻn8pPyrm^ y}g{i2'EʇR x(>Kaƙ`k+a ďQmז OM<}jb =(#ↆҔOj4?~)N|SZ)ޔJRqN(ӵ;RNԧ~~@4=iN ~tPSSOΙ|PҔҔOj4?~)N|SZ)ޔJRqN(ӷ;S猜szeUw :{bxH_07~F701v{yC9 rNa'2]EssGkvt" nUULovo,4 +\DWSélVAGDVQ#+0,F88ag{m.O$&v \*&ep7b8a-#-y\Em/N2G#Tp oSe,sn-摌1 >@ +FsGlt$FV9J|TTP)LSP4 + +c֔?jPRJRއ(:❾JqJ:sN}Lri@:SCӵ>i@;tS(RJgڟ|҇PS4Pޟ +R=h@=*\Tހs^g+ O%|bF9'= FAo lH]&!} +ȅeI,VThէDS]Rswvt(yrȨYEU,JpBsVKKd8/̨cA'=B$66"A5sFC2 $zi@Zt'yKhHpۀAld] gS-Ưkl[hfL;%؅GYݱ +ah*pNGu9k!Ýͻ#pGZ4OlTzRJ +vt<ڟ9R(4?z +P:R)ߊRCJP;O~(")ޔR4h;ނ8w┠PҔR:Az)+AHcְkC?n?ڂMusd#r[6Q:)0,GT ++hHZH3ʰZ<dhfiN4=)Nhf}ޟzޔRNԧ_)ߚ(hh)}c@?ZP)Niځޟzw~TCOCJwRJ:tn)@ZP9)f)ӯ;@ҟjP)ڔ@;@ :1L}J): ǫ>3=>k̟۽f7Kt'?zZ] |{E9K +Ba*KB[pz̋5IJ vYbX<(I'ܚ"uMHW31/#/quFC!{ˉ.e-b%UA[㯵 K?_T0ڂ?J}iJJwZ(z@zSR> +v;uӽ3NҔ@❩Ҕ + + +v|ҙ4 +RN;QSӭ=iS)P)Oʟz;Pҁڝ:ҁNiNOzb҂ON*<`xYFcۚ nh.1nKpTH݁;K(EWL-q+Z$p&4òxwϰW}ZKx&&-<,r6cvT6df6H-f+(H7*݂A˫ ݵΒ iw2.ds۪id䍌3c#n^Dv&`aq;VϝDLBpArBq翹+9ڽؤʺ/9<`WưZ# +#Y=HSV3L<-< YژlңHF +p'#"e RHۜ|sVs[r.H!cݳq w)@>|u\RJv(攥~E (z& +Sޟ~>(<Ҕ +|SiNPӥ(JP)O(iAR)@)QA=iCJ)@=ނ}sxh=%$l҃xR xI${c0F$* 06{zSڔ;P)JP)OΔ +v4P)JtS☥l)Nh(ZP;t)(>i:PJx;RiO3@ޔvN +R +|S> +R()@=k%#a 1d7/1y$,@z@bn(Nւ)JP)LP:Ҕ@z(4(d~9={Pl٣\L du,vz8UƑMW50J {y\@84ă;3Ȫ` +SNI g?oZZ[XiWib9hW'˘\mi +yvS)!ym6aIv¥M6 +jmt4]9yͅ_ɗD&3360wpw(awlM5w.T^3puf!0SQ7vȰN]N#c$s +.AA91)@SQSP@ҙCS4R@)?ߵ(zP^N)ށOچSzTtb?z|S?jP;PTxP3J~y4 }yɧSNԦ9(*~j*zzS<(f +R?ZZ +ڙi;)PP*sJVJzg=s5#Nqӊ 0.YC ?o񚻶 oZM6G8Cw$ ieEP8@Hw8a%B}zy,`e搼-eҰO;!Dh!rNIP(*Ud׼M2ȋK%TaԠ{wn)@)@(*{{j4~)@)N +j8j3RxҠu8O*(֟z|P)Oʟj}P)J?*wvڔn(($e$8灚+G`VV%A\mټkwioX\𱻶l\BZ$A(0F@#c XՏoQCO(A~t;:PJwOJj:ԁ棾8${=(GR3רi? g8AOOZ(#N0yS5ϰҤ O&ԬO8Vj ;udg?0q׮h cZ)W"΅y*Tӷփр\IS_rЙpy^zxg{Tc 5ɹFLkF ߭# *$02nO=OzkIn(x98b#Ebwuz`ؠ sL298jKfD6D{YH8>ǥDn_9Dْ2;w@7OS1JVڠs[6pM:Ȍ ;up9|3 3˺"6m3em;PX!rBm 鶴7MfHe]bI$k%]"}Yϫ +Y5[AJ(e  IFÕl6J+g{irٚk;Sk܆'2#ofV \dVͤe4H$)?]4ԁ8c̈C*6-WM5 wF:ZYߏ.+7u&Y`,,yaxϘ3g/%:U6rB2UP^VN{.h{K;Zi#ކ4>h28v n4+<'MQۑ_n:c5Ji"-NL6zE' ʢHݜZĻ?5ԈjOehqx-HpaHH©QPs{ ]u+kUާ%j,beYL3 i:K-Fds ĥtE@<A G^kb dw.Bs`{{rbHG6 erz(UC2qԑk<sqׅ/luI-oM<\GpB˸;F2 M(:wYR\ەpVEZ6ScuR*$H +^:#-*8V M^YGyb>dUQU%X'u,-o"IdաYcDL4^ODIJL f9 Fԕ*Fݼp?J.cK> +MKwe2A#n-I+)G27V( xRQ.K-5EEl6#(d#n⮭*ՅvҼ60rT1:njYYëNhX\QLѪ6970eIRL2E-7Ml&+=WzBamb-0(Նrb@ېp2zg^PB@g~jj"+i4:Dv2Mq2vd R(s{rsX/ ~TUޡ$i8W4V/,]q [;Ap{<ddU61=1c8AVB|+1 ʦ0J{בP3zux\Hoknqsn~ko#ɫnݞ2s*;;2>YEDe|o0ko=XZ1`턶hnWS)KUtT`98\H'׭miOsq +E#I"%pT2zb|zޣ Gi(3nΠ3m+{,K6J. 82HG4/kg9- psQK m؀wR՝s"!HKK&1(  bޠ0Miktid0F"FXV` {WyIy]yu&7Iܪ})+ eHٕX xI+.y/<РIm!d$1REIPXb%2 34T!Ljہfg/(jriai2 [Z͛xL1!X۸tܹf9$ܭr7#f<$:Ztŕy[3KD2opYAv2 vF+ Yj>sr2Y'cy7E)f* J#v<'@f3Ƀ "A[i7'e%G_Pi&m*`5;!HSćfc{ɷyfqV95[R{BH噙UcۛMò#KiLh8X 0T-Ĥ c\ѠkӮ.X.FA1ٕLL fB?Y!IeD<-Gaw$2B$yq+1"5[js1IAӚ7yf_Kyt qs # E#[vK-ǽHFT8Ԡ^O9}%䵒+O H$ޙpc 1(^l%|mlcʰ<bd|2RPrP[p&|{=mI$kf|!wucw]kfM> + /Subtype /Form + /Resources << /Pattern << /P4 << /Matrix [ 0.140603 -2.801161 2.801161 0.140603 1009.813354 381.880463 ] + /Shading << /Coords [ 0.000000 0.000000 1.000000 0.000000 ] + /ColorSpace 288 0 R + /Function 289 0 R + /Domain [ 0.000000 1.000000 ] + /ShadingType 2 + /Extend [ true true ] + >> + /PatternType 2 + /Type /Pattern + >> + /P3 << /Matrix [ 28.792206 1.445216 -1.445216 28.792206 1100.380737 360.671051 ] + /Shading << /Coords [ 0.000000 0.000000 1.000000 0.000000 ] + /ColorSpace 288 0 R + /Function 291 0 R + /Domain [ 0.000000 1.000000 ] + /ShadingType 2 + /Extend [ true true ] + >> + /PatternType 2 + /Type /Pattern + >> + /P2 << /Matrix [ -100.873024 -5.063283 -5.063283 100.873024 1219.217773 294.373627 ] + /Shading << /Coords [ 0.000000 0.000000 1.000000 0.000000 ] + /ColorSpace 288 0 R + /Function 293 0 R + /Domain [ 0.000000 1.000000 ] + /ShadingType 2 + /Extend [ true true ] + >> + /PatternType 2 + /Type /Pattern + >> + /P1 << /Matrix [ 100.873009 5.063294 -5.063294 100.873009 1017.522034 284.249573 ] + /Shading << /Coords [ 0.000000 0.000000 1.000000 0.000000 ] + /ColorSpace 288 0 R + /Function 295 0 R + /Domain [ 0.000000 1.000000 ] + /ShadingType 2 + /Extend [ true true ] + >> + /PatternType 2 + /Type /Pattern + >> + >> + /ColorSpace << /C1 299 0 R >> + /ExtGState << /E5 << /SMask << /Type /Mask + /G 302 0 R + /S /Luminosity + >> + /Type /ExtGState + >> + /E4 << /ca 0.400000 >> + /E2 << /SMask << /Type /Mask + /G 321 0 R + /S /Alpha + /TR 323 0 R + >> + /Type /ExtGState + >> + /E3 << /SMask << /Type /Mask + /G 328 0 R + /S /Alpha + >> + /Type /ExtGState + >> + /E1 << /SMask << /Type /Mask + /G 333 0 R + /S /Alpha + >> + /Type /ExtGState + >> + >> + /XObject << /X8 338 0 R + /X2 359 0 R + /X7 342 0 R + /X5 351 0 R + /X4 355 0 R + /X6 363 0 R + /X3 386 0 R + /X1 390 0 R + >> + >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +xՙ͎ )S*YT:̼?Q)vgYRyx(QϏ!?Hjt*(HshxW9ǟrj*Ǟ05GvriHۭ8 1!f5_s.GrVlOzpGeR74@+l}瑦c'%G=pPC/;UNlj&v9<1\! A1k:;&Z4Kܢ’g]%&dsaL<.f_|vze5= y*8$PoJE.O̠fKA?VhdɃ\:FD#"C(5b5X<(~BQ;}Oh7Xi cq10K` ̼2Kw"7rޓjx8-1, t}ouZN5=Bz9{ ] 'H%I:;}"ҽ2.f_tR,6߉86Ę}Egmu~(,;$?OǓ5kI%.Lzxl:O[S:Rh";ԁN9I 6:VP\F@>0w &`#|Ow6A߰-f{8-_6 +=Mzʚ^815)xIf8f߱/֨4S9>qQ+V|ޚ0;`>3F4 }iF[ > +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +395 0 obj + 2567 +endobj + +396 0 obj + [ /ICCBased 394 0 R ] +endobj + +397 0 obj + << /Filter /FlateDecode + /Type /XObject + /Length 398 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 396 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +x[$ɒEL7eChp_#2kN05SYdh_?oׯߖ~cۮr}\[}߯͏u<_|܏u_?q/~vl^\e/e?~?/}oXu/|{.ez\q8ﲼ?muzo~Ym{u}mmnXo~]/vm~,o-\ͷ8f]yb};`'|wx?n]KwK.o=\G?vCG?j/W{ 0_noQn1^v'v\ퟎFv]u[c߈ѕ m`o~,~qe"2W{v+Uzw'rv{o^smv}Y/o}ٸȶc߷ >ޝCzm]㶭.toWz\<<޷v{~9cwE; o|cNzzk{?e?!4\T{/^sc=,X ُJ~~߇}xo;g C*vzroa_oNF,7)(fdc[B rͷ1|_<ɿ.U \1`Yǣ4/<%ہe;'f1V\ۚYnq]t[ X"Ql8BjCƝ JsCAf@Tvl 'C4šLMLZ)7N{guihۖA(3Hk}[-W@׭ǍxjYLm;7 +uO^/>޹HQ7u}$؁p߲xCmLhV ߀?b\%$@0q@8T,1 + >D'z o &Com^q-7\6hpnLDyZhRv|ǏB +*C.I m(n2nV~W6ୃD" ?nJ^*v.\2[zF^VCmowBn@vg=r/po=`^18z?"ӝ+÷Ay1X2s8. ]$,(%u $ہqtЭ}qﻞ=Ӂ={׻؝PL7yep~9߆C#``h) [d6$NTЍnUy_nB泼 rkqI 7X\wQ^Vb?sr8x8Հs| +FEUyooM 7n#_*A5T,_Ȫa34]X/+JOUۓw;W<@ EQ<j?'Tfd5Uoh5TBȕڕbwߦh{"Aw]p47U<jhh xI+X`H#uF $(D~S58S^[>ӑ[^/fFʰ 籃rLwL$ʠ\!Y̗>o=kC_7t.؀6u*]ga7IѓQ?H;}.~"yN +VOBFX[Yc;ZS:P`T#)-x: ]LjZec "qC2[Gỷ+`/ 3WprTeՊqӑP,k@L0uΤzx6(gs6;78 BK0.8cة c@7<Ϋ>p@-HXuKtZ(ƕut~iHaޑhp>J=w]mLK 'a-*pw6Vy<'V?}TEs.7uꂩ3I8̤vV`W2vKC$Ln}Ѓd5[|KeUyIH|W AHM9 Lr 맹T;`BYD'ꅜ@*@NؤRef*̨Ma^ ѹ)&.0JEPZPK_'en\":Ze:G] wL +[Tb +qNQ`[qZʹX@KXj$r,tm?g沞If೸[U*̧RD @1P19.BlkWFLi;#2jo`<|VR8QpNr:")[K2ea(hk=L͵ Ѕ2!32̤_8c)`@B)`xƕlV*"mbOIRF~}QKU [M +W +)/q݊kVQ7Ey<'&Ό*+>$n$UPЅwnSV́hoҋZÖ9;!Cw!dru'SR'o1E$`X4p8ZOaA*:XYW֔d> +^FNŀq|(+A$o M+ɵb;Eo +j'E#6@ZTJM1Sǐ" (p'!{Ϧ͆$'gckpu 39χǡ5c=f`k|0-A(͓mu!Q40WD Ҋf",XRhB}An#êiKJ~X3R꣜ᾪ䫪Bg2ڝra%vmSH5I`a;$ؤΰS!v-_;HUM2ګDxN>3Nx".xg HpU&C8)n_0§lH -+8/뉡oXt3.N51]K(ɻ$]Js.\(R"U=ƣr?M$Ua.XKCҾك&'T;I_4|0uI@U9e& e j`I bH2}ŬFJ ̌QXkQ{"64I'f%e `]PZ`6;%XBTx0rhU*x632m&T ѓMm s}%k\YvU:qeؕy6{NF(a^TO)B1Rz7VN1*Q : :B({W4W( z#ǭRHLjg`?R]\9v;b&8`%O V]RyT6 +jRL lgJ:z0*Ӛ `$|"oRT>&Hٞm8<";Ko` +i6 59HDyD~h~h۰#د7oE^|!ok~]] $B0o&:F/U¢ mL: +["Ql'n*XJ 36@&HmVѭ;} cKPQyVLITs~fjI{8cwAj75d +FIt7Fc/ l_I8Yw"eC`9uYa("z33]p 6 F@/Ţ}@Yz6dR]Pw-_?t,D c!aU4=Wi؉ᗜ lhJ玢e5N)빒-Chi99p.' +Up͖-:ge :_g5^0=@wz;lN%z2wWrS:k%ztKveAC sW;!`܌q٨9;S(j.@)\7E6rgwM +y!Za5+o@JbT(nFB1|V( "#{,Tx}'WxLW6v Sx'eq`{h";Q0_mDOC 1;ԂWB:?aڍx $w5Xh0 $3:9Ce%2łAHw$ivg3ˠ8+. Z-x@G`Tblt$i#A iEY{}= @ũ#ԈR8B09fswfAob#j_Qd]kuMy5knya לyj5E]I'1BقɟF:J &g$<.#U!*:KU{ۙTuЭMHq :[+]PA=վKwpz[{ yp ~4Ґ1_&ʝ0{e;@mr +PU"}"?q!HANZ(~LJAgKz%|f}%J"t.y~vIxPR%2(t]H`l4JC80}@날 yJ86hOF\<>LCVp\H Yjč y,>ey/Ogzj|fA[Q>X0#K֨g됋sTOwM"D*.ŔōslU~}6(FOB̙UڟŠ>>?z#Ͻdìl8"НاwIDrH"@a4$0ލQW]{KsJLs' dd + "InKƚ^f>mV[X o9 |y8Vw۸SE0!.ΆɈdIPԄ$=ƥ>RτV055#6#);tn +9n +qϸIis+BZFGDЈmNr(y5=={8ʈK97Fw/eRP͡_{}R~lP8 ǀr9\Re Q{2NZWGIG4F· ʰ`χPkVYj/ 9'um'OgVՁ\- cB_Q5œ68 +WPP:z9Kr鯉-]}HlV1_iXOQ_6cݴsQl载 4Coll6Ϊzйg5-އpj]BPBj+ 704dAXؘQ6 &CHR+vı),zmtMkRI:`*2}9NKJ(XVÌo8S*;*|Qc^ahjk[Q$.c]A@plP +p$sN)IlĐbhJEJ|( 7w)2˹*1KțFB|! f hf_Z-~ o<jbϥs4qO(Wls IԋЬۖ3:*vL|O:m0n/ x־ PѰD/Qw[Ѳ::-qzsyR[CNMcTCXh QT Ҋ]҈14(VcCh՘XѠo<ޙ(SV, 7I8OVHfK@=dh LQf%_XmD Lpئ-uZp +^Ո[G.]F>cst"U?[AUbE;Y|6cPk8.amu YXWg[(37'Bu-a)j^#o*%ZFͦful\plv΃ʐ_|Q ]}` sc"|EBkxBd`1E%Y\ e'Q'Ck9+N>r;Zi +dslrԼ 6Imfu~~Oo(mPj_mU,6j-A%2@k!XFy"DR9YYHv" WS՝P9#Iql 9Vj(RZT5diR7iA:gӁ;`]y_*r&3Z).ct}rV/ԥF}E'ɑAIe~d|tqKESD%+D*^2`WĜ5aT6xu!9GIUF``֘hl ɃOظw?Ƕ jK&o28J.rdSZzvMe耳, v_0ъw]S݉ap`QHhQ]dbϙLpf`PrR4ƀG]tG)kdW*hk7Q: +<&-Ҹn59"h**3hR}Bu䋉sDh͙7ġ+6Fs0ut*+3F15-,|0G}FնEFEn5Q7&Z?)9bcAKwL`wnS9!TLzF 釬(FڔX5WVI'su{6f)1Ზj2 {v-#6R䏼O209%̿l4@i8nxTGҀ̏Cw4Q(l P9(J]K%A /0ԺQc$Czuƻ $~2&K4 t((Ƕg'ۍ9n# jp"t)sEԍA ~)lF+y,iu'0{۴C8{ʊ$TجTkKU/ e<ֱ,[d;@$9L\ rx# 7&j]s\HFK}%%EK`;`i iLv"`e AjhP-%o:%'gpL-2ֽ@ QL`wnCͷxǷZARم5dmMJ:;.cSvѨ/ 8ER?HzOǂ% :eOu0v{J4(lAz yVz̅Y5D:_dɳ}V*>8 _F$nB۹g JΨ>We륆jRQEj8M[oRsbauCĺ,i8tELXrg5f_3k5I + +JSe`xQfnk/ Lx ? :#4a5i"8K|#KWBAo"~oq0YukS}`LpKF R(wմts-.go ^OQzC wFįj-IF,J&¤_x#( +r@TRr@ՒqHLT +d! "&`:673wlV#[4^EI:'m)WK 8MW +E7PClIY90P(&2IM@S{FrM!!.36da5g]iPF2[pRV I%!|0r{BTKpa8ij_wUNf3y +t̬7 wTXv'AS͈]ktnU +@(-_aX 1.35>J 4ȵyO80iW8bB+E&~ w*~ƶΊ6ʗ< ~#NWP{Y dsN{<A!y,jԠQHJZ] ^7̓,Pu-gj j*Ā jzDE~ +`t+OA/{ɂI6xF 0.`g١j敎:Ic`IPuBT*_駨 ,L9N/E2?uUk]xRs[NsP[(Vr|haw>ʊ'78 vԾC<P?Ap*h}'DBKi9(_mN%*FU'ʆU!eB86&oѾ0Y h%_Q!2}K$72c$Gn|w ʄ2ɛ ۆt +hey 4źuجsd$=[@> /a7I^Ǫ6y>ea)7+ʓ1]-;3jTN,{08n{gYHĴ&76&q`~4Dz1|`3YfO}^g4=,a;hpYT>Lp8B\rШ_~?U8mܽ`W~'_~AXq?eћؒuX)/VH2>I@\w!Zg5m!`f^jUL"Yb0gԯAjm`veKRؓj,>|̹ۧqPc%8=n%N&f)t% ܩc qPيs{%R⣕ O8e1akW^`ռ|rk}Q {`]jkn2"0Oьkb2ԄS`G8(^+Pi haPǍ$Ё> "m0Si@TY+0B ""<ܻ0 +8%tJ z=E>wlX'.EgY6[ǞB2&|;,hj\wca͏uCBUZ2ȤU0P `TR(0eo[+ @{%K-yBCTduzF!>Vh1o 9du 4!(d2 u&PCB|NZ[wr?RiOy+1-@ױfA.b^ +v\ϛ@:QX8 5q'=!d{K$4VkRr:H?h԰IutӀ Qt/ՇWXq:qQKD*#Jd<ʓh 㨼r&ӳzO}XM1:2b"-, MmrnUK~NqXsRuT/-e͢ظûyg+ 0r`GH%BUr%xJ(&N]<5)e7!61 jAW(ŤSf~Gz#_#]#jgCBFiB+^w>#g9L?̶+)`,LD YS댩$ֈYXpR@Su14´  "nzAwlpUm/ta#pTQ@)$.fvM)ĩTK̗\QlB,D`!R7@T//lIjʄ-\*ES{?.>"”]QCm]brat?L5 9u&eF-6o,b,DJhoge,,ũ83=vUOŃXh-r!Sӗ V\B!~,OjjЈu8Ww\k-b+0/a!Q j@]Z:Ɩ]o\Zpvϼ@mAf8߳f+|Xwx#Xj~$^ѳP`ΗYjcz؟܉Ic +C?S<Ng7ZYRщ{[JRRn8 /JQT0*uˡGY]Jm5׶G?@A#:mΧ<"KA>`@GV%^)8T^ 2 sYvd j&^HK IE?"pઢd;Ƅ +9rSI@K3'eKVm&,Z$uR(NC l.3E$@0օ> +K0Ǎ8fGQ8/DnhIRlJZ}ƶ[d [gq50 +s6l{^U6l'߬SJ]αcq]qI14teaQx 9r~!"*CXX&'TK%֏n|ˏ[h20'SawmFq#ِ("R(HXO+ +alֽQ ';}5ǀ"A>fZ갃L%>!@]9huN,nvIj;0 A8z=I|C-ۆp VK@Y;P{9 s\r z8+`#;:)R+PCp{eEQ(PK6WW-P*d!:u(b?lZ'>#Q*"S1>Ή I/=$(3I$nga!ɠuzn.P>KIe+B%w j5A7dsKBi ِ2+/z)Yɰ2HL+B"\jPC#ucX@67?&>NY3RL\ ["J'^Anod^+l~v8GJ0f^0^ `!Tl&QS']揺 /O<5LJ|G Q3r0 weæqO< ; *jJn3^n[T\R& Es:’5 +$Y@fQ%^EecOREo¡ix a7!bOYUZr%I3!ox8 Vb ^f)KPQ7b܎>#Le*k,,Ŝ6 +sg/Y +#T;1jTd`۰ݾϧ2'vl2gt9jIG3dDU-ELsr/{q&uqk> IR:);6K _~œ'XB@XjBU_&P9B7@t"# P$S@ +n%3`[a)#М+lpA|r+<iJd;*:A!Ot8S߇gî3'M raЦ7CM8+C-)Vb +;W@ y6bi<_ ꚪ-<=:r +cR/] SڅC9]ye]w=lV5QG\,/PV :`WvoȂ)^ ŌydeP^+Y0J/%L F7j < a1cF8QT,і!KDEcrn"+8S8Upt&|+uK(|lN">f.ajH{ +śg _JUwB휋E#,щ7euXІe"MM|"ؐ!||N,h0Oi#эM1ml%Bap B~NpYyu^d 1jШQK!+PYJ^sG3-'!A6[F" X$ [/HDI=dCYvZEA5k\|h +]0Kֱ+u4: z(F)Mji$;Dxfia "rq̗{;:+ x>XN j8{[T1lwEE)z;h2X@vAv%φM_=ehX.b5].H E(Nu{^`I>t&WQ|rhSBZZU(aJ)9»'6H6gi$,xR$+.yU꙳82E/9;!=6[)lY2,& Zgq)'fJ +DJuQoȦ1q9`L%:AfxdqS)o=/p_-[٠şjf6Ʀj޼91 +E ՜WjaamJlH| hX򜼛1s-Oij +XDǬhAM(F|hA4r>?п~UwZjEKܘe9h-KsSy[6-43 +@bRڃx xX!S򑙀zG fP*H~*5jR#&cGRbX@MŽ]:eSA )RYT0=s +@UM "g,/,S]Ekf58JIwJT @YhƦJ8:4g']_LXL@ZFvOB&F)%puײD4hDwW\"?BBa#uIOnMR|Z&)\,|@4]{fML)EXPENN) B /PBc^$T6pLS T^/%4©3qsr:aWeϥp ZNlH~b02"GZJ5ɐv<1iXJ9ڠ5a)펻A6\ |d! &PyW ZxL]w>'butUg G2I42&s?a8|XXjR}IUf2ޕD-1 N +4Ha9н`k͹nlpăDuߎ-q` ]?<ʢc>հ{K,Hnzo4^J,.eֽlMS̝?hRYc1}MT=kT 5f ~ Q_s5(Ҍ/ǬY֮nqfe^dYO Gld[rf:zqE_Jx&g0s?+Y5$;2LV63VU Q쬐Yt[2Ϻxj\?^ !CdHIAF Pg1]JRq9!Sc^7uLZ=OjcEX#<#Ѻ_ar{52jIA5 +AUa&noXf듢bXSC*=mD ې`'|&+&Pp`kN %h# +L3j(lQoj& +79,t:p?(NĀB٫N"鵎Ywh?@[-pS1Oyy:('A@M2I m NG#Il\ϛ6Ԉ^XX&Ŧ#vv)Tz faru5ZbNhfe9?\N8 +YNP{|1#n>pC) +t${ܠAS{eOKtP>6ypEv@fӺ!桎Y`,V:5 ڥ@qgsX ̻xp']OJk?d4e{tI"Lt䃎NO} +6hǕa2+m)fPY$9l Ow>A #G(SwGE 9@@2$E퐤,t¸DeNh0"v-8W"-%4ޞRvw*i($Yߨn\h ʿ.h5K]@l; țEgP>ـN%N=X@lpW"o0(}L xu AM>b 0w͔]@ 8 .Pl6#2wC&T?*ȒtD6}3rc!,ܲ/ʗd8wӿ?nsVR';RӸNY-8@r[E".kxEV kLip̡>] <OzQż͆&_kP㊣,WkX59BuXsRl*:#x- NkXJ8x)ͻv[v޾3Wfw JXI>J+Y;jub8=sB] h=;܎bs(\Ӱq+ÇcT{P⤨*&8}QcLٕ/")GmTqKl$/ڌQDImAhR(؆3 [\!BFLi KTD]¥Y -c*ψ.Os86j^Q;O°T&7ARGNvN왕zllQ7h_Wd!ްw #3wPE4Hu;bhn2(EG)/,Mxa,T`l4{ia9(%d `qQßFdHW/rНY:a\ +Ai߂t"azsk)ɗx4&eU#PvG48>P#G!$Ǽ^w3d#0 Cu]W WN9hBRzB#O`y,Ow&Oju 4[P^Y'sоwq! +6Rg@)8g 8KÃBN=w.TjI];X4H C.B)pa,)@9tuW]kӠ JG IDx5>wp>_N5έ47 ww:ݻljxR~L\tDƔ&%"9R 0*Q?&DҩD?Hi!XcL0:ޏ}dYOtFil +6nU R'cb(*%n[ȉe5Qy깈54>X?<ڲu43-ͶM߈l4sv#،Sw0 +_Lr*cp4R˅44wl}B+9,ߋ1~@Z+~5wVƳ_3;=jǕ\"q򮋳/Q'ٻH48;] 怅"kijDf ME_Ă$ӆ v #EdB3),$l:H|LJiw4R'K&3_ku.u;&u=O#O#Hn@u6[Bt҆X٬vwIaӥ8XU$e럝8h}R U\.25ù(¨ L\ހm /am,Db"w粹gQd^]]7@eFoyMNe꼧9Y|Ąg ,ʻmZa> +pm\٧_cMOZD^<KVm)EX" /p^CkzFZ9dߖ$jc?-;eaK" Cֹ.0—xg' :D0|K=' @'{j +~:Qܞ/FpJmX0L9g_+_̋//eם4O'zqX}rXЉC¯Rr3iL0|9#q{v6AvG}ǔ\?!s!5'l@+5qݶʅQM^LCDonop34V \2!T=lz* +S3xkZdS|hwϥZy*l$.JSvO~#NR\}Jv=4eH36CeB}ڬsS5T+^C{Eصo${HO@ ˄pJ"' IMm"sX ׎.Xz~XnP#"]cD(V.+TLB4LF3!$36}/#u^C㍉^P]),L,vfʁgO_(P|>8i|94}ϜDW7D.py\E[;yߞKic~'?)DŽC&ae)"=9}74?.Dk^c ]إcL qP84qa2x cIi XuN:`D0 +D&Ki!qBi5-,"V&ZOO s&tz~'a.U"ҤE!fdS)=zL{mK u(Ȟ'Ĉp|^.~#{Qdqg.n +=o7 hKo+m#TmŒYE"U}P뒇B? ;z; 5^@xU#"yfxx{[=2 К(KޑiK$>?@nWF +^ ;zYQ{cҁN(iɕ:3AH:=)ۑh)qH&N_bxktRsyl.+uE (~ㄾi<{(K˚+/ +G9/e&Lt:_0Kx5CIxR-RVGM7hlI0M|t3/CO:hߑmUao`462*Nk C+zTgHNZGuM<4/ۦ3UT|OA+:j:!}S(P_3#t"z o ֹJEnD@@nRSqTDKKOipWztYӜQR Q9[A;7lPs+Gg6 (ǸKiW^H[!9(ᨷrJW*6#*;$4. so"C1V磭GËIY^vVh[Uf|* +.b1ڨ" 8 W*=)q`r)C^/Ё.FkgR?ulWR+@Nt 7ezJ#t"Ҽ9u@b];?`y,|"}e  Z R95 4F)W|ICWXMؽMЈ<-;np@IQ cB:틜ۧ +$bX4c֑KAݪGIz }ܧ$ ::5DD]:-ݬi:nكnDA9S qMȆВ[hF<< +}zŦt>) !j歋1{ +Jb =O+zbQVXݟ|'(;3l.E$#F#0[:INUЈ”XjeEeL0z g$ +R |.%]/O_dQ<Ţ +׺T= +At#0Y#\GߊwX(-D/İip|YeӲ]w&*Z~ C`TZǝ5{P+,heRFZי St| Ne}ռK8q6DYtR E7+8v7a+$[ +h#֩_#OiDM6glN#U}.hIxb +*1,X̉ eC̯INCA6g{sPIB G󦝔LcHxf6۴Sv9aJj݋hf'6uRUN/[BeR/d}9?ٻQbRLٔ;j&7E ׾}4CdvAA# d!/PANg4_. +osqtG +/jǧ W;"g&glJlgqFak -N'},\/BItXfA$#0tt*W)ld{\K&TOM֙r%6ӿ)R._0qZGVBbbmb wOqwOHjJ%kػ!_葴6~ҜL("g:?5)a]]hH=Wh#h_?C}w-k [` +˙9!m"aP5:]u'L f3OӚ~o'f&RS.g2>mZ82bzU:r&PF Ltˑ&ԝy_p<: t(=p|C[#s/EGFN~rRT8z=7m +`9¢RP-VwlHwP]XG/ZWMwIA<4~'/ + v>٨bv&B?8A$\:U\ݱ?U{@E"眦<.Ts(Y`#~!ۥ ? czdngѰ')IfP,>p9U(MfM 2Hvu;FTVO p4ϘN!24kIx4uB "wx ,w,O!ƟzC1g[' Rgˆ*OIychՃF|hɡ4i$JJBD 9+.J \}FVm ʐ,Y"$ճuWv :ZD//h*b gLq!LjJ|Vq/iN AW#:SxvYz"4I4aJ7M+ +]4v5G؄ҟ@j]!xE1GH# qh@:*~*JL)ݱ +?UƏCCZ;.8<~?WguٌŅϱ,Ʀ'QfT'݈XT|ϱ@$Pr hy$çu [{MJcvG)Ke!!0wZ${v%2]9>/@XMϲ'R$g X@5sU٦=Ǣ6 }ں_m@8naqɃ=Ӗ" 6!B\,륍[r~ndAd5}/bu > A:`WeO+ct!?T +a^>laldUΓo0c)&9ZV7j4(4k/HrX:FsgA 2Zp'[ڈސhGtѨ6jIe񠅗CLΫ$Tq4-U;a!,uU$Y\Nݞ M96U$Rb0Wm̍|sa0ؔz\Yʍe;@tGF "w?}9u 5~47Q cҍDȒﺕqQCpÈP`J^nt$^`܆,%OW"ɖiTUEiօ$BQ81DZ!DB| Q+UIB%92YaXĔ| +NB}.Mg-ѻTm=)±aʤ:ɯCҩ<&84f +r.Y.nY,cRg@; Cq !%b6Y5 b-svEOM!p!F{rк=VU͎yI9fdňxgE{)şH8SYh`My,<\E_zGhOj P$c?jB'EKtC"ʟ>PˌLe=E2Sνz  6,h3mvz$7yp[\QPhʝ̈́SxdLZ6/ VAKsGLbS% ЭxJt/Dӻ0:rQ>J~uJݳN9|Ց фXtN3 7g_3w7D!dSȘT\W +&Wö 7K(oеs@|q5I's]ˆ5_zЩ.w +R:S_&4, DU|[jPh +B%?}O хH[D]~14\mVG=ә }΢4B|"&'۞+/M Έ%4pP +L6iƱ>ű%-{|#$\@Qt[ daъ#dAKx +e#lF; zoj +=ShxQI~6UvMh1 x ^1c0p>+H"SXn{hE!0f*xS)y +# g˳NP؀Exzx&媳p1F O5ӄE$Byn#ErP_N]Ռ2h/V=ΰ |d1w'F,t +}'6;7͚h-v2*kgƖDBJ ȆXq7sP󧙣j 8u#[PO& M0^:xqsh?[=dsTEG%8=G6,Ts$k|c_ƌꔰ +/ q$t$b v]`b0㏂<UX~ꦡLC;ֵR^@J# +ĝu<‘YGzPYuPQI0qGX au!a`8@k*gZ7YxM䰧LKS +h8 +aalo(gd1pQ͢\ =~Ȇ]c=-ľֱ(l?g&$`ezZ"6Wºt!xt\\~Sabfu4]$dRX +Cp܈e DE[nTkXn!Ǩz?Na97N6pXS x󌍁oc ,F"a-M-ܻ:<"7.GcP=-3ݑġuhg')Q^Oc xY Uk]Ll%t> ?PMY'FRE쩲Y0+5,xء( +O]s 2"z; c[bsǎ1$ EI`U";EViu*" q -V0NoXF!@UtBmH(Bf2f,{GQK8UZ|,g`!Rbέhu؈0[TA8n/`1q +UmEY|Befh`l6hM'B<=q 0Nz k$ 7vU dM6`\[0dԖlcrIӰ/7xʲL&caacF +P=H8)X(cA\bϢ S"sc),$$m^Z\=t͒Htu*U`Û\A{ ?ߏQ}Y'Qe9`T2q ie=$: WM8Ѯt:>V4Ks/(D%uD34DDğ, +,s`A2\WlxwuRC?tV ++YPI]Pۃ7b+:amqmg :I.ƙrIUtIԁul%]خjK}&pl䓻%Z" +E0 /;=d#!@Jq~ς𼔅LS"_n +r< 9٧`Tyu8,Oy3pK\З@c|K$I!tt𱒇YA&Ft*"+! 3d/^ +)7}ܟwIlI9O"#! %|C:" ~YP`:=:GGl)*8;3.&Հ4@8yy#$ +G|% ğOvJDHuLoB|_eg4pёuusEZnKL [Dģ,ʯk{ƨ={t +0X +G-Z'౼PLyńMŃ6CY.[=#ܘX8^C)zC?< KJشN']\PUgSQ6hL%$LL{I!5I'K}M%11i,ݫL[6e I&[#` U E}z&,X٤$ +9ڹWSXt6U6S,8G*ea)PvHAI#]E4j8lj6)w#bLx-<4xφ-;pNk;X T-!^R!bo)&ӽSI4 +P&Zd! ?Tim3`?Q+CeĐ{y +"}HsUҀc9zY:ǒ,$쇥uZ;NSj86s;-~X-d}L"1_%8.}@sb\xf,;cػE,Y~`L)" a3%Э': +b~*8:Z3uf0BGFdߥ§uΧN>A (4Q[q!or ^Mͅ 3lN'x%eVr` O Ӄt{`JvsYlPФPZ9idEs%]g xXxX5bV/yb6DwvS  ;GHh7NrÔl?twgGa'?dicQ;( ƛudk97>O2Ny׿<h7v  Rt~_[,XYG?O 4mRMwG<dGqhl:[ee \?>9(?m, #BʼiL9׽׉Ef|ꏘKw&(K ̅ՐYG!cO@O?twbMY禫9 +͛]r~sil߀U?S?MhLxMC l‚DeaCb,͓?>g30ٻAE[`,'JYd¢A%Aa܈(CvZ=<-d?#f;wܺ]g5H}b1։t +y)}n3` _IO5'?/”Z?&$bwwwG9$ o4O%&% $ +TfAŐLۦ"黳03ـ>ysCH`޵@%UM}Q'OBBu ow/5]5Tr-t5f]`;ٕد^2{^ +h݆dDu:#L(y[Y1{1<ȢdX=bA>?6ChzYη+j!*H6$KCޤ=*"l-?"&dm#A6쪄6 yLKI3V`'XPk3Qq잊m'1}9@ 9uP[ͨ4m!|Hxڕ$E,n*P:l-lOKO@B"š6tH@᜕ŕ,f'il +8 o,| +^XNc88y;9ťU#"d~I);IօOacw&Bz7"#ggQCl +/>Y X^5)Þ3ˠ,Ntޜo &\`T'@Nfq=O.М*OKRWd,Ӡ?YG @C)Ј +E3 $DN/]uuc9 IW¢u090IPb,:I)e$sRq@F~q.f4 O >n8Z?;Kj-Ѐ:! l>[>bp;Q(~<ߤׁSmcju*5^c$ZDtgDITYZT*g/ !0֒,h̴ú\h5]]6S @AG$KVvTvAwW3L\T ܠЌuwxGz|j0eAb^9"#ljI^=~=hD?PuVERPrZ\,{Hʦ\ڎcQ1aO􇽊+1*^m,eA?;ug>lZp<ӛ? eAM|D[(YDP0\=YT«6dk۲pp,oaw\sEz8f1͆+zHROi6w4zzDvŽ%IX>NNM؃s;5W+_R2ŗEz8YL0Ir^l + ,5t4`P.:f@ A5m +*ӱ8"-=?:؞:N'ZWhf?\تP*;D<\~Dͯ${O9,=.簣2N|ҘYY_YO Vd,S^j?&+< {Yult-Tٗ sޣfJ2LpC"G 2JA (; A K Ml+Yf%bth%FJ`q ,g,dA +`)dC_ :d +?;K$ɭ(U(\g6["[(l#T U !&55wG2U Z't+|ŇPs]IE+thQ c(v@KY§z{i a.Vha ]ÑQԧ=+Vcn5CQ+n>1Z d_f2W6C9 +;6te0U%Mif9 W9@:h^ZgSLv 14hpv>Yb0 U%lW|A+,M,HMP>ڊACR̹D)b 6UdC.5樛OCڳCĐu QX(2=+{!XOez5JhLc^7pN?@ý;aU^HԂ@&j̸f I/pސoBypFf"~뢯(h.q9ͺ0A3"Eוe-a=-2pNgs אݟ3T1?lor|[t@)]]$<[d+/5KTʐpB}30&Y +@9Y VT0i4ri6z E.92"H/T1(1a+cFbL$+b9=oEOK+M<,7ۙ*= +neG.ȚCfvz-KKe3'&mߚZ)dA2_OfcQݾ*&u- M$yB̵n9'cvEFav):Wd>I<:3717x̦ ZvE벨"ݗIynQ#<9 +K ^L|Zu!@rjygDq;/ Dy0BMYW);єH@,LJEf5D C*''B$gL|Hz_4(OcWΤ;K[4J"%V HX4F9!uB@ E =(06V,妃pp4d:!"2~r9/T#nF:w)tNJHV݂!ud,*O-AlGhO8):s2ŧR($ c|m %I)IT1=*'TqgS/U̪X wxXLW(-PcZ+&A}L9A䦥9gA[7P6*rD͐4VS ERCF@2M9%111!8rgF"@lI\7-y*g<.FwL!㨢 +'Nq]=XV-gA~9ܾqUjfS@1$7U:_ uL8]Q{2cc#:G,iG`& ^`Js )P"bFpq6OB F<JW-MXZs. &N ܬ:R-ɀ6ż&H&/&QgI6AI((6aI@cywpX2]@bDra!5$| B0.CA(LCq4'IU :;Z (U5ߤc2Iq}+ MxdHd>Ƃ$H&ZgRX}M" PIuȤM7o t{+uHDa-&Ai60KkӀ%I$塠mYɶdƥOo! J"ٞI֩p(̬v\z_KҴzNTKo$D,0DZMbTFjudFoX,4Ia4h!C?$P{Q2"~ňam]^2U +%xxsmD Cu;6d&#$}Xut }Û6 B<z[)Y'n5ƚ;D&1}rbp!]brT[F?[1[~ɂ:alP^u| 5П.PIֹ:[')JZuB0C,2\XGuu(w& + ց.7pP N"aa".m^9$2~KD-g$ؔ 3#(_̏Y 50?eqJ \ +IH~d,YU(@UwTڱΙgs =d0`i9b'+{礻 P<:` 3*@uΌ{wECzjW;qB}.L`:SMM 3~[:ރ2;a,Y~qQPצ.Bz鏡5oݎ(Q)zz6J' h)ϨIz(z!+U;|L&dbof4x1 ^ n;I īʁ}Z:97; ײ;+lz1Ҫtq>5II@5S >D{jM"jKŠx7Jh[Q MHY.BeJ wR.8d&k`f|IJvhoN8RxXNJu)'1QIUdSW52(+Utl1Ԉd*pR!e@%CJ62Ma}51;k]e{xş/iKuR-/Fz/a+$ g ^H=ꑘȢBRN6NR;= f2[Z Ͳ'l'~Oގ̃ohHz[tuFbk'4\r,eH%$AyH + )q#"<$@M$j1D=ARNStj 6 l0/֭8.h}ZSzuCWqd0,P)fu/޲Ga;;WeXHe[SCR~Oa$4HdӠMmtjlꭠQǒ3ԳZδθؐdOrG83D'Ph/!`$gVLB̓ 5ޒOK@f+ Y-=Taz#G137r[FF4[/o*fѫv:9ZCP,0 +$Cxyޑ2Y w.~㽵v ITěnZ7i~Ph>y!DG7|4)COǎ%*ï$,;H1<,ڊ{@bM[q|dgAqQ(hDK]hMcg: |ުNL'i[InتY?D7"i*ml|ӘkKr79㒷ub1> urh;3FN%i'N4,Mr Ɇ5w&"wdJClo*o 4% K5"k}_E\=f7ZcW哞7MB7.!H<IbQu 40*d$#o@()@SeR(hD=hD9Ϻ0ױ3æ!$ai?auO\뀄qR9ߋf pw[YCG}A]U ,EFN_ޙZ&`DcXf9Hr:cg9g[!\:~?[6D)d$5"mqR)0Kx:e $;3e8m&mGAʈ)#yu/̙Rh$H&m +{GIѵNux-s%G6s`DNYO +RSƦ#7嚻(^[jquI"|%m.Q ׺]F$pU]TAw[oN%xT;Aw[vNB )K,R=xC bDzh L]@oebU2g@[!нVh(K:{æ)-]x x$uKK” SZ'lG^!X{]hOu +<H!m#]'ISlJꔗ +vl 9廚NI5e0fLR `m( lgH/=Ag}P%Tz͸VlVVـ>hX! (!.+QN8iD(jS5I +I}dL)bk4e$ #-4RAրagB>,67I.V#vjJ2ԓ;@j#fy:V0̟Xangn9[qhih2뙹3P]1Re s*jܿy[ўOPR#LCviH3`B3dc ]26; iQJkdjnĩjSղ !$҃ +$J`sAvYK`ynkXaE$ap m?] RQu ĘHwR 4|t@pzAdW4|TTsLee8VF..9&~ bAmP$=p@Ѧ}f8yf  }afL[k LD9xt +g +|)W~%KX"Z[L+dz9BZD깢ޒ&$J$ƷLbíd%ռ-3!?j5Fk1~'iؓ MN$M._d֫6oS( +'x q/ / `M'>k{i*iT:¸!Id:KZ S٤7C:_불B-Z:1=LI.g^ k8гI'*a:!mJ+Q\xJe~#A'݁&\(AИ<@GHOGQWQ#ɜFjhvtgjSu6)DR^5 :.cq %;gM+ &@OHw·~x:K^RQau?~> d+Sbc}&H>MaҨ+w"Rg ")$ _șk)h8E2w( +" `l`JR=eYKM'>9)?"2aH8a͖{.Q}P1db/+XPeO9w&{,3Fp7dQ$@mݻl1q,cF2c^v1`XXy$//$ 1%W-TȪ2btbŻ!̫Bg EFYu६:Mb +zGíI qk'PhvU Ycd@{˭1)5WfEQ@0WUnD@]НT*AŒI hZRmA1Ҙ ~+Hd4HȠJa[&-C+C@@K˓9F ñ)U}hTJ2fbzز4'w1M&8x;4L"aQ=}CY% +uX(!W +tN6;!O׾ zx{x%_fTUd4'hQqD.0mUXL8$:-4_E!PKj18`>X f>OAHK%9ud[HA783 ߊ7& v:;7`[@u2G T[ )K" +V @< L;(Rm4V1&I)fNxk-,Ho @/$Pѯlu$d1`+Re=$1ʮ1 x:fTn:`a9q!a֎0EjǏk09#( fq*Ae`bLKr v.u!w@ +n~*Q")ٲ'D:`0CeN'%ڂhgH07`c `)|!`c^بw< KI)$z۸L8*k~:ޒFv* dn: +%g +YǗjX+be/^ M0W?G:IL ="S* +X'\~D9#[c/ F6IZtYs%-ǬֹX(Zɚr&)uJ'Ȅ&(H։Ize1<H?YO#W!p2 : =%v!ɾWo 2k,uT[H,!r֡nTjM+dLJp,!5E.OTS 1@%|P9k9 s#uf쩾ϝm6(r29admTDCu/<")RQD"טLVbu V"^*0{ [#NE ++t[4%z; ]$V1qKl%Mg4ȠuŸpY|O3"aQ9LSo@"Qp 14d3 +(T kbQM#_w3#3֛(5E{'ͅ!WH({K$80 ?$u*I-wyU}̃G^W!LW$l|ơnE{1㭳yiI$)LMMq2o D%i]GK)#1s&"o{e=nS>p `!̝viS"M‹auҲxl ]5roQ/r9eˆŬ9-(:D##J fDܜO•q|*05aw URDw󳎗d*Mâ>H,a÷Nbmq`XBB%ml]9!kܕ7'c4$+({HQ[um)`6[)ejŔ.0ު̹!zPgCT_e~!HHa۠ bo!Xix1ZAm!xH Fc"Z 'F8N-((F;d. 6'De?F2BGTqJE6<` Kt!IgkA) I]f&CEyp>)d AxI;-ILu$7DC&['E:ۧAѠyE}R:q/:*x8"FXX۩e%|rYi*x +&|v!L6NX!Gr݇zɸCO\a_.5Ι 9ReH(֙5 >(sj +JifŹҋGa^7U4NF@ y4PDȚ,fmf5mFpjǝdEw3_t86#f! +=:J)ܶu(AJ&u[$lG+ND9cPod I{!Si;\,+$B]e"K 0$"j16T<:ǜju x:> $ґerA tD s0Áec٫Hk GY#mH@Ue݀11E2E +*$vmr[$`[T"2F$) BZwUDz`D.#AQ<ME%):bT1QO>#6uJZMU:vr^1)r1јNIN$\RI}u]^Exd_G5Ϻ]O){ +^zX~kS쥅->HkBPVIq@8VEԵ@O峊_ʇ@+~8bH6FUdkZVzGi@i %AtXD)a(.;i{7BLL6|8#2 la-=er,yi$ Oj#^;Bٵ7+p-mSv"[ +e +UVh]NxqڟnWR)IMQP= ?UC&"='45aYqb(:"v1* {%QݙH@^ Y*zPJ%1<$$,:]z wငZ7;%`AX`uWؠzuy ȐVQ_DC0:9|ܱ༥cEjIj^ᕦUC{?drDd D)$Dp(ha*T0ֹ@7hIrBϙm7bB#@57`?ÄPOі:|HAEo@?H\!$_XYHpGVHs gh6m>`EwMc'TI"\FӸ[C= "fԝhiLǐjA[駬#+j}@y}h͐^yePa#WƊ,c$>x2lnb8C $,H넲mp~f2Ν 8~`E,pd'M!I B&7R@;( %M.8;i'qfk].BH+r^CuYf *ϻ/(?nYY7?\H.PX\OP-588[j<c0)΅L+0 J*t7Q.&+8\>0.3S 4U,,Vm-$GɻλBAbCJ ky5ZOVV`XD#`v;l:XHBC$L JPD>׽ {d<p +70p!% ^/UOyѰfBEy1pU8_#Ր 2`$[dt YM>,ց(eePQɧ`tv4YӃIbnJu6A<)cG](1@GŲh6&,F*%)k x1֋CtȽe)|>ըB KITI (̘IUYaPҊF"gPA_QH-eb44rȑO2S4тK]Poh_exe 8gz;hĬgotf..Z AYQšKhsvX~HXn'[9z*h*0߯.g[ +7]jt86fmĂE F,N (ɮB +Gx'l.ljjaR + _5NnUUN*Eiܣp-iX?&F \tq ;Wtyb@eBvF7 /fɌߩ3bH&MZPzg +/}T#_Ti3$d^38RMڷUENͯI6Vr".%:k4+#-Ua:/,EKa3oRJܘO{N3tA/yd0UY`!&-HV𙮁~Gai1N:FSUfGk*Qֆ&pX{% +4S`Lq4:l>R:+S*n*؍'lt)NPp3) bRHVi%T@VdpQ+P1fI})WJY'mF`PÇ܊W ) ᆳFgT Y;oJeV7\0 H&AŜN$UI~p'I.@xMCYw$S$'7k#`B܇a)ˠf C.a/ +mGr5$2<%ns6yfI7瀫TbdhJa[Mkh +j߮ʈepYe{`qڗL,fY-mm_s+a:be 0'0WRSJ%|/E(PCŰL0Ay,e=j.}j7W$ e {Lԯu.SׁT$bs.IT +}lLaPT}4j.!1OO;>D8 ^E^dԀAR)OPU9ϛM6Y28.["gh%Ɨs,-M!, 2ڍԪnQ&dU&`k#`^&ձ]|@\Pe5cSbMMʬ?wIM$zKg*cp%P3Q+*ځ\MwaȱIXCuv+䩬Ho-1>H3C/?̦SƎ=)P!*D@SHԞ Q`bÅ$Puőg/$'ĨZ>rjѝЩW~ \Cm[F4n4| *6Z]삁"7,L)~-Uq  Z_D*CV_8WT m"pNySk96FtcTd4Itec4ԪbUóv{5b !j[(X f[CKٞ(4Z/ݬH:\ݍb\ }P\d(ja.3^tmԛAFDPIuvz@- 8|ā SPSO\@%IOAѐ72#1.ؿJthؼiG(L5-Nۙ;%c0/)7QWcxlwHV^ `RR@0# ?gQ Vs 2.GI싮̭Hs +fg (=86@15k;숍l]P}.Hn/uQ ^dJd +E 1~pH9%Q>337<auw!ٍS%O4T4VZ N$o ]R~3S#m%"c4=ڇ k(!+$9$m Y@,@beB|Q8^B1hYUvLREY k2^2},U]G>[n$xi~_ȑ'礚,S^ q/gU.I/B:=̂ ă)O/(9i|uaA1K#TGo;4g8.D͌",,MH|c  2I) JQ24ċ&6@}D(ǾfQdr*X,Qis-3hH'50C%5C$_: aT [vRߙ %}VQI ;Df[M*;/|H3td(dVH IdXFZ]L60zYdaZ~\NCLj)=x2XT6R?;Ҍ݊2t|jȐ#͎=y[iNx:{FO!3'ZiS.E@4fz\h/n&5urRI9Z҆򄬫)L>iޥťjo"dezҽ;zt|ճ`ТMrM& ^6%+- +r@fqK9¸݅T0oxBښ!IpRF T@x*=.8}.ז\&%UR J\*daIffhJ_AMy-;+ݜP#ܡUA0=C.)2$}3=4 ְ'-kZW_0Vȏ`&u}NkɯW&Zرgswasrl: )it h5SJX +&G1!O{_j|P~ ƙVB&)*BLsŬ[prHX{ TDHRy870#(,ϷZ7 K7% +5`!SYuͬfgXZ:dC--`|TAٔiCM`yV\4x1i5$ +![hqN-Y.EyUUo!)yvaUJ*3 MW9) OZH][ IULJ'VO\L vl !rվU[R#,,''Mr抅:K˄C̛ȸ\E6d` + B +({Qڷت‹NՃR>hV O݀zɒJKT< NVӜL겪4. ݐ7˲/>VKRUVcYY5#kQj6qTxf:B \~>9\@ ٞٴhGkB@1/7 +j(1 @L OnnȇڇG0A8AEI@OFe uYj=8xj| Uc + +jp$ 70k5SZ$*;2#*aF1 t̊387PtҚ#MҠ𨧗 +TY[iAw!f44*پMfY8IahZq'* ͒x ':&UV _>IoOU]foj1IBQP +YZ)V̷oD={0h,~( xKe!~$w`EVET% +~ LW>AZQUkL5_kH . R}G٪_ |(+ak P 3;p2 5~]@nZ4wwܖoh;X@"ӝ@&U K(E/n&:Ş}XqJ)Z@M0 | m;Lw6ӳE1ٸI qX-2S\C@,'rTΤQySkQg)#՗VwZxJ7&6[VL; $79IX-X$>2?צ= !u`i53wn֬z ڑ<դ*cؤE2ĜIUdf< 1R5Q#q ]IT$҂@ Ϥ P`eДb`G>Qh#u+[ULY%fԼ$k:7ՠ#,kuTHɧ L>4Dh~7CFWEEMHD)-v' O\H L:l/ JH[ +6W=109O5XQ,HZ,sVy@QyvW"C<2~c;d,-u $&Mё8%b2d[!U. 3xmzƅ(ʹYVVG/@%~+ lb9].Ғr8M.&9SXml tl[l-$ґEʹրzXh GZ%ZJ9L(U5ՕBQ)QD扁uUXJcgf"E\ricD@QiD6k"P:P cAOg%\6vttEWRFLFE9Ue5H m9Q x7Q4:RT6+\Z-oX (k6j!H4)cε[쀅nnf"b"fEhmETGi;S!tcLA1"P4E)FRa0> "MRJ}duIY%j$mfBlP.&}>%*r1?3! +S~b$8Lj5MBAR?V?9BGX`.` Mz`a. +צݸ_Q^Djp qO]2.|z?m-}>d~8Nb_j$ɼ ` OdNGvK^m/}>;4~r!?:1.b)%?|n~w@h͗\M;'lA15f4pX/3#[EK +`dʣ19PڏJxX7`ۺʃ2*,ӄUno* K|&?:zvB9F&L#::0T ়/[t&3 Fy׎%]ԺP :)v\G[Kį8@o@v.MWdf~Zhw.nɏ^G1Ta?1zB'2JT, ^ kQnopԤ=bYG+/FV[M"Li 0c'mu%Y? Mjk%]5HX-!'pzLA@x_<]HXAIX@5ȲGܵpRR$LJDx= W/cNTC &yPПt0 7n*mfr mYLb8í:T pE4HhyGKL V6f` 4(șf.[A6]+ '3 +l`$tA(wC&F?#9р5daQyAD֦XW>@uA CWٲ'~6JC +V+&MGhi[ Q0w_@4RwϠ'fyRR0 +$Ch%Ӳ9YsGrbࢴ$N|g@A Axp[!6q>2u(ڭ,ek>_*e0$NcXhΚ^WRf;\tꍉOKdgF*;%kk7s俜OTkV}\S*DMhvxb3/7Ȧ:ނKRc0ثDL&c+Ҟ\X'F'I`F~jr[b$|H;h3S 1U7v*2¢3'^cs2˯;q2Ń bwAKku2gOmEUxeQ`>! 4G?K/jiwMs)?~uڧڐz:dI74U"Ĩjeώqo+oݵ!9/TCKc@' +t ҠYd&pc7oB!/<1K,n 2DU,`-]ԟKJDjrT[.ncӿyʉVؓO8wS +xJYwY`5H~"/v#8uI>+eg5 7᩟w~QA4xVKc,BkC3%@Vo' kSŅm'"6@貯?ސ+(];?nBRS24ߩPM.i&r +`CWH5# |#CKmM kfB؀OKaPTT^Jf4pJ˸59Yې7TBP8ʤxaC[QtuQ*SISGj;m""DR;u? +H"g +;Kd(RC%4ň-ez>}Qg굊|#iDY<7u +_21J[Ȥt܌EPzL +sOqjd (4>v{M H"ʝq(tGeU9 +nN(wW3+v# Z}>谡/jE2Tz#i-XWкEЊaL}ȖC +@csvtkAa&,< \>)4-z@]zt1ov!P fB)HcnMfSC3=Y,'G õ +:ZX4Er rI9"7!L*΁Of+aQ]#{ N2c$D '7f^TuТ|`]NEnlbir!}*|3pfI_?#&R+65Sx*1˃:L)` fzȀW$XVÕlH1'K R mAtV=8N0w}S4;rz7w $]T&?Mw5:(Tl QH5h<;A<ź7(,_}؇zf!}],r$zJ!o̭#wy_n3DX\ K +XXhz4>Sh:#L. Z +LnU5 )H>#_ 7]T1 @Wo)}9Ϡ.xH=)xT!\RX葄! %}Nj1 &Cp3o($qV4w։ؒ&@T劆E) 1QsPql[)Pl\j{JAN>*5xő&F iCZ q.wĂ9LBMؚI0".g O%oV+$Mu~MPttP%SP$sdx!>@.>8Bo(}]\r'* H-΂etEu(I\ %s^$8.|yIMc15̩LsiI l e`e,ޕ?2['4f8+a\ pHt2Xnn)_zşFD尿Ѓ$Gz E6#8\pl%"~[%_DOw iu_ΡZ>):s6aa88`Yo:F:a"J³KD$$dV so*nk'hqȰ 96?0Y!dBFHRUul\Gs'* ƥ|dhwKqࠚ~=pN&8Ϭ"&<. +Sk".zy~$X:?AB1X8RkVD e9*&@V,<Vc \N&+:V9Gа"W9u4ɜsD=&MaDh`Ḷl-0 wC&\NZ + 4`d+(J/ZlYi_ĸpD~|_ccx + +\8!b>W5WQ!5ӱd3DRj=@N +/[8Y+4˄2lx0uJ"NQq:#bgpY +}KjdB`,R13fJZB,BFҔ9FS!%3"uV_y MNCF@ߴNUqD!B+l#j4R8m&2w0Ik =&amɍ;;u.bQ)(;c {dݣL\6B*1* +!il@)# M eř\w|{-O}%>ᾑohM J\7#X\W?۱.1k)銠z_F@-(wpgbBvX{ KGU*@6l>2€kE lDc* +eN(?i¼O +Aj@Rz ~,H5` d +Pk6tU72}r> ~B[x6d"BJT*C;~No@a:hgL!$e j7`-T Erj @6Qu*;xbCW*O ВPI sxFڨNB,W| +G=H(B-zy {s2"dd>7ȑ,d)iNiPץa[Ѡ5R3,?Rc#f@s\Ջ?38P\\\1i%KyOT0~NpB '2erq@K@L]"}-,UT4d *p4[KL"% /1RQλD aNA-P#=rЦ6T3FY;nKqQBcqR4N~W2{?UMphXpTEQɜPj n}Ψ+lY*5آQb8%D þD?V2 DCy̎P:؅YxC,7-~>'F'{H&?2rVSQedȦlUKhJv$W1UIAm[HQ D*tVZxBqq=q܉XEbr/U0,SIUZ؏@gUȪ]wa (cޒ%:P9{hdwDu/,<Z&=T6Mi9$@,<ϯ2.mS릌߄D51ZQr;=KyWK_bчш O,Łu$ v"ŵ)ιsC 3/Ϻ8ezg4Si2&jDE"ܞ5S74yyn)@=i>(\QhNf+o u]$vRl9ID?zcs \!TJ. +C' uH2䍹@>rQ6_H!V)5Sdk1U7!z=)d"aY#dH7ͱ3L^]@kib.l $ǚژA⃠|˕7, Oc’M30OP258%jc᤿Q!4kf\SL%re  ŞxhkB=UT輬YƈF"4тcVahHhhPv1=-}5!N v" X)V3ڇɻЄ~5x>4Ph\%ŞwN(fYA~R0Uű(&*:i5i4Zgy`3"ݦyk(oՊ} xB$XOf>j-S!A1t1Ԟ[%Mf G]mBj vpV f =)bTkh9#DXՓn*jv*Maj +҃iL'S}3HRлoIY FmͿ#4dM[ NNw7E.+d|! BjViu5Cz9Q<㼒wAذZ_ ԰>T\cRT(*!2/XgX(#ڗ8o'l_usxF[ڰbx{qP$tY fxqIµߡV'n툁*V9xEQQƪAf,\njr۝]RP 5" h +b/cl%X,dE26g +N< ,.?f)?[IԢ@+e޺Y7CdCzY 'GWD-ћTDyi_ +~p++abDĦl0E# +6gA%MF|+νՔJйnxV_Ū▅XZMAEWPCVy:KV'Oju?i +Bѳ<m͘Pb ,hg3 ƻh<;gLLp) +N*( +j~U٩>;.]G,'%%DZK׉W+vC|A-}+~(JM&e&Nv̪`":{JxߒDkz9Y.sb_,)X@5dԀTYȓHF=s~H" #Ĥؖ vYOhع_N&'*ZM++F<`@&^J%$6Tkt"V;՛K|p͎,r]j^Z @K +:dFY$: 92ӻPƠ2#Z%ȝhc5@:մP3;6ӆNNnp$=+(@4^In*KX\Ʃ 8EKEwpf֒KƑ0B@};Fx3pb&M o[iMGW| ^RFt*9c^LI1YnX$bZ{J0/5tݻS- `wEr6$;|{uALRe&{$cIdN !l"[ % +&߫Rf"SJ +KZn"K5`a /j0dAQᷯ +H` MZ%08Yp$!g&sa5n>mo2ڜ1|E%:8&$NՃ=* +uό+Wno2 RHi5s˜Bp'^R!%8xڮ$o0m1XϾg7Fy zT _ーTW, H]"<$Sj]i"~}K{*Rx`9[gKLЍw-d1ᆤe@SW&=,@MN%ut_ƥEe-䍚)'tO5rꯈ!|]{lLjv4]W(}8J^R{a[eueP'v1+y ppNpq+TN<DIe"Yۡ1SNcM^ēX3):Ltnn +e~hx{/rвH‰vX/%DY;gFE*b~DZ>dZcrps*d B?ȒnNBLl墩T׀E xF6,^; -X|zΡVs6(DC& c$o@}tcB~RM18ti1yBB7R^?E #6&!*3QHDp>{ bV0+!M/H'Fx$b|9o75T}`ŵ)?f]6X 6BWb9{o9 zF"s7:!ÔR;16 + JDt?i +$ٙ  +5bPlTt+˲M$sWKDX҈ ufA%" +Hes B&Ϩ )~ +pG@'$ujD>S=c '1 -faɢ+*Ct*V( +j~Bp72텉h&rڃUJEJESI&iN/2M9ӨC4Zըl%-3 Q:ߪ@+JBL|ftWx"CE*ll\0X/'D +TDCtjI쐓*7a0^ h\\ǶD =ccPS^_ +Dx,Kp_ڋn1 cRS1Ң;fMGgD +ܪQo]G }0]C|Idug6 4-UjYbd>?=@'P^h{Km,D =F4𡶁9>X"!¨bs>J#fa,tf61wX$GA]2Amʨv>x;ĽWB<PrcHف_W~ @p 5VҡŒE?Hj}H_E>E| qTGYы1Y$+cmje`]Xs_VԠC_bQOdcwk-[LaiƛY~ +Z MW]ɉ,ET\q[705*`umA.3DZ91`3F-F"ZLFm~]:PTP^1!2-e@aށ/VHJXJ'V*0e I_h&zP* 20 +YEI +I/`Znw*(WtIdlж(gufc>Ұ5*' v3#3/# Tוr&X1:c)ơZJKG1bh`hlUx"|Va.SO3shyѱon=eWx #U}ƯQS:\#u]Y)\wfؒ/hcR /4dQO +ET]`hxq MVгXOŵ%GYw + +=_A)"Pbb"S+E-;D\,s6:54ΠV b `XTb̮KGꚓLZVE0 +qo@fr‚~gTI:=ݝ;f>I53PZnέn4a!m [&ڮ ַ5q[K"E"V>mHZ,](KJOws)) $ "Z{$ TM\PKx*5qFR m4$d(dѵ/2zԖYhH{'!cCtWJv +3]KA3T*<$}RB +"CgeWw`%n@lCOc|7Ts"e> +, \ijdo;[kfWT u{ +)H6;W9Ռ),'>xs4!\e&" +HRRӰnB*iqB%3"9Bh) +`'1Mf˾q3PpdT5NxTᘖf7\N">W\ }x]5OyTp=W׋~c*+` +)  ~{[@(NI-1ASm"r(}Ha)J/!Yġ^WGJti+deL Hnl@MܭIBF: *&OwF[RF/ +d>RVȪi\y x]tɋбHd 9|e3AIAbT>֤xP8k{Kr,5ޣd;7T=W}?|fdc&I AYpZoE&J rjJotZi/~!ZD>ؤ8.dF$rP(g;iCh)U!Qtݙ'0_Q +Iz^8lm=صWT1ttp*^' Q/bq "9"}FugD apҏ8I0UbPB]Q@v[j-Dp/'p<~--# 70Dz puF A8:Uͺu@.ŚG4X#0L Ҽ|Sb&#d-:!%4 + D.+ +SIJºm<K0dwz= h U!+m(Ǟ^9 u7&ĩ YGUFU:Mu,{;#u)Q16PADLmįBDaLD֚Ad03[oXGJT՛>o_FǠ +$E X:GG'0P xc2>VuV`Ñ^q; bԋXTY8dr~6aOAn+rF +Q Rvu1t +nl$k _cDU9ZqXF@S{t4r\pE$MfrJ @Nv y_1 (zW()_(0mUEf.p)9C[m#8zuQ,4(TYe2]4UȖ'dD:q5D"qVnh # VcZ/{yQLUk:&DH;kAG!?]C1^;pi6v8VMLN}ÂJd!l8fo6MLh 8W})s ޻- D +Pvp8IPP,#3L0 57S54t7*)_szw0<B΍D_:sQ’hZz{leQف)H&);cEiUnxΊY_+fC|Q!b/g+YA8Pl2á 'Ķw$p@E[+*܈CHQ6G~6C;B܀|)(o;lydbh9ig*aس#n$f-MVQ;ef+P.Z8PkGۏs eұAPA&2dm&ZXPE+dAϜS3N +j 2'96 <"jdu^ !Sa +2a,Z34aN HMn\jz&þO>c \ -ΠM2YeJBO~N)Le)Mh_|Y؍JȲ*,.,:7ReJf~&L9HÝ:1"Ulg9r"\zD&kы0dȶ^'hi[FS'xpB3URut9\s8`>_gM9z +( 񍹮+!|8gaWxL*O0 WC=de b(X\qʇ; gZs;bSK/ԡ$ެrW`k((GM JU<,a* '3{:C,5G^AQ֬I8{zr8Pg ͚B$ ^P~#Rt9s3ETdDJ$M VP[s-rxV=qk0-\iOhZ)iWwpBɸG؃!-@Qp.'9p@'Nn_4('k)y} !N Wy}a (EmajiSI`,E!\3!%O-䂩ND!/8Eb%*Kf;v2qXDv㱻ga¬ÃuOD*QGpdovqiD| L م\A2N oj +5v@Q:Ȳ }{1(ii8A^$ :s[Q ͔0&6Maɾ.:{W!bTlL>k21Ƽ\_Fnm@"[FI7NGAB#7VP ΃jPli$s0U +$Q) t"SmG"vؤ(k|cP2H#*dg-!OOFK#SE4B:Rpcqk#^2r9+dOdcYPE[J3L b ꐠT }Cf6my})<T}-`>: zM:ƊQ(` όAJ /=Lb|BH&N1n&y-d bEF*5mS4e|M] (=%ĕZyt=Pб?HUsd瑷,FHHrRuPOV?/V29LQY; Ǽgg쐿/*ˠ!Չ&ubfLO*9=䓵Z9{'ɍ2va96TEGSrд\[6&nR?WmԎB WKe EdB_#])ҙA\:Mx!rࢶ'TJu>hHNk͊ F2 LL)ǡ:1Rt_c0v1#,cAɳ6YLHimHcDz-~r^liuMUc2cgLag5Zы~A6?)Ƽ#p" 1ڴ]F9w7qVI*Ǒ0R>~0g(jrO*:%LQc17t`.&#|Lh fm?EB)mf 6`R)M\ӹLXSA?:LDžkgܤr^I>g# 01%*MMcCz_PNh9/URu2f%AժlV7]_IAuAIgp*dTK֘T*)OY֩rRt+p $hcTuQ1Ғ٢ZXsUgtEzVmN3qXkaV&勫Z˪$kq2riuݒ8 9%jIjǺFD Ȳ( + t( xs=,[d c`Jw}W†4B]ATp@6AZ!gHP#KHX (1HHɗ)~ {Rhj咚G^uYLuml"oBL\cW~t $xNUg+~GUP? ȧ^؅m"Qe8!h6:w.XsQ@xI|E8bTPwDṟBSAgX;3PUEۚFGbM̧H@L^(fc"V 3eO +kwir#m(-.`ʐм}tƤaf1R'e4bzUb[onV~& z€8 .إQS֝aNT_3[ ns'}8fqkhZ2@yJ/rQeG=-n)6 P?HON (zS - )!s[l/nno~\- +T,j gAk/$5X无 +WqI%B9j6""h"7͘mq4MdʾœFxr7&AGy.x̜\ t *9e6fSP a_{;Gy` CdfͯbM:t.Q'ΎSDX"x$Yaz_䦤YA5IGv$Ul]Qᓧ$Iw`KXąafoԠ=?Wm9@`Aa t9A{ʄkPl"׍;N|C@#1CFem)a9@Opg~  evPt>j<:jῨSD,vՈ,IU`p7d+ qX ܟ\v,]+΂~)ɯzEvZo#oV(8!@ɪ5,BLt0RaEN"sh\L,ԅh]sB4`|L!.GtBɎp]$+-s>"\L`j9vR;O;eVw!Q+[gLl TH3#S㘂 <:xjj*}RJ~3uR 7lAǃ@lELB5bř BOu@ةe# b!WM)Xq"*e.G&(D +iTOU( eάSvq|#J=e8 [?qжsfv/k {S2J9T/'[֙O@r4L +ħ +:CpƪeeM6&!NSi씡]o۶!G: fYVkl &]9ZqB:Bs}O%Ko碦[^%JAmi'lFp.ǚ o,\k겺a'PٮUw6d"=*-U~Tsk<<V{$Ƹl(Ot}+4(l*,J 1>Rn&1%pƂKMj. T16OS{`ŪH\.n 0nF}1Ș՜dwQ GVІ+DijLƒݱ3tY2tSِ0` +cVa%JL#6Jgs6: z5pAn驒Fy$ :l~?͆3wQrx%w>fKp4(l|e(r߈רV3J$kd +nc0nh=:xP״UF؞ϩ»rAc.6lb]kte3bM~ iq*aF>YSv}JlCik+5 +r^ Ad4bT6$%GBScuwmL`ZŠS!K]12ge Ne3 <1© +c856$4;KV#t2l5bA>uɘA; +5DlL8Ueͣ&tg?ƖD~X3[܄$cTI'q,=ۘ#Rf(c*0'm蝱2]v[XPVfA:d@VvBW:,4"#0:"67`TSM }5#k틮`AHXn6,)a.<ңOAp-/ +q +%qJEmI SE"/;0!siH颟1:2IbbPce:gn +Q~6^dV'u1 ( N8G.&!40;]:1%a;cc1DqKP/ʱVtuך-Kvt":臰eDF65{,r*dSktɯe 8Qd&N*y 8#m,)ڋgb +*Y`ݕTR6͊g13Y;ZCWCΞWlYR~@(8XS3!Cp>@ X( 0<Ft;][ ijQf&qPAߚ`Wʲ:BLb:תvo@6b,F8R 쉧ƂsM#S+(''X|,c>yV m_޺j1=1dJc6|1W h ELRmɫwnrvNSϐ^d?WB% ."{/NȵC6/\ lS$\H +<ƛX|ŎHC@9c#nVy/%"d{kH/^ҐN׊Z!jvy5)Lf#1խ!Ԑ/d7[n$A9ItXUYp'8 #;!qa/&)(#R[r֜ÝX8bBlv: cx6 m{=T]^͈l9G^<=xr/N҅AKRm%w 2P2T! ݕm2 UܶSj)V Ǫ͂ޮDgʟkho&;O [XCr<QFFp*PVrMUЋiB+Xu +KfNU @ʽs* wLBC&;-p"Mi*;|k9$qM8}1IN]S)me\[wڪT0'vS2JGhVAN-0Ħt,QOk |i&{-fO `4'A!F 0AlvnX zJ@ͶZRi(ZAobIs;D(Haz'^y +YY0],&4Dy+"5s'sol`Jz(-8ap'asiR$.-[kY}| kBe]91N4/ gAa g V"m8.Cr.&TZ0"P)5>Mh3ܭ>ÌFBط~;e|:úu_ZyLb(>2)V )xHA. oQIM! ",ȸ1ޡ&s'(<ny8g#;{qd T"p%:j*[O0 LDJAn[".o2VlUDΩb2^.4>!B2D1&cc6]-Ft5U0g=&ZYEGfESV 7d< T9=-uNELdnČ"KRn vQ={9!1rV9l9Syg͘SdV"s4W~Hw0 +Hi#h^hZC + +ʠDL*fg('wGBO#ӫ"4+1GssTZm`Oթ$g_aӚ`!}- z}ЊdۀٰyqsQvl4fŒ7<#7,tT]-(U9b^*ݑL"^(&}A4F*fi@@>d6Y%@:\? r S +iM>fc{Ob8{;vddH)s}Tp5C^$eKW"_"?Ndջ@K[8/:3I%!OE]! S}\AbP.(:"8P^ z_fj clVgڛNŊ_lRGx +.Zse9]g9djj^ b`,i@d_nC TC1dāQws_tp*!Ҙu-As!G"!zNq8h0@ ͦl`-/ԓ!WtȻ1.=̖K[ė A4xC2?\ +}bv +m𧺤Z$¨(6&g%"zmb]K,sB<N:չmS+jdDeXc^Q?1UclYO j^@)jN٘xh6Pf~1!ĘԪljQ1ɵnU'$Lսj~'>2 o0'K|L,M-efWcI/aVY.:]"|UU`d27T?P#Z恔%zH>ZXT - +UaKuTޫ,[R`Ebȍas!}!G |12ڍ6䗭ǡG#hыI|t1SФ'v }[ Hh(Tu?3:MUh?pE;4)Vɵ_ғd4 ;]PE7هU(O!eQO\Ȗn29pb9bsX +Vt’o1j@> x& BO\v3LaCfq/:#fC v~bĐ2I P4jx1+=ր+,E7pXRWf|+< }/)%s\aCb玹ϙ鯗2SnVj#ऌhq>Ѝ{FDz(u.<F [β^rS̡ݲg婥X}Yхr4(AdXvd>J> Bs[ζEEHc?:*Ş[Cl] +&NDpWBpĴ\nQ ΫiGɭ#S(b"Rn\L s"mB9 +Aq0R!l1dpW%jaS=>+Ĝ,˃Xml ťzCYާXrl6!2sId7 2"d7 D -y#&cqۅ!7Dqe%n~H3ȟō ܂2j^RRJp6d{% l?oRTwu.}o Tkg >y(yg߬b՚n9b֋5`sĪaӓ[PΉbLMԷBJ-Tabâ*T!3d]ř)g*].p;GOŀEUS,2 ^*V5NR:Ug3:Y7dAN Q + Dя}Z&:X~s=}I\}HuRsub `1=huߓo9CnDm٢g qڻgf#YyXu2 6olLơ{WlG +j Uz὚#O}"̘&2Ѥ7="yҘTH411Ro6փe2JZB~/lF,ٗq H7Y0I` .g+ZdEX5-ayʭ3ުM;2Kү1em0PQ yV/=`y#caH~"^YCDWc82EWSHrټ1>d(G`fU('D?7L\*N[?zR`5DYx,ii65(F\]F!0ӶG.:ayچ \FTKh}-;vAnNG!qUbA + d6Ef5 e`[lqu+u\b2VxKV$: }kYlh*؄cST +:xiQm})˓,w ޤ̔+JĦT'^pVdwEdQiH|LL{ P M֨P`W0p!" PҺҕ ?*cAR*<$6ƃ ͳТh⍟%1f{Thi^k'WOo=*ݺ$UX<\gȳ<{Z'9B9$M&L:0c;8 *SE,fF{sTu4prX:|E‚4>>w{MRFF/WnښӪ$ٝRV 9,˘}O*Y@얮PN+o,\*%<$E e.*X u # }/'ah@"29T}W%][hÚ~&8L=i$114=vtnQsU!m-(n"&k+8*N>zg1(Oމ\נ)-Ff.V@to{fG#PKrlt"XR >MUC 1N!,+PDŽ|/JԠ8ͺ#Iq mf* Wjb4e{_AU5kiYaoG^ŐNk#D-ZNB*3fLl̉bØkLKqF8WYnct1Azm= 1 #P RݖCQ5 '@R] w7?"5xgUѤ-I! +!uaX@d~RO#S@1GqH0΄@a`yjTeu0p焂I-"@Z6S( Dti))D|m:Zfa7 t=L a!]wifuVٙu(̬NJ]}$j;!- "bʼn.-ƣʅ/{h V2p3N`(͊> ' MؐSƽl%P{JKNnL44IPNyi,¼㟽H.H*_R1/Ij"ojUAiCuXԡAde^8A鐜: j|QTT ٺ3ŠGa##iܫZz Lù %H5%z`&x9CȚp2 (҈KJPSD&kYB^8^|B}cc1ii'iFU@Y<-; "?,sCdsWvLkVt1B%g&K\upX~[쒽֣2 (ܐ٘&Z1lzHaN1LK CH­13 O{2RZ4;f-\#29b/xXh6ڬ熡s@4S9LЊM-(\Ѩ+@19Lڍʍ]PlOnDwR*JS jtp4lf6!/$NQy#1# [ʢZl*r)-Ǫ(([!j لg)B|1ZHԛ*g% 6 +_P!e)ģ0듉2@K`ލvHF p,5d$JʤM32ZA|KɳzM$R0);%/0 V 8C0]tDܐ_/p2&1O9CFn#Pp-䒜{ $ 0$߸ +%;pU- tHw&)kA)(,قA/DOkt5-TUo(FBdG}n=?S8eAFC;_).FĜ(bBs F6ϻ6Դck_*Vp=FǝrX2=R +hD2t|K0Ϊȥs0kx `̏%xb2PA$sH6hKg1nj-MbC/F&y^bhʒ)Ա%ñ_~b{,0Y|#JM1'e4^D! Vp#Cc n)A!LRwCq7 &rhex +WC$t@bTmjtӑB݋uLk9g=n]=VΤTaQѦ_`'AT>QT{p_ r 2-ABzBXMIٗ8UN 8TFW"g+ *j")d-\-\ogz>v +7}H&XX yաÆ]â]19J^JqDɔ f^PRT nl"f41U(`F0 Ʌ1'ԆZL>kf6 f"{\pG6]N%m_=0wFd@cS'YJeq@s"t-suX&gRn3cĻޟ0 2s*n~#>ctѶlo:P<[hU_r, XI!)@Y\X:r5N>H˘1^ Ezte!A¯ ugʼ 4A*i3!бˏdD8r\n?҅\oD/-j2"nqb4|M` ua>bµS\I&9kJuh^$DtsԒaQGR9qdZk\?"J. ւɝqF +Oh0L2pv P#>$JRu-wjrtE͢R,`/p67(NdiJIƕX +5 Q +Ws Xĥ!].fH 9lD0FGK ]r jY@O Ir^)v^C-(疸K,7]Cw;}L$H ]A|TڌD |(!4lkr?w w8 M]xR11M5 ={!֥TWw}YOȅrs.DYP\\ ƶ. 8M3BT]LNcT`OF͐$z< s: lK, 4vl$JY80-]t~* V-&12t;n^G:E(H +:NګQT fx?\<q@1\!d: [3±mFE 3:S͑`칃F'r6lp#A5sZ :x{0CzWORrҭ%T)qV#!\jnO&Q:0'85G\/Iw,"vL(Pb8*J|Q"W3Bg#iGNFKi:$QkzLtz4F>w'xϘlYXD%h`qzP)!LebMFReBǙ]6W{g$W)3ɒ|Т{.DB&'^iyDہ;IDaaқ|n|y:4rb#\G#>8RSw1jfXjP';>.쒘dA9@3%.T ؤuW^f(& P#v*蕽IРsµ!}8ZHG(T!gz֢=:x Z;hDE9:AF-2 +8~HD݆.f8*AXT6W11)hh~sx4TFD9.xR0ekyr\x 4H՘mEYǂR )r"Ϋ4頁$0e(- +q$+ax#lb{Vuۼk~ș +3: l縡20 3hCkN5~ ϐ\eT~b[],眾Q$\s}fh.)dRs0X% 8γ&GmmX & Tݜ^8ݭ+Iȕe2晣ЯF>FS|wKpNˀܻ/ +#HP3E2`C5edeϑ<|V=~}rc{P1E\ ̨)G8.JS8(_87hNRvoM3B+#72LI“(f߽LuDbߕDGMH-#Iϗ."v|bF5F^C`rleG`vl5 Eo74)bԀ'Z6 5Fxуԍtu$G;vbI<}7E+uܧs3+p=v_B/|3$TR oBך?1nj(D3r/JyϑPwZϙϑS!ËFGEһVRzS3cI_eK3R+h{aLiNeIFkl ,xo )J}`v0M'#rM UލcX:KW]jg4Gu"f`g5i J kr}IF`?AD+a`L-!ɹ^r#J"PED )P"ٖ%YE3i9<gqjv\ȟI-_ƋWk{PGl +D)zW9Ksy8P0cV]C\F,e).~+BE Đ4&j]{ jUyYI@+vpU\`ns+j.v3 En5獃?١d&Q/3E[&y8mc>PcÁ[k:8x ;hQVaO@3es >cQ58 QD;I! .p;lz\!* q6YECwr0%8x( z8DI|z{<  +v`ZVw9 vi&2LCqQ=rKlC\2h`V! I-H;Q  E/K#Cpf1fyM@_1+ZHK@_h(n=p[iKkv m칅87E -x`Z 0VGc#,ኑzDMcyXflw.{c9@u@Mj2b7>?[brw"!jQ +6:#__SsGRh0j|T4K|`&Wisx K/KC>-eI:~GpF>#Xe0J[ֳ3<.Pb=L;]O0 +N-wvׄ@gD”RTi +/  3_f,D[P'2A79R2[D; FyTjkדKqy|Ve\B՝SZjvK~ӳ3g|ݺ.le'3X ?"e y) P/^cW^Vw|~:WV({o~u% +u\1v'օWp;J\^ˆ΁}- ImQ)zvۓ|B{ &/Gh~uf'xhU'*K~g`9)@s; ] 3LUl +3^Q,p#׆9\8ńoPvdTpn'O4^Ȳٖ_*v%8HgZcD4`~y bF/x|8 +8>jh?d +VzHon|wZ,--CdG̵@ODBܖ[\<:,59q~!իK$ٌq)9K;p y$1_6O t_f4)7Bu,@#\cm5>"EPET`|- "b9c(V<CȢ#uQ^X./hguEИnZR)G72K!a~c7;l,&q]SϸdJ:D 2:@F`(JA 32ϼ|ye*Ͳ=lf{UAihBUna>919澛WMMd;CZp/*=\OVJ-ֲ ^oFHs#kZlV@T~2ҩ7֑cT7f=܎"pיCdz[(d4dfgJy$76$J"{B.dݱyb560'0bBغ5P]\O%UMI-*Xmּ`M[br jn"M"lRXc.\ D ٪c\dOKz/M ⃹4[{rw:KY`{Rйv^I3܈ $\DޣE{Lh‍zY'Vq7a;~4ԫXtA]0;X.0߷p֥YF4D'N.i#Ʃ _~K@BP;x9s;4cl\A$)f-<D"l:>!U [@p &YD*JIQEP$XfYMj{ ʦTT1h{W[N6l~ |dqF]>T.r өa UVqL /9w+&lEıԅ=} Ro3 ]U%ǓR. ޤIzŰ%)k d΋`dYT<JTYSPiK%mj#$nʁvC*fMuD EG 2{4s";dJA)\ʙVDcO#|Ze:p"ز(s+ +\ q$i߱Pp'-,%q [w*)L#2 -!(I7FV)u`+SG4/[fxe`3Tڰ}Ch)k2)/1PccS4T+rzl 8#F "<*p%S§ 3xea@l.V3>_r!qDP 4S;4Ec8Ie7 å +#Pt=5 `L규)%tSB*&[@!QSzU \ZjJKtt !u[ojG%7+/nH| =.ŽoXB л֧1qI#fH 8QyV2Ƒdx{pԈf!DsZc-Ou-&2.)&wJNP7ri5G;2pcpZ w<QP?}E)#;`GJnLd2%})<Hn[x/t!]–;H"u5btdi:-A;rAX[ if*ĨtPrIoVBRv{C6A{ ],av[«MZ+2:-^ + jGeEuI阖Oo xRWM5;SNBhH*rSc0(} Ir!ߐnTq0G)~}!i&}]Я فk0mAtס7[dt`bP4UL3/e1A3nZ9}QWӜEԃ=uW&gKCgnh'A`k<u`3^oDI#1DFjpzmٓ#H##, nɊGhH M *wg.{Ψⓔd Q[BҫpkgDwڄA ARY*=ŅpP0ƃ;tr6)2+M 7D0&5#DԂRbL80~jT-m T$jLm:.,KnLyzq!|0 D:4ûD ) sp &+cf>>"#z:wFPJZf<+Gi&YFMKUJ JeFM` +w6*vȺ rɧٳT$K \NEp!6Qia1q)B(]%d1 Ub_֜ti +]qG[J"=p[+X4H%*=`7tUQ0`%Xy2|6gG4PK`uWv9^-RMRT%lOیNn!Hb7/t1K>ÉHX+[&V-b&”,Bx1+ ^dUMߺD/oRIZN?IGAc-؁Hw3C`CVWЛJbX݁@F;$WsFO+3GP,)0p >i_)h+V`UܓP:+528@GbC]͹k2pL;Gjdq}YU1J›BY@͈}/~#Q ? +*,M@JS;B/s~+_9-PtZݐlWLVK,F`ɞ -UyiOdNn}&3$JMDW4P)^J9 NnL\Ww̪gkTp4fl$)F?Ni#8qsVsoyV)ҏiVxƳ1Bx% {&EK]W~ŵa +J/l.;͔'leHgC5}ARH;f b +RÈDXAA0uo  #]`L|/dN)۲N80<1NrAxh],,6* +Ȅ">h6uH*bQ Q#{0ZʆJҕy |n*,52vq95S!q բF`1mQ"eg*'!y謽bV~{O=S rI +-4o~ձs▀荂kf#77v nеWߒV@6HwhD$t,#`('[$e4ZfXrCR Xsӂ hփT3Ly,St3 h@TjCρj[CŦr=ƦifOΧi,P#(XzN:iuB;%,Qm\bbڢt{9Lv"4"St/Ѡ ov߯FnCն`vȍZJ%q5Е(عߋs$Ŵ$+Vզ8E*DP3GJ$QZyzӺ|(Bt-sGK}P#˒Oyً-C,\*@MΘp ;t*eduO e,jT`vb +]Ţ rWxkr{Ō@W!a\[' Xum=ZDyՈOׄ^`7w0Ӂp*VtҠJEaB + +y,[gff^9(1H0'FWN#Ӡ}"ǘ3|2qrտ<$L}$gzoTϼ'PWxʏe^{P8L0jIfa;esu@ʛ>1Y0rPak_v[[@ЧM|,mق>c03e~vn/'ן3qZ>y>O>]Y2Y#'pj8'^GN!(ZWQ^PGSBD7Rl:JĘިGo}t_e>ȣmR5l< gW( v<3[/IDbSH1Pc}RJK04%.gIAkMmf4Ѩ$iSW}cN;MȆi ҲH_eG!!3f"AkT +Eg4mc1u?h*vs} IQ5@W3>cE-0E15-I̠ᔚY9I@dk ?"/g6"W<"7l%|8\_"O)Tcx. m@v7Qtt/Ӭ}D9fW& [I|!Q<BvCO;ʍeM'DRLG:h@O]ѣF1u$WZ4!KBߐlW;j+d2H ǁUb>JVNmBာ eHnejC$j{,nȘ^̂.SIB36y4ym@g;i9McE|(sc'h)%QҘm88EA]z0H%Sݢ򲞒~yy0Zt}c*:Yܥ'>12;e~YE@*e󁼎!"ILU{SIlT&]k6J;-gqdQ!10dtiНO0j˘&-jZS45,ɞ㲹 QۋwIVMA)cGJV j|=Z29QvgOsR'uJBl,B(8f$֌M3g[Bdƴ73xNO~A:P\25&7 .fM4LhdYH#&[^wflhԁ_j_xilcwܰ(+CsK:] Uspk6Q >@X4JڰOP|Rz<=$Dو O zx%&tggm@+Ofe*D_#52]dep9zSc7FT5@D*l}7H +!g#\5wQ̈@dZ'8*ΨѬBm!TqDM+!;4‘05U1 +S|0.[,%Is@/x4 k`i"'i,TtWJtO$-*% <.l~(#0ͅ$)^Xi$(3EsTz @jLǷA?MV>a**!ǖ}_ݿXxĘ2I]=Õ'"EE#Js}I(6L <|ε,( HKKC ]1 H+92jJ5<>.3val(9 !ks+!SK](AQ3>%wKGΉ5_rLz*zS^!ҵ\Zw:{b1ƿ>3q`4pcyߪçMY9p^ĉY4uC<&'Lщn`5ު"`GhĆ _PWl6FqC\ƚx, +1K` Ix%Яk),T#ʖ,ʽZ׌aޞVs 'No6%~M|SM%:GcK D6/*5!߅18Ex#pL@{xae#ELx=*{Ɂ`1,hNE)oDC,9EQ-*L kAq#ư|=A(ю%=#LQom=)l +0SΓ[e/%>@2`Kو9#ֹ;L_{9XΙ475hNsGj!|J DX&#3(6śFCӈw_H_ȿhYX‹E*KqMtN +8aBbފ]I8uڔ8o}0/x#G̤g^DU :(l +0%jNae*?M +цdTKkҪ20A +|Cr| I#w^QV=w|8xlSd:~CX4&}ycӘvIf;e*} Pj UIE}PdL#E'"d=J{nW*D//ܴ4 r|ү$Tgd$*A5 >U_c?5䱕zԜ*X؇u4]m:Qlh2$]5 +yb_ pZc*<Z:&*x`:<vT+i;(ic҉aPHKa]:@F(LyX"U:I֋K*@JE^ .~`=Ժ #C(SQ7"5Cr 9ؐ3 S&֜/b\ N5BSmuR[f{y|p~%Ʊ! 2zelsm14n1`fe $0GbU +u1% +P%pjGG'm/GROk6d!Gmw&g'd/0*vsyX^֒m,dd el_ gGG#OB @ț]Da{=-rEO. _cvzWhV~2()C">#BRP]60OdI8F|nUNtT*} +Q﬐HH%VPqE薵=w2|:PBT?ٞq\KAE]ݥev&ԉOm8 B~*RGw[:&b8~nEt*"\B%ޖuKhJ\ X]]J~գ/-Ϧ ˟<O2]O!m2ūw눒[I](Q'3P]Zh'Q^`VcS1Q_>4/BL7F1ٮ*َ==~J0`qKrIs\ow%ކ֚I&B2S VnrߞNVGn&qJ[怃QJ2Qf#<bl +%117tƔ %:c"9cYC42*OsB `4dnُ5 ++=9[5 J%\YM]5˵[˱"A}yEDD>D3YgXֵٰu$~ +-|d:gr|;5 nlڌt ިnb *D{LdMqFHI2GwsH!(ɱBN$rAhz*>R+)ʀ"̖nHL7[ NQ˜%M{k}! J ѩRdRuUKg9D%׷ZqB&œYCVa/sWwrS1IFo`rnIrb,k= O[u +:3\s`%}Q_`;eX-lw0ry wJ#,TOx26$pax:[n/(1k>#SycҫjlB.oX>*K۷WӇ['"~EӝT'su0i!<Ў!Nsٙȅpj`MH>av"7*C ˆa$&&;aӝ$W|RlHaΖ޼`11\ޤ=fbhيFٸDww׎j]h엨mi)Us,$k\pPk\ Z)wP0<;%F *aYZ}> DҊh 쮃Lt@/}blRB=J +9rf@0jqfSAh}msWf)kAtSf_DmGD(`ծa#u:XE⏙|8fF|.HǺ #?I$BqAO2384d.88w"'Ƕ%LD@l<}~+* ?g'pټMȗ#32v#9ÑCjX_o14G2 V+1%VB*Z +!cSD%li7tT)s8~SL21h]4OIQ_Bi(E5'` B8Bܰxݗmo5 h$64!L,NLV- ‚toxΐ}]J&t,t`"̙]4/; J2 +`q5^A &?G%R@v#/Hr/-t|Qʳ\9 +91#3<]?8<IFA+}-`Rwem ͪ}*NŰoƝBLA3Uu3vv+@.gMgV~iMG]E+^'-X"+̵VQ*5HQ2茿a8ԭaS$lrHCe SACZcw"d +`sunU-;s`\ #CtD*OȝWLʘGC! +jFXi[.7 #K#˻ )q% +\Bqvm1lJwiG6tԇ"6*v"c.U3Aۣa +"sZK6)hbYƈ1qHMiΈ#Q'uzC(188F@ bBޠF, JQP4PS2X U`*INZC,C\ +0IMbĒ #W6`FJnP&(`"szxa!p1kt +  jPFwl܆35jD[&"Rc&8ن$}ͦ tK:+j٘P.'n!hKg@3C n5(7LRS09<8/rIlLVJؓLB9(72r&U9lg[P3w RQTzz`dc|@";ڠ!jc*GHu_=cbk!nH|` JPU7u~u6t Res"7<ۣb( +ZQP#NGLmyJ_T27gh{cd!1iY*"~Fd. qA]AMAfDh2DghQ1"G`m7c`O.bBӅ HؖәDvH4 +cbP4KÙ?=Zw1MNK@jkeTIKy4#>TnK0,;A]*ZBey1kmS%qaYr) +Jr 7u,W@EpBД}hYUu^fcz#33f_dGM4̠r*wHRy~FQBΐ2qd:`d/ۨ_"hq!/u5Wk]o4# TL^lA6~A ڒMux\ 4!hA)k1U]b2BH{yn&HWH ,́++ʀ6"!5BJ+#XL fkDQIja) +cKrYV`";(褼ȉr>ؐƩ0?.m~-UyܳTd8LThVP;{Islvy8ˎHdQVX 0f\g\N#VWƩ7FگyEҡ)?-FM7c\oԒ]U ~y^Y\sdw;nv!YdPPv&s>PKl>0 n-;!YDd)須>Pc@y1N alA<xNJŠ%ŠAO`l*YE!Y!>sFg#CC۞Gʄkjʱhع!IqOLn yz$ D  wA1q4pEAE_6?%;p_8Cc#z*VW">;FoI4g u.HŶ[$+Okdu-t]s fNo="LV)ō͝Gɼ쀅~Uyf[3ߠM`psC}cMyႛ&F,bt_8 ' +z?$(/D%"Jr +#CPƶ9jБU; /#(|K.eQB!43D`@k7%&q&L=8:As%[tB]A(HL@>c]޳ks=p5HtƄVmF/ٰ@zm5Wr YWT,\`1r~ӒƐF&jw.!|3iJ/e CcYMxRs)]-fhPCG@s ^%@c+QN(ixn#l_xbUD5x ZH|(6hECS Q#Q$]/Rو1i4Bdr{6tXדv&#9 *M4I? P|H?GԐ`u:y(07T잭`'ah|PP?٨r=ݧЃ'@V7פw0 rrjφŹg}c5,Dd <&hAO0 +-a,#gOse_|x]+7BYj;2Ty5 f@r]C'P&#w┆Xy0QYWwԓyObyEU(a'gKfit-ϵF5YKkA*(Z@쭫hB2D@0Ϣ܇ +=hl\уI-A\84uqhpIt) @+&M7dY1bZv(`(U#H<02kzޙӚN2 fbx$(WDv:#xzι7g %xVFq\^aﱇx1&yZ; U |paWku\T{,ZLQF!턷չI\n"ғp7dO1_| a dv԰zKvB}F(J-tFPטFm {>#g&ycVsVvupx,T%C.[TFO{c="RѺHB}J U^q3x(\gR:XK,2Hg1d*3Ứl"(Au옲|8QY7.Q&y$(Ailu#SϦةBVe4%|3Ŭ ur>!փcWe;o896t Wv.껒"@.{%Y +z#irNAشD\F"=cyGP|؁Yχe8 r zK$t17( N M1e4]O[UƕG]ۉԟ\)!WlYk_*To8E XQyLzv`cJu0ɾmw\lSN%Z$^N"3 ;D@)Bz3vGzӃ!"7io.3@Q* +drW>i9oHv$_K.L3#+cQ1ùם/ c*AgF♹ٝsT]="=Fڻ5%4/l+ѝ{ƾIohjUTD#XOJ4˖](<{l>2p60Z."ph31H! UPjHj 8f.xUH ]:E6d̓y<,ڥi=9H`zrhuF=#2\c𕾔/(3j"bY ;P4\K*9cK7/$7CAEIP!CĿ 'j_S$-GBxf0& }| #O5/d)qa`ȃƐTI*> uɆnо9!NA熰plrN9m7 +Ť7M׎L;Ay2S 5IVU`UНJ1&t}Kn4tģ9wXkNNo0 Ǖi|;XL^&`f W~ͳv62R6M#]X\SR/W؉[5#Cĥ/) +p(w)6F6&/ Lˆ2ia7ىbhW1M22S[x4>&r2cI( T !z#(Pl{~=I_\qF$XHc.Q },16C_P5 Gڄ·՚l)w QXG)YD[˶EoRŪɃZ>jQP'm=kHe&mQ9c*dz8"!M R.o@F؜ZGv> {% +W mX:AaƘPuFvHw`>!p7$TQȍ~'>*ciS.05ŵshyJL;d>A/έw*cI'W|ebsjJ 6i5H~݆evJqaf7r2N&Wr$G +E26V7fC NEh#H2YAM!YS!StdEwnDm)KiFT: 'kk._A~@Z-00ϐt2+QN/[)!%V'A V4SfZ>30ziWĘ(-4,a>La7F(U]JuF%](%z7uBس3;fzʹail! +67F[Rf98F)48zng!myx nEh 7sE2A9N`d1ك{pu1"7x"܏0C.:̌5O)C[18G)y|X>o)9#heY 7Ƃp(c\K *Aha'mbH~Ȑ򇠗"AZYY,v*R%x}9뭽dd6F*k4 obX`X7L)Sh!~vQI,äXfTǩ@bG龂=k%(X)|5ƆUxcFDZ'1VٍP<>- +:-؁7x0,`兽sԪE7~(xF=Ib{,j~fRۃppF*=iJ3ʍ4!,ޱ,@ Ojaw#7IYf0Ngun<|FlP2e*`\` +)ww`%e ͠h?V{]֐>rTtA~d(n2J|! +Ń{ȨFi'{cZ>[\C`RfSἽJF}PjtgtCe1W;zus=7,Iy%ZGuR34,h19+*"M@bK6^8 fmS5 |E@-)!_@ux#(R4ȝZ{O4w!L6>L-A.6hȭEdH2⍸W:a+a"1pѴ1lf+"'0Vo>{!k \#l\o|n06IɰɯTe$E#emw0(0GUَIydgW˕,F)ftlWEdKsz;:0ӽ+$&cVODI"g‚pAx gJ얁R-{ ^i*-TKjgd)ܵWt{[ an<;wOsS2uh Q5z(x=<+,ĄyR#( 9.A ̃ +7bnj#΋'XH\WCTbA2|Ϣ0rg+'Ayr!SyҙJM\h3sOWW6x- "S9f?[_!kE-5G@!`Lj +Wm gXꛊ,aqٚ2[esA_3(hy!wщȍ~ ȄocK"8Ph\ +TOtR͓UzuQK\*nїW4)x "kh/_Xq`cpvtI2Uɮį;oq2t.8śJzvD; !=P4 ) x˸$NC2aYZ~(rQ5AFf( 2“^1u90#!>r1[Ei.HyKd:V j[hsl g݄-.Au)d# +d-P2%I fjb Gk+g<f}ܫ%k*0{IBwmFČ>qXSU8ZUJaB%5ջwz< lLNe*3cNڭ3Aӥ[: +j*T(_|ՠvG) )f"՗F,!]1Q|Sa,F@ɬvL=r5L!NXgTitV|_Bܒr ^&}Ϣi)t`+[Ԟ۞^ Y֊ :3fgTHV;&["P!{ ȊOȔ䭳ј`ۓ*ـ>J>9jWj[r9},xdz }N͑=, YN +፹ S)?'U ӗA+\-j])/oj + m~*0eZC.,'p(qTbJ)(>|{63Ri%@ ЉJr-/m.)!dȑ iz} OiϘM QBhTQI+e% +D/Vt|Eat_7j ޥ8l_sWbEaƆ5r|X+ +g'[vF C$ꂪ$miYKLV-3Kytc@12_T8+piA4x [+,t)1FCo1/\uA ?#0?e^: +(vHt)Fľv>J}yFUFNXTfl! []}:6?bFm:MlD*Sxa3_xt !Dʾeuиp'.Pgvv*5J@)]N;C=rZW{PR`oj gAldȑtW>ɢH.1w`ٻ5eYb꠳p2/ +.w;: ޕ!Kz%RPܮ%e=<;:V)lxM%CaehtAQԋ ޙ9L v]Mrw{V;ؗ*P~B \pJ k ^:뮀+U(#F3x3ƐbDX:N9 C8Aֵ00AS).U5v"*m@!fќ +ʼn:CAzlM؛| +gke#QtHFt$M`B.4JI!GKgkzdTCĶb& P%=%H ObԒ;8X )"\'vq\K5OD1ƍhla}e$7Z YBf+c3?.w o+PJ7SH%eIB&0(`&P5,{  dQb<Ǖbbe3BBnf6;L[YU ܈۪I6CD/\ݽY]}?CSUi2QDp2mGNk3w*zZOeo)!)eRrNb8]rAbBd+3椥&1n& +&0d0hPIJ;Y@?ͩ) 87UV*.Cm{*B.(D٪^)82*_b!I]PѼv4 *l ]FTZ bI Haꗫ}PIjԐ.͛*<ٓ NÒ@w0\W3h:Y‰(<g} w*TtEgJ,;+UCb'8}cy'샺ᤑ1y7gbT&4)[-\m<XC`kxv2$s?fX+iР\g_ j/9,'؈ͪb/=eQj䦔n# ۬ޢ @ +8FYфX]^Z -BFOn.J7.%%{9*{!ߣ xG02aQ1蒀kέR"&MJcDFZZR/e-Hʒ63cKĭl%y6qP 4H>!ID{+6m]&U*L}:2${e[rQL0yR0dgIڰ??3syD(p|h߁^G쳤OJgșϕ#DB +͏jo3L7&!DCuA _ņ"W5˱pʈF̃Ag{V7d@&0PQ֧1`h]f)UYQNl SROZ )}fIBI{)-ǩ p葮E=ǘ3+j/# +n9M-bvY;Nׅ΅},86dcyP\ ŘH%~G;7N5A L$]r` :ɱ &vjsٚDWy m C@@0EpfOhؽeɔ<"aHpټI$Z0`i8EzR(~.s#@zOpZK࣢~ʬ:ۺc=[C@(Hu+) qQ0ޫ #=;#l$M샑xh)o᰺B +* F5bi^~|Fvk#6b$cĎmφ8P6,-y{H`^7vHkhWT *JF 0#6'fy$NN?f!уF=ay4c3BG +, 38JbRStXe7a0Xu W[Ea֓Td r.\ȗ®n`J^hS %S?2 E%={XUIzv[`t"DvzeQ匼Q}|;PWZ=|2&lAKSQ"&(KL1.Br)N="H4]`(]p?r4{T0p} #z=C$2 tGhFxFJBqCN'bM-wyξ%E,ڦ5pG&(9?#,.3*C|f pt#]8Ӱ/D| c-сi/tnH9rPΩk!DevD8j2Dp >})8AP ?.d |QPP T4$2u\ Y{; ;Z=t8T #Y +m ndAdMVr o<7R9W*t쀳" +!XF;&tIMo)CшZ4BضsrL2uy~h#&k4BhJC #E?R EG\ d󴳙$%4Y9 sɟW?0{Ib=\Ρנ.L#ƾhciR6RW*1\GmT^nMD]nבtp5 %IӪQ)q|KXTZHe> vn-*tkhH) Rĩ)fKcAn7YM) ;H譧Kf6(G콏0Bj"!frkwso:;ݼv61,Nꪮ†w[upFM>_ŕ~٬  ]5SRR GRLFXIU4&a)W5p GBZAvp TvCQ\UYO$ h;lE,v'aHMvr!C +"B\sCLaY[*Eܢz/I8@C=F6v"n<3@PSUbCt1de6j`Ýr`A;h@XF_ڡ9`UE M(zA\)4dc?x9D+'҆Bpfdgbx\(A$Gz]|.H7T"3+du4X(l',2N"Nؖa>rb1c?9<̤#3L!d/',5I,]Gn_|)-ŷ3ǿp0 +`3,IZt&E< aLښyRʘ3=R Ht5vmfKF$ +<}D[Ǡ^ s7;sYgi@WQ٩ cGZbudCS<ouo[~zUyD"W53#T"бU汣ֿEUw)Fk|cZKglhFYWېcP-CA +uX C l: +=vAY1>Fdo> +!֤G3*h}o=NUo/HL4;/9,!MTUSMo׸ӉQrQJ, Hu^# ;m(jLs6 4撰v(N` /azϱǘP6ӈ@Y RD+/*<8Ce˜)sFu:V[foBPRD _66{'tkYA }1p{īx3Z\ÊQ['dg ]!#ceci+4]" +*R ؃ &G~ا!(;}I􏖌X9 %+k^u!3KA c۬\b> T"{&( łcTFz_R巓rkM!2CثڒIGgg'+%+ ^%oaNwCe +0[ kZ W6M&<'|(=!a⋜|C5ɥ1~feOy2p rN^E~ lLrOB[9d5!.IѪFrп'p ' +Zp4)JQ|b;ebR'!&ROVi*-8|OB&Јm-j.ly_#XXCB0N'Dx^1 E?F0 +锗 >>QIzKCƄO&I/6{ s5 bL߻0NH5ٲӨTScZ.I؇p{n3CػI46Շz:I'SmΎ8`M3JH^Ú |=;8QZw`WD[Q|?6Ƨ.ʒcĄqCn1(lbʰrY! t{"=c_61D\˜Ù924OdA šBÞgIX`j@hx~2<1NHta +:ψfL6o 2Tk)׼{tXR!Ea޲谕!ygW# e tS[d0?ΰ$N䮗_Vyʌ]BS،nxA 1䤏^XI3`~`cI Bcċˣ [ A$sgzSceJ\Q?Y"@'NT< d_[U*'JԒIC.lc[ڴFFF,tL@~CBE/ҤR`P7!r@>Q\VYrxX/@6c! :}-`k3l..Q,4y \$+q se2Z_WZuЀaQv8pa}$084'fӅ=1h-$4;sSW $aKa!5of-kOhC Ak4^p{ cao#[kW|nG +!#z_9j +lB>8]mQ.j(uRɏTrE.7񉵼}CB-9#q@V4||ֈ%мoVƲbn֡'f1$T=' ʢuaZq%*fR'n"l \nPh*TQYQN]nI/vy\Y<^Zne-dw-''f1ZBVLRnBԾf=JXC!S f>k+b;u&j(XM7s=]?'GЩ5epuzp!d=aԔ@A%ըלq(1qA`$%s,+|+cH9 `ICE8xccBS@5̥(Pv5UVGtW-e"k NI]%`{W;0 8Gcm{ǹN +TM4E؁&i=/hL򲖀>gbRڏҲZ{O0 +G#Z"My!K,HHtJG~3b)9%,-du#'[dϸ~Ҥ2zx\t2*$>աGىqg\tҒNsl~ +ŠKX/jllr 1ӸQ>z :Sî4%Ӳ$Mgywo V +r(EE/#Uj(t +)9!dh S7]S" )HOd=[qZϏtA?jA.#9AGL*|{-ם$B :|ɿaA tTDd-D/cTNck'twX<B5<ɂFN^Q^$X209?iwR툐$?C3&Umԩ k6#nf0NvmQ3D -8ٚZHم;)F, `'q/i/z@(+?IIAF56q$cHC-ro }3zvD$cYc| ȑ#8^?(qѮ[U& {p];#tt\8V1 B\z8:~Bҧ$.8|:rbL +}0C`Xx l:>aC49*/gm9j;D!ņdBɫn`@Knsdg\-Q.{pΊ9N#^xZ4D$͈zEIS+)O:~(&;,"a YYڞ /p+."sa Kޛ%m$'< PY_~d@w:9w`AԮP2ڌ_ b264BEp"mV۸cK_#b[ALjmDhy@mc\…Ť[JJV~IZ6YL9`S43=&r]$g3:$rIŁiuk* 96$D(l m^&I|%D(Ӡg&Rov0@f=1,LE& %) /"5˥eDO&e26v@`!HV|V?1rZJ;`S h%~;?5cW-{Ú< jf  l + [W-ԋ +&t;nz'LdR.|wSAy5iJl) +rtbkDD 2 XW %{ +Ea^_O йJ9>fr"׺f6NC\#줅ln*B-(B`(ClP*Q +U8xήZuM',t6f|j1۾d!e ^AbuxPdzM@*A!{E34 g3-4ִ2{q"_NqD;FNkr<NdEGaB0Crji^h1n,{OV (%"e&}A*Ese Ciϵ$]Oթy[iVL?nKT@Pzpgir ;U +.72,*0h-6RJ!-reܛMy$ ۱0[8IaWEPKnqhd?qKW+)is HJΦ"S\ĸ[I/LHU6NgӶ܆AQ&Mf^n E5 ӋQDFS#1}){ZjP#-ٟJ/}9;d_C6!m[S)y[щlu}61m9Z-=DDr3W)z θK_Ԛ_9PV*NcBK#9J~|ZhWRkYPABbyTkKN,#jl%]YJk Ry;֞G;̼Iq UFQ[k=C1&"[JȖ8EGVξuo󂓄%x0_meYhh(rG1q֤u>N"H;iHЯԉdl YS-H ],eH !+bd_QFPFq֋DBf ?SM>IAXlqE&6geRB]F~ꋂ |1q@KQT m..{f8׻xCzLgI+CD.^:Xt4cxy+R` g "6.05sC +T N2̈́[p΀lZV2309ʺ-H~lXHJAFv-#](ѵҧůtoJy3Ay MV ddrcZ-0j=$ɝe3k2ӄɭfPVÛ.JC7H%b$Q#{z5j@}Ni*wGL,v=dw6V/ҕyK5x:1z<GlWRϞiD%nmԇf[ɥZ:O\LLwcX<5wϒݥ5ɮyb4c^0h"uݍ5Y&}FŖ ?G-%TW#*ߐ+H̙Il0=q T,#SAglapeI\`\Ʈ[P泟Wg9Qv1LC$ ̝Ņo(JB;,0Cg3،xxi|4 rR5Eθ$ z\i-Tצ +7 )d,6jod_r{T= W$3Ui;|vnjAm[޳GA屯F{a*4!j(#z`PiHp%Զ6i +.+OS?VWF҇0[ 0 +)9WM9"&S1lĒmX 52(*pBi*]ZА ѤMEjTH&TZ.!,j9*XZdѯ}ARՓֽ! ~-)bjcj|V-(ҥ߼˘p#h|0h|' -^)%hLy ȤPSlcd4|*3}?OU q݉,.3hL +Ȃ'kPgă<)ی -L(%\Hr,Bռ:[jWO|TE݆Z +0 (Q59giZҵmt"\H7اb9taՌ aɋs 8xTIї፹D'~ɈBmhWHPV`n#8S!A\a6%x ؎ ڵ +Lj\buFp@4@jeWe&b@\b{hLrWQj` >.,Oca Jt<D%BT +4100S +@"yQlַqNՔV*QC[  EFƵ@bL#ʗDFQwłܙ^'SفNYݘNpQp*.qd鉀﵃Ngj{:=Iيcfi +Sdk<طE 5ݧBk'(j22z! RMHRH2\z`hnu$a\ rhc<ڹ(Z7!@F&Oi98=uv@ʺd à +DsZ' +0K/3N0dCqN#RKƔLj䆘E:UG)=`I:Ą\|ЎEH\0gGt֜$4Р-Ci=뎔4aސ~ +s/{k9$eW91*PA5]Ayd*ECĤO*^ 63T,8d1kI +ATc:|BArČkO+%s,h$*Q .ԃk 0L# %AX$0Z 4 b#M.+1!PH:QiI*Pg>#Q"o6ؚU߸]|zĽRNz:<0ω$Diw݂Y&{*ep6g`}LBiH2IAWE l /Nuդ^*Q |sCB*C)Jb2\Np,TeY$eZ||w{,[Ckm;l|E7E$tSE x/1ՃhA`LU Fw(f06L ؛0 l(SPѨ}ف9. +u=; E@`#] h[chAC2Fmv:qlӢYmyE LhULDC770|ʹECYf +0&u,D-l\ܠ;TΩ7߉J QxA +S2j(DIXfћS2(34-ﲺٺyh I ROi@ ysSṁl8`LsOg4OcN[Al +9q#+@ jү8P0 "2 jvlIUu]0tT\"B^ک +ti;~\TX'ܨ[t6̥jQ5ذtT\ ϵdx.hwz%,QQ4@_YZYI:=Yh3-ĺf+ :`Щ8t: v?xB9#T& M)(kZ4f3xpjWބ:tBv·L( pn^_)9Yk$sl+b` P..;C 7ZR%fjp6,0kT}ghS Lid_ڈE0^wcM ռ%oQ~e&])SkC )IK g@rrU(96KvDJNu LVDWMlcƣc;R4ojwZft/"!™fM5QM,#9+K A>م + \\I1w? +.ubbe$Q8DӞzP O*R00%Br6|pm{bkz5'DzÉQh0Br;/y\l{P 9NB jm*s1žmMaN6ބT{ bWa_GLLoU'T" +!Ty[3p3uY<hز +ѝ8N 8 H8a))Sa egxdP"ь1pOFFF3.YfEIu\=@KV4GV,Ŧ=$aިK*icg1TS>m2wA-RtnQ:V;=)4l8PxQDrXVC*v\L}.dS-s$F($@aVRNfa!|ź2ORguq^v4QZi^`* 1h JZy[Z%H'lI( a@!<2 deqIEѣU] C)g_#\4#)ͶYj%GG7.U!JBbj-kXl6/Kh1xsLGy“ω%0٘E{B)3%Hv d<9$t8G!`]6|bN%8䵝+"y2B=j1"ZcHd9?Iq +Ul99]N*P'E-m `N*f~yYoPNK 1نjj\ _"]s2sZU:aRLLJ L8dx.b]=cԢBqL P.( unkTc?rUDTpG0 CěT!ivd'X5% qoJZ6j(ԯA& n FqV'3U*~|DTUL` +xN k1v.:B- $cxoXR~"NE$QC0\qD R{!G%(NO6pJ6$2[ +]46g,By!!2Iۀ=aG~1CxCm\ev9ıun$W vM>̑x%&\kl2,du*GlXF|KEDzq\d|ԪӋdQkT΋eNTNL. +J͑ͳ 3;BF;w ,vG9XHڹ><5^E n,?;p~*y7 3VBOK5A66b6MU~[Y0hƤ`u{`5JŤjbRf2A|%i*;2T• b2(/ۼ1Յ!ڢ +CV +jC<8Ff!3i}5Z&Вv@0O=7i-5Z\*B-R=!_y.0/BxOe9I+մ:FB"pPY"11Gv%kt>+6d`g"}9HEy`s3d3=> 2f̘ˠ3'0WYz<$WDRvIdQIy2DxxD6 tt61Ωy܆E1&cg6IcJ)E' +$TWc7s|'dӼ<0&:1Ea |{RƄRQ{2&Sic"c%.uŘDNre6MNVx`JĘ~ ds}c)=E?b7-}*(8wN9ASkv@п`=]1Y Ώ}SqE:tزbob}RW :iB^#ILw|y(韀ˢugeo4vٛ\̦b=?-ŵy#{pi=譒6~4ovCcoF˞oC".4_ɓٛ).lˤoIEc@ Q9]4B>0@0Y񶢔rOĔPeo?LF'#FHϨ/<|=ܡ_?PÝ l.x7f[- XSɸ/!|D9R5!Oj{& $0&܏[FѓzS1#3 RU#sZdYZy}[VBHʊ.]Bw@q?pEgňnD=ƺڣ$sИZ!q4j۳M{o(Db,7aӐژN;Y/luЙfF Jiu 5OϮtxî“{ψYYP1g ,RMEΡxZ_%l&-)8[\5pB.R<eV? ]y)@!G/sd];rF,FFGSݫ` Yx>7TMjޚP%z,_K"NdP5,†a))x5tl8S3͈ +f7y8|SX6oyv1ߠGuKJY|#pQ{S a +8Bx ag͞X[xLV z['`c3tjFz:CNQߗwRZZ9LU^уKhdɼ^l-ۗ9P\sZ;R37kې2r 2A cԘ2! #=@|yiD.ЌNdZs. !1Jm5"xyi恉`&ՏVnB>+-VEBxXZcNf1?W9C`r2կxOPE\@]YԜ<܏"0#bEQ5т"IL#DD=Դ$9a+D򴢠QSǝy('!4v*Su4Z|ռ2ڋT-\f0];x;<lYx+ptsאr,H~~?K|wZ8gs$ `kqg韗n:`șN-bѲ7=k0OY5Di +(ǙYT;%1do+]MיjS-HXQnDq}DAOxhuRmCGAﵖ*^GlvPB,M d CyV$|9dU:9ǚXJv$v|ڕ?(Ҕ^?1vcBQ0IVhCH~DZ "U6T˕yyhwi&{]CrٔШ_TQN OBdpi|n1< +Љy7V,gFC' ? M+ BZI40v(m d&g 9bz 6TOF߰Ҷ{BcgMes Ұh]Fi~ lv.d.s-f+%1wi e:.W9xLuݞP,\kHL@,H$#XLL +/[ g` A/żC7p{PFèPt\::okel:`4IӉDԠXA }PuCӔ*zFT"F=`7Gr3vK/jF=:bee%} {"cn܇vPJ4 ")ƪǻv1ʘh#U~I$W?ϰ)`o;>3)5bT/ǒ,RF%%̈ ;rӛ1&imP?ɇ]1+70 bbQj\æ])sFg)RoCI99;4 I'svj=gf:)Z"REu d*bU= @LwgWXLΜ_M2rcKʎ'DYcD.W3wj=o2X66 )m{gXu<'I眹TgEA xyooh2>^m֦}tW3fU4|2BYRAQfpx)-$w>h䜢[o0⎥0| 7-ö{bv%Q3 G!#Ql~ ܎" !?}_Km'\Hw4r:;<q=}GX|B[nlH~ΨKGe6)f^p"Z_i39됨NG:G)Q0w!,:MR1ZBYB]Mqr:`J:ETHp*c%B +z(vreIW%]EE.F%BX]bi ~{mĆe-#\ij3;AM9}nL;r:>z^T7s՘N6qC2RC^Rv[S`iȲ0 jv`uOS=`5\؇] }1L>Óg{uQ6u &`}#aK/ʱ?W{Тay`Bcə1\¨;=-"y;Ӡ-`FYuYCGJN5s +*J}llDӖbA$Հ5"K9#hk^k=;qx_WZ=$Px,ZΚ,v jIeQG4Vlk~RΛ꧗ǐ "XIA'kcs_/(2+cR/J+ED'y8G_?^};:%d_#e;jko( s +###=kȈ$HmiH桭`Ӗh\/PsAb*Ac;$OVaG:bϽ9$ZgR)ZK{*\g@)x+yLѨ\jIF\qOo Ie2f W) ٬<ޓN! 9HDfJMmnm)ML9dGa629IxZ|DQcCb 1[͠J˙ :f [w_$&IYqPkW/s@/]lrF',:9S4Ңxi'(j}\tԝV)G+/<5Y('11s6$h[ 74u\R@ \ٍ!@*A'UOϦ!BvqQuv=#JHE}YӦrn]FqPud|%-[;fj +edj iBJ& >M5hL5ÄB' RF4:\G׽_}UlywBY ߪ7^tE$bWJJ`a"e^W5B2N߻U=E`EyN℡hqD{GnY[ꅥ:LbkhDp&/"=h(RC]Hc΁nEj_ -XQp]geIS!Rc/$cc^u[#2Q"%Uօy Q-кQrFg/j}I3c CSP䚧惢&+z`gil*e9p"^6g(Mjy10Htp-x:^'#EJ|f6OETSf9jO~,gQZ+ 12F,[ ]5(gxBAZbW-r#}خ!U nVUb3ajtJAIQ4G2B$q[zQV9J@-1Dq-b#heqUb•NέfpOBFωN] &zc"?zo2OZ$L&_smb#øc'+tÐw*v5g*cL2j򸮤# ]q[iX7ȳ~=wpa;>F$!5os[7g}WFBiRJºOD)tlg缆T8ݐTnkjjJs7wKIúDKV``o JFXyxiv4Jc~AhNj y:?СŶ/Db" Lf"X-wcO#!""W )P?]!'ٔIL eL'Onr1.)>(2Is{/pT@9xRF7قtyt R2N N' tPВ「 7 ͈'#6/5I\w21mȮ#nČzv/q8︐( [ƚW+Tp7eN-BUVFC:ޢ1t twPcö+7OG>#8/:#c d, +bںP_X3Z荳jzwB樹P Ma >&eV7bPjDm!ZOW=cR탐@(bgK:(Q/N3)b~):ECQʙt"pZS hKyOUїUdD~Ւ=n70#@mI*!+R$k&6l2Ԝ9a_EN% ᠜Ƶ00`R5;!^CxɈ.|N;HT4R R1Lly΁Gqk깶QRF]?b(H1J̢x36zYfk%YrA}92è%~1qNw<5D{GwNv;IX#?S\(O:Nk { +&_D,9 +Kʆ.Xd'b٩0#S1+vXA! cDԵE + +nh0f%D-y @YcsTec6%:tPR- уp-}o 8 3)Fj&ņ0O>DFwbMMϼ|.q Gbj%L7^R!r@27E겧b=I-s z:E$;p,.r,AB3^cɑk 5 +!ޏ5Rm. +DhWptCEƙTӂJ65{o!ּGߕ/%gߵR^NvB%o `EgJcZe ((h(X(3vGy)hg-P׎%83~)f9yu /1HO[;5stjX6K㾋wt- 5.~sBT"!hfW֮9^uGFބuA(ڭT5 +xr&7IDQ@#.qcմUKWt`5%'¢UAnc7]R=x+G[> +0 Tqiuƚ MWcK%D-\U 8q5ױ:bpIQ`%}Q9[).4p>[g'ܫT԰34툻;V@d{Ǫ,r*D >l vRը>?>64?&?Q@ Hr΅$],:l`vʻ'FA( +u@5MYOX%J&'47)1eNڔU;r: +P&)SCx "OBŌjɍ׃F1"?a$U ud~pg=gI9쯶@8A>NH1|(q`E"hf#(Wo9#nDߺVnu:5X 4?`iL[7oW"?+;LzT=4T#8EmgV!~B2l + |v59cMKz^4E9Gqd>UwDz u\ǀo&X5\|˯Ngߝ(5}1NC@@<:@T=rK8 1oH IJU)2I)S`u'1VU-#%YŵK6H7TI0ۺEM&qB-@e7ygǓAbZ pU ^HZdj% gfL6|  eXt-1&[ Et!6a n+x ubd*T-%+_&ή$'k&To:M/р18L1 +=WRPm.~*t#p,., +MX[}6DKَ;~0I +.I!n ?VVlmTz W X=},#` +R'uqO;aǫQbbB:9@,9KGpYP a"꬈WP)pАYjq!҉,@GJ@/jCE#:9SNPAHAV;.*%\kSE]˭mZx8 ;2jY?E0J@4|6 -VBy*ֆxbPg,%V1<0#$]{bͪ7H67s;GxBRs*~qN6k]tx/ƇGQ1aPBO\M4yц> O_mԂ'S/uvW\* Mu$!}O{< mQ{,8`+GهY,ΠE'+pz?|8D,ӱq{>_,8t.zi P2RqqRRB(OFʜۥEqDθ!{p['C BFt9YbTAޢJO4Jx`OMBb݂0iejy,Ƒ!QNlcNqƱ)%aW`Q@ ׃&,!qOޝq0Q`=? +BeH p?rNuZ,j (%P,iơpj6VV+Ȳ8,2ŎQh㴿p6*-o`XF-pb$(İ[{BP ΊLl=DAr,c1׶|t~ǻT_E9UO>MBW{XXpf&]תdQRxs f1rvtPBHȶf0l #~tE8^Jnz-BEDGղlY!I֎r@Krta"kNWv'ib6*Dc`Cȉ ,3 JjR6T +3@XedPn7 :a$;@666'obRi{V0~dC'%bɍs6_4]iq$q1wShy&G ϹƧɓ1izJy%GqJ"Eac)v(ĦqQ痢1{52jv4ۤ%=~ZhKٔ+8ud?^) eFyYcRcQ''X.J$bZ\l-$9IEN8Yuɔ+a$7w6F ,gE|)ќX|} *3}=o*-!Jm,p ˍ#';HK?:f,CvEM@ҋlB!ý|Q0i=f\oV &uXv*,H^ JIY$3n;KP'It0Iت)@BG5iזHvX=LT#&$]HFI">fnH+XphcHEkwӒ1@7Kϻ5ndeRW>T)Uҽ#M5d"*.`sJr9 +aT7tR7[ nMVuG PN֧YrS!e9epBUYƮB`+CK*qz|`q?ńZΐ(bwi^* mU&(r` *P,V[A*^d:7bЮB_8| +9ɋT~.~Rdz(h"ܱYmcWP1uPD/A;a7NvĴ}m;Id'hUR CƉW_( `*ӃpF*RIt8E|e9xG9!HZ%T|@ۃd{ػ)Wg¼,QdLa@-{k$J7ڹ.dA} +oIX.cXDI}})XZ!׹7<چquԐS!=?®S[0/0ږH*GPUᩜ+Yv8),Q5ak|5`,"34 c.-MѺ:Ja5S_j,ڛz2Z)MM07%g:ی6:&XJa'@up=\l6f7cS)̸U=a0ˌ">W%hx:IE,(Uuk)Q}ʬ6h&5 Smv\me|zT3w68ުm} ʼNiH,.Hj6lr+Ȳ< j}z"Q8r%*Vͅj }R('-]hj.(TcbGrBs7n0Nho57rX&Uj:fYXoaׅC28Rflk8hB};LzTV*DWp3 +? cHqVqʲU(*@!Jװрw2r.}8}`ea˦q]iZ ]*XX%k.ok:V Xͥz4) +1!On[qU=Y(~6XkblJE'q&8Ÿݘ@1LQ23J0';8~L@ڪ V)4c3k /:_SxE rHFF[^>RF(&`Kc$]G-J,z5݇URM.#{@/qm,7n+mo 8K8, {>mCm=h3# Ο0̶d.kE~p~5lRt??[Հi,1X.zٰ(!q7Ԋb@? BHV[}EppH6}΃B:\w9N݈ PFL,#b t;wd-D_<(c5k؟-X-4n;·=oGgq1QߌrPt.Y\1ȥNt$}3D5{hTȈUSbI"4 *%fqD6&0pkr'ƹ6`^o9 )9)}m\N%!#f P-oZia%!Y79i<*(n"PNDʡ|`z0h˪Sn͕c"D5M !8WI82 D|8|#4؍8.,r"-4NwQ0™cKDtYb|t3dZZN-=fkeɸĂ7MH-(kKȑ0p"qj* Sbkeee10A%H*.% +(%5L8c:lG!wIO 1zB6a\&rTHrxkJ 6Dx8eA<*dD-#&2^[ ޺} + 6ª87l( 0~ߋ%%G +/_jUF}XL^ѭn@^j5sϸP;=,#f/'\=Km`R,Z@V /D|FKO'uu[ {?E[$f}@)8dvɐ&xÎ>p$h@;?A3!PiViyٔ`[(s])KZ= +^lK=$r(/ P_\< Ɂ(Yk>dqN `o/ўĹhھzR]iTdrl7`2;@YM+"c"S|Mяj.2S?NSfKt#m+8P94*geta.q-rE.L83Պ_@~e?R5:& )iTDFu23 +,ଅ%y <4bK1L\M[H 2o.>x0 HgS:JM`Na#nQ*%9"%١)Ӿu촇-X7CEUcC 3(VRe+= ,I{T~n-IA57_C=ߡG8rbI()ׇQbl1ҕru8YT&Y4^!bw6'\=d: Ps;3OH#4+,^ + q[TʾX â6&s`"_7Sf q:xaqk.Tr.8#o Özs3Ħ5Ħg&$BAHg:n45ت僤ߵZڪ +YVd]l,Gg՛I[Y>۾~6SiI mHh&oHGMTG: +hfJʪC4<E<3aAћ}(VI-JAWqGk +3N1lg6 Y"4!8П4jyplJgr{F嘔Mv%kJѝ>B f1;0^Y +мL37Rg1Op p.堒#r|! !mygJ)+`i>`Y.|\4i $B\;ulS^Ν%َԗ`>=e^Pθ+wk0<@ٞլ匛a{FGhIlL-|H((Psz#cܠ͂Y&? Kx6CA3NHٰgeQw2<'^6Hųw^gѠ6ǡEu>`_tQGm##"DM(Ys!h8Iڎ[RVWGpgy,*V/-b- (XX:Yfl6q^ڕ'g#"իۤPyS.y1>L6ln#i|<C?sߎL1G&&  ~,o2BwO=YaYTXwtcvZ۷m~%klldZ_Xs]%GIiE6:,W&Y9pJm ;Ȥ1H +Y0΅M Q[Sd<KC@Knho/Wq;2Ӣbth/Ep٫{{w̕inH]8Kvxe`;ԊDZ`J+*qj:q(޹I],R:W4l25ERmi&7Kn3BU `,qcs +nsTu 0(`8{:xx+=rx'6[؍%q#yפ,@a#)H1(:cyȫVr3Sa 9 `k@&-^08J#.~W:& 㒈EH6Ĕ/cF x<9`-N^w~^[ z}p) #5F3O<'%QŊ㔴dU"q'@7?j*! +a uO9aTWk) љOHfh(mZ,?R-ĶEɽRJ3KrߦBf67lϭ>w:Ƚ&]`Fh,.T2ng*i')c.8ŭ,4: !gTPC1uu }"f ! a}jz}@PV{`Qmcg> +y(mzV^˯2Hۉs-~ZRLTCPAƭQIFͮ%MzEWTV%dzPg& 0:uB=^ A5IOy1BEW1+dP:T ⃋Hc.:=1.P@vъll˾xFR + KI.|jz0:jCoTAX% v +'P59E\Ĵ*bّڅ Q9\U R@1c/ګxί)WdRRP[6$콖 .@DM0 <+8A4(lmlp*ZT{BS +(Z'E)C9ȓ)DJBLE5[Wh)ґhn@(,%{÷[}1.ļW0*#b~+pI.@5UwX<؍V8! M9 WSaW(=$b܄&q (Lw[d4r$f&H3X_z6ikiA#IOhp 4Z vV@Ftx@%0N3!fPɹhhUW7G]b0ܧa#AӴ %q8UMfkg-.,J)9wqas\zm=<×6KʼntPA(x{v%}`F~kjunj=dzCAsNAX5LX1D#N(uMC3 FmO?C Y5-H6'r}'; 20m]v O!,X6};4O +7ݼ[fEތT Yl)UR(jױ7Kd3.wJ$"dHL$uׂ'5䌓x%?sD%]1MHE-8sxsoJ_6ZZ[yOr.' +-xŸzŰBC +j*!.:zߕ |DMBny[l3qXQ JkOrlv`Wt RCs EYl F~(wĕ ?g8)aV[!^g, ?+%X n@FkGqҁ`V0Awjs1DtMÀ]B\-hҹxs7MdB G+!-W3)!8K\r8gDiY DR+ךF8LR(KjWIkIbO"U?t؞VDot!gNbR--lH.oRr'dNVW_D>٘ǕVb?`X]>k4ġ]6ۖY:R2:0ȸ.y FXV6 8b8MJO6)OZ/ѐ׷7Dlh5\طGw&M^.)xT|{:bPPK^DC6#V&l`nHB5Пpjj'&t,P tRJDDSv4OTpbadVLߔ_g&B0'Jz?ysR~#@IX3 +6>g3F}(1/U.rq+.8Qm#EY.SjBSa* +$ u a%oNO"_a`W0:ч 8 V'5u #u$ +;FiDiJ=V6ԗZl}-{<*Eo76^tEmOTx-lJ-9ތ7%:\<|xhmMBh@UK];t$3#d|\xMs:PDiک=@H~ڱMJZl8IDCq)O}P^FV|2u +&Vj;'wLI@X/:+'qDqƁ`RiRs(elR` +BAQ'p Ru( p0g%yS?HdŢoj򍌀DEUꃊhd"hR-&[R>fK 獋pCH1`ݛ+\M rڛvI9av=I"rF5:-kB +ָBNbU-zBR*Aʦb*ǧ/$a8Gq0ьgb1*ٷ -Kw^VPrP|- ֧}\?1W]baX\g!rE[(K+j+0)8 6hk&A".v`"K30.)ޛN㬦i nϜ}ԺJc$Ʊ,K6^KТ Fڰ:,Fw-I `<{jXi}zhLF u=)ijBi_8V.X{A +4z۷8XF_&[Rv\wgFQZaR+Z@e}fqΒuci +$+}'丐p4<;-.VI(=cc''I؝}X{N*mЦz#/9Kmk'F/iL.+YJtj6"776x6]JF##n0Uڛ*e AY+l]%m$]v@,yZpj%L1ʙњ>(V#`&GF~Hnb*Ím'Z3`ఀ\MQkD@e2N t*HC~IA7"|&_9b"ڷZghG3!!;0C +OZ!y4ơ%ZbJl3FtF"eWL[Ҥwe}"pEL=>b;*<95~$6Pl! ?|*0k(yg٤.upD"8Pq`%V*L~´V"Rrz`lycv!h,[7Bu /_ݸ;nz_Ԓ^͈-ې9+ 9f_.}kE`AČ&qL{bT/RPͳoesiFK_N,Bb I1۔HIهJs_jkƜm0=K'"!^piEP d8~' ;QM$ЎwǙ^p;(#qz}ޥ4jJ +2H> ?7 Wd<,xl'Xmmy|)62PXV ;QM9u $Dp +2mtS26lF+!H,\AK]Ul]ih/x|ONPph{>ch~<#|#P)"%fq}`%1L3v +QG@D Y:Qy@'ګKmxbINONx#{Orז5-?@>uFsq#xv'Uh\IW0oiegR9S)7jEB c`&a +@(Lʗd`!'(Ub?:ҬMˢ{(d3P]Þ*yF5MMcI;"2XKHtkG;R˛w HI:=UQ=!yc[*\fVab3D-T"9ۤ5 + ȮRx1cBrq "U.Ux@q]N1*EbG[GK6hMKVb,:5-iy* b6`ѧzexhH=lŌ cK i RQm&gr_cT–(x;Īfu(B"hl)Ok4OY*{`a =MRwzEg%찠>4PϊpcSLuv5$h4Y$As[z٨]"Ta RdIѮ(Dd&Rِ^uHö(!Ivh'm/igb##`=>LM h(X];z' cɤlDIh(W#yfD\Rħ ߑ8=kvC҃yq]N7Yz2o2nJX9I)8NF|G@73Bd| 4E{\a& CE ]Ii7{}vmlg) u(v޳0+O[btzuﯨa(N[]W2!/8;+rt2n'vV/ '/V3#d$>e8OV{pXVƱY߶J[q!N +["Q\@2RK|M$ꭔŕޓjHJ(=&.`*L\xp uG՝ G}JLjP(#j$hsU_%#a%b-@@CL}ąZ#9RqP.Q"B0 1;O[ZG~V_;0},nȁa֘(R +/Qoa~a%и.D֗q +'S^<ڍ*C!`) +q)4Wz*F&qp6x +:,((?T@f:A B7 ?J8KvCux0e/D%r8H]wLR"G#DŽ4Ĉ٠PxM0e0L(j.#2l;\OXH #d+p)rŊNDI-n_ԑHylǤ0֨b*#BH@D'r qs-kZ2b,&R~D.t޼NKsZ:`,M8H8m"ѺKaE)jd:fH릢ľV dRuS;Z6e +G=fps+H*$pk}WGv"P5H^Ih{ue &U3"BɅ|V!Ij<&/CPw=: &R&&DET:q +U'qSa8Ђx 5tĭjf4:0 G%0I *=(wPK*Ic U˪m>YpQ!#RJ׋=*IM8=T 5(Db+vrt|X 6QF\؍{Iݔj[F 5i0с?c,SY2П$>]q= R*= if ?I8bURL/ʼnd Oʼn1SH- h~C!Rf1`]uԕ%@}\gytuϪn%&54W`L:ܭ+kFXBɔr2\#aWi-J% E*3;_ɳHclG^<ԛ +kd*`&Xwr9'5Q@wU*؏ڿVYR81t7V' \Ze9 +{TbEsS[6+V4NJzrTb[*py+VtLL!eXFngS ]L}RcDtr16gjD@g+X`H'CRZ*Gx -Mwdtk0z#&zP /e7gslem'2nf/]TE*"XF 5p~U;pѕ5 +pc]tW~EDЉ3ZF2ĸ>|mk4YA~7-upu3(B8 !BzʔzW%ҡ.p@AM=}=D;jp  +K f# +8,0:@kY +LP{C;Έh(eR|/]w<~VRTiCzI!kbTqiqsoaf֋wd @vզypI< @g.7!>Xfg!L#̮Xlt.ZF]^}2,C32~t-E׷&X[;_Iyu`$, +;X$.6XWڳHpe~,M`Y'Eg|e5ƹ;BCs'Iu (m_>362REpV}iq̮,EmQnr~,E)&iP6C} L=H/HGe2IqS ġuB3 w)WڌEE3v_FTTEb^~d$qfpI" Q6jjȹ"|bgj&#)_ 'Ff:XaJW\iA0) 8a2@XLY|db7[eJ+62nf龟p~40n"H:<ơųq4ͅ }T_{]=֙-DeI' +hU-<,9-5s& 3ε8bs"xůi$Jab`[Gxt c#XB34*m!կe{]C{MDL]] sTXyy؂睠Ua;38|5h) W⬎^(h- v Gt 0+$w K:] a˂ֹjQW:`p]i +jFM%hų]8hwڂd&HQ1F%I8]YiR V&] $܅8ځ :Ū0 It`TrvCɗ^:H!A=>sIRQIUY@$ec& 1f ˈF̀9-@L6WLIJ/ppP,[`ƉRNǯ`CtEJ8O'w@l@TٴըQ@xZ$s9W)*O_""&pzk'e|:W +;mF9_Z!0;3T6;gfM6 T4O \h'ļKL3orcma +nڗ0tG2U"YX[jệief~$% +9eM")ĨRPJQ[+@- +NWK\Ia@/@"XNaJrCPTQ]fM +`c};at/uZd4W!?Q5n Y (DRwNBM8I }fz+Gکǹp@`˜B"*/1B gp%&c.,EmT5(R>AMva?*nsTw8ԠxaL2F*e"-GoticxOke\1U,Mz%xWwN P%y,nt$-mپ;G,"u$ѝ,;5.9LҤIJA*8"6#hTfR1doT#Pԅ~q,E +e)uLdG +LCsl\DjC78[nt 7EY(@ u'݈6(Sd۩a;{u"Dt`٠jM9bC +2D>r[!*ݬF#C]O*LO&;;R@H +=&/ @rGc|#9R)V{&OjЧܱCL?{@'%h(+;+5"J]r7o>1dT> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +400 0 obj + 2567 +endobj + +401 0 obj + [ /ICCBased 399 0 R ] +endobj + +402 0 obj + << /Filter /FlateDecode + /Type /XObject + /Length 403 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /Font << /F1 250 0 R >> + /ColorSpace << /C1 401 0 R >> + >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +x?eIw_EƶsuH<I d 󋈓T!`[˷K}}k}~v=o_Ǐo|ok{H;ݼ_g?kޯzqޮhor¿kuyؿ=:}~<:n8[s9o~_ߦ ogYhto5O-z<įYˇovm.2}ߞ׏fx}׉Ͻw0;hYS8YCؽ@ѩCvZ}l<[c{ܯJ|]v/6$dJ/#7x\/_>HG?ޯL6Ⱦbmox >(g+x84C Q pݑ~~{xnF}FʮO.Mty]!ۏዼG}v >sӉ!m{xvsFnz1Y-eòP i|Jef,VEC7˼{_0lH?aч/~\t<3W} ŞG #l̐=SiA2ԛ%}YZ%n^5o ۫aJ'ʧu7qNY&<ɳۥ[_#Tz1o%\vq[)~ܞβn4&evQ7^V< knyiPZ:UCb;qkgq~;Q0M魆Hw~Mbn{ {l Ʒsh1' I3w?Xo=bWKGC~e^ɒ +^k^]c~Q[܆T; yoѧ<`A>5}u6 !jbhi!Q'=&tyƉ.4|RVmD->Wiwcޢ0 "*J_ B[&kbޮ69KBֈwdfDh{fc hhvmGQKx?DG;UA*Aw 2{(jTÿũv3 VVYWTjAi/A 9?U0%$ZzU4j[)7U!m)Qi\{,{w;,D4qh=f-4IhRI+&]Ϙ3P7.Qf2B*R^?%tT0LCAt*F\(V6nVL#䠘 4{#]f%鐄^:va,ҕ6;Ǘk kŶ/Ŧi-Wⴼw8jɝ>"#V#ԸBKZ}JET5"٬U]4UKѭⴴRkXcV{φZxg c,)kddaIXњS\`$nWe_Bev}RyοNh>l=>C'bӐL;̪s]H_,"=ο'&նPeM˴|R+/d꣓#RRWv" *2:ng_*p E4Tb[M:i!RXzo&DM+JA{X^E#*.pϿ\6߻3ʿֻ R s{ dخGvG-ʿ ^XA(W;by)3Af^ +qZfo;+Zd*lB|R+EGBQ +/D4% ptoN-tRD]E@H]vǍ"A+lɿ Aדnٚ+3p/\sq0@ʿ'**t͸Ng=&b3VA7R0XI,Fz-A1loi.8Yl_TøHKe2,ȿɫ^lϿlæ]I+ѧObi_&Pȿ6hKyc*$gQrϿجU]F6c#aYs-cߢ{cb{o?߻ JS?3kU֋bflհݡ~v@םcaaU97HWvݰ}0 C9MK.hOw.deCXDΠ!Zvbz2.ݛ}}[Z "J7x= *2㣷d9NNkݡrvZs-с̢YXңS?uI\1*ʨ\;FPd@$< Za2-\i.Tޕwct^7p!u$rv1F۴^-}0eVHI]&bS:e6[w>;X!U Cae~7(< 铵ޛ8yT (E9,Z$'j{aމ2g,Ti1}:%B}&}gzI'j$jE_Ҽw:s|d|S۲r2dFw`H;W(1q9-FY,ʐk<|D\wɔ/v^ݎ:N2s/մCxJ'Ǐ2ǚ̄9n/ ѤZ>Da^f{g'X(f̵\뉩P-=LҡPU2\ץo"JEբm۠,IC&.ԏ-#{+k GΪ oA(5@مF?&ϩ!ɞv\mMvCQ˒Dm >ʨAWE̢9HVML̅F (!32>չeq_-bYXI?ZZ]Q!&=iKKRWTrLja[Z^^Tf9`AӇN42ޙt1~SVø dΣbR4Q)0ힳR̨7G!BDUlS ,Oa mPp@QJ虲fX=&Kbwڍڪe{BYADus5D}znGo>OoǨn%k':VZs-сA*byB1F n`[)y0}JJZBc&fVKnԑs+i_[n۟B~~ }hRef0D;&d6%0=GY/KiNvH%ӂѧ[ֳQs)ZzŻ 3G{L`v%yZiZb ۭl7+Z[ͦǖ~TV +}Z]`w66/P·p_GQ? OVI3?+?W?^~VO[}۶})XcދeGT-ê TبoobuӪ^RH6Ur G@y /15u =r&H xƴjX'>3E Oֽlu@eM&[ӛ]V֨ +?8ٹ +ZS0W3}}e N"u( Cط^j /@GaB [^{\sPz9/' :YKCkz\Ӏj4=PO +% -w3\g +#7e]A%(50qQ;>qQ/䶺%(xΨ= aуrcTywkvH +Z}$L"eBuy"AUШDj@h$W'ldwVY2i#p\zHT*3׬7T}H=Ѱdž(e>Ⴆ٤<=WF/4n1M)EڍW@F+.gGW%`t(sgCd hݍ݇6 +^KT11vVD{D4*}@Bw([X7\ q~UH$<.zM]uU]\M6i>}Vbbղ>~CZw +1Fʚ^SpW˺J'\Ɣg$@cDs313;jEԻM z +BZb3HJo%.9ЅxvW& G:Aܪۀgη<\enK\jAQ쒍KtV]\!Uʺ+v |6O D|&Vdk1Q0ݸ =,znNNK]R#cqEwV@pB3?1 w\DZ7! O3g\]4Yz5kF(>O7P\J;L T +TADޕ sRw{(|!@(͠UD@ CAZKtv +u;ojږ+ыXP6"Q:=w + QMz?kT0csh#wRw O-B) +KYMd/@~ڳؗ:w%JAy" `0!nZe^ژ[j=7A}zQYp9vddG)N7m`#Jm;Ն2ܨ5B sHtp!hT4VX톕4h Z=-?C;`yP!Hl# g7iIޱl`a#̼ ++7OD;PbE e`թ:]iވݒ[e8YꞛxM))ѫ?=`bEr+-&@: "m5+/4͢+aVԎl1إkvˇ`v%4iq7-gaKhzkiEiTd=lX]Llv$04>Jv-zP`g9}4!sg<;# 둴xէ* yNlqXRX>RJ8Sba̻&d~a@W-=n߄>5v1WC'.y9F@ݾ`]3}Pwx}ggw-ˆmāqh&LmɞcfbL\}U^˛=ۖ|eY+m98[O˽G%籓k.-1)i?E}򣂽MԛQRߙ~jϦղ +HԦ&- +r&J @ePkJtnyUƬ5?s8k۟lܾYɹ.((/Hi\E\lzG}'?JHC3-)0/V˻p|S*x&fJ3uHQR$%:PI +rGWUShsg SOMAbozqAfVDofU%PCoB?GB[X Z%)KLDsF%*^̏n%*̾@ҡ!*53jJTL̂W fbrtV~Zss+FD %UG( +ޭY2(/hA?q cjyßAOwԑ,  +e"HwFHq셌1EнQ~tH\&]-#82Y-Pڭg/Yh]:B-rE.+Qi(Pl熸y BU[2I>hwΈ.lB9?'0J#&Ā)ݰ섃bϗgÑ"4?Ȋ&FG>UZCe7xOmH4T6GU06|CijJ +'k"ړ$6>vˑԞ7-jo ]j+w,#gl;LFm+`7HiH6Bii[gYl&oKJY{bIy/2f2#[*?<O}n?CEok)靬׵zf'3k)r)̵ԉr&5C)ѕvE@Czs;BSC.3BDW2eÇNb{J.DS=pvApB3(YEDSAzA6ȮFr?qc}i9#AAj>v|OkNg>y j4VyʆB5}O(.z"j*b} jv;o:6~ GbZLb[27l8zv qOr0+r_4펱E/=H>yP Bf#q ҟz $ #E4ms] 쨝0NpV,$h{k=7)ٵA%:0K率 cY&1O3Jy['>|>:3>ZR顂abz]G@c5~8L6m$3+s$Pwر 3#85ٲJtz<(1mNisDy[aF +Y3ы1V; N.Q!Q%) 9ڑf8 OL8V;ϻI-T۴#@H˨PћM2Ji WwCG͆5ȉ=G sꇈv133e +* ̦.~;+F+ +gcjvYهpT6K M Oo9FbhZ%`9dqXHg,NZ7 wCDXxIP%HgA "*\] Qsm\5IAO)oC m$'r=)R=B8Xj-ie%;Wn7 yPI ~+L;>v[8@ݺD + wDjGQXFCL L9&>X-ϬA-B[>UL{Q9{T!'L8)cdKEmp| +)^ݑfyQYp(37W!A%JڨyH57񦻚>_,AsPK o 7KK *m`^',ۚDIF}=c-ٲGS]IgKnbi)֚{6!7LCLl>Xҭ%P%Qx0tUMdi5nRMi^=LݤٳatgǍvCo X[b7Ϝ~׍f?>42l1̅bCtRu|(" Q`n UCB30,#7,-XIAƐ]ԔQXJ a:ް3CEa?C,I)bd:y$eD-K6m״[ +B%xrX]P)AқIw b*U>ܶs tX̎raRmԨ'87b,6q3FϨ2oiNQGtj s@2je~o>(=]ٽ1~cј07M΀a#mg΍!&pFdka%mqk< Y)ò$uI#aP )WEҔ_ddؿ_iפ/E_dBkx~?77hz5T~e] 5TT4/_S[fS{ɿ1qT leD3ƍ7ڻW{U3>":dc|_g赣{F@P˅~`lgۭ4ohۅ8*MdTY"òONѡ<-Hbi>.wzgXI]([VM}6QczDFAN>rü&XFvwsl'0seUpIh k\(va#JCȣINIG[1yNE$9ՉHrϙTC2h%G/*d9-Nj61izWwdFz(v۴8U{1H.4౎{gSGS8zu\=c-=TfRgv 4r~:Sл ˒W;Mrr6."[Sƹ]JM(ޜD5g qhgAv f%:PA؁TwdiαZ*,_Z墏*556W턂v흐O0?*3C8*qA9ӳh +>iDkW=z !;nڰJݧtGLˤS n-AgANy#D^F0RZJ'?7igNҥ|,OFGYЭD`Uo )EJt[r +cQ͎gK{JoKf٧ן +Y *O&v]K7YZo&֧gn[zr|{nE%綯vu%'  + _2uj"Twq3[FtBLE3Kdj׊=K 4,{4Qn( +n 5IȊC6EF]@7|f!vwQL+2LC zxQm4%ZPvpǿԨzL[rRy +.V@<#rl AD? w B%Lo  kߕW KT:q:(U\!$Q;7D‡Uq}23 mD=fjh4S}C- 857Ze۝8w*8K/s(%Bė>X&m= ޠu2rdUOXrF-ǀhh>Pj=㩩 {ڱ`V/[+ {TT1}7=q&O;, ܃zɂD qQKb؄KX<0|A4ZfZv:QusoQ YD5X Cntr4us|whíC G]2qZ%㯖z"J d+AZn1{tbѤzo=tb{Ckiߴ~iM>Ӊ +zMIARI ]quZO+>{H7ӖrEKZZOs?3vB9/Q'kt^k#yռ}e)$;s%=CUP)o03!ϧEď =cZRe.~Վwxό"ʣ.q,i޻Q]vr 5 +\Kt _Jd:c@= RsSwm铁Ǒ9SH+iWnUź=-iZzw3jѝ3i fq0N9~'ymKȭRT-(Yi' ~&< +3rQ& SoX<^B6&njF?>Y{KcqQqc95.A2#4#ͽT 9[|p֭mK{ +]jogAw&%0ST!˨A ieQ:a&j&>ptO?-/EKsvP,p0VAN׺b[ZbPVNrG~4 +-dqn1N:_eqJtAӆXhoN|8|<JרM Rǒ.]_LH3g肳M̊QY#A%:کqb 4scBDUdEmXj g#kq6W+y] ?:nBU](RZ"* +;\PzA}+&+1bڙYZs-сYV'2ȂP]%A8qF8+g5j=hwx4QSl, Jk1P5%D(\?cZ^[!ld֩ۧL;>@b'DA.%*CU7@+)$lq8ŠқA%\]T=t]s;t9-כqO:`bV< jխ)PC{T qi DL%׬n´I=@!4X=DTK6~υE^X#-0{V|Ee{%:|sb#Աmg)b{BjfV8f;ꘗ`ƩYMYY#듦&cZn 4W; WmSD4(ZZk {s6Ɖum% }>J 7i"/]gVCCJTm + L N 3A2Vo&KL|'J_cjC."L`c3ż޺a+4]JX z2's\ՌF>Md1ySP\hEr](ǺHznC +;,pVZt;] d2Y]ԽVxQ{ZYFQ B[^rwPVj GQ[z[, 2mɞLL 4%DMwWȨ&&7&SU"$2Ly蕐Ps]O*ow뮝;]U&!himuI0I~D1{,AJȎj[`};;BǾba[Ji'/y ̅9U\1Phym'֤*сb2ޙ]a\=7LrE>r㒖bKQU\J +y0*k[R'>7>u?l?^tqmt?#'1%W3c'vorC n[3y_Q+W\]SRB7+sPyBf!sU;Y56˷"`) 9qKJD"lr/IG ή"9navȻy3d3Gu_ÜeK#R`jVPLhX D3x@z74֨*.8DWkqF2<%y@RzIEq-H+# lr?ez\IrViI8|TWlœk!R=DLsXvB\ ^VOY[{[Zc~ +囙"Z&kQ]zTpbӾzv;8N. GuP S +{R U"x%zUqջv*]} D=~6tĞz0z\Riwuz kHT0hW0 UP字aWiH;OK}by^Mr+4(Y0UÈfAU)?uo_Jy/>hN.9X3ۊJ`vȸM-p(qUx;f)ٝZH9(um} +@YjwlU(o<;ؾ"L$3WIQGXvdwt=?ǺB'C})D3İI"r9QfrWK-13-ECyW(+&+S*7Gz(8IPDZٲAy.{ >mL: 3_٤Mc X"5!&!l>#Ƶt[Ef/B(Dǣӏ!*vv>Z$-!cavP:b,3=*Q%m 7;һzw䁬~zʚ?)*hj"Mô,2[fMakz(Hc~cmVA^ Ia  wVU(ĆnBb!v VB[ꭰQҶYRU@c;Q8C@ R ZM\mDM1n+Lxw{h9cEko',2(q=X&r1[ɚv\IK}Z:8eeJZDuYIXvj1'a=8@IŒ:|TZ.m4aa}$6JU#O5PқgS5,?ETbsiSP}#ky,IZΞ7DKȐ%>yfɽަ|kr=3brD1Ue1X5hMZ7ާUMuO +g˞}3;# )&ϔt~YimjpBҸۑ(b0ת7[%6,;rGIT</Zs=# +<ݣOW%L#2J9(-;duPa"0gakCjKSRg˂犏"DRir codcfό +r.(!O:j)6 5Qe+x)ZԚ%RjLQUΐތȲ7AWQ%I}S}P]B +T~Y^](b'"{'b8JTy]E>Ѣ8rժD=ŃD.JA3}2ߢRv<(9;Uxu~\t\ʨqս!Yz[RJ7*so%FȴJB{fa5vr'/(+]9rҨ~+֨܍JC(v.!W2b8DO^D̔M'nkl-Q)!@NԎF>yYRsD-[YQArOT[bjb0oRwCkإZkasXA+rt;Ѧ:U":o\PtOZ]}cS,1R_;cByW$+sdo{C|sW,*}r஦beZTQ?Gt',_C>[|NXg +Ip|rbGxcޙ',h dy7>|: z +7i4rlDj7s`Bk ]VYt5(d=J?*ȐJ'F1lL՟&l2>򘧉PzA0Өڢ$Dtf%:d$7?fCHk:]j]_XI|p4-;F=y(8-OfߡBDUdmR@3rd3uJ&d.8v--1Yx #G㻦T:BK{L0N8EO C-8ΰQWs'j"4(h=./fOLV;E~Z!-̛T}K` +%(3̆}֦.4pSҟn$ʒei ŔŎD)))޻P?7{:㫽:>6#61*M:`eކѕ:]a\zQ3Ӓ%]g1sǃyH+Jl)JZ?XT%: +gSu.WO]☍RӖcۅT>|8a5M[Χ +i#~|сN.v30J>JGokιaL.LsSl:u$Nyؕɥ䴼?mƿccIOaDL &hnaڕ'cR|QU>-2ԩniqQʒz%3H[n)sQVK 0?n-O.eQ1A? #=T79,eCL,$<zD"^:WvyCUz3A]c|j#2m/X&^Z= oRyɒ.R$s,Dԡ5t!3j>1HADmޔ`αao']D\S«F},fT9/`DG;޷lrIJaie[FeaϹb(G-JZmdYVx-|M*odS;+cyaU|ZobOQ6m~L]DTcǜ\(I"/{qF.h+bOT-jL1a2$V d>at_܌Fڹ?!b=J ylaS)LM xġ^%0ow'芳F_DWHKe1wZi<Œ_[r}[3nP_̮*1MKO5Nj'ΞS=rץ|ZԵ"DEafoͦJ4SOׂLm'3UYzۭ{:%Nm{پ!=`R~?#Pb+Z4Z *Wa: +y ۃ8eѯuo*CьʩVXߎ́Q#[he`Aav2Bq\c:`J*e !y_Q~tOg}h"ބn۩DQe];7u \.xʖ-ij'3ȂгY Eתo}uIhOA=kv9-GiJI]aq@0Q̩OlOTc}XV1횷e;-:b͠f}:֣vK4q7TKmFubh4z|#EJJ +3pHaOs~uha\!/Rh"FC2ۛ^Afu͋ڸ',h?Ќ)@RG-ZOBxAva!$<`U ;hq~̅ޛvTkToQe׎qКk< 릆݅j*-]}ބFB3/r5;,^\vbH A6MQ$9[StLЉ-}E=5&z/4{yKtG;7kn;SB3ׅ2V3pz L+YZ)r*0k஝EHoCH:w˭Q^+pךBd{~gG?\p]ȿpuZg顳losOnArK S8얘c-c<<7,u;Gh N|b0`%=T IN=JH+7.bv S _4 r[;H|tK'vzN 3C0\H65z/ rsՎ7/ Z˴ϬY +//ٙ(HdP(ǽ2`Fj'\kTriI;CaSEvjΫsrt~q|7p7u2uZZUU2@Q+a6*v ҏCGlX{=3N'+q%M3 +gP;qz0_)~lnZuS3WT(M-{n_I=w%خ02.eH/f¡e3Eo켒Z.KBOeS9ь`v3&1\="e "jO]-ekUq,_#/'Q Q'n29Ap'zFg;\1[<4{;3II0ۗqCMEk1d呺^WwqBm獢ע/i}qW&s +R9'4`rCdGY;LLݥr>:Aza?V:~霂Wӫ^3!ZQK_"wuM:c, +'AQRa5mh/0$e_\s`J eW$T0,7b0ͫ50liy5!y"]Vy[fG'y3?hDaV3-89W_c6GQ US:@s݁ć%:_gJHL9l<(7s)ck0A1q0,]fEC=Z\kTcl0E]KѢ5gs0}Kz'P8Li\qC4m.-H2N6I0lQ7]zŹl3" .y8k[0Dj{+,/+,2$Txe0`ߊgISǷilbFk0糷X_0v$n9fr[.W;/+5c>vp,W;#\-O527AN{~5W UK¼|s]?a!Jm޵G,b @5CLvONbC1avڥحa//eS{lI~azlm=2hv%e}-bѢ#-1{x,_̨.\e_xa">]ITE<btmWt~P[ћqM!)Iǖ5xXeW≼ : f[<|)b }M%G/$$@%L6ksFZ VvoM LznS\s@a$csW!/,_kkufBaV|vfmUBS_(=cd|mUoFh?DS%tD;BQx>kh\D%HSbtoOnA^oU U{ < h3|=('U jj%PN|rۭAkCqQ8&$Z^FtqU{Fy(Yzc썤H/A%*:,nO;Sb@|T1j7`AFBL"jh%r`% 7u7-q$N1(WMwA%U5n fě +vdx l'N+9Gy% +Iinh!EAZ5s~캋S +NS1`RCWDP쒭~ؼ FKwۦ:ytrUc;Қs=bx}:ĤKؐ{[V޸EdžOkn^*l?4T|_\~P"?Dy; +endstream +endobj + +403 0 obj + 20867 +endobj + +404 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 405 0 R + /Height 470 + /Width 682 + /ColorSpace /DeviceGray + /Filter [ /FlateDecode ] + >> +stream +xmy8 !! )A ! !6MbGݙIlNdIUDpUY:jUeԛF~]e ?E272LB9RgPjYӪtf}V)/GEQHjhC(ioUj\W#j>)`ڠy'$(m]/N`WEհ6V[&.?m&EL~{glT1~4uEՠ>+/0 jMpXr>5F`^>0[L4jzX2DQ} >]}NXI +)V 4(OyA2t,^KSPTSfND0G'6vfl6ձlYjf_ 6CP@Q= 62hsc1VNxBuϙ.YڎXY46o팧yX2fch(kbi*"/X͠ H8='m_Dkb ]@T` ]@\*kbs8'mH]EPAQ "bij56/j".`5O"/㨭/6&4:j Ln EP@Q}_ Y[hkkc.`+NXQ'XmQTbijkN3.APh1KS)Lg HUsհ=63tPT8j!/xB*Շ>iyCOCPpبNNH n,7FPToi 'KSL#[Z\APX2 i` +9i/ E`|DQs1jX#Zk'jҔqvT`.8.<'8j;:*_ᓉVj,MebΪxAGU +xY9R. +. 3^jt;G^<sai*O;0㟩Q;&5[NjT*c@\UTT9DI;GWdn,;Eު8)1_wBx)礕:=^Jv;D.]@9 +> (I#j2hh8)KS_ÌTfЛBJ+''-GPI]@^ *V8/e`"tUZ>/ (4U/*]@zuiww: NTU-LVIjm2-|O}WLjg P~GwU򒗣^3j?%#,MU,ʌռ䂠-TNk$'Rmy]2wԫU/|~sb3rQ%GsI3aӠW񪡰etJE ^U+,M:/0o:[ +pN#bĠ|cԈpҫĆ.)]nsb@;,UID*1iV"xLiIAigi +Pa^RdEofW *FxEo<˪DnQ8V<U>kZ3lXGP8' QT}] 2'Uآ.kpUULxՀŲ&/0UGP2/14)*/;PTY{J-464nqN6d9&RQAŖ,DPE)l"}6vX &MLGg^5{Q)$e&RʬJP>HhFQ=_R> =zz}]i95w4 LWTNn!fQei +v8+&M7Nǀf.|wS\s?,xA_*30G6}*NϿ?Iul4t/] 5X+;0;`%XDTXkNY}A,YRO`Z##?K?5Ss`?(kjVXj>?¢I+(eT^Ga%@au +@rS#w$͏) M$j +B"ŴOWڤ[+l-k +[iI]a ^V7i"x9LXQ#0ŊiĢaLu_ኌA5Y1@d?8LLA5P+b80YFiunwk O7 {v4>jfgk H +0hdxK `+<`-6:̳79A`siѐ] OX &DN qCNiE;> +stream +JFIFICC_PROFILE0mntrRGB XYZ acsp- desc$rXYZgXYZ(bXYZ<wtptPrTRCd(gTRCd(bTRCd(cprt:T]pk0xZxÖrM]0jקBޔV% +t)NM$-Io5F[]CIeI66ýgv+:j3SSᴟJm.9| <>:o\.uksr wOɬd Z!K/o԰\7{e4 ] i>+>ŃI+qRc:'+YP5,CYX"Ă"\%/07kVmmX)K~Ӗ0o爙PsoR(UV.)*QZM>b[74Ҁwm{JS]Ig(˘<&icI{ .r@Qq^ zsZ!NrIr~xG-B:UDžģi_g&r_ܸ˗O߅VsP{Y_U&g}roa@"|"C74uTK/$9]~[SmO\yKv6^%I'6ki\ЩB+Q +(-a 5jgR[7uWVQUOS,8MJ>hsI@f7;]խSKy7U㊲OVsv.]]W>}|rϯH"#sU?Ǫ=x\$l:|ssrxoՀ3P.{M:@rǍϖoiWRڮZ]y~.EzYx=JtQ#'mQw|8.x @{鎱+JeYVq8%,p.8rLx_+ft_:gwZ-u~_/xOht6GӨie--N;%[oo^NO0~ލ+j[҅4 +paK/6MH+2VkYP:e9̮.xɴJv}oרfۦ9to=d5lݳVdڟƿRӯsmF9~k %.Y\3,y'@wB%su( OmpwFGK(s)KR9hIe]et +z]Y:OVI9cVI..-y|qۗzZ^GʡOJ\άyK $@+v\"YkxK6u֟J=Wqi>)wKԜϱ9ț>V"x2,jyv Gn9l%tcQ󹻸E:PYmM5з:ժB8ESxI%mCN<+ץլӋ,7K8~TpQOO{ty"ڹ/nӳ}w|e{'&z+m4IpTag$Y7_9TfռҦN=v%b󇅞K=.KjjשBV' Ӝ\e '|} ;.=S^0]$RĹmΎ˒~hbg,;TM~~w)[m(m:ޫOniB3_ /M7ۘ283k"@#& @]& @!ew#b@mkΑw/+VPRg6YY;p%ץi]}>qmRTj)-|Tܶ+[ڬc|ڄq^_<硎]ܶj@޾侣jڢc8'>2'W9qYLfdv Yw5xEcRk>KO`YrqIVIi#q:H:סܻrG}0⧆&a,&$qQ*C.t\ZUtJX%Xi78?HݧͶ貥umH߇-^&Hu=g;* *coVbQ")s)<y,Ve/g]Ğ6jDȮYLgpDsI&]͗J>n8gЯR _l@l"S.(=ޗ{Nqi,O4ihZޗJRi,ZO37kVmmX)K._$>Q0!߆]M]ڎ(zE2Ne)q +P]7,|/7৥K^T&;夒m}m}QSR37s~x%\t헣+W\J8yw}~|I_@!Z 偔{AY$Y/YtI}e +<$%"+Vq+3/*e 𿳡XY^S-iJXeI4W+:kqhOv\T\%33pn9>{S]O]wKtmW-$ٷZg]cjקBޔV% +t)NM$-Io5F[]CIeI66 oyu~#QdFVq/]Oo%`hԩQyYkE3Ꮍ^9\4 aӰJ@] +~m2)qF +.)BpNqRi^(jUvҦ]v%.` %t񳡮kvM9M6Sx~.yaqw]ۛ)  Wú[NkZ[:IA$mgO:V-wFUֱQrk+{t36vIIi/}1kR-e%3bp Yw5xEc9/?{*u]bR .2|/|9/\d-ҶN(QJ**1RI.Kp~+`zKY,SZT(rKئR%['r#$ qMJXDO"RXRan{K ,2H[xǵ?Eoѧۦ8rtK]"6MQ5.B761̥린}QC=[;틟9 gᏇכQso$nR\3Ó_))p<׻_gB՝)FwT<5j+/Mt=N𶴷E:pym[mLy9:>_kzSoJhҊ:paKK;{nsH$C GRU{>-5"+gQ@(n +<+f/ hkAeoYWcoR ׅsxKvu݅(^RbӟO ^V}뒙Ʀ0w{'lnmY3*Fɥm, ѬQ>ezRo+?Ym'f/FVV ̯Sq:^~-?7k;kt"B2ufoO$Kn,Anj]P1e)=VT6$ ;.=S>oLqW_{Iu,KjloKvm[*j +oRX:8m,Yr^\Qm^ SZ'Nqq$i~g]ӟ9@i:m汨yK(woI, &ލ[[ҝjdN")ɼ$ÏYjZ}e[m>%,ry"ڻ/ |>:s.uksr wT2k/GـpmtI ! 9ad6(De}Iv)żHO+$ rbi@O$DojMg?|/n֯Dgu 8UEe/Uͦ3òLIr[;MD.k gCJaV-*QcNNSX&$ln +۷=7<7s 5I'.m\NA\Y^S-ʍXe>ŴWg;Fm?9˫OV+G w)cK9T)Mzn"-`)53TdN2yɞWyG_\qTV$E޼'"HI.ĉXdj[=$&nG&ȘXݫ 3<&Su @$p +wuY ӥwdJE (ɸ,F|a톣 i6wê<$sK) &j6wPWEYShYՕ:-˧e?Ş qʖ +[_*Om^(q4O5ϧg +, k{GESU?WT~NO8YWnMrڻPyKz^2qc֘k^;P +7 yE97ŰD^%(|r8U9o@՟`rWwN@P"7g'u..7dqqIכH)qZ +*QsRrQ"[m^_돫4߃eyjy^_OV*c8>;:^IQgEZ~2q>+:tq7Yg^޵[j՝Ԥ +$k(,|iܺK"&Yg$7WIuwVдkR}6IYi97ym#`O{kJ굶_ySήx.?c|rc\u..L(e>.!qN`+M}seZQu-ʜr32͝JTwJq:ԢWYq|`W,f_S-kw3+R*_ Y:urn)>$O=.Ic0zcIuY~W%,΍9QxX]Kfpr ǻ[=J.HqMƕ',7% Ӝ,d%˫˿` `CxY9i}L9uD[k@-< }O.ڔUSmrOwĭCfmʗRޤό.zb_oePVJgZY9Τ)ɼMVK֧aKgoRK^Rk/QG;x Ti={iSѯNTS0|&RX8M"|{;XtOVє迼2:~e-Yuo-])g>.^(#}"q,u,%QYx/Ɠϭ:t_Vь+/:p~eͧ4AOFJ=SO0}rKf96sXk2߀ +,ٔga|9iHϱ1<# 9 kEi(Q 7%b@&MO+$8%Z@]P@mI"]ͦ]<~|}MW]֍Lϖx|T{.} k_mM7mNYN eJZtp< :2&q=4uuffmU|Uk)pX2kk + \^CHsR#gev}) %v7lЅ+RJ_ Y*n)?o=-7veCrXMJNui9a7K u reqtNU*]ˡԷRxn-NQ@+_"6t"@kȋv XIHIY>z߀%pKY@"+ 5n(%vtupkFRI9c.rYˌx=Wl߿6L2{~YYOVFwFWTyqLjR/hm|}-xڕ汨5;KIoI,$ $hƣFHgqzKK)vrb9FN;p e JI;-RRI%ۗLF +fV|m[ssӥ^G**SCwqC7nΔGL9Rʟnr&pr36^+}RmUZ.%.W-1K/lomu X]X\Ѻj)Xxx֒HkؔFyJ"rcv ;7w{~3kX5Eef^ߋi>'> ;&ޜnʍ&ĦݎV3񬻣p;X8W^Ym{~)znèbk1\BhA{Ego-4Dmj76RrqGGᦹ3sǭJ˥t7]uퟕQ%IYό@[pPF2ZӫqI&yrKR\8ߋn57nx ZKxt/~u>vR˄qǥnj|2Nn2D]{gm98J1]3rftu; 躭ܜ\ϦbKnĒ9k|ٯMeELXs/~?[K&Eu6v,u<7RxK-8ž(xk^j9aJxMN'#BӝZ*5'5T[M,,/ 'N?1?j毨5+KY[%$t^j׷:UIN!'BI4fE+jTccMuu̚Dž\el]㾃{5O[ҥ)5Ee6RyXQ~Ǽ@qRu[k8QMX>7%r׺O_|2i.Q](UDgGTIi.' ǣ2QmְjR ˛XX|_%@Z'CXReSy/"Qr_wׅ&m/(vYivHJڅJ5aF(ΥI(K-I/p.J\WooRXQJsRJ1RmKƛ Hj֫B]3'QXrOi5LJ,R#0o?4}%Tce.熓F [XܗJ\+^TSiB$`g ggV8x,_@SH>ԯ,yQoi 7 l*WkT.mN5L1sKg^ZNO۹u=uR??E|C VVe_"YvKk曩 Wﭯh]XԊbElw ϸKԭTqVhҋTao<hFᰜe.4\w?ę-運u埝OJç˟JFqTK \;Z\ꆑ7UF|1a8W9^qe3n?!}QqΩj9Px8ƴkqrյˊU|cc.s5R˹y +6Λ\BM'ZRR|7).9\bù5t5B! L#,㓫qȦY\;7_tTe.S8a,\ko)GqN<#Ru\IC/[M_-zc'YKz?4j;cf&mpa Ga'L? kl@&Y_ai-:)U*qdϲ/[M_-?;׷Wws%Oq7]z+OrjU$.xZI~ $FURIխVNs99Jro-Y +endstream +endobj + +407 0 obj + 12304 +endobj + +408 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 409 0 R + /Height 1724 + /Width 2880 + /ColorSpace /DeviceGray + /Filter [ /FlateDecode ] + >> +stream +x  o7(s*6 +endstream +endobj + +409 0 obj + 4834 +endobj + +410 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 411 0 R + /Height 1724 + /SMask 408 0 R + /Width 2880 + /ColorSpace 288 0 R + /Filter [ /DCTDecode ] + >> +stream +JFIFICC_PROFILE0mntrRGB XYZ acsp- desc$rXYZgXYZ(bXYZ<wtptPrTRCd(gTRCd(bTRCd(cprt4 $o*cs٨(3^Ly0;9 Q 1Ӹ{ks}:eu-c'Z=qNV,@mMj7kn,ЗyDPMn9=ޝ=lϒ:1e5dfkRdNPOo].1ܯe77lFYVw9ݲn&{hg/552MY,NloqI:dNHL;cYe3s;fr_-鷉sꥹ5dڙcr6 9n4nn&\OA$3w6q0.ͅr~[I$h n(K3]GN8%6` STP =nVN}uSյ彨$ +[Sex\zʺv=yEIJK24PI$(wq>4c9ƺc2<2Y:bqeYn ެ'Ւߍ\ՖY/}Puֹrl['wK,&φ(wsR:㵮*PM3[-ڲPK&SYOǦImTz:38uk\f4jiZ"_ +^&@s7fSq{篕"e[Ks lt]^sd13|s@wj&{A&>NU.~j0,=l\*%({}( f倢c5@:ی7.zրTq{[$`[T5P啲3SVFg9u@IgԹi_0Qr˦(vFV̠ l2˚*ώdq{+|u9Vut`k-[g3m@Ayc'_ZēRE2{m-&VngnS|^>dM%psx^+._=o?%Ptnk%9e3u|zytm&@FIn*3<ۦY9? yy9NS-M.^-0ǟ{ϯ8lKOkP5/@ Ꮾ:hLݺ^Lﶥ^عNxk@:0$[dc_m_ [7k1s;+e[fRe/V+=tN/V^d-LɎԍI/ԲU1c5.4;t19u}H .sw:叴aӇ_o^{d@?V+]˿)eW@\z9ww^wxLN %xuyͱlfRqhA&V;ul5dtMI&[va_˴xT@-zt1}fUˏ:WNg0LRl_ǔ_9w\ٓ]9YYYuLf^ɩ$sd ~{%I't'>LgerR?Z7y7u{tg&|L<8cIeެ#_@@ fP&>m deYrLf@=%Ǔ?^m,MNKg7&2c5 3O +ed޸MP<=kzs7eu@573[$1ՉXۏ_厜wI̛Wg0],s2͎eu-pۻSg O@ώۄNݚřpQ&~ipoxw|g 2/0KSgqY.m?N{\^~$L$|[tPo'(Y/p-Q, dUCǎj43>3@D.G>9=}@F-َS)7.j9,[VM +[$-DY+:f:vr|+Ooُ+x`6XL dgqcwI[oIuSPͷ[뭒6n9LM5@TsۻɩuvV*)rKdj.^Ms % &/1) +yxWv \y/[g3"[@D3^zfSqKmnMY6C>;ru6e@ e?/r߯uϜ|n^sfՖl gV,m>[ڬ_r5.mIM}` ɵXǏ?kY2-i 7)2Z57Y@{M9~\yY|F5n'h޹6̶d@)k.Y/sj/ %[q+nX3o;YwoIf扌O{* ٗsM fgluDij^6c1hO64 a=r<̘nք_-,rܲw}u4zm?I&I@wr,}77r<חU3$vsfk139|zi2Iu{-Z>ͩ&Ϟ٠ +&^zoT?| ,Z_-ڦXefﴸ9g2oLw׌k|ڤ~2ݟ/Ŋ1y^NnirLՒߍ&Z҉HI + .YK%A2nj}"=LSc .9[f5$˭ y>In?urjɷ^7юvǥ -֝'mVI&S+['t:]u۷/4 &-^ۼ-펹_mN3lcnrΛf[mضHL:Nczsɠd)ilɿ'0Ts?҂gPIJ8oWwm&8zVyOk׺˹( =U% + luS?jțXȧ;˛P/ic'SJ{[P 77=gԻYPLՓTIM[/u&n^i,t~}q^VWN(`|r?yu]GNmM%@,&<{u=[&Œ[1EX잳{.Nu@u`vmƬSbYe9L2L{uzSrsڶIn&x̧&3REX49e7kLM%鎭#\8݀ f檂gPNܳoZrcy&Gn|'xFL}@s%2l03G|L@9&ՓnFqeY}>*[$Yw7ϒ[(ǗxYZu{ie`iglsۍ_lejjiDɺs<}&PK%m@\zE[r$@][@S{*&g3jm +\亵\| .3N\~5Ӯ3b3餲[-3ԿřPM~[H$ow|>ɤPf=@ sL6}`Yyg3jo2y˾%t4 eYu@o[P3{UVTc?f㟮Ө.m]'gREY=?]%O%Pjr<˞M˧>Nmw& xܱԫ흾Y\4Iw'*`u+I,>*R_up%~Lu廎8n嚭;K,fz +)n6̻- dUC@Im >](lʲu +&WXږ{Ls['Ɯ;\:uzk}9&R'߶3>-iۿhԻIvjـ +3sKdVK~41ykMُr9Lo>@u`.ZOڸ[WYw%r+et뜒/s?n9׌mt@ -{MsjKl"[w,ƄY}@LnieӜnˮ={3먒m]g0K%ME&Ps+cc/ ^'\ g2I:lg|/7.41u<ޮFp,wZYvlK2%NꦘoLwvIT޷x=[&řoL}<9s@ % d1  j,ĒڃS~mt.qzNJIy3"[@@'_{kꧯ7? +l 3.zYBMI@)j>.* f檀jj(I[Zr]v s{p^$]77ڃ޸1޿)=\v%pvn5٧ێw5Zgo2ՠxͨ3^ѭJg}k@ 2 ^nWɕ×|uqӞ?c>=Md-۠ +lsf=;mֽ餝E$ %NjS(]clY'@gumW@s+r;mk|: xrH,H&YLfuy^3jԻr?s?qV_\^WY틛2zx[Y׍h-pξIn6G)VsL|rӣzt`{M|Mwy[#Rs[@3oi%Me˸~/Y.Σ[$@gs}nLǏ-̶[judA=n +x.?=4 d3ׯѕԵ,WLt]w̦ӧ7d\iSlmff|jf{_ioyL?}z㨘g3T-fz68
82$e@JK-Q}}i%٫ffX_mg5yc5$Vf(`c=fU@T[d.>(Ǔ+mL˵bKnkf`l^@区\>w9_u\//3elW6s.uTgyy5sd/3o̹F/8L2VlK3nXa=q۸zP{&YzԷ=ՓT@g,lIeTw[#@* MUOweoz盱ݳ([1c2%7xn޾4I$d[- {es͛YpoJ,eթlk7* ݊%I'J +n!f^K21suy|umRԳ=*cw%P 痬js,fW+6ǹmdꉍݚVl@8Ug~]?m>R_'u\=W0sMiўz|jy ^zٍO)sT@1{ep'9𻕱%s4 /qDȻI5 +O&2]T_okylf:;i(` ,[c&3Q{9Zw4 nO&sޮ*[KI~Yܵ8v^NtW0Leڨ$1msz塟|\MM\3MnV@.*9ܦfڝrZ I̟~[uIsچ{}`sTSP&,m zsz*˺6k%@d2MɵqM:3/4KK*Meu{lfoR313e5Vq0Psz*[K @}翫N>\-ܿ^3c|I&y]%٬@ +Mk$t iv~}w9qq,mYu#C3Lx^zl\9\SkO&_\k3c` .%٫} w'j*1|ˮ[K%8- yd~m.no_2sU5@g<7_ZL]{klL&sۺ8Ln3ovt`w9j,rO=]?LKggn4['w@c}u¤6-&SiB͙R\収̹:{_>-:˹x穾T~@F\5lζضd^(>L}iղlY%vP@s߭>/y׋^?l nFpsl[,Dz3ަ&3SJkJ8̦x4O9-I{MM'SN\o6|:-]UP=?]6joz垥eH9S=b37\ܮye9s81ϳNK5Rc$Ԏ~=ν_Mysg0n zsK͵f_ju&^Ӯ3jɷ#C>)f s?Iݲ7(33)BY,ʲ&3 2dKwg-ȖS)~f?%j'}&[ eZf@sze751̷X뮥F{6)tf6[6Y&}h'i|/6l^lh/P8Mc%hLC|K78YY'/^YY6c,9l:7@c5MSyH/Rj*KdZ +%cSz֭4e?*_P$Pz{Q,ً=&;ځ&BT: dn>U.祟FpND 0P-hf3 gƁ$o@(9;֚ʲv&3k{P$I}(933za[g3"[me˸L@}?[IԿ>* ,]9[n=q:ZĒI 1w=^nkL]1+~s>FV4%Q2KFyRO@ +^oLd:q1&zv~L-X dWd@Kd@ 1oc7l=D[fɆ*&U&2eoک7? +za,Q3ޮ@z{PLfxu;i%[3[>\utftpӯ}Owr/\v6r49cn3|zF0̷nInIl֥\Pd&sx^MFg,7Wm1Z?s;p8cqU/Ydz&ՓnF|y\4sgSaf\ +9Nq[VMh@^e%P^}joz@aru[9XghL[tP2lO,+ykSf@d,3u1dͫZ&@&~s-&on2 +&Wn]kLޤ?ּm 2{clW-P-Lrt,ٟDlZPe1n{K,UA%U$ +L=\ΦU˱1(5&z@)Ir3|gƦg@3o[Oi$IfξƦT:d>g3Uay:ROPр+;oO|IYnIv ]sUn痋Ƕc%Q>yl(nj1ys2-ݠ ⤓vҬP|xi2UȼemF0מlstv^:0e&SUD}Sxzӧ-YMa&?{>:ߗ9~@977ʠ*3Oq{] [痗W s:j~@2e9KgP2c7XY叴>ݸ't?]g9rQ,ٕe˩& &2MH`2nkz1c8g^ 2goF&ϫ@)4:}~sN<:L}y6{W&: ns68K%BMI3~@2+uoozq&7ڃe=wyoeߟsph1ݺd߼43@@sZҀY\[-Yl&YL{Twb虾aķnZ֞ǿ31$ԑALK7ˉ$M(gcnzߏ={qt6x̦C̬KI$P_ry5ө둎yv՗2{ٔLxwXԒzjIk 1w8mi\Bc54Or9[56&{P@Mn\C7Ֆπ IfVҤP[1IYN?us[w}7:f:0 >[t6VvL MoEPsN&͙\csݛli2޸1g1/5:`lYf㟒\qtSQսYj$ >Kf;&SxYlFp5̸qKi%ճoK6b˞Y@I vI[9L\jLnؾ^S>5o?N?]?g0g ە3s[I@;33Y֤Ndco[[ˋ.4&(`3euc-˨ߔž|}`:0yg^+nF6M2cT˔ݺ3H8mM e@MM@wVqRY5cum2ego6F]8^fIݺ7{1ݜ(%njkc/93~]t`eE/i|4 y3ͫ%l'Pi&Sr:K{#x DŽƺl>I\w=g}.z)mm$QDsqW[.\cSi)D}9_\wx7+9Zcs9z@T|Nsז9 jow_*@&sWm^elcr9iˀ fc_YրTLvǏ顛6yY@d91LԌ^5 % 74|W|5\۠?eNg1Mg/Ֆπ + j]Ru-˚yzqqwkþf~KON5<&75ft@;gg_Z^~4@kn~ˀ lt}zހK781DzV7_1׶zu2]&5 %3d] + e23շ@@f猺K,IԷ%[,@u~ + g[ eYlY? c(8q&[Nrn[I"&3i?*} "fYseW_:ݱ%+[~Sk><[VK5Sf=9הrс24%9c24 ]] +[$-F1 ˹=SRm@2ț/i.=K}beǺc˪7.j3c_&hg Dͅr*3v/k<}>96ӍK`&vg] +K} + Y/]-\\v7K 号잖Tgnz_+~d˵~@Mt.ǎwlf=(7W +68k@*^7?l۝ϮxwpOuN? qQ,P@/nz 9~ok5:'dj9\^zr@z\kWM$qs?Ow2w{c,ٿ}*>L};e5xW9^N8e&SUB|LqE&E}*%W~F7_LMk}NOn6\P}ZЖ[gT2m\e1;sfm}$j+Ss\@ +;Ԏ=KfKsds"Lc˥Iw3M|~;rܭɩm5dePd$@ 㜸wx#|s:.|wxIYe/hK,ضg1r۟nxr<8o#<캌&Rʘ:n㑿W-NY2ued,=c{VoϏ?m9,3@`DYeq0k{P$d-tPg<-ͫ&܍ _˶vif\Tct\ξ| YI@gI}Փn43shΦ.P@)0e8gˍM|ߟKd[-YYӍܵaϾ/.Ɍ۷@gɿ[lŗ.xp1+㜭NW0eqF75Y[2,_i2(&yzͥM&&6eJKRPI> + 痬I3)[y>I{qe9.=f>:ts@;: 5`&WSfآ{_I.yI:g@Leݪ@@ d7ڨ +&[[IG9Kў{|ko?@dr;3˖άO/6Ke%c˿^ŖYowu߇:%wtۖ]?OqǕt9Xe2sd^@dfg/R}Y-hIeeluD,4=շ@eqno۶5:`Lk~;ngQjl f$@&SiD}R\LgѩC&b%)yD^1c5TIgŷS9lo,s.fLu.ΣRg{uYZ)MC f3QF|f.$xwmە?'@XIxo~C>3u+I8 |d+cg<3{\ͳcbK/Wj \{K5e9@P)2,d] +)mbbM@ +1633y7c8c뎚&Bݺ9hK6b˗\yuyuMM\5@ussKu-c.]$Ƴ] $uqϫt@+[[]l.Τ:0z;f;j%&7r[4gKgTQ[+?bx֯)3_-51rY^\N\ yfZwbse֭d u$&{Ts޹N[,K?@IePYڂIݺYy-XsƯ7 Y%~Q2esk|>ŗsp$-q6luɩZ*$]l*eu6~Lscf>WM>;.M/7dˀ rc9ε.4 7(n&9L +6-luYms=}&o̦8f\@ + Sc˦|_ v&Re5RzYA=Io73[+0܅OKf;nMY6C\Y55s@rjoinM&hrg3Y)b@eI7֤ɺs'8TzPL InT's)oQSZs~M\?w߰szW,8?&рfI5&8z$zn/UQkMc%1߯gPLj=|:>=dY{Ѯzn%dNW}fۘ f|% e1m@7}ŀ +/iIe@$>@s@g|Zi/^ٸsT@MN,rzq67QsrZt9w6sy@d7&bq%Z[0@g8n:nj elMlY陆<]kM9m@ u7\/&F:,e6w_-MZn +$oPy$`&2c5'(n gdKMLR;Pd'u\|y:s.$ Sqs{|Tn w7&8fuv*9{nI:18]^@d3ׯ&e3-yZ3<7I:S|y_+ ln9̮Ir՜5@gI̟~*9c2IPe&?S9_יrl@XIE>@oe}f[D7fe]@`%M7\_sٽId~iyu6Yr*cǥ=BPsilmY6hs[eۢsהxi)Nyܮ_t;ManXf|foYI$Q2n2c9%<}aݱygl 3)Y/K3$ۿ@Kq̱<ݛV̠ vxLRjjNdsSf=(7Wn` e3ɫ&Hy[Ion*@Ln)OiNɎ>jχ9W:01rRp͛Ypows((cˢ f3o׬m#a7zu2{M@@-YzK%q[+Rllfg-?i19`lk3=~ 7? +3f=Kee˵<;Ή55.ڽY}@+6l_>/iLxkMe^Pu݋GOϩھ/3HŻtc%ܜKv@,( yooR\sJǜnk@6~\.\ALsc,ǖxKvMwN傀 YTk.1̵4Ϯ綽@d&vpRԲ}lisuԭ%LUq4@1PHP%X̷C?er[fospLg7=@&WI3)Ry}leTYT u7F|NMY6fSxm9-^ 2=I=*zP@&^Rܲ, 67f櫕)lǪ˻ř.3kZ_ˋg0V ?X?Ůsɩeaݭ6ٶI/Ius^.2oĻX* ?[8k2S1IחjٟD8iOOj39hH7Bf_3,xk7{PT/Y\0+W/Ny5pƿiVOedsU@LqE&E@i<=ޚ-g˞:^fzhW0[g S1y+SX 3;]~|Tc?'ܱ֚bw;1͓iLso'VL yhmݶzn^s13ݲnjmxIx ,&\4;^1TOY ( %٠I$Pm@[jw-6IY2@ X 2Jxͼ1u9Y9\rM3ܲo1wz:0l 3)sk.|[_]wύFǖoW%ۍ9mӡ^\ʽO 2g7c/No]sIK]@vr)n7]!r|_muc뮦ٍ$|+?a_˶<[ 9=ޙs6I@\m?ɏ]_mN>K}90rkLs^VV3X`@OKV7Y&㏟\{(c%}O{T@[t_mk]Ug &=4;97-O&7|?$e:g\O^fu},q\9/:ᗴ_\S)2UˍX=[Օ,K,=M&3W+ Yg$[yTmnřP@3_5s#>IrQ,ٕeˬnKW(ۣ<: -WkN5F{clǏc/ߏ6l@}}]Tq_Z%Ts'~{cyxɰd-1igy'2A&j 嗯L?77){ӮY+}b@Ku-?m} 3.fUqx9soW 2nhw8k%fu12j &6珗wViܭNmLI,uM@ ̠kᕽ;]uޝIvrLMVo۶5:Ԥ /2uv@2gRp=N5yiLpכc7n֧VL 2 It';޹P_-.Re'کT[@&X۩U<}2N|o:]D̦.Y +/ΒMQ3sl,ܠ $_skS@d2e1c5Os|z;NmY6hrEQBMQ{sǍo 8tрI2%˚I҂ qwK%V\>LnSNU.Lf&z@~n~-,>:&(X̻hK%V[=Y5n 2an*[%ս;7<_+nKMc>)5lbNz64f=͍sr>+nߊ\4MH|nkYa2k>O??^{{ץqӞx\cI-%ܻPn0=x;|l$LwʲwLP@:2]ܸ<4Հr\Ksv\433[.YxWLn= ǫBY\ ՗sq6n.B*9lQWiK'A޻g \MTfȹ%1峛l\48m\#Y{'u`܀;8v\'Vnj@u`-)b_,8qh얗T/ճֹN'7is.gʘ + 7? +\2iͫ珗˷D{sy &Ѹ(X̻Y55OsKc/{gԟK}2c =m峛l#% >4-P77^L.y&̖宣8O\uZj]R +x~K.4l2z6[d[, S['fchK}T<,k-fu7s֨ fxۭx{]U?q1ә{;9MP t3Z=,Zv)n[75Rc'Q.(&PؙOizNae֝Sn_}ul73KdX˕N65̖jYf8ff蛞erK*2 +IҀLdA$ۿ@g,diljɿ?)1qnL:6,R-Ͼ'_:0Ϥi&VP/'Kw~1^3Z+>;f+Su3,HelM'3,j1ˏ^dmow"<῍~wygVyL;q6<޽GQǝ/=Nîo7(LK/J}; w['oƀTom3:[,9a2cŤwg,^lRlM fYra1Y-Y5/4dN['w@K5@-Yz<<ޮGA'2Z2792iY^+S*|nkP ' +%螜s:ww;QYe'Z&-tSu~"Zр%ռ}Y5@T2.K7=&2ځ&zI]*KTI$Ϫ & +%mNK%GFTK$92tPo[Se0@)uSf2%~5͓.҃l ;-g_V[>&ڃHoW]&2[g>V%K/VSELeݵ@T3㖤n]ͦX̻V9y]ճ&6cǥImtQ-[%b%odsY4%1e` +xv<9+pWA&VIIE^gRoK*)Qk?Pjzd@tӜ}׋|t?:0m%f3S[{_YmD=,Iw6w,F0ms?ɾ@Kd}jozIn2$=,@[ߠ 2d0٭s/)[=h$Ɍ۷@)ie<ܵ-y䞝doiAnW;nssxtqS|?KvsK75Xe:㞮֧VL ԺP3L&Q2ns\p7fI$OK?ڃf[Z[gȒO`4&skzK|yż収̹^ɾw7O,qIt|Dz@1XTKu7Lln-MD}`9gXoN|׋w& n.\P6̿vxDi-jؠ4cOP@-hK-PKu7UkzOK$w6(sDn(P2 ru/يL:f&Zi-Zc-Mudg([57Tlj&Re5TN{YI&Ɉϓ~'~^8׏6l dնՓn4$P+s׸`H$AA;}N&W,|j^]o\v~Lw1a-=we>u`82ez׏^m~$)2>꧗N//iq˟3RI&(39r],ꀨKww4( +e1ejY//LVN.pۉ]|PSP{ps]F3c,3N8.Ӥb>*gWQ/Rz\Si."e398mԗ+SgĖ^\U:ssl^܀sqx?^ms[с2Mɵck]6 ɋni9r$BY\Tg$d-۴P6/=%M=mK/WcreӥwY.v9r( %wUn~|sqcmǟ\5\ig,7_R9VK}F1KuiSp7?6^<<7.+ RSl0I}61IMNٝm2j ImԿ>4)rIeg@f7m$f* luK7_3^i$qsBerdKIerp-zٓRL dDz-ێQ3ޮ@begZ` K~z" +9a2,eYlP7N=q:@,je܊']suIdQ1e7}ijI$Q?nVio1L\m}u~;=yƬS,3۽Ic/٘6~\mN=;ZnxϫlRK~4%ޙ9.?̷jά@K7~r\NVWǖy38wz3 eޚOmG.; ~yָ럋 s{tq2']^g1I:g@.VIm^g/leUf̸%ʀ^;% 75@[(?<^ 7{P&3<]~q8uz 7(nj3o7,S]&2elw׽O[$1eMꀨ,eժ*z9dnʺN#o\Ϩߣ7~жi.%{@o\ ?´YleˬxcǥN%KՖ;f;j-33Si=fU9s%M,M@TK͹r:[9sR}Q$t`cVo2ݫ-Hyz0LVe9g|_?-'w@%{I:fn{sWٔT-k߄Tg3-oƀT/\9O%'Vsn=_|Mv1.klezg{;ˎ2Ib&;=9:[,gvޜ[}K:/lvMMFLx\o9󿍝lgwԸY&Fo Ҁe[\ұ6s)s + wIuo*nw?e1e7nW.jL_$ۿ@K`Ǔ;g3jz$ɧ<|yyk@I&ejoKSӬt <|k_@duM$`}ZIչTuy/e10@|=Zr.zdxhK5e@s G)]g,s]sy 9qn3s׍pɼZI$̘=f.[iչio_]^-xրmhK%V[=|xf@I2@L1e7nW.j9q֦ܛVM +}:3|yi<\rbw-yj yi'}K8A1)˾ ,ߵI.[2* o:~;rܱ'6jnJ#9e1_8gr~N_~ӧϕ1m|f\i˔Q,ˀ + e{Ku*Nkv{PdgɔW|Y/q"%I\4P33㽶1x/^W<@d' wҀg =oo2Yl9a2ŏljwl[YtIsmֺ 9V uϖ5m5^ؾ).=q_cS>8e7ǹC~SL`-.c6ZȓڃH[&K7],` +Y&˹7 (ϓ+>?&sx͎:0^9}t`;5olurm竍e@e2eyY$%PsZ͘,|\]2kzQ>yv:0>i{W.?_{̀` iIwcmƼǥ㕋+8<9s@ joTI&X̻%.|g }fInԒN)^2Lx> )u-Ϧj.K-Ԡ[$ %Г)z.Rn{[@3(lʲ@gwl̳,i'u-隠( lv2˚*elY*㰳sUQn?ju=V@&7Ic4Ǐy5> zrG/cuzZx܀ 9yxeK%m=xg MkyOis}49-MX蚟s?\/OkYzN9ڶyIeu-c,?cmjY?ԙ韠 + %es zjj<9_@d2I}g?Vsz 2ɨНKfE)9*33-FY~-}TgI7? +I55ފ&:Y +9[=q;ZYw-lO76,PSuBO*xutcܮRK$[qݚdbT+1n{SqIe@.2oqA2E@o=M3^KcݧRns`sL%T&%tP%$_z߆Yn?:[o> @D]KKsD٥Ivjٞ&%;цvwl~ݜ?מ헖;Ν'@;oQ,+i=~_c}s( 短qe7 MSf3Q6[+ݚhsLwb1$citz@d/|}1sֹ'I j(ϓ+f81}Jsxr;2ctP)T^zY2cIi|ᡞŗ.e+|W|WWǞ]^Y`z*LeMրt`5֒]\Tw,c%}cճ+R. yLqI-PcɅZlggS*y @NfBn@Kqdքz%Ԡ +ҀsOV|WYuۍs to>N;9ǖَ=_&lq<{vN;͋7p-w]I.?Zdg? +16獍-3:ȶI xNml/-c9펒잖}Իg }f9e}noJ1<lggY:H&+v-T}3L_oޤd$Hg?Yƒ{g˕ec%VoQ.WJYq\ovaw˗?}WNɱ\7-^՛}Vz$ڭD^7( IS)^Lcxծ\z'K̜['wKzrg5{mNytKՊ9=g'Ydgui&;76im|sXMqY_n4K%//&S=GPclݺV_A&T@-8e4yIqr/3T=7S)w.xg6N뽜^v:8]cj[Ϫ9xR~\F9V&x)a>4р e[LlI~H U3uv)?Knj8g2֪^/lj~8j1'Nzd166ImY[fV@i p)?+=k@*3=ZIԿ>:Pc'SJ &|7@Fp7.k@*3[sv-c~]&T0:KcfSqDI$v7_P+>KZ̸?>ayӤ_YgCS{ aY]\YId%[<~o{lb;V{judY@Lц>[ډ7Wn`MZQ('ʁ ǫBY\T9^>oƃP,wM esA-L:KzYٍMg,Vi%RK^$QDɺT%n& P ` ($|]@,ZL&HX˳7>839ri&2]ʳ-H1rXRe5Ldj1_I-DH_j0 + g33z݌Z9n4%)f>$e˵}R\痎,g7Wg,*%K狝 W 21qlN6mrX l]KKQ2K:=P@;z=N@+dܛ1M@TlLԞm ~;rܤOrt2YqLŻ2c7LrMٸsT@yM%}Y- +9IdU:=,NJ^rВI3><ו77z~~ggřlLdj(MP.8$Ts/t9~5z}OM׊?&Ռmko^2͘\e(KP-LrMIw,^o\1㽶3y-@I$@\e(& + r{n}3T;}Z[@]@OZlYi1A'@ ,Iw@o(&wsl~mq7+Xe23{my}: $T7?` 3)Y/K +곎eoX?&T/@ Ꮼ $"۷h['wK92լo^YɛhILg77[cd2[d5.2o&Iv*erp.,Wfn۽47I'Q@>%[9Q,鸖mo~?ng|N/?.9̺i<~v?ɞ@dKdYLqE&絹ᅳ-]I:xk}No=Nw3Xj419{63>K.4 l$O.;c)+=dvo:]3olg%Zzoj38Z`3;=hnOY젒Imћri.)m @f寗I|LMW>Y5yYTIl* wmBnf] +3r]Kl@sL];g_g^67uV'Ym=ŲK +fK6bUō[Ӱ38us;.}ޥ1g7uFgɗ4K5Y[=,}KSw|xhg\NJۏ-^ǩ['Nu;^;>7<D^-'6K7fu2d}`1q䓿?FIuo*[luzs'd l+~[ ? uO-tN am+z68۾cdV[@9skmq޿.g=%sIul@I7`9qI$}PfnguRY5"IPsegˋoYfmIr6 a3UV\6y$I.8Ll]rdo.:s׌ ͘ONXy/ͺZcfu[}:0K{ډfYqŸ8b|4%;t9֣2ٕq]om9a9GY55멽Ds.@F|W =d?.V]Jxon_?O`K5Lqd] +y1f9VK~6&Yvl,ˀ}L-ي9L1|p&[+rg_[р77qOkPsY4%1eˬǞyh $ m rr|Ϯ|uz[IрK5L1Q[ڂI$ȶ\}3Trn:aYsрcɍZ3-i2ܼ4 &-^eu:S}9-V8w񮹼m<||ۗ.^Myzm7k_7Aanq:k?d޿i=~zmffT28Yɺ0yj3z9l}DV1|[lL$X]Llx]XIӝԲnYr@bsj@skzjMMxۘ|ƼRyhsyFv@pneH &U244Y/q@Ir($|[w %Ax珍ulWwۨ|NW>=ݙ-Yi˙k:33j]ĝK}TK%wIvjـ +9?3Y5MM\ g.lggS*y@o[\e65̖t #lyME q{*&hѸ( e]6 doKu6 +$M) +3Փn4EA.5}P u7X\~nfc⓻.9o'0V:/V`w)1z1%ʘ*>{J>OՓn41[Nz 2H1{c=s:V[>4 e]* +K.Y6c77{]_9?ʘ_le=~*z&jYf]PqyYi,ŘllY`W}`w.'N1|s9멒Sunq8uzw;m޾ώ>7?_Ǔi;s|~o]X2eV?+՛__@a o2i((%v +3=9hNf* V{YBI$Uj =ǖ~k7|ůZ4$۵{MuDV\TRrMZeP?.6{u2^7cǝ3 ?Ɏ?&eLwqe7^3<@M`3[}漣][0TMv%.P+uT3XyKu0EɉnT.UIwRP^ m-oƀT* _$VV L~5s&6{MsjtKg-Qԛu׍9&V1fӞEрby?-Y3u|rd}^$4enV]p<:̹@@Jͥ@Tq+w@ϨP:W]&:sr9M6&@=*n_ڂK(()r%ـ +9cz 뎭7=5=M 2x{}gŹG;/(t`YٹpinKmPHP%N9RI:Pqi7.4 2㇭}mً3=HLI7>lKA@/\v燒~W~=ˏ;.^s+ba_˵uff*[$qឭؼ͹X&.}Y,,9~\u~܀2I8|Y-6qWʧ;ՁnMϭ f̋.TciN } wTpOW)vՒ6IӇ\ܳ0qell*P2޿=*LOl dPe*PKd\|qvw67>Wpc%ivk7K|F9[w]I Z3>[dﶆ<{՗s|e2\vD` +] lw* ǴIdhLln*˾TK% + SI祙fz]Ǟgr3<߅ܮ߬P}1֓SU3H@&Vc7KsIe}I-j&3MƄVzT.2D_.|Tc?'X+7\yxOٮ: %u%- + $qI$P,3fsc[<>912r?~,׎scsy@d;I$&[Yg^-xi˖['ՒրT-/mK,ضYrWG@Ny[t@;+,5W<1w[qw,t^?YnI&Fm۴P2\g7ь29+o׏PL89睙t螲;Ulڀ ϓ~,֔g=i&ǒ\b6k247=7Yl֒{w=,* QFpue%[,.|TKqڀeuo&Ө^=x=|73m@w͘ONnS ~zo@ܱ/ۏz̑vǏf1-{k*˦-:5$gh|?TW0+eQ,Հ + e{fs9W}Pޮ?&s&M\y-^H l򵦥ߩ@c-DŽM˼# .]r1Yegdums ]sִH8Lf=@ Rٷl?s?.c3Xsݝ;weX= 2_)3)jj17W363DŽK1lDŽk|A77޲UwޭHϬcɏ?|}7onegq1c5xǜ۠ yK~4 $sk-iwUg[u@,޷ʼ}z8K, =k% Y\zerM ֶf`LѸ(K,&8*MkY)4fRF-@d~]Ej6)f\i+m1&/Ydͮ6YLuc펧ls\j]3Ztszqߔ|j 卹M]hszh2J%Y"&z>(f}1\힥Y>495/7S,mc~9ٰ^yK@P57ܭkM<&Z}4?1Y;f.HLēSQZ tz9̮n͘q$T,}. 55@%-M6_iw-ō +%wt|gzVKf* 362*c$E&T;P9&ָtg_~ϓ~rjI=)âsהi %fK-Y$39hH96q9TFnyL9;ݗ3ܒL۾ 珶:vODeL1Rn{.o,2c7SZ2Tîo?@dP'w`<~-K%Qrn~ 1zh/2% +97cZt*=3s+ӞYcԳLlYc7s'Ajud 3-ЖKev3դmP;Xstgus$[)V<_\[yS-DKbcp}brܱɫ&inMꄻ-^\NuNX ),e}.PANyq):Nyo|_a;U@K-֮K4 Y;uֹ?llqMY/pgǫu٘ &~^-g@6xr g;gտ@d+mt]] !X);lf^S>4~_m|:nr|LknjLqs- e1~ttcǧ+zNsܵlko7(Y 2]ݨ$ m/R}Y-}s\%M&܍:/\vy1kLwl\oUg,Y4ݓST{P ML9cqwcɽdޜ?^'S]>ayv:dcWhL>I2oS9a9i cglǏ/Vo%F.S?Zc n{7ק@Ku6|\M f.*[sr~ʀ9ӢI%޹V8u6%9[v|yjH 14'Ru2v&3XȠI_6Kwϗ6FtM(4 -ju:5dۍ 7n d2umn}>?6 nWǖnß|yNJe7+`oƀT+xsq H8md\/}c;k\qc mySR̸glrnq(W}`Kwg*%޸@ݪ &- yrksW^3uw4%cW?.7+4vɼ̖ne/UY j?k͹E dr9۞á:gmZO 2el뚖{PM(t71i97lќ]ݧǗ^YcY3uLuW*&6eUIvjTp,ͱŕsǏu׋_k[~Oo=[l&llrY4Y/ifYrPT>vͮ7xY@i.izoYqd٭ 6%F2xw%r n;9~Wz`91uy^S.+П=Ǎus,m}ᤗfϤhI>-T~<ԷmY6Cwq1+7dKlq\Y\W"ϮfSnlnRpeUy宥LyLqE&PSդxDP4@Iw7+S@dfg%>[1,U矵Ϳw7@̬\+g~8߇k9g1+n59𹭀IͻD@o\PPc,MMzs y1qzM&ܭ1ie٥pP3?.嚩odh@{ |xNMY6C?^1;|^h+s뻟qF+7{F|W.k@4e75U=*9~_ɭTsulz1OW}`[g2hgў?[-疥ԍ$Qx˷W >['ՒրTK%3PS{P :wׄ<\c}.ف&2cYIqr *lYmm f]T njLzhOn@*xO&7f'Vsoipe/.ϭߊaY$Ɍ۷@vW;#3 e܎?u}:33jI&D}@IV3]ʸLNsM3ehF,bxqfs9~4 s,Ie`_inMY5F|vq6e@}P[-@ITyI'1'SծdKqڀf3&T,jYI$P>矎۹[kc'7cWfPsu<özq}:s3cû.vLnX友cϞ{̄ eŻQ/XY{r ].vnx_Ɏ˞c.%I:qN_Mu87)wwv;8ֱ^^޿U57re=Lqs@ KŊIў>r$q`).-ϦjeV]͂e +&rllŗ.[[z@@ N,V?OMy&q_qǟuMsi>1˻\rF͵F-kD`9kYĊ&{X\OډwPcɄciܱLsrŎp?%^lt`2ɴ?)Йuw*x f8cqmI$ȶ1YoXSfjˉ7@nre1i%g@/I:ު7<1s ec\tIٱFg㨖祓ZP7΀$տڀ13~iyulH).\\\=ur7yY餝Kljoz@ d+[t֧Y@YzKd.l`g5-ɫ&K2mK/Uz1i:q9&YLf[&7fP-LY55\IZfu/ŲϠ _&2zsg6l;$Ҋ]cjy޾1uͭqϕ2:ߧ-nmy  _-ɫ&hcmܭ=yM:7@5c5L}PcɕZg3j+nٹ8w;:nYg4%1eˬ4L*90YcxɌQĖى & rcw7.sYڲ[r5iw7k<@MMꁘZ|g iضYrUD޾8.Nq[c}I>6 ltYf{* z %)Ym<2/<<vs^'Ւߍ$MꉆW-c-{n5ylK9+m%Tɽ3i%̫.]&A~ .RwR(Nz,e<~+/QbVY0@5ίC.{~wsԚ(;%Pc,9jfu--ts3g^?֧t@8\m{gn.z&>hK'S*˗c>=M0n*nXmK&ɺ/[[ՖτIg2Lq&ՓnFpK,YTRfT@Lj.hf-ude1M&&7J>(ϓnXqx;9i1c5yz:{;91YLv3&[m68L9m˿qyn;VLvY/K +]ɽs‰PguW٘FT[gX=]VOlIFs?IָgŖ>7YJ9~s]C,pg }ei&絹no[Vr[+I7ޭٕЗl.Ls*f剎DzTR6圹y:I.u:ϓ+g3jm{FYf.P@&s>]_ӟ7>UF.7)5^,69o|A%9euNo[5Lf0]ciܕ6n.zPKP[mtsDY]Xo.?6l~L.YnWALsL1J &LnTƄu2v&;@A&2oS! +96߱$-je@P2$3ɭ -%=, +'?M]88~䎼~sHNw Kp :F*]KKQ -n:c~]su ^reuՖdk/l /SdhLrtͅ*[jO&6lޤVK}ƀiI7Y}.P@|n +9OPc'Kbt޽5ԟ(%[g}qyq˾Ǧ6:I'QAd>]]\fu([뽒:$u4f8Ld(*WEI $E J&O@?isxq;2'=`y[1-qyՒ|iIr.[0PgWQ-\Lm9yxXfrzNb1|Rc=s:ug)퍌x~u̲{kL3gn/h $.PI3@Ir;>F|禼k`4 珴ʲv&L vvЗ~|T 74ǏkmqZc|f5۠ s;3.-V9n՗l%wt3.P2/le՛q\|m˾=OtK+em eV[=@|_P/9,Ujsz9&V1 팬sȽqyTF,MpP1YoYNٽIdjs[Dm%]TLeH(ks@PH +%(N`9煹u];w2W$Pnzdg}q㶙7=ֵm~Qsjs2%HyeqN9ulƯ6em'0Nw +c4LP>~)etd.Piv[*dIeZDe0;sX<պ ~n9ǜ׋>=ͬ]ȣrdIw"LuBx[$'=&wXYjI:8k &S:Q,ٕei[ځ&LP?]6=N-}i 凶Reun@c9gsٮ:0zwTLF}IfT@/LpЙ7Wn`^9ǵqMsuet`S{Ҁl%@%qn/޶W&p Zr[rV;/>]/FKdD)URY}AG9_ɺ ]u _zQ3ޮ@Ʌ: ek7c[vד ;0+O7Sό]z\- 75R%n*I$Rn{[=fT0P3c7Lwdis֖lsjPɎYgo }q:3w&@:09=ܷN=3Zco1̚,eu9bgYdmsc̱Ϛo/Ny~:%9\eߊYH +9ڲm凶yn#L}Vɱdi1v><=ymz9K%@ $|j( ϒr]O>7۞)vpb?NW&[ιM + Ij۠ +M@77n +\^lteo}_I2u4,sw+ I6[f_MK3LNzii鞦^}UzEsg]:'g^_9#EfLrt$M)7=7}*e1ljɾw<;w7<:g@LX vk\O>z*Ϗ2] \Y =nm놑%'X2Ǿ{tI|x_餲^lyu :qτ+ 7LrM<,9κzo$ -ō f;is֨ + ymjr)#߷on=. grxKҌl[0R;\LKcVLU2)VoLq( ^e6F1KuiSpϠ ׋|lc <:̸$j@)\|ykwη>W0|tӗuO˫;OәYXKd9LO=3yώﶄS}i(y}2MM1^VjP4%Yl dٸT@ 5e]va=qo\_iq@T2:U elj9Y-ղM՗sic*˾P=d>xߺ]oр%M~ӫ6q-c .o,K4וOs'7Zсӟ Sv?ZK}-֝M($vh=nٝKlymi,fa.X̦czc_A2g4ϔրi9s=|jgu:qz\jYSYmb2[~֒on+6̻KP77xIOnMY6<ޚqm<5-zs{-98wxu:s; & K,3kz$gH@ g$>[9q55 ]ӷzf<y2c@3cZ\qO@&ʲnĜIp7qϾ<.c|1j 5g餖_qlc2%1@0|^gSbe wh?&YcxknXf7wwn%n,P@qIe۟2~ /?|us,o[Q)YL=Ι=,}$+Qo' +%螜xs~V՞9]y]mެNŀ +>Kqq,ّeNT@ߖډTPOp39oaˌ1|~\^ l޹N,iݴc"ϩ5I'SJ&O(&9 75KkdŷnmPoK>QF|f|`H ,Us/.Xm5dl)gŷn4 2)&VPq iԒN{ks77:09'6Жlŗ(w)w&BYe/ii@=Pray:wek7c.o3+_]` [+;uI$}sվ7͒{YsTsXq^TLP\jo|~1tP-n[nV/[n~ǏK^f3QZso% 2*OP1<_à\s,~zkSYmItPzMNŰlNg25˩dli2޿ɽMr~lPdpne8zus-7?@:0 f(͞1 5:7f_s9g6Vt`gId734^]ͦ PLrbzIhvʹlKW40@SYejc4ygPde7vKVT`[dmBn($(9y2+'K~;9t u7Sr6.( +̭$ϋnmQFpI,bٞ%cYeqrT$fr|FV\TL9O&Q˿qrLn]gOkIIչTYz2e5Y]yb޷ԓ>3Զis&8E&Pg IzY-3[a=ևe㷢t|W&qnRwtK,5,I@i57yzͮxYok.j sy{cyFt`<ᱞeˮ^JEjn{KPgZzY-$_y6 $cH( +[iܕS\=P@( ៶I1><}Yjw1&;9\y7sK%҉93Fyu͟@d,fSTId] +Ug.߀`v_m^e&7)$\pu Z ˖݇>m׏р8%w9ߎ3.z5.|).楹o֪(&Vm%&7rUcˤٸQ77_mYy~: ,f]?$U@ހ\T_$xzoMtx?6Հ]82$e@ox$Q2n@Iw7LK +LR>h@beZmz|[0s,u n+:ԓ7[@ 蚛IT-2Yˌx9s2[ gn鱞tH I&T+s?OM'ҷ`xT޾@Σ=8<^; gq|C>[ieYgA$҆e]cǕ{ldKviS{K{%7K-@@$j( -C7~ŝYM3ɍI:|e@-Ie{{}PI$['t&RU%z2֓fhA2c7U;ȲmY'zPY1( j&ډuw*3nt$s-T\ggS+\y @&@zE?(&U57w7+fIԿ|XinM&hcŕr:iIeSu5UP&c˪,ٟ@Ljcu̿ž:ߏRy1:u%w{VM~[&birL,閷~WcZL2Zw_|c_@[1ᤳsUȲ$ME,3ԇT@-2.?{PYz;w{uk7͖u,=.v5CS{sl7/?eVn{ؓL[ݷ@smw7ڌN$?^`l,ެS9ԫqjw7\?-ZtLNX^6KU$j+Ss_qX9c/?~ִ I'Ķߢe˵ %IsbF8zm/Y 3[kR-fjDnX|W厣=o? qj ɓ#6ﱏ.VMIөlNlkm|ug &6L\yvuv:0ހ&Sg@le>ܸ:Nsӫ/&{=ݛ1r>~9ϙwf:0X̻h$T|x]׏6lftK[9k%6ɭ-::OW9|rրT,MU 71/]8.WN;q1ҺqG$Zݮn8-ˎnI5]=;~ddgcmI1]inZP˶dSP dYw.(&\^\3*nX3>[?}~/WLu&$ei<\,|'ϭY-P0LUg,&]w)'by~7$#Ye1{MNwǝ毋?Nsצ~uqKn 7QSԻnX֭@c?-j3ԷYg 7;^;{ 'SK9suվd-w59[g0YrrnX@SuX1힯63n.9̺Yex܍%KtȽgխ,? + 2uU%߇7&ܚoPW{b۠&vnMqBs@K_A3I&=((Kq:S\K1dT&W gz8KIw7g s8lduz@@Iyl@L꥛w=,xoOog坷nqהkdM=fZPN;c37sNyM:l SwgIgMLkz҂ϞҀ*zD_3m3Ͷ{[g* +endstream +endobj + +411 0 obj + 83523 +endobj + +412 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +413 0 obj + 2567 +endobj + +414 0 obj + [ /ICCBased 412 0 R ] +endobj + +415 0 obj + << /Filter /FlateDecode + /Type /XObject + /Length 416 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /Font << /F1 250 0 R >> + /ExtGState << /E5 << /SMask << /Type /Mask + /G 254 0 R + /S /Alpha + >> + /Type /ExtGState + >> + /E4 << /SMask << /Type /Mask + /G 259 0 R + /S /Alpha + >> + /Type /ExtGState + >> + /E2 << /SMask << /Type /Mask + /G 264 0 R + /S /Alpha + >> + /Type /ExtGState + >> + /E3 << /SMask << /Type /Mask + /G 269 0 R + /S /Alpha + >> + /Type /ExtGState + >> + /E1 << /SMask << /Type /Mask + /G 274 0 R + /S /Alpha + >> + /Type /ExtGState + >> + >> + /XObject << /X7 279 0 R + /X5 284 0 R + /X4 392 0 R + /X6 402 0 R + /X3 406 0 R + /X2 397 0 R + /X1 410 0 R + >> + /ColorSpace << /C1 414 0 R >> + >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +xKdKyJT5L@ %@9Mw̨ +GjϷmZߎ0}ۧ}׷/}?_r|>]鼽Na{9O'^/-称&Ϗ^z97<俗߿a{=/o^/zjS^mz>^/V]_r;z<܏Njůp x:Zןv:_?Nv=/~z9^t"+!p9޾ybp<_|?lׇ?|z|Fz;\يrOI"7_T{$mv=]Oz><Kltv \v =F/2>nTİ^gF+igC 9ȃa={ȭOr=>O׽NvYp^]NtF2 u./Nnvw l7:ݘл:kW9]yzٚՏtI'Btv\v|̍^ζ&pS؄cχDž^.%t|;ف +<;w;WsNm?]go2_ɡ_jjaW/v<6&p!xN.4$A M:^o'RFpߩ%#lAk*;ArD_v(l{훥 _OmN8n/($ɴ9GIjPV|PYTttlpyo2lal܋?iUZоd 霣{:-~#ht),{æHʍ8[sFCe2pLRXTN`;mw(:,UPRZe~ml팧D~@of:?.ytv=`#nEt:Jkן9~RiDJ|"N> +pD'ϳwsHgYH`0E%s8ggi7>Ɍ=U(q+@AӮRz>Jz!1ڸ=rɦ!~:#|z~Q#e S9=YQdw[uЛ(gW+B\8 /ypD,H*gM׫*䣇x%#*dz6 1gZtީHD!e;\5V2FQF#@Prq`2>vvܭ0Oݐ[\n51 Ơ7(ʾW q~/BVMp +I9u ?ƳY1ؚwiZt&b$:2u˲v'@S^ Q6'ďsǕ翡U퀟Z9-E 8R%qlI*91NڰeϏ!;rs[xр%N% +U%V>cC:ʹ(W-Yb?g2>5y޽[!~ &C Ryr8K,"zh}2̅2/ V5^d'6x: tDti;k)j (0vޱc1?{ x91R)?YNFD$κ<c-3yB$q[h`OuP &S}gQRY)Q/{nFPfQ=r(Qp81> uOvN:06޴ʚz5t &1,_$I!~b7Ւ({pJ˯VAy<wpG5cj TCWwptF R6J\œ2hF|dylR.;Ԓ°@@ÎzjZnPtynDa + \Ev>5wC,& 0]0d~&*u4"k#A9/rOPЄ[2o H۠JARi$]_E`H=ΙNohݶO5ꈠ!n[_vrۚh +5G{$*L״l>T4w'0#0:1&IV_S~H=!0Z 36 +=d9;/⵵Tk[2 _L%f&ho1Ul|܇^P 7>{Rf8(uUqnYΓ}/Z/EhkP6)WxSQ`W Z-[Jdf[mYmԴ0m`hwN)~CG4%@xTV(aPc+mbetPa s=rǵZª2ЯYvjXR/a.jŬ6VXBEGzd[9rڟv.aax[j>ʜAo!_a;LUÜ3Zt]?HYN6;= ¹ЁGT\ypl#uLًᓊ}J'-yJ4|`d/VE~ И0!D(LMvV.w;M8݋pa#0iG0~/ǓuѠ*ޭT`"yÍ6ᑆ(tdrv)*Mql=LNd sV.kH'+j|y7eGn6;/OwрGճ{CUJ'pP"M';'mjPK=F"?I_(fcn5E" J_)03Aw\&M:++, Sk:Ϟڿj՛3(ʄU\UU:JYs +ZI*úP.|Zv7 Cv@_BkuV,)J0a~gSj9h=mJ!Ux,Ä=E :a'KsƊkPUIzBxvgSGj"Y]0dfIӓ*x- VŠ_cGRP xaaq).h" Go'zLrf;auN0He)Zׂ͸0hHK _ aEove`3!8q!MlUH:T\ +x #`b`ڭ8+.q!+%ZSUi4e5r_wsyf0Y?hX>1󘋻@ΤͪKEJ'p?^9>"\B9$r7zG$y3qYVqL[IUi^Gڄ>К &HvP)TXՏTTT?YU_KcaX~ ]/|"jEtkx +՝ja +1{uHEfyJrƜ'3U.ѩM`~jpBKvSE:줿]0,4gz)t0iӀxsQ*vfu,a[Ui0ڥ_W ӱ]0Z S5wt#KKfJu sX*Rl̏8POʎ8Ve0`[Ċ j5T%9V^RԶiYE8%e[n!ȯn}\ [ֱZe)~ŔFŐlMYs/>7)wm+9`L&K{=USn;\Y錿Ԕ:e3Z5jiϬStNz| 4Aw>(A3Mq?( LBSpΜo$#ՂYYD6+z +LSg-Kj;A^ri C+Z=}`LZ۹ +˝+hQv^>,k5*bws̵{>㍡Ԭs0d*=a7::OҮwdF!=#ai,mGBv:wJoʜܲ&LkVӆ*gSpyFyz桕yÙi.d;@ TDA1`[$`hzRL܄uVdDN5gjΉu;5gp0atNr>fm4߅1&0ή20a0KVh3Ur*a y]1BVwP-u:y6T_a}, #C (A + uPGz 8e! +> C(9L>S Gvϖ|VևZ؁)&'łajV*LX=Bԭw^c #U& ¸LfUoԜi-: 8LaVn[bTOObotI$ݶZẺL&{PE`fIjGt`ѕ_v8' O$]JraMɴD?Mr9Yʦ |Uc7Nx&|= +`Z_nŜNb*j %-'DQyA` Oqj@-TBLwo?/h etNOhC_.u@J]dZY3t[RX52  .F\P#;^0卪2_4C5#wI`\Yt!g4`ړR>ꄍFߗHd&_o:qu$P1e 8z̬#+0 |6fAc)3;-QD4yگ8Ӄ +*݇W2!k2LY7L4K*1(oXVi<"i( Z={uiũL v*i(S8#p&o% ^Wځ]͎" }VJl?*n1UaŬ|`3נG#Ǖ + l[2 A`I[UP=)Uv3Bdsty1`0 ApB$54I6IHK%źo:JU㕼#]OfMƱm9 +RTd@T ++Ԁ ċH,p~L Q5TڶLJAp $&^Y,إ-E**$D~Y, yR3+7*^ Փ&AS /yi8Є:jXkț\_jPAEAw?4A7.D,"tn$3Xv\͛,(Ń!)"U'€R %((#Mų + VRu4u56 )yQlr`DUgKdNn@^eeh( og'H>~Ե`  ijN&Y/ų ZR~ )X/@zdRUmū _gaM3Z220' v2zY*ҬaQݸ3#G9(#uDڠ7-7r +٫Jqw\MO Ok@ $F|/:lO뮼ݞF>?:$^tU3s,x$$P˦TJG<.7K O'~4?g(Eɕ9¹84P2l [[tr(m`\(3kIX:|yք B?$i++e gQx`6ȗ^)䁜JRWW@.ܼTw`ø +Dxeezt+ݘ>PΐF$Bp nj޳H~@mrG5{)vM@ X0r˷<f^fyoňhPpA E!a4],UyМ¥4Pޑ@'R"lkhYl80}g2G 3G^l*n=Ng5. +q :19A@gsO9BN9עJt8'U XjI) @^WB0@*+MM8e\)%,AWllS2RZ7%Eq'jH5&,dgb +O3gx NOx]Ig ZrRIr`0+8*W*sGWhS@>'`&MDIO#cp'Vt$.#m19M@?$RPNp?r7 JW}wp OdborJzo{ ǖy$26q.J, oHb~G[*+JmeQbyADvLܴHXɲT -TabWKޤ6I+0 `FS"SlXGwICK7)aPDӻGƢnE~gǖvI|Cֲ75Կ4d.V +-~ ' f$h̓a.f@Vs]n@ \l?JT\KQnMegVk$]U7hM(yp$O=J*W-C脑0t;S'r0_jNZƠ#]_fו~Vi TgMQzFT)yS"+LXqVK;$qCiOƙۄiOA3zf` +9rnғ#~.`dnH7bgĊ8|KAaZlj{'V˚|Q;]l5&1l߂K †"?n2 AjZa$U}rR<.9Z V/ ott5j{Mk]îAYݜ. chtm҉i.D~xvPj ] ]g<- + }>ڹܢ4R;+Ӡ4Gbԉpu75RY 9P9Ҳ<;4Yt-J0~W +03UkCǶY{WBeyOs`[@VqocOT.o!hs>a~! +Xؔgږib\{k^~ыC1z},aD/JnRC^*,]?>[XÀYsW< +gwid?Y/t7:LwЈyjHNiѠfJ1aȈG;v:{ZMB͓PN1]3͆` t=">L I-a^r?3أ8v;Kor ιt~e\4Lt#j[PLJP'[lǍ6 RSjdoRf% #&*UEz8کJgdj9 djVUQoe>UJ'̝ +RS9PLAd*IVW9pH0BH'1{s;x`JXB`ҡ9}aJWFC?o#wn\KP{AwX̉ Q~A|yp;RXeMd%5*4TŨ 4N^m*eqcq,RA8L5\s䗬nH]eOawG5Vν.Sd]77HPyȜ6u 9Zڙ: itEG?3+TN a唫75%M}wd/> U/6^૒aDjMؓML9ͤG{>$h 77kʣD42=邏:0Va,˛VXDF=<0 +*:i/?*1k@'[0\&aeu8۪AX ]1,Je09Hgq F!G:{߰MWd R}yۮjkAy^<ܛ5c]<[ؙ(qN* ΖB(Bl. 9y!SM Ŏ{l*lYs2.D\ <[P'#lBq0! +]&Ff]ԕrtdkoabVFL`wl3 P>\,alVy'~d,-שm|.B=KǶ6#E FRt:;qЭլ?R衄seQmxaJؐ_胝jRg8R$&)DG[͓U +q):X70!P7J?Z|jIPu~sD6s?<%[1 +p(f/|g1&q{+6c>w-ؑz.7{?A/ֿК+mAWnl>)"VGΥ~Uc ٖM j@K6ǼE(Z-^|sD&O/]؏bVcG5J92Jl)))$JGUVI}y\&.&arfA%){*3Pi#օݬVV&M(*<)zBJӆ)>gԺE'!ͨX +,>+`2ҴV CHǰ0aI|a6B|@JC *\L~tƸ'm:)FޣxL Y%I SLI[&✬壻͑P7EnudƥdhiH*`Ga_I Xj 1<&0QqըoY j{1 +#5i13W:M`Mt^́BCqn-J}G$:f˩T<یGWY7#qf;`Rel?Y3pޅX&?l?LxbŪty'Z|ܩh4ͷ%V$A=|X̚\sPo,#USaNH [7!ʻqMkܠ>&UQA ɋ?PĒ% &W~IZVr.@eT>jt=V(ZM 8kP1Lh^~e5~)oޮ4ªwV+ +;XôLW;O}J϶|sWOX< jC2llH>9)|rܜ[͒xT.\/~wL~+5;ՒןEJT\ '=Z{2(v=FtA+ {e:h{-:, +%,!['4"CE5=O\r})(O#pz"|jqjdK6*"Y jut٠94")<&` $PrK +< X}D*pgVkAʮ8DO | 4._a8iHŰ^(zRhjiRb7 j:V4Խ)hA0R0Tɑ-&0Uc0?,B?0Ro5MK`}>^`Ɂ`<0`Nkr&´buPLZ5a(8Mx;zEI} ;v2Hk?(G:Pty412^BIhY<+!QT(EձL/%krz\M>L+?J"ާ([{m~!i>(Lx+nļNv&L0!rXvoS`\U G@M4@A$wrsUb6) WTR]"c @ zF.7SUEh/ey, ,kИ@͋9gǔ<*)S]C_"}t~pFyGy*6Ӻl>f}J+Ŵ"m^,eqVWϊIZs^Fu4`h~ƿ+YE5` P_IIaE'2-{,DTCOEp + 5],pE}I- +s@*Ewc^BLs B{-hyZpGpEKY *vh'u4R5}TK2PrfG*v( ,֓ɲ-A]4'x soQUtD43]"\?d&~/+ڈ=zaWH9qgc3.ϲ)!Es/vesa?<:Ygz!eq\znFpy`V)bbsh[ey'>ѹ +:M4M6*q9oT?]NAqz2\`Of`!l+5*ĉG4 אAP$ܪ]::"",9 ˵Sr +ͷrUUy 'Q.ͳҷl(aS%@w\{׈ҊDu. F%})'r$x@)qM5Bu"y^fCtPje)A mX`V"@9.N۠rO0]5}T<^N"(:͝F]҃nh tqד:8PQ0j>˖@ [Ì^iFbO"I<+q'Pxuሶ=d1.].KL-zȐ}^ZVlLط-%#_A+uȀD"ĕYLΨ|-nI)p [Ds%Voa㕢{%;xuZPu>A4lf%ue(ӭ>( xе?~W)P|($qNJ{2.wX +ga8n<Co'7Zn(+KaIP;,շQHR%1ƻ8A&'`Pz@5ϾGZe + xVv賏VU|G|ά)a)ah$8 1`YFx[ 6ck,>m1!zE#+ CɕpR- +j+%j9Z3d>GOGة's}ajVTPn Q=L-hRGQHi:1F$kuª ci+/z$CŮFG +) W;ĴP-hR!(Ā) <};I\E(lSJrc"%4|g]b(q+ihyclA&0PѤ * 0Ol_ܐ?ߛXj /Z`fY: -O=Ča ufV*/" {T7{TQ yR:S_n,9)rՄx$JMq{Ua;iwKȩ-!/e|.K)S]z%| `q WV0a0=g'Q>{wi]^VvQm`) f<" !x3~$o3Erv14ܝzI/(U"r|(6kW0V{=y[q n4KjJYࢇRc#B^Ŵ[X^\,rq@f$ +[µrw{4Ɠw`uZ- %0a1/"8B!dh{R +hcX)ckb+·96OTe0\j|ڄ֓y# N򑃄q`޾%\*MFDqME|`[ 6=,^#j ah@DqU~B̀@Ŗ$syD6"zH4МE<'RCy4[$] U0u1(,@)Oή7pTb-wsfdNj6cJp$oU>a *orD:ZKUt{Q ´O> H48+Z10܀6Djh@Hl(.^GHݞ\\P(X$#1ZM8 ȡⵁQK@h\̳B%m NeQu,rb ~r3rl@$¥ɩ1d(Unֶ4Unr_v@OH\M++X[Xֈƽ]JTM +_kLT%cbQ(]S>O]z 433 8T$Zȹ,Q60Ʌj\ItF5o@O;4Ifҏ{T;UT|hUg -^LINŚyt>LE> @GkC;K-fY͖?ߙx! +Fb}|Mt΍_SKIԆ81KA_m"7(bE^r@b/ZE^5%߈>}oLWwZwOV +147FkTį92i_4"h-O*7Wzx*Fx<3(2.TQ9_եXQibgkC&<5]@!Xq?l@ ߗ=hٱ"*R10se3ۜq56)н~͈׎.Auհ 9柔詌ghyQMԥ~@`RTVg8M{6 իL\4Y0CU)e[Q[}Q9,88 UXspZ +GXW4Ejάi4i) Q&jvVS]&BY3yŜ\y7ZaFhg`n09'o5PH +z(՟,naV TB2f5ӬY.v1a<]+dM6ׂnfj@!9²>< Q0GүE +33A./qW52r>x#·+, +':zYeM}wSI>kRhӟ^L6ތPx.EC]Xb|Zhd2Ijut\03 F0 +wtV{K7B+90^qX63ͳ@Ն;\dN.K?4'+|N\seZsnwȡ:nFҐkeCWD0ȊVt/6;`DkhUoV7}&ƻI mԖL9 sYs7(qᯡLCOEI.tx'V/]qГ-;I&Rs0Myì@P+TSJE25`6w;BjߐL AE -G&;H*\{y&6JѺ邅{ύF>MMѬ+L, +Äpj[w4"J ʥ =)5 +c5GEF [.Jy! 006Jar\j $AdqZ ㌜Z I0<ѥgOv``Hq4QlP۳;Oc᫼".U&Y:Ht1~/t6YA"Ir`W F= +f˲؃ЛX'A0:yk^0YY-l5}űd;ᆪWY''{tN$)( Ue}$>Z@..szՁcHFg\,}3֐_OvIH %dzdwcD 9qx咣4)F}zB@jЅNDUvq**\v@R|yr6lcrhj^ybv}CԪMkA'a]L.f0q?CMoR\(owkaW)~1V2YE̛@dc0eH:LZr9`twa9HI,(d&EY͞ /(tRN(=g?4 >V_]Y-Zg>)/a(0*aT-aVKߢ)v0+]9"8!{ZzLWnq妌pW vtlLeMu KCG,^\Фl{fG|ޕӼzLjaAV.;#*Xb_cV#wpI}6$y<*٤Y-u9HW5L*#aŒII~~r4Q&OԷTYjPbySuvKwc,JVoG9fI..~cꥨ ѸJ["Xi9D57&h]%SܺBU9 n0iQýyK '}ML1@;OYj%J2u6dw(>ɸ¾څrRK'|8 o]ذ@("Gɡt%EZCG4Ed.Z;EyQQKdO)=쌧ZisGbM^䙕n\@uIvp_m(vdMTYɞVY1"Xۓ6vEEё⿟I,/UE>z2Z0&QdZZ!r(I=U'd~N} +S՘ JH\8]#2 TLT![M Ԍ($!~c$8Zь^Ƴ{=n`fGǫ._[wYpTS,K)T)Ug dxEvvNf&3}ꀖ0Đ'4Uq~jΆo=B0^ǰ/'Rcaut<}bjOgG)賛ah}R7͹N V<vzy^Obⱒ0JOBl-:09w&(SaZڵZ҆X.!0|m79T_yV˗ U'9U0rΝ~#k8>?˒Az1J{yJh6k^:O+\Oثx%zl'PM#+KoF$LLکnG[/ 8VQNƦag]t'i&azPɩ,/Zeb/'2yÐޕuwյ^Ba& R_ZVM~GZ$'2X2PC$15O3rVEJe $ڀMoU!"uCPW,+1Auys B1_{q*RJH=НFl 7X}׻N +SH +,ëeV&Gf|(<_<1e1 +YTV{uVAL5{;IU|痏IKԓJJBgǡUhWL[AZDCs8x5jrOK0v"|jZ4T&0%Mopo:d㊞[VD:h s:>1euֿʳ42a ;_ ADj{XQ +FjѡK("2;yjla܏yuX儡0 @qzwBk54 ha=S`8 Xd,kKqd,KcƑ2@HYXdyGdy_MY$2AyGôZ``SPN5QÌЊtӕxtġ<\>&r4lf@NsT(8-0ZaLnYQ~{ҷB6td [ 5Vk|>fR8e ZK-k.qƯFX &kajvn[u710].taT/J[bh%Ľ葳 #^fEa5鱚єD3DBBg50RđZm8Q*qiK#`Y L # 3P2* A-yk UTآ3pa5'ND&\krI穘JsY0*/~W'b pˍ0{M+<b~KPImY(|MƂMG_-5.SxHp&rM 4]}ϾUYCy/_"kQ߆g`;0"{wA1C/q0 2L>aҢ+Z,s~.ƈ9n.8k  ؙpupg)fkMB qU&!x[6r(7ѥ^PP[[a2j)N=Mr>t̝v#_˒0NxcZ?; .*a(35']9<̈KN&0CXA쇻ڹ 3uFo?* ㈼j>'Mz+4aX87v~a5fX7Ĝݪng4%h~=&8%aȭPb3[>U\0_tL'K7# >0fʃ~P@E v:Q{Z~A@ٳ” ^'S.I1#bosfZ̓ ,GV#P04XϣJV m#`dx;'W O¹τɛTy:rV x&څgaaj cq6 v_Gf`m;a_P2sCVAR…FgroeIځJ/luZ 3Lf: ӞW(y즌\M"/Mk6E)nq ò a +kOpA?N$FM,MzS[-e{QűdLש$p#0Mk5c,L]דw#‟o3Ū +O#po'9K 0ܪ?KiCW٠ʐ Ѱ]d0lX~t'&=Za 5gd"KB_ ЃVst?IMsKG}qV4j)b3ye80]DqSdeC0¸b,gޤ҂R\n9{%yFiC!,GZs\$_P$ҬM:TjXu+F9$҇zWt`l"$܎U\6܄5uDh |^T G==Yzi_XS5,=@c/rH;qJ^k(%Ճ)NѶ\@4X1*\X3)$={)oNrv@[@圇"2ouA({rsGE{ <".Hv#ԃPzVl눔K5=?[[{|("o`Bgݣ7MO<L)P&eQ<BO3'.HY\O:P6& /@CHrt܃ Ng?ʨ4q0P"EW5T,xN @@W8,OQ!hC<ճJp +SX+c$sjqhY My(d ѕlzVRRR +#i`TJI2Yq0`xlˀ+J  xg17kV2LhFQ2 a NS2TՂ9Ir`:`B7 - +V; Z9kM4]D,v3:N,At]ҀBiK 8HUF +ߍϳér@FW#xDI,1J~c +|+Gj 1ϖX~kys̳^FӧMV@46kR֕hH!Ԫv5ƌ}·02U mʼn_P=4PTT@cⰐ]^#}QZ`[_MsM#E +U@yKUA+'a g-vkBT,t'"lK()P;t-4~(H|րvPԣ$rJ~ ,TEԣ6Gl)}(*LuztI{jeN`W]0ڏ{VQPtu.;$@%EԘ_X'ث n&C+ioV_TQbQdRx΍Ͱ(ur'9cu(FBGo8"l< J\9tD4GҶHppNv)[;4E[ Ou N,`J' "`15T_0|6`f,#(PSjrT, ԥ@6Wn7\`sRHx-fKEOgQ+: +D`y΀r(w(8H{0γ:12e9n4J`u! 0,)u/E -h3#@y; BoS9Ҭ8)CG6XQ ~PLrh t$P˹H9RN4~ʀc@*>b&j(`5 G­h@`ug8Ki!+`6϶)ZLn@\-ʪv r@M.~|F~wcGh]*cIG J=/0DJ1Yf$}!)}!ZJ_Ut +6W5ůBT:Pե!QU!癢N2:.ϠpYuQ^SؑjusU"}g4g9;Hb4P6/#T2{60%PT2-&`$dZ!%T$HѮܧw +Z'@e3oE΀&/)A`c_SW7-)^YR~sNǠ|椻`g  Xw vm@ vL) ăfNfm,i +rW NvG<4PWH(lRMl3 XolaB)^n,O?zIgT'/~5?e'PUh j-g\M~ W r,m"/L"pl X4ϭ 3iF\5&4%w]F.EnOd0:(B5dґM7MX8PSzZ,у0g\,9ًFAAw#ڍ%P*lcݣlmrJ 'b"O4 ;ړ7&#)Y̝qIikZG+N,'0>nƳ>&@qv ۹0uTI@eyHgd@qEg#{5ij@GZcNrc$K6xrɪg9Ǒdoh}=tv=) +z AT̂RY酵Y3s:UC N1aR7Mt>M\Bo鰬,`%[%@*1:'tS¼w;":ǛT) +_,d*GBb89ΩIv'G/,5 3k݊27+%aϬ1x[4Ph&虒ɺ@G$u2vLP1]THdKJ)w` )So^1 ښFvYpڅTwwT:slǨ@A#mL@l,d5SR/ 2t; GF#ɥt*/4l{/w8$gC.JD)"PZ'-mv:l#,xYj">!2|Д.Ľ6gٖ8c3*_ۉ5NU Y3$0d鍟Iv ] +cu?*ݎ^1bdY r*vJ~<"pI"wkC <* Q({.pt ׏:v S(gqpB G>$>u ^(4AUinur%qmA`(] +\ƨP)vͮ=o=;:Hjzh ƹVA b߫+UHNR%ޤ8%F."G_aDy8̶FҔ=/};@=iL\Zi<|>&(=A4_Gg(,ޠ$#3 p2ʬtI- +KYÕ30۟P9yn`h4.rFR3*tX'.#i32L詹20֜zD}5z07tyޟmS 0R-^hYBOP |*a]ڃMa\I +@fuBs[p:h$QM-I6^BtmA,eqQ9=vRNퟟsʗ q#5-C rNF_iQFcд/ƍO0p JCP"z.zV9,'g55WOƳ@;{r@YOڌs+~bv ;N;pF~X(ǯ')Tѧp-MH!ĤPbp}vC6&ϔm >R:{ +]w;Ax:H~,?77X_0K8a3Py:\#:QGXf_Y'x,gwveۅ{jr:z<^͹AԶ;4$Rw#<_R5:[+tboVezx#؃\a"E-P~с2C#0!O Huƾ1\g|P"\Ss8P{1 `BjN:'{ "a ܞ uVt=8֔g=ACВ&zsK׮0d3[&Uɷ#5pw׀7G >A]xN|F:P *>頍9gJ0KTd 8`u0M;)̾?g)nZ~nƁŀ%mޓ0(\5\m?}sd4 |F;H7< ʈ:IIE&@\gͦyp޻p # B$%*K5@k^FGP)HՑK8n6"#rv vd-j , @> @vR}qx=^/{׹>ä',=;Kd~Ѻ1}kDwsy^tn.% UrRHO DLfMeEr&RzJ}cm->fQ9!M|M?JטlNu3Dޟٍᱡt@ړvh[ f}O 6G;,д@~tԜ}tD#GƂ "ϜKv!&i! LHhw`:vEsQvEIJy.-9fM*x&a[xK8 Q.pŌCWÜ K@-z6`I>۲ix#٘ăy#Y\CFdǥ[RV q5:~M&&i;$@YAK@&K_#Af9|dFɑzbա+.?H)WV,>|Hj;|a=n '*/>Ӵ /^ 79oa{j:)?Kw7l ~zeçv@6vpg"=or۷s}t03K.;/':YI9ۍj.T!w.ֳC5 y+@u3&BiaiֻyY?Oߪ]|]ro s`X:7E. v s:7#Y}9rTd2H/!*#t;Y-0<J| JA/Kh6pc 䤁tg&'6J8Xʢ3}?(#KØ_g21G=7q=+iHxxw%]Y8ٿ/(:1Xf47V׷pl*G=%$ϙ7rbXjȪuwg^ ρNg$As˨rj?&ٴn`n,3 +UlEHD2:KYln>gAp%@E9@o/I#=z$q6r~mJ;EgOrhۓ&W2篗I\ǃ pD0gqy0f=/O HK`Yz7no= ޡi-PJpi^qc ۡ'Kk?|Z^i=-;'nֳo(@O }%]?ӿQOpf3ae{݉e-ƍGSAG1YtLrbB5hGxzv7/>0z{t(aTʤҹz:c6&{?.p/z#`e^%kb->vJ׼aS"|3jnxCxn=%=+ =^@*CS7ᐟd~ vuM7 +M +sR;ާT,nI-H$8%~aG^*Վ`#ca8=['~Xk[O2|22/I:2!K.{RO 2KFI`hC7W +͢zN=9eKFNЮUYB-+F^aK}Ҝ [K Z*XG~ϨEYyt1j 4sj> g>z~@ ӗ8 ) U-h Nٸ(AtYK7W2<ߧ.7OcZNŝ+'.8RG }Ssзi{: U< h2Ko;zO=.?#S>nGg]CoO'cxÅA9J}3<|՝i$ċGtmq#2tu3ӝFp<xGfp$]';oqR?u zP2ͳ\>hJt8 +<Qr:I#Y%㉿0]=Z'>DT=q !١#=J.zGɠUk-}.t>FOk]CϿ#%^P#+ <$O>>񭴷з*d-_DOD+<:; U>Р|cdrG n{Iβ_z=UHNu_ԄS|IX {>*߼5.nSpaG> vEOf#?)gm7ܤ]$$ԥ԰g=D &' -M^(cpX#d{tPgo|aK7hϳ؟3MI>: Z #ӁNO6%@>f'P}2h^?X@36?h{!~; GI2hNpǓs'C_~ Aۮ=%j jσj7I߹ chO|iUHOn +cl >TےPo,"zߨ-o1;ס><`PCE:$c߇h_B%u +=t=3 ~yB#:"cӻT>O@;NzJZ:d܍7<6Ch!sP'< βdh2orwFj4 J5}P8ٷdB2l>uېaxD5tݍ~y塃֫Zm>m٦\7Xc:S }Ÿ(r6g|r#9u}9,>oHCnơ$NC%ٵNYlqeM Z;ຬJ7-=6\?/8aSəQ J,H@Н;kvA-y.2+ucƎ+?">. 9yx≻N [,=sDQ*ɦ 8^:Ze!c4+}]?ExqHU#=Z͋y ƥ&s+3Vd ';Jo]:Iv{УAb,51=NS 9?Ao|8֞(z+q&|N8|/.J-.Car`MgeOW~3̊{qVD)33'#;q]?N4cUSV.)3±Vi sйZ'2r,:ud@|;hqzd<*b)cõa\c2R5kns:lQbDq gěH.?i>. 9sSѴOE=0ny{cP/NZ(INTn5eZ6}噉Te%BD&x+3#ʠ)zOFAA iq~5s}zt;ѩC==Ld@#wu09r?B𖚳,;)㑿Z, +[0zݯ7̵6N?+]}?<|0Pk&@ 榰TX,_}Vs/<rJG=x$akx"CݕO9ʽ7tCbo^xQl5XYhl)l \+݀4LAqqH  ϳ1)=׺-6{)m\hC?cy`j=ud?P=']7+4Fkx0lNP҂ %!l项:7e޾Mx{!CeH[-/XN׭ - 'gn0]MW]s==bUY P{4_L}/4u{ +T<'1\L^^9c"zc:lA^(~6xiOxrey'O8#sr +}&cZy +v'"bpP9:ЍuruA¶?+= +0%J81]RYNя5u7,c|]u$[ğx՝FΊ41@=OlWю<C5{xv}^#k5b]BAYxwn5@M*~IFZ}jmu-/^|!nXX7^Yq>9M6pɊKVSc&ls'#/^nLA課>8wu$U&unQ3wW)Njg ;6Ѧ=K Whᐌo4In@?1̂dSr*>4\gnQj uJƨvyk1ݙάVg9o;bܡ2o=i[ +NMi]|(IF"N[{dxm~D_z|u&WVӢZ%jTgZe(Q%0+J(LΈRg%C>s3;کi+.4%8ܑry8<;*b|3mKvl_<%CYC%sZÓ3ӓQ y^9`GT _y1㴣 8sg}od;;ڿ(6 +>#?\P2 }Wǧu.sI>]ek:s[KEd=$'Ch5י;8y*l-"2ķy7yeuϙ RdwC1zXܡ5ɀNG`za9/Bt9W+? 6h3w~=ܱX13wxT)&j̇+3kHF)9m?Xe9b˜/nW/c.=-˵o({>&gŃq/#G~g]򃒑6×dh1dĉCn8)jO.kiwzP'tEϸmOgJaC2O]>HFvh&SdΦ`j` ch =28p|0ߎ?Bz]3hOe P/]O AC՝ S2L-=@qZ$ 7c8p}F!e?[{xAӤ6|+'/+O97~T1j?X>xӖd\83&d6JIl_y9կJ~=v.W*k~bah퉎c(h6I)I#M =j_)k;:sЧ7[UO_o ?UbjPHƌ owPez衟vWŇlJ-kr M-l Q0%9T:ozx0t/:T$էГ)/gd;1"!Hc +?u*xן+4ʏ7 +Ҽ7ƞ1 ]篼 Y?w }2ПU7eT1e8C +%*n:oC:AOÏbUI=e ֡'vP|^!Oc:cˮ5|y1zzBcuh]sS;SRW_@1 U]ДΎORoaIcE&- t ='Fl$jpE}?{&WLdX?/Ls q|@id–~AV]B>_]z~V 8 ree{ ˧M_=O}H8r $5ך09֒J@v?s+Հ=`&v7*po&㠵.~o`߰˟vݚӻ03tҩ[,qNj9֮aCk+~ NVuhjȻS{S[?Rɚv`ݬ#`E0'L(cWj!HxM2Vr(2rJH06\>}>}Jh:O-T5vH^[(M9*|DzGqnqtU?F=2&rY3.hQ-wOEIPU쎕 +&VzޝC.l| +H:Yi۵[7諪b#`Gߘ*pT S{Ӝ_*!(R +$'MZtsH`F57keIUgv55pJu +  +@gsɄ@, PQÐ.' PVhL}O'0H03s]=>MRG>$ +GϗՀ[V볅/HT~CCL)LcJoq&+Ɍ ?^,[91MnNqwNj%Χ G9&W< PSt}\]kXMTcm뜊o0>d;]֭9N WIZu~ Aw +x]?BfXʄֺ[* SY I]&w;1$SrB<;~'k:- k`}bCGXv]?a2)(U Bd݉!_p~,yxpd.ųۍo4Q&)PO(Oy'uj(]FQ`1%&>, tqrp6$WPBU mƥ ϡZbYK*yjBEKps]P[b_xi噮08^ϖ(0y_Hkʔj|5}'üInj(9x~Xya>vRH(} $yXx.r@WZ%q=KCT}edG/bK"a>iBhvK1A6$֧s}Z o`.-7[q-^QpbV^ϰ1cYcܧ:l|P/@\_a߰ rI溝;箻f]f%1lZS$ʠiG+qUÎ>+Ze[X5Zw‚M ?ڬ/{qitu7&xX]9e!PhۊTLD-ӵ@E'6s@?iܻ{Z5~=[=4I|˟(D _{׈v-ӌiO *s]vX2Ÿ9ѧ5)8m1{ixG \*nPӧyѧI> e|sC?m6\=\qxbvn&,ʓϏͼLt"@tOw%ԢEMEQ0kd +h\QvQwQ$UlM + @FMZ 0R#

!^Vm)VP2_jS? I^S7- ɹ跻^h^7O@p蚟r͖",Lژ5A,h]K +.[XJr2L1҆!jɘzᙷKƭbҒU(1skIMZu6cRwLK5KK [|x=v@$V/h~kʋ*t e`kQQ[Kk*j5z J爼M/zX?ЍK[KjV:s' UyeZNW7 Bٴ⣏rݒ@;ޒwf"}S(G10 -KHWd(j<ĭP֌Xk!xonSVzϩtfp1)e1h`00 CL0`CY]WP̔cS|}n߆1nDikS?#$'[73yGtP/>2qi+Cб^T6PT[SWߘv݄7-* =9DHhuc ySx!\q2_הGIp'BH E`B8jވ(X_d(f>ܛ5]˟Jƽ*\xsG^⮸Hf-dh; givTѬHXHk;2ךVSk7pKmcM|bMŀ勑Y.#yc#rCɐ^ODƫvF>* $Cu9B"o}M4GDADJ;d/ K D<+_(;Xk8onq]28ѩHцZyCt-N./pDCY|F*I!o*9[?hׯ: L ["7QV_O4> Q}o;pL\S]_2N8!|\ +-~&0McR+/#K!$t}?-=Yd(⚂fC١d}&SƦϒ]F['SѷvMdP yCfP/w3*8ɕh?`uH&Z\.! {SZTc_7hMDtEVtx}ܑ \G)U@ ^&@zfnIea9&.P)u@o\nϓ$4OjG(PRNeIU*5'ԷRU`$CGȝ1jL9+>X{PJFa-vR}]) ߓvyLs$K2TF'1}kYJ%`v^#Nurb}!C?KruH@Ž4]p3Z,-w܏{Iƫ}nG4XNhKo?/O:?.&ZwpC1D.Y@ +/=DέpCO>qW3OE[|%)G],pY7_Gb0cyƂL|ˆn4<}֝n api7M8nU^&sׅF:jF]Fnv"ړ +Џ*^GXt4#pEߵ8DfYmxq!pIJ.~h 5i᎞|L Wb4]TKťD> Leɍ ʼn/8vyCaa+G:LQ:/i62a +8`_{a(t >VcL5EOU$E0s:) S5TZ,VG\~"r~xzįO<aյ|uoB=*}oMX|kot֌;"4ӯi^~?ۯQ]yd@ oǯh"v =`ia;'7 MM="zG(T)ݣCۮ+ ]`$6;lv>r93a d mFTtnu]˂&p?RUWOpSuטaBJVo \n- VLWGx}}j%@H-B$)@pص2h&MjFI9E8x]4K"bU=v҃Gޚ;rOM`UQum'x:ƫcmGےN ?Cf>nH}Ӹ#ieX#ׯBqh˗zK#]L:\:O1c\0Qqfmejh/[^ l8Aow?A^R_@A|nGO(<Y%ͩis2ңFoV.wx M+7[]QЩh_tUbFeȰQ~StN5L/CZ|=`F0`|EKa tƭEkVI駱2[( n2M{A$s)xV x&py>jdzCwl)ӳ뵩0VprE:x8`i`39E"3!L$Gӗl㉕J ̘pL&$ ϫԝze[b%]ni`i šb$olDnh2d "~%]7Ch *CCMG* 4UDuQ_@P2l<u _%xM|nRkm9pzJAܼjv(f"e=FĪ3wpy#Z])m +#E{qKb"V^C`sf_x-3/j`(~q`*D0_`m*B/`$G YC5mc "^O/1nO)5P,:,4wdRmh5gHhɐ.8/[P&t =oLV7Iy}CZxmͥը'8~_6enTsQ,w-.ؙI ]dCqYCedƇSu(iu3֮u[V[9Ccx室0$0JiK8N.x=@}5p=4bplp2?az+&1Y-K2O!+߂C2x]~1-lB˭)@FW TL:%"k$_|Eٔ~mN \bĚ؁ &*mdV{`Zk]ɆFU1=5mzՌ֎\jЫ\dƎCƉʡQZoz*2~2'*6\f8cj-?K嶺whOƈej~LJ^_KrS԰K)_r6mǴ3n u4aVZ 2Nh\k@y Z܏iɘzȐǎU&aؼǒ=rfձCWkG3fj^, <.ۯ@g+=|z:{Ɍ!GD!8ʌ~em1L&й60G$|}:TCg|0Ǝ-v̀"fiU@*L :)@t Z^(4Hlޞؽpsٷ05MChmB[7E bEX_HKG@u+6w\`N]p^I\#&ķ ,6=@DER/` \Ʉ\Q \ U.GdهPHg WL^*"._ڥr TQ8,grL;Nqm1/O/NO|=Kd +^12NKBMDh2x-mC١dS!x}aӣ=m9nz1e,}_S #|:Ta7O壸+_S*ZTT c8p *.8PCNfF<7VFwdt\Y:I57}_d_6&gDYj@b 6H ה~G|Hg6jvu:e`Ub +@[c31yPvlfʟ>PGi,rG@ xM_w^Ё3fVJFah7hjh z?~/y5KȺQfZhB7M_@ꩽwD~uOa^PYf pl x$JR:1拑lv&`h@ZaJhT.?]W՟XܤQL.w"h|F3Đsx-[\#& @" 悝7R2 >WB# 4b#3`}|<C>E{\< qbb6s'dhq)uV> rNzp/\N;r~WU5ajI""\EڸP*s֔ )WWwb =H1ml) !|(Ji!SPg1K蝅26qJvC,`oڈSkw 1WS/:2d_VcD6_t H&v|CES~nl#jFA9` ٺ 0=Q7:-eâK[-d(FlQF +jPZ 5[azt3ehЗmTFzPW,/X] +|PnN0k 4PIFr#xMa2"V_ x-w?Ty`wC[\ѹuS#RkQfy#xSUF߆74 Ymg;a n0 6'& Poje?rF43 +l<VmXk;|Hx$7ff)ߖx_ęp +j>!%+! \݁`U0¿QI릀0.Nڍ;v\Kc +^9h*|Q́,y;V=N#ԫ'C8N7ߖhGI҉,W;e`ҔʡQS|VvG~;\]CP}U-nJ d?ZKk-j +o|\h2"a9[ rzaK= +~h}{;đv<%_LC=~ſ,/ />.tD-}qS&GkJb*.SN87$(ܷr5@a v{"){ oWOSRy]P*닟H5%'!>~ПC.hA.=%; ֎^77$be )F<%*v8 90Zw_T@wr5! +H S;I4eC8e u&UXa5Xfzbd#$N2tQoen3r{2uPF>G9qʑ$,*蕁"ڹU0fU6¸]l-U ?y * )ÿLRgGNyĵ9 &Y/e'ȱ]-8kFʲ C ,1IDF [!|{\ `N%M]f%Z^ㆻ $@8Xi9ZXٯ_[SoXk&q0 QKrRcU(U.HXPw)xBOs< z5]hSXdʳ M8*GL;}t,%Å'[$q{n`Kaۦ1Om+\/Se%FfN_NVEDrE pkLRu>^+"fY|ԅ07Pů3b {1e +[vI](~­ Nఖ֨'pHEM>G&@3pQ@',]%/p| +p1Dtڮ4 +{cE^rޔ*/DVUq8L8ӭ@jG tLvYJ-)8H Z̺" w Uvppc>xڮNc>x"'/1K_\QFב@'y.:Aom5㛗 AJ-/&h&8,[ojF<4hgY EN<[l98-P͌0t dV+r%Ғrnr~K8|1 |h7s4p, |QkmdK[C؟PNcn1XVgIK7B0jj-h7u &_9 h t54(V; ̝^8Fq!s@p:$k ~%PhaLoe(܊6ZnyA-i3FhbBQ לc l=JR":5зw3d.v lJ8™m}gWOaQ'e?[aCbf4ba6;P4 ziZ <NqE~Ԗm M{'S<k XJR gz%Ghcr"}d<,.B2+P-CJ9p#wAnht\ Tq,[Mݜ~~zJkk5oA|!dDuIq0Kc.:qCa:t|<%,/xbnȋ70y⃁M.=,;H]&yl9dpժ#ևѼ%6TŞ'"ίxڲh/UC=TMC)Pm$Ў 4elf+lDѲMqC\(W6a^T6vKb3Vm l`ͱ n`(%$ U̔rL5U>'6nM4yXimT"23er8з o%)b+G\U]=]oH:0NƧje@kGTpϯ}̒zi;otKw(zǧHbv`0QMvTvN&Q4Nko{~c62fN9˪ S&64^3[5ɗ?Ihhz_#y%O gӢU1>=P-NÓǹuSKw1~1k^[q> +!:7yr>nW__OBd)ko:;"c:-S}ϰlUKG7 e|mѿ+ijV&2Eqp ;dU>,5G̾KD?jGQ8V+ ؒ +͏T>zOy1}ܴ>If]9 歙UO}`d3.PLJx:udNs|¿-S-bX0ߪPC\_]O;{eOF,M"Ne'بRI+og9Yg6Up@2K /lUG\x;+66lgBe94w$\6723}Z(-+sÎ:YbЈ@z \YYûЗDP$?0+`390I/!X4k=_zh*O=/ȃS>*3k+>[:Ž}=E'7mLo3b>FZ "u\^f#쁹!Dk\N,QcG}iR9ś6$ +og֫M9 + +HkZ6]`K84ӄ'jF7P2,:a_TNվ@RѹkH7ĝL!d-*ߪXG VYqPK1Uw}, ")bG-_RQcD $lBXؤ_k9_?kmٵ'SՅw-UPV]3mGLf$p)5ރr3jFL: Qd@arqsG[`T`rO+ F @[#9)]э1WLX}g:`fpcQsjY6]Se@$ÿwBE @C L?$=s_BTFRļ@/ /nG0z?]xrցD+Ɉ0k3ʦ,-.0UԦ/^}TfιMgBR4Pg55{M;hipH2+o|cxQv/N H1WҤE +d:z~Ykгs*}=_nXd町7ףWo?d*~e~1]o_A qڬP-qaߥ%or2##P+YZ $ F7{J/kiV )Ce$̈́ef_I[}3*#'4~󅇶sd2'FRbv%F)*~lq\˷Wׇ( r? &;`f+`h4 `ԷEQtom>P-}8 "1pO-vRaQpYFKWnF$}bhC p@1Q +GL"qky|{9`reh,Qq*y 7h`|_]0VhEGRv3ʜu;>!u=@3$/Y'Ng/BjǐI1To@ o\.@9`"N0Cg29a8 gN#tLZOL-;=78SWঁ,IS[w. '1׳ N +)w-fuMC)"n@Ġ@/ RObkȊߠ;ܡ NOR;z̑v(# hNl +3]O\))३M ߑ|>pe1q slxk%Asʂ)V>#l薩k08ǵmtMB @wh?S4p8`Z{VP=FajF]eO7.yݦy`wEOSFLݍ¢)oA$@9hEu/tqpCb]Morqzj1f({hoԃO>5}BjiT*,7m:lhzv S׻K'1kX:[5a<Ou=@W7dV,RpNHy\#/P,MJZ6~d$A:59|j+i˷iy,P'HP~q/Xy`?0v`3g "&A`kD +wB#@ɗP9H +9OB*,'pTj~!-HWB]`h3RpK-owvM cmK4ʮav@,3^17z͂]u}q*q[8AIj[ZQ ]u.XRyALj jr@_(=N ('i*~Ox$WE9SOW`A\WfS"_kmZr#5ːjnaé-0! 8XX9VQq@@b ,wH^ + fZ9YT:?v] +8&c {=^M&O tt/hӏ TA'IG%ɲ-zә}r-<1֎ {`% nnj#bZ@&3V:p`i Cr @֔u(,r̛6$ʊ%k9 d1BOLf0fI[Q&f%Rl1K)-1r s%Jk.=@tG[壂{byb~J1`İCNo|f1CG=d N0O7 N8g+=q ]-D> PS3c I|{ +?˻Dy#nD}sP,si ?[ցZ_Y2p-IDU4f^|s _` {5l&h#.j(:b4ZN_enua fX@E6/scT4 c6k~P$EM*Vq`5T"bMn( bP:GÞ"HM3^\~_I FR-ȥ"A$ AQ 4O` cWؓe6nE:QRO!'NX:-_REMo _F |!4Pԃ1p0&?GvR$`jp|f3_Iri`;]wM HGB_*ig%IE.^:Ŭ#_|e $ M/\pU6$ui <]+p&,SW IQ<tܿX 3}Nq[Y,د{%TMN}gabV'8&+~9^d`4=i$q<hڪW#vLTA^OW@_0A&D"ec*BʊugC( `aj#wFYQf# z'f'/kw;1 +[2W}5 +)Z򋚷De,Pm$r[|q{ rFjQs;,78a}Ł-Q9ɷ+`욊 q:k񊮋 !*\AZ$ݘmfMߠ6\pz A~6s0DOK df F\hN V̬}\U.ŀ,s5>z0𳤪3mNf Lw̴y &ՙa6-V{[R7.` +8`5U{~oh忋ZJGe?Q01{ @˅kHQ^KrptBHx>ij0pM t~ad^f1qdF)L܌Y׬L0)P/p,x8$S X8/8"jN70#v`YG;FF)LvpT8@Rʅmm/!<+ٺ'fƎ|aɋ݃\!5˕]as&no=a~Ik8G@ hA 8kYV1vU^ +‮ /O*- /m##swpw+~٬ z2]"fՅPSȻуJ;bk/juUˍo}Gk(Y7V`׫V[nwM#\0!I߲X0L( +s79!@BBt +%M'V1-D옋7M7i NI昋u>%yBFr0Vτ"˿UWWԸTh! ̈7P=T2Gqk0  c #glG**nJj# n;A֮ tdSM5ni_Jҝ |03WZ #p +8`e#qIu! LY.mݪ)c.'H|L]p 1v79{ GK0T@vm!ն ,`¦1aۋQp%vؕa4udm3_=mX?B8`~w̺nqCGőK 0\WL7XV-z4 )5dj^j%M ]+rPmvu̢8r8E~l8ff +!eLqp p 7 J꧖/<-^nT Q,SUHAABJZ-/{YUuE`GkM8?C81#&PwBĻw:0[l e.V'IH 1fk +8`ڱO. +CZg-iy,cQ/\k0v|zup`] h^ Z% "yXg1+.b-гqw8H/nBDPJ#@h +Iѐ ` &@/YGsJ*Zg Խf, kQ|"=ble/O(x6b$?(G [;,{ʴ)oSd6Eb#mհUek +k9UhV`+a ΑZ_1\)UY8i)JAܒEZ r(:פXi+}^su18g)[n8GŧSAU(m!$f&r` ^ -o^v)ql850 z٧-`'j?O뿱@#u5MrI_4,O^9j:k2akKҿ&t%Sru/O,`e!vb`b ȃMOgpຨ\73*ڀ4nCDw5%tRSFBzfj1% RtNz3_`QV(3'k1Lp ڮ\ 6{EdZ 0|D7}3l5ɹ*BCŠ>sV?(_ &,4/6VSm'(:Qm)@CG_/Ήkf`^y!4 P 'p&@:sR R'?+~i:aL?.bp(Qp;X\p)qZ <nIulcG\Y/ xH"xhG9ʈͮ+w' as)-Ԇ2JZW!E{l*"VN6:g| *D'mnFq#H*GGѫ1CvwV T 8cD>()>TU$$@ ~EQUuoAc +8`QDREB|8&,b^ 9ck +Gd +Q ꀁ+{JT}5)JJ~(A{+8064& ;7 ʈo>z -&ro[ z'qqtt!y% o#Ο3lt3nhr aZjxHXO]{k DC&D_&ǫ6XAǓP1Gl`z_$t3ͬ=HoQY3S^_GF#*nk)[9@FzB@)vjF ;h9'@6@.x}3jQ_ &@'Z|mƆ8rQUF$̝^XY1 |{ +`Ȼ- e%Iq{`PaoڥV^AmЩIMn=E-? `;s%3`0SS5.䊚$N5^4stPVvXL,?]9˶UM:8р : +:h"iRc[q/ +V9 ėvQj&K1=4jp 05'vP\9Ag]\{~[8` ZYH 7m-utS"72!]h:A×0%#@1DkȱO1"`s6Ƌ6K/"(cEZ"&\428Pm֙54Z1 稊ɵp5-S]dV+඀!s9jk> 7N0Z+rFًn [/R9_iG|_@^xCYI:UPjj[M1;L`./(=W$kҠC++*mŁBg lʏ[V]7i c3HT] #6#[t  @aoS F>*[ Rė \67ȑ P󷁨E` /nߜ^s!;kmB*X{u` ([2 g1ؗUm; VǗNF/'k VI"2I}`mTm;}u]J].RT9_hଗ\k/m7'87ߟۗ 6&\T_Jgѳ8|W +WO?pÏH8g8=n$B+ϟxd~5[67=}׿KhDڢe.V3.X}[My2Caݮ-w(=aS &W kGoR4mBkkw6 xH4@ͮݹ Z_:_tp,fͩϜ`PזY`?So۬?>_|{Ҭ5L85џ'ΏV_~G,7ZyDmH/W$wXHץKzߔd=%-1>d%(w]N9n+U{.Mkϔt#xA%\ÒG×S?6;lz+ggTܱ'K~IUzi~~xhq_X[戎H^J^>MO:OdeɎFٜNGgӨ sR2=͌ {%MnV'(%h1,+fVսߓoy ]2(U e!ר!4v[ jNnIө.^duB f(4ep` nѦcFc$۵W +x1EOh28zنSy犀<.39~4{3Ah5PG)qO}mok4bB^xᡇ[scfeH2HQc3TBAfܸ35vdشqϡP럸K'9և>7W>2*F6AenʞPZE˴F5e8 *\5rώVYs@b\'C"?8o2EP`D4N#ܘ+ugNU0]B>bjJJǀZ{z5}G]TKYVC}[..4|~+pǗ3ndhH ?mTf$_{<T4awLZQr6􆮘J Fʩ Wm?R~tW ZԒ!jaDƊW7/ (DPIjKDqS` +zFpq&Ѓ%i \TG^2\P쨐?asjt$ݒk/iO顐ɻ4*bm6l9A)>f8S{ry|/m*ҦO]7J$VKm4tIF~CK.|e+J/Gsߊ 5a@{}DH'>[ j6Z!1<BE]Yk RߵU:_2u؎_(=ƪ% G3'Tyid0iu~+Q/>BU~L'&#zp[Csu3.[K>V#]@qwă˜!Ctoᆧ11Ug\1v0Oz^hYx, }C2x2D|qjBS<-jL;jN_1B_#>o*q:~ t‚)('^iuvCz 6xqMSSJUX#ces^-dss`}'B\*&F3 +Z|Gc8p/HG<>=;>$ӔbBǼp~Oc^3:kȟ1<_6oּp<.9Ǽf44Ct$,\=d@Z0ނ&!n%n7GbqdT =z3^y1A{B0C5a( _=,=5`;PldԊPiz#Tut2~!t\5胷ЏF/oy_"ɯv=zkC-נ?s@ l M|\O {4S i zk1D t}ygGƏy pĺ\?5yjd@y P ;/1׼fjo׼ F`45yقyѓOzvSc^eo6ؓu +蘒z$•c^#I1=5 ڙYC@lP/A)]ǝxRyM=cGVi%sRq}Ԅ M|VpGkEO[^ +=^~k/"$/ByKױ ONk^yqqky[Cy-,Tp}k@ٟd3NF ʹ)kUv^<ɎGT+sdC6UQ~۱J=f-,ij&wd*c^zʐt1XV2ez"]~Tqgu`7 +C?ʇoiַ}^ ~T +=c^c3j5aE}-I1k]Y[ HŒPͷ>}LE2W<5~k;*_d8r"( ǼF QM7ǼrO.xc^{;͸YIY՘>pgk@o:~;$xg6eFbo47ȅ}fzMλ|$6ڎg /9v;?Ɠ𲐱e-M[tO/ XiQF2pJKOy:myw NX#ovy=yCOnGO=e=ˇn)~kć*W_Y(LkW'$8|->VPfǟd(ꭖyоwӫgpԯ+. 嚑#K;iΈrmjLaO"eЕ` μ#*{YMQn>bDy1N.0ᕽDdqR @!.^Z;e5d+)ʅ< ߷mǿkb +ŠG.s#xw)$~&S/['P: ϔcB+Gmݷkׁ狴_O|  WD_ܥ 0v16Z=so7[T^|oc9ϋ' -*jӁ|r ׎RՕgd"O Xp©0eǀwt,[)N ؂ȁ%9  (' Q^TVN936.P@$fZۃǧߋ|=#E掵fzî$_'br0k\2*/C-!&&Llm_>W:LY'&n FӠ@ H;bi*0ՅDLBEf(,<'dʤ&t͗O:aFE24_++> OG ۸˜|]Ot~eن*CÚwŒI1nbrd06bMzp4^i[:U,褨O:XJVr YSdž)B l~DX^;nc-4ZbvjٗEMOJ߰wKQa}Z>Ԩ=2K,c(̠[\ak+>IiO^1@Sd;1k^-*NL\/_{/vټF !VCQoL7@;07fB5vajPͭvQ]#y PUӆRۑ*_cLQ)RQ5/%x(UvpJS4uC)P(xu'SK>ڨ1 U?`9GMx< +mWs>RLkrvm6 \z6ȩ)-PD$5Zh4ؐZivD7:&F=~Ob&RjaKt}鄿rޅ&pAo_rn`0\BgJugKLˀ+wtJL1HX7*R> m8Vht{MK˔Ysb 96M:]S'PZ + +rIBCȹ=vrcN{z:a0bAl3R֧˳օv~8&[*TeOnsuۧ} eu}3뛩)\bp~\^;QlV ǻs xu3FuC済;ws .(]9(XG/2w޼X#bV-{?V)W;? qzqGVjІ))BD ]?(!@wQm'WZ`$ ԨAT1 4ZTM[g?)` +3*bd +S^ +)gI=lA,rW&ɔ6e> uzX8R<) x8G]zg2\A!i|=}Ci@);B/б@\;ꁮRꗛJf'R ޳WJތh< ̟R͝Ur?|kkx]xr0,x (W^[Uf?^st~{>>ޜh]%@- +{+ +W\(z VMBJ8~Ws1xvM3O~k2x!{ 4f@|ߕ귃JA'Tl3!Б {٤6MVK"ft9)`ݥ#6XF. \9SG\QrO#@;@ujxJ^6 7V}ͮ <9 pC}2+yգ \4Zfzh];yȬ(Xklʪm2Y|9$f!ٽF1}c;Oh3iJ҈?WnĿKI0igqqaYߴ?`V\2ݏ9W2i]NMEcL*FRe^b D}X Gy"kro(|uJDk?p*urub2SNqv؂ńvVguU1( <*[`"{?,/Es4d%&^ 6O;ڹ@?Bխ1^XvMZxqNd:u +t3iZxrliwdI\zW@}3|.,'dZQpdzkP=<LָkmvPnA]!%r|vȩ3vm)<52\TQ f*;V ix2Rbxx-]no$.ÌR8|սW6 h0rPvdqsnɷ4b|OF' 4~ylEx$6XА{օb(ιR20V(Pi#Ty0Iۓy<\l4sC"$hk4bZrxpfav$tl"hju(q/D|v?_NON8Bk~*B#( [WFj?xL ګԜ# |탣lQqX} #? ]uեm$faYv` `?&|-oIԛl=-PLŕ]sp,`¦6.&X5#8+_ڣe7~C+ooG6z(`S}t#0Z.㪃`~Re,SMvRy0@|BbND.ش%_ͤ+eF=l #5lD0g6'ͮ}Ek`-Q:ޞkX:#4)2X[eۓ#oF_a;yaM.7k Z'90(MaTɨB:˳f hir -,lGMXp@K5 +[`g`s04Djz(K q}By9*Vh0GQ`+z6D5p['z9!ɵ*'lՆRmgnko)==9hؘLK:&$oX2BZݵ31!.U_ +x󬢃qIpHKf1o@!j?$j :x(PKddϒ"u{R]&=жP$RuM0>M0<(dzSZ- #ڕK<ivPbV4 l@3!K-Ֆ8Hzp\.& Q>&]/"5(>o4`9[\/̠B&q,+ ݭ(u ){T.^+O/ǂyK0E}ҹZQ@Btr,>N0-FDy*VkR + +,%aiy1Roj"ޞL,o+ͮ6.S]uӑ%|nR`7k&6]$oZɱ6)1M`ijK!~;8?9Y` zW"(-[߄0XV4d5zIQG;>/ֲۂ=xN$ bu DX hBGPt0߮A0)L `̳fO1@5^ '$;naU~‚?yUuOlP%͞;~V+6‰Pq.]lyϧjSbڨ@F%JKq7#N#3MN\TO&;c&yF+``.%Lxd<D9Fݰ|[Y+ "ԃC@ēqИwb{,xH:ljU,r1g^?x64?#VBRɚpwk xfХ%B*VX*3 xHHrP:(4D|%}R3Tu1J؁IEN ) + SmCzO~;n!5(Ŏ! Șؚhi00/ j>*sxLk7Pv .qN=j1Lx]vN@Ce$сġ RgZ5M}'=o)!qojmݲ?OlkCVthzd-7__.n}6ˏG6PՓQ=l|Ur¦XRP]H u+ U?_oQK@rd /z:`)̮$ՅS'LvMUJ61XZ7k6o7OZhU_ݯ adSBBFyQJ,8Ig;)fXUO6+0?O0(Ҁ!"UF 1|}geQI@AH[$ 3 wSԱ+Aq}/hwT -˭O@}wSLy=/ ITB~mmrR͚MۍQ9acjq@RTCӝVxHlU}zRPF3rH',cr\"{ 3ʦGB-׶XP6wc_*J |y[ml\k|YiehgTyIgؑ0'ou &=Wk#EX[S> zrNNίƞ`l^j=2 -٘{4Hx)g% }θq +X qc*NoVi޵>)ϖC, +v{XfD=eOa/`H^{(FSs%r3 |b"DvG +fS!CuGYZKK)3F,wBW 9Oّ~ի)?Bp*0ֳOgO"O1jlÀ<]ZCn@3KG9??"t#@,Ą.`2f@;R*kd٪hwz@#,GsXH +u3" :vNB!DSȀlnAN t&jUeX)-ɪyn Awd{4-Jk.G7.4~{`1]ū0yks޶QͽMF;czO Ú8ju2Bz,dډ4bf/k{[y43ғ,k~15:$gb(OO ƜLl6 C"<v5AɅH_%6 /rv+kC"}ow24&(3 +mcD4 +HQYovDeI F!:mY(V܋'1=/Lf䯶Nk^'1.v{wjkxۤrz$,Xw ɓp裛Wrk:꟥vo'w`L$$+VWi\|o`WÅw?w||frjdT %IJ>h"AUN$t>w { INJb#ޟ{ U.LYM bjziu'̾!҆u^F&BO1 1y9Kh)_M};zY,bpѝ+~\/ۢ:l9Ud}jt*񟿬D~V0Tc#xwќLl9ѢuL]"9ocCf؅y I=BIbJ"/6Ouz<>z&L媷ɿ6;8{VLxqjSvo<\ X;? PuI,|&jf~rVB3mkQb*A5>GtByRLevCiDl|OyC2kfmL휟P֊Ë}6"kWLl41WmK\cm쨝 +GSK4'Pq QJ$?b;6Ʌ`Jm"H1oz0uVWdzz!%?em3x+&mɪC%ܾ6gE"6.k8V"q;5CddC>/z%O,TII,$C"F%O۳>!1=R;{X x;F00o °w&ʷ`M\1;fC=,Ӄp)ڦo?nQ%|Hq"١{dOI?=R1cm. ѽ>Ń.>gu +lx%oO,=5փrhƞ# iu|UanB0JȢlB +7z-&/xFJ),lUDz[ܘZ=-0ŵ,.= 60ŕawIUsǼkɤzڪi\{S+oCzr2sHx5 Gaڛ7-10֬ݰ{! S{@O8B$]PE/OV-2,ݳ= sK`sh34 <5hdgvU^QeI.p/e36)`|q\XM.~`.#ZpQ0/4 0l6Zi!&^.9;H=*!w?v\&a v)>8)Bfȹܘ6-A4x.v`xmo.0 Ϧ>wX~L\'mĀ︽'0Y*`6ҠL0 $HAC!Oۦ EYj`V +~3PnW\؀S1lKᷨGh()JE`) }$rܒUE*ޅŽnC*;/n6 xӢ%_>GJ"ܜ 8SR*S>vg%@ @jL")Y\pMyOdJZ TF Ip%a]jh hDɢmvS n*7ZeәāZX:؊% K;ҠJ34E"q`'ϚcOjf%'Sfp ӵAVD3> -MN.o>58@:&,+7ep`ъ[ e'FcωL'DzU3T{6Iq9p Fo*PK~XsP:O8.Yd} T-__kjԍXV]1ڢ H|gbNs|!*I&TG7|n1O@b6@l|4y{"` !gqOڗ`HMep"|stJgEs`G1Yz,f{XLz9(9G+&~uj&` ';j lМ" pg0OaŌO^=90<n|:&*mh-)2  v}b8Xgq릴gqh>l84 eIS3PnG̯58YOY]_1|Я,A@L1_\iyV +(t.)ַd-K V* +iH+qs5TwW?ھY"[ktX oY}ySSg*EԽ Sgt$펓\ǐJFD m#kox# hK^E&4H[ ۜ3Z +a%a,{ XD*sSٵę!`, RFZVk*^ۀxfOx.|Ż8xQ=mbktv#/Fvcv\w@Ƥx5xaeuiM_\mHWaht~QS /"ƶ 14-Dmz lM@lM;_X_04x^FOA XN؃; r!\0Awr#3୘php#N{I N8>Į!g"6TV?9?a&F&ϳKU_e|{y72:n@m[ŲSI&D8aCrf/ї.EEb ;=:0 h$I6NQY%u1;5s\ \|OZғCWMx8Mqm=zfW: h[=ő'8ᮆ_'X~0|pSRl– [">6`/ߤS 芐9"q֎"v 1zor(v)d8JxYvMxa6&`gh8!?o|K1K_ $gipITGF o-m}艶Hߦ?Z珏V [[x]d(ìgphFE|q|`w-\h!3i1m.?-ZN͗Ӧ,p+{>"PuXPń]d<2h?Boߦx lwRbII` Mv8kRqg\U,/č6Cm1&Ϛ Mdm<,!}L V\K5_J[q겁JXKz8=<$ڀj2ƭmEG+.]@h]N_86kya`Z&-WB8ʳ/릁>hV2lvi7FJ\3_gBݘ] %uK-f]{tM[$N3j'<G eӬO/HLWoʡ9Xݿjj%<{b(th=w `ik /zX(TTL@-p/,_2o )~ANLm]6N)lU<`H|aDa"H^X`F y# 4<O.almPIq0 +i1vxz,!uv`튙ͮ]9P{c LY?T.b,-(W:8;F4vpw5ST^ (r-Գ Arc:؝pOYk觀T! !d Xڊg=vla/!SF;кG  OEbNoS*:xN۴`Bmv{&xā /w3Fۍ`*[R7. [LE <6r$~ͅ$6CdϩX F̡+WKN\2gӺ tw6Wrf9*)E7 37$g|pwgFpaO|MVqB(G!̩= bxpsdzT)ˀM 7gQGS;j9Lu:(C@zmG% K,ʼnWXae629*~cS4 +*"q'kbc^p{Xj455%ag?i+~@ʪC S!bݼmAǐ<}^䂷ʦm]PTlhdD! -@OQ#^̖~ir F$t g0(=A[NT9Qldۏnn.8E8o)[Q4HmN od =!~55 7RvXtĎ71 /sV_j-polg|D@M_ZiPrm$$d&RE-㨍 ۡ,e@"KBҿiɳkvEwdpN5N&7؅D1D)㻍kY>`/gZ,zZDj͹7[cq|y+a*f~m3LEf|0 ؿiP`AD4@:úYg^O8U|.e09"=(M7 vuCICGXLV) 8W q32:Z::%a= x-`ŘFxKCxM:o _@p&Sba-vv~ԝpmP% /dbG[`]*0:?(kMK5{"9RÎ_5=S #*cX>G -y‰"kT!a9LQ#'qS{*n& o/ee"5D/Q}xi#̂R.Wq]G֡*[`%6_K0z [hodPw CnEgE +"j>+Hn;&ă*&&L|JgCO0!IA_-i. ~ԋE#B~!O`TJ +धN;uZowsGE_t׭*\y8 "J}oU"r)a:@=<9JLP|rgCcOބlEB;}wsԶe;*mNs/)DĊ ,3X9jS@G.CKYC{j4З1Dî$iҁOވoO$qgQgO37> TMy񎖆?vSXp#b_U+l_i〕G\0b:v+qKb{!g؂i/ΒDE}h.D ]>I +vo03pRO^^.A`6؊Ҟn1[l G@^q94l#n,nC"QZh PP +ӥ;p*/\| \yG f- ΰ R +l߮|v-n4@:f2a/޶HRem;/4=撄~7؞3$ysPqfnib(ȭREã3shMthIKZ1!1xh)6b +N:`$ӱƄ%U8Su|#MmI7.[_KUa6q_ /XY,  ^ {He@&E|ʵgx4E m#׶Yz)T@5,.gkM`pv!84֙c 5 N$\h'X6EWJurŗ]SSc7tG_2Ϯa¬ 1`g :y"ڿc7H2?`2سR.l~j:P®r3 JyyQvVNEꗘ^qOS+ń{F lzX:)mR&ܾ'M=}uRR(z@zx҉E '#b`s- |.m\`"p(Up@G (\S$esbFxsXh1hܴ+WTC9:T DNh -PXs  x@͊?ojAۘ{e.H`-G#ǟ%$YԖ8aD6YE5 ^ِN8h~mH61BZMpfaQƮ?8#m[{eps96ZJ9v :,iTKN4u*ʙIZ 4Z꺤Gz}~O<@IQ +* +e1E%W:T[/^wxYGn95!qh cW4H䑛T6zcY`eL0D"2^Ϋv92FUhQ;< UJ1$NA 2Q>hZc beL9Luqi~RQd]\ɾ^q2<,7% wl`P[J#E|4'O~߂]!ml9(=P`<{a]琫Y,,jg-ЀqPal7<4vQ6V٘v +^X`ކס΂d1W-5D8`j`~7[W]uۿ]lvIڀ*`D ,6y7neٱsx_Ն",'XcjO+1Wnā^HW 9J@Ru@1ƻ~O 28{lD1,g_Bf JQ +H<˶#HłF+F?@b,"`{OY]"Dl>CϓCY(y.m`($/!j NfNmʮF<&LMQ:>_ɓS[E[lva=s ,l|; x06xy xH]qiM3kpxFdvVKk^[`uSp+&XL̀ݷVupE7XyF[ +Q _&f]x]P~P1_{χ1Jy/.`Qknx|Qӭ V{r-(,;A[ "=d[ ;j-36@-rΏؕT8|Qh A/ RlE'7cR,][/\lՑ'.P+V<3 f7 _H4)-- LdAVs _@g> gp6cZ|k2|k0Ѡ -l`o`;{S'TY 9~.z lvQ 'Ux{pPq[8 rB@ʁ=2:ۭ[KZ10s%íot,w:Ƒ|+&Hx{XeXp"W 8Su@[Yvոu'D8䬁a6q_ /h9baXA&餲S`N#Cb4Lg>{6Kʂ]|/1βF=yH|`Y;s`6Ur;]#w8;ݕGƿ/a;zKm +~x6,H-戻 eE4.3Hw6 ;%WM{gz-?2]ѵ|2\odP6%>@ ~[0jJ`װY"CĆvA[p#E}୲JfӺ={m*642!A2 -#P0䘌>]O㬠r%Ze}-y'zܜBg4,ld +O_R&Sdeu҈^j8N ٣' Zgw#7衩}!@Jt6f}-Xx6p ^-Y5`Ђmrh"EUbHDw\euiD~3P觀ٴ` n8Չm{d hkb XPTkAk8vTz9@:p;p3 &;H$#!7)M[2nǁlvn9n,pK, G ldud ^?xHEhZp6m䱢@gK9w-p|HHz/*TxYZ"Dn}[s637X?BhIz'K`uN~8+"RbWK5]>e%C~\ϭmìݥ ↀF-p h8 ^ht% !a)'׳"K"j靗0PZi9ܨ@ ֐vpI𐸤8 4[KEVx8]2 &@=OF##"6@^XѪhٳ`vMV"'1gDa仙'x^0uD+VN`TYtauTC@B|8LTa[ +h0?"bE; tz8@Z2ATSB ޓ-`ipXBktxKs4<&_˵xv2 <.F^9|\pGpk)5dI#cMָd6IZ'$ 8n|1&O^X%uK-f]{tM[$N3j'{|O/,܋fa˞jKC}j͞x eWyZpCs*Wa).P(cx0$KqAGW0gr ` 4rfz֧<94͝m)R'Z"vSj]ۓ:' d' `8,sO 9ndP`Dry*9nj""ùD1Η)kAŇ *UG%v,` Ά7ǖ B uݤmHΗn*,x ?—0>u4]bz\ ]2tv֝|\5喓΢]%LJb3d4c&|])j-pFwR N 1|<!9EZ0&I#c^&`+R] ~V|O6,?"]H?`+ UKe s/|%Z փ"98ΰyP5*w4@:,v6?F.XlCzb fA#CУ1% 'zfÙj\N00)=Z<8ӡP`'oyRpĘvG<>^.(G`Dl%&Nv)wC2ajE%n6DzuJdIl&@^0p!`66YR"L7Aj 2&| Ԛ8C.PLx1>R2X,n](x3?XlVy,UUtQnv')%</II!O45`r6xܳ=8#fLY&ȇ [iP gKp L/qW+*,&!:ԈX6jؽld^SZBeỌ2"$N)&W+Uf>cMhқ)EE7sslFkoE>X~\/8iђiP)2N%<-q#j<K@g1Yj8`A.-uTv p˪meHC4`d] bl | 4hᨀT8דT̲+5i8;N y[\iNf +-ţ=fGk]o_c4[u{L%a1ޗ!ijp⛵ƲDD:04ғW-3NƼmzNԘOJ +$qVvr+kCŢua[FX; +sMoºm4#++)񀺼MÛ | +{D'oH3[bw1Nل<)6 5C0;>)ż Z[klTD"8Q/b`HzC;- ?ƤFL=1o,.f&Z~;PE' 2<%IDaBաNlwٙo }$7h*Rmޱz{lKxm &s#.੔TRK$*'-6hZ:*/&Ud{_3N^>Cִ'gu"mԓ@wV>=N+`nWI`xȔ)3ĦՑiaGF!wzX/>=xᐵB%>R׋mEBˑԫ1F$cP}V{ Oثp^%ST'` +~d_6ݿ%s0Gf䷎9*?739{d`a9EE[؇%bcU<%i-I$iaj=b}K} -0U`CLd{6[Y%R +3ybpv.:ļC<^(e1gGؘZol`iiz{b,ąOc7X]oswL'g^)m]龡0`}7Y;U*o*#kmZz9O=, {pG=!a߬tq~F冚lxfk~P]>hc}~ºCa?;:^.08q)fC|'-xp姾`)9"l(M*jLj@8=G2X*<yfSAI7#;hD9hbޖFa.;$-1~ז wL-ZɶƘgTlb߶o;Y#- 9,L;<}rY~/# FK2GltUb$.y[}rh;N>TTIeVuSO^VQ&mZlj)1,'^7kPiah6m-& Z=ҳRV'aN󤵝f۸ )Z)W:@HG)kOɔ9'3Y &B_L=45%%5`JAnzG/ᚾ9t"w 3s~GtIN ;j=ʠMMѯ3QKDh~`7&)> UuNRąNEBbES!ܩ آO}h)DxFgo=1o^W0kǚDZl`|Ěk;6sB=Z{眖Oaד^\vO,D\_+G7/Uf˿SDWe[ +ͻ"&̵J+=/i T/o{RK`Kp ]^{D#!IԟP'0J1&:e}SXPoOvIv6'mߞ+޻cAbXSBS8o8V-w٣ };Τa܍Ybaڷ䃱 KѶ.>_d‽e0dT!@X>bT~=sce0?RScIFiұq_`eZ8< +Cʼn_dkL>)&Q0QٲPO(sX + Jߐl;߄QDAj| 7Mpu)-B+^F +3Y,NZ&;Ibo뛨yh *G6аuhX ](ESSUXۄCtȎ|3zIVaKйX{ S\{ j:Ԕ8doiy{q { ԩK`#=)o]x!]!r6ghHFȂ[BR~"[ETHHd?F(UdGwl7wOg9m{[v`+rBEuU͞in^u mlVrŝ;ߞ=xEM5 fGcFjٓ\*ɓ܀~e9s]s{Q#M,VαO#WB3rmǓ؍MRv?dz956vC|CmYL*vwҽ3o"W@cR1L*RR1l%D@:)hMGud+["_(` A@Af KܿDZKMw.EA/M2-fGX^X` p[㖬c]E=/ @zvF_:2NpSGଊg.J޽U=6PsOrR=*ÌqjbVutya0=ͷ5q\5w Xy^TP`G"cW]qUst lQs}g\`#pVE]`܇s}{7Gw#W7|}!jj.$G .?w]^X`'rp@{ݤIE]5x:ZC[s2aT"3Pa -^X1`K| l +[ۮ=,08nh GwE%c ٳ>%I"X0M862Bw~) p<;mw]I/U(W;gns@{V-WZY0U`KyB] +v~8vEK}2b|uTK5ǘ{ ')U.Ջmgz]NO80bXL0m|_Fxzaǀ-xvippk >bv59n8Ϩ \C-y\$y:3a[y:Y)*cA71`POt>c#'9OUap+&laX7|UѪ{) \ 9#HMg R#/ʩtF²p0+l!< %4 8C@3bVL E 2"MD /@!6Fm`xʳ(Fsn k;}x %Ś`O$Y Q]h +| VKKZ m%w`S!pH 40;-Ŭ3Lms-֦̃oO{Mu+]AǑSǿ\%X9|p,Ep y%Y'jaWx£ +)5~ϰ`lg̏0ɛ'yY9'\f ضyB5ʠRɋ]` )-?+'FWd,<}v'%-=r® %~(_e~? o!/Z_E6H7%<Г~ +*,XNW @l@1Ӄı" <wl=`֑1[R_*@uXѷRo$[x.e0ZfYWz4k!90)dc |Sf1qQF;аsPx; 2`mI>,wmTֳ..0df K[/8[ ܽ`{%ؔʷ<;j d{6[[3fz'$+Q[g|O/,-D.XH-ɂybMO$M0,Ff.0|_x%3<5 <5hny5+=4wtCK' 0NS0qW|~x8dJ +< d1=L׹ ]V9Qk!(r8`B{EK5@3 'n LV^ƒŲ x|Vf+Ƕ{VݼP +z ΄6pJUC +iEh|h+ x'5j˶yvebA]no[Ro)-e]"q>=Jv7c}wnֱO*o* F[Yx$+Ntkmi/Vsg_q| ,Ru ~Ah!)-K,TmSYӞLހ ,%#u00Fu׫6P#6ow8`|j_”,trv 7^d>-_ҥU/Vc5ؓQi1QfGɞoT&&H}ÙL1vU3ldp@6[=1q zzحdygɠh,]e\_@.r_>dvr#DXJG,()@K;x,x64 ;+N^hؒ +|\kr7A _fO \_E< +*-}yD ų&s(F16IվtZCW|FK5Ls_5m6|mn儥'^ߊn{EWkCS]z9+ٗYJHoȥ2%bMMw8D؊EDw$Fnt_Rɣq&78?p--_gdzЌEKW4$F'h T,T8(炚JE֢jne]{lYD"il!&L>\p+_U:w:l@qQLO20Ab4!$#` |;՘}~ EI `VCQMa7Y,$i!_Dp[΄tZȿc揸)d(]I:!pʝ=o)ԖCl9ve*9J"kɗht泃Y`@vM8_jA+@a`'469 4;_^ɡ#sE)E|)JR0r-fwp*[*S[M03}^јqHL&L,{$\̖ ҿ`BiH=+Njl*Q-w@9l6v6CaJ4&c63i9IXD[qd7,XFni;rzq8gf.6>Eg6@|kg'@m^X`LI_-'L4H:&mdW@o +E#qnڒܼpbS[[pL E4e=p g|O/,p$ }7ɿ Ik}cLat\9|nR{n׀_5J! ?$P\ 4^$%&{Jw~%n㫘b*#F/NBZ?lD"h j{W)V]^@JP!MI*$)P:FjY^~ 3M D਩1DŽl'?hY<;S?5Obz:"ڿ@Nb|W4~#W83WWoU\`ѢF x) =nft>`s͑~'x/j;?r#9@9T N^x sTu|H{BQ&>`2ag;#Y,!i@Gx 4බ>>L#b;>m5HEJGxrhx-R +D`v`(veR1Z5(z. gt%YX%PzZ%Њm5slvbKkVx v_rx .v:x33vX=,_R!o>PngJEp(LXJi60z廾_ޡ oPlwp(pT">RēC@uRt8BS +s V+2\ BI3Y S5W#@m5 F%ZoY&E +s|p(j,[x";^SbhqfyXS8C{|aekxx !2(%v Q#zO! S\|nc#+lSM3Ѐe(eU'ص< vv\_/g&cܴԻ$+;+21fpƻåF(ό +eVGq\*mbɎ`'aG\z pՀy2BXS6wOt.R! 8{WN~e$B-ln1t.YJ[OV)_/ }3zZ t'#`9e%UOCx RJ bqN0WtZ_/cÍ/ʶ- Zx0/8Wh (:W!ǷZ%Æ9'KԶ G|DyR\pIzM2V%$s/K)Be+_SJ*itdsW@G/j&Ο+dBx0eZiL+uKK6 !f釮C#srEl.Y>u呄09O vNA'Y6aH}e;t-<h +JJW܂'sbF% h;ʖ@:J}h#vY?)'""10vF&fP%I }UP<"X#Ev!\w_&^p23?mQ 9`Hy< nxiψ1} 焠ej:z+^OL/>7 6m4$s3Iˏ~FJwa +>:tUpB{=?AK1C|>  N"5,7bO#M9ʳY6(᷂BH>juP!Ӽ%#P$G-`"ںI8uģ#u|cp @{ fOr6rSYb\wgp^jsT5y|elܽp?Qm U3\&,P g#nAq3P 2LA Vqh tI?r<lbH@Fa E~Blb\V:`t^ep@TK0qY%#ʄC[i~ t9s8J 7&5oyA uP`|@ǘDC@WډG$Źr09pާyuCV P8I䴀k+c2,jݽZjX`(npoB kD';VY\Zұ=jjJ*]A-`?a>a-1fhg3W:G5,{:qIHkx,`4]{O{3jl>7-H÷\BmLaȿTW-3?V ?(Æk=5&=59\{5mB!C"":>:Ǟw`+hl,xDDhtEqz4 gp#%z2]`NK*b?7<Dj 2ͯ0ho ہ;ӗځ=54R?]Q;"b)EE[ +$C8LtRC,H5( 'p7XLYR@j6Cp7Ѱ=uD +-){ߧ-pN&j?7r]0|UOyO ڙ=%W7 ҙ?KĂxÎXӓio"L9 gsEm0EoS`k ~ri 6FnKɼ ]|)w1 HβPCOx +,ryұ?eƓ x + FR]/@54Wd`;ON,NZ̵nƿT'"ui6zUZq":kWk0 ïfؠӜo.,hyKڦYp|Zg2$p~Kh+0<=.'n=8`~|ENUYn"jpvP߯O +X(m-3TFgXtEDT)L=5+:DJtà%р; > XF*_.G@k \T1vȤKw5. +eE XRc~v!xaWq/=lE Hԕiz0l1S- CNF"5 ӆ8'||[̪ΰ$H-ms8@5j1 FlNb%t,e" nB<6ۢ`0OpF&s @NСi >2$z( ZqR:pBSI<ԵJ-oum16H[mAՀS*g5-HC[ibgnKםpFk Ӆ[;H ^`Ţ/UϠ-ɍQsi;p8W!@1L-_ @#C gMi]Cv=pdτ穀)̹M #%)ZG6tN[۾Vy |Y(&|t//' N_+5cO:HDH5"9[aiY $,D$EYew#J&Dx"aLFG/j&h:Au'1A~VkH@0R̗qE8a" f.A.aL440Da8 א#*'&*ga[ +'LImUU%|poL'^D8CLrflDS0(οf9ƌd5j"+UD&,fɾV o*n-F퉌4rG@>W#8//Gb(i l&O)C m /nOXe㏵m[`,4 pgYxb޶n`;G- +a[ (<.~~B$_`\)օɘz+~0KgƤ fmb7nGJ(MȔ lUiB`q c! K6`Ǥ[_ɹ ]NV`h[$tnc&>p` Ũk +3luSJ|v䢃d"~r$.T8ighV@,fjQgHf9QB^vFm$ +JWiˌh$45 +!j̈.2L{lXa#za2CD_"ۂ:YF9ÚBr tά%[_!F6&~I+SS y;#i i + X)c*pfG`sz]!oflbpXa! f D.KX+8bV*S8tcԳC_&3&{i TӶ3Kӻ'.}.͞ +CsĜ0Ff./2`~TX.R/])?Û,,/U',`i)L}9Bwӿ0I>v +x _v♵LD naQ0W%z#UF4az^]6Ǿ)D: R~UG, B71$ f#'1Nyvm qSTmٶ#5 ګbpO[Z}sJ5!Hf c$%Z` D5T逇1'1(#Lp!K9'by֟ze +C}KYv)gذ:caC_, +l`|b~~Mb5*F }Eۆ5Ԥ*;Jm%јpkOęEEQ 3 PsI{`}2p НIŤ0YI| TpnGe莒ƒ:kFP]``/:72W>8`hW + 'b X3g +bLF !}#`lpkvͫ&`a3fJ. Io 6-B|U%pnޣFȶH%ͤ|,`c@:@u&WajS~<ܡ<Twҷk=D}㝀Ye~kVEnVH2fg@bABL 12SM@'"Lr"#L&%Gt.{d/KAT-kn4Bp^ȥj+ !Hcm51?`A`fxC2Z+ufb䦸H]:%0afܦ|bm MUpF6S}"nt=1#WӆDt43p \OlA3yqdQ5[,FNtYI[`x@r-P#iݷʞwS<גyJ+dh\B]u? +]\I&xJt?`C`*C?kyʰ-p^Fuk3t[_I!@,4mCW7QG/ّƥ/qaLsHw|q5"9r˥D/"'M8$p@ԫp@ݩ`"5 '43H/w)Z-C8AJ&kR)+ŁZI]\%p|sMtO8apEޒh0oR!e_J "8Ԛ&'J +;T$IU+Ft +.qze\ɓ$s6ܥD :%bpò2T_q +VtS"l_eB5I_ĥdTybU`q Em+4R#<WO1# NlX K`0=Lh8Dz _U!Ѹo^"H@S 0 1J=.11Y@S[Z1.o@#d`W4NTdr+L sz Hx=u68&p2\9ZYxذ$2Ά% W8UX[`~48~@DZV y@-.RVgH&4l=6CȂ z)kHTu+S _NIW`rkiqP_:~,-V^_o[Jе:$ھYhP x +]V%DS +R.kY +QuG>io$BąDմ[\&'Դ+B#> !FNz݀C+T19=6cPKósZL}>\;4,`#| HDa9gds\ZwZu)z +ݩs|Mm=Jګx%K|Cc "pc|#OqK3XOLe/(N~-<)^Uq2|o*L5bWP+GD%:= <"%Wþ\3S#\}ǃy(雑OQ YP#QԠћHK'O^`a + +?jD 2BQҟ/GMwԭMZ6ʑKbZb9bﻒJ>SB>u.`ig-NVι d_ +d)c?HA5 8d21`:4E +xul5HGc#jQ-*h89[yJ\ch!6grTDf^~߄?cna>|%@*~<8Kn>$, =Qh IX;6ZT %*O ùﰎ E2uRWyLsa7o͑%O?!#g;{ W` +F%:*ȣKR{T_4m?=9򕔍'nފ"o~abb(7=F2a=C/IVVʉ%`;=pI@qM!Ґv6KdҐO/MN޸:ߘu6Jb(m 7W9qyTAyak87/tE}'h{0Rt\Ox͎ -֩Lb8 c(F#7bOtașO]_OMyVn6(`3\uLBqr&.DΙ<,v6A2R /+g;<@W΄5E if%#xsrf4rf4w+p|cvxT_()Kecɮɟ-i +l • ZC[v@u`Mq[{Ö73`-AröBS{%M'Oo]:XW [^|2Nv}'G.$5] նsU  V;mQy$٣9)Wzo8o.g_laY^]J0E}kF{a{{>m4a2~CqKR== ;Zk t֚(@ג+6MNN=Uma_M;INϯzΦɒVoX6XgS|k?rq![,;c +<ةJ`V>ӒgLW=^AQd^S% ,ww/00^_ٜ\ѴFGfU1ž4T/ayzc4p?z_i6>W2]ztzriSFƺvYk%ا,z5ϡw|h.P\zv]Vu0E7M\pB"$OVv((|e1vS0|s`G9S'jw;>W2.*]I.~_3.JN asc}6,Q K01\aZ +;yz]&^ D߿TrI:OnH^ yu|y<[nףpkuL"k} U_-\s_h3"DsUñw4/'*lPv^ /-G6EpLtwidT-.n#UZyM]"yc'TC@F}UFYᧀKѥEj3 oDKl$u{%ء JY4%,pVm lKgUk:wVYrc1e^&*t2w4xd,O}ws^]Bdޢ/-”L'PdJ5=мqGdV2rx +CFc8pCy׭ B,-ǽMW[Mkq%` {lݰX=AIUfJ ́Xo-/zXlUϡ/< l͊\)&k6bض kCπ%wňʦt0`Zl]>ǧ},3AGp,=p$tȊTciDX`܇NusFRQ˲˱vHz,Q.$\_E0+tj`T4@Ea &/kkR4)^BцKI ﵔxêx-+CtRmy$>B[=fa^+z,3T#{)2ZMZJ8rVx1&NF\JZ0Mr!y4;|lPqhV"뱲+%"A+r!`U1ҏWp(Qu'״/TvXm+٦sKdKQ2xOIfy4\ы0TXeLRΦsC1G E~Bnx"Ja8`X<q97 F&@!Y{g6ß3hCgm |}c܌>"lo]{s3ܾ},<[y/`e~h poP=l9n?7l/ki6l+Tlm+lpDOx= D…rx pUWBC Jag a@C՝h&ڲHe4$6φ頺Q'Pde,n7Tk\9vl}qQGvs+V.a%_p@SXTo-HoNz[.\wld[δ[fY့ŀ-9ps >: 'n}Vqp7 +?Cii3;8`y E&, VW 6L2z5f@6tJ̹(Qh8J(q)Ue'g:ec,, DÕX4s}j*b=TFTzppq3` e|. 5pPMyj$B0I<8p8.=T ] v؍na^ΆINݫ5"6 1`a \@2|+-% +1$p(Ab% xY2`,`&*xw"o5ܲgmfeU^VbP?.֢k 7J_֓ ,qw2$M_ICc_tߌ1[~#&Їě]_V A |yI̙L"]HPTUk\ǟLRSg64UgX.yt nnmC.nN!>/C,pm 7Ԃ_j*E|L$W2# lG?pTQ`{Ef cR[N  U֘Rdǫ![gbѯv<ҁ (TIE +Yp7f6X'WK)Ou|ad!109݀Ȇ.L&]7­rl/<N0Ϥ*Sv9 +fvE 5⢳/fV`R]XlAxlÁr-_QSl +R̈́fO6NxY,ऺl98 ps ^>:kxxxy-ZH +LknD=J 8ӏ"\DiRN8 X{_I`Dqu{~⨝R\o NNv1y Wx .،MQ1^=΁= +I3fF sXɔhLXOpM~T9*s35[!͌ 1l/Lgx1-/G-0GX-m0]D{v"⪲𰦘ıq8+Z*4ryK?vES + #&&F + .˅5RC`QeΔ8Of[.mNgkD if}8Z-8u+W1_6+  Aa`C-}9`i'$@ͼ1ԕ8tB,Ӗ\}q! CRih,fn/R~TN0φ+(6UF2PV!7k% [K>܇of}8[8p"pQ))Dw\$OjEs0n}ɳpfM}J`q ^>.Z:ĥ/ڥYe VOBْ_7I=K /8yl('4d +o"~xWfdž΁Cj pw`^;;}~$M-=<{.9;6l,gOnƈ8No6CYq04ЍhHkmA䪈͎v?'C+@;4#h[ *ho2#鋞Isv:Y\sezQj 'jC`މ&wH1$%!) C$FJdTLr"4 +par1tPV{v ?'& ECj z *;-=5~ *Qj6]}1 (6.2 +CC{ΆϜ?/".y/|ם)s7<8aSmX寧O?Wy3܁O UN0' 'ѶOւ7ػƐ5xqɍC@Rau%g+-:K7zvez}E?@srpY 0X۩hAi p 䈛SčklcVQ]`$])޽GxI0@gq&*El /;-L @j6c%5D\`OW42a% UIE|~q:ncB›HE䄳i\w<-K؋H=C@ 9ʺIȭ4( nih!.Qv:Vm'TC˼l녾z/^lgF%&w:]v|Uڀ$ďsaLPPEٌ\|FEh9d+`k qI8„R}oة [1vU(}t¡JHn9)zP}Uul18pytw9WjKLl~4KAt D۶yW +8Lr_X'_;#FNlXB 0=PݱODKƈq̌Ok#=d}69!`S+fiU&S0l{4|mƱ5%;|>w0x.IU#_@P-JX 1TOPETff7 +8 c|td<%Ψ,I U{.(/:G_rX_G5#P Nhg`%ˌY&J`ȳQ9 ]Z>:/&Δ<0o DV^=݂mI1tȾZ'ݿt +i^;ۚՒvuJΣU/@$.j+M|Oi/14 (DΚCi/M/xִK")402s`g҅4Z*iAvM;@.shG*`Eq]Foˌ)Pit`T\aY(QTk+YӀ_[3i8gMc68 E宑7O00r +*[_MϚ|,n ~d;[5 lMkuH}ap'0t3!rUv}vj|]-jxw~@ioRXU#EWJW(~*A^fSC2$o$o҇ut>0 *ckzC@$M/Tz̵foI1)`S?9F~^IXhyg:`gu0t@'Hp'ےi`[a!ʅn:ZĬ~JZIo!$;KBb%y Ƀ`4ˀYO DP6[T'\'-}Ż4: ],p}[م!huqɂYXr'V/0~>`8T 'dA- /N/NN8?nTm@\ގ">  +(Gf(s#?*$i>p7Y +oJsw#F̪fKבQ0z[f& RPe&66m.e_T8`'ӑ2ĔKD$N}>QV oN8.WT)~v怑P -S!ӻC󀿆j!4> + vlڽ/U*:u.ZVT88JxyX˘,Tȵ8 fYM߱]:ۅeWG +p 5%(s=@tUCXaÁn!W[WWсزt˾K†mm~/Yr޵t<S9:JcVf͘-p]w`hQ84nxD-c5U=O:li?I_؀-k\ObZ7zܡ7>A[}L]6m @2)X1XH34 J8%N+e1#íwTVF1fg9 +T֡}p7ܣc"`Ż.1[_е,pGP%;  sil9T + R rl9WOxqxqr\nJ<[Y_Apu (`8y4#d[J7l?*hg48_ +|;ue&U>zP:nn/-ʇ4[_K&|hhlvXa!@r  'ipQQY!Kr+Jp/[nIxu}DpYN$l?܂[û/Z͞a Vx5Yq; qAN?~A4N3w}E9l(k1(@7x6zjGޥp+զ v;#/d%Ai<n[.;O4[4ї#K"Yr1pm " ldXC Q2~8x񍀘joX:]j}[_foa[`s~=|r޵uܞ}*kxh|˿68g*AhÂCзb+P_3qL $t螢NpQT: McRLXc K*8*e/\Mڔ]rfnK_\th64+mᄞ罀V޹(Wn+lu@N0jrwWf +-Tm7?~nng-][@ +!^Kv* +BIyyC~_=4?`DωmF&GΗ=.Kk\~+)c7F>{σ{ Y='P !' ]za2n.еH.ef %1z(*Nw "Fb߯G:irF๙>#o&@'9PQ6,W#' >8fqpt pL/2ϸ)Sn5q{ Q +i5 +|8( +BAS e7x`%jc8`{+ (4yɐ<08Q-^~Ŏ8h*vX$G11 36oL^kgk_9'ؿ&0$ 3RP1 a^r#D T}8|]m͢1D_0b'Ƒ\n \} ɱe(HJE30r\.r9[!4cZ caVH>=s(*M?>HvOu}Ծb>o­L\) ]:jq8hg3}pT+lx(XU2'pt ,YX^`h,[J,kOP W{8Ё.+>P8a\M1Ny‰@,a"Q-Fl&s/Àb`2]%_R{qq")4&@Kulol|'q=ع#؉ϸ: -GL|}J 3DD!"{D{c-PwQ:YFC%.G,R|}߶=:JTX!\sD4m/^/NIU?Ha?V-H5n+}rq'Ơ%8؍_K^=d|b1lixVs-?x9Z_ ֫A`A/7\X/n&G̀s|\C7&0TC@r'6K5V?PpK ܋ t\rĜSIK2u r\u؇.0O($oေE|t m+^䑫J`/LNQ=F&\jlGp\ ﷒vnJhw19ʒ8a]—@( :/UOc*t@ 6ȬIVtRcLoj p{}H,'nje8o.OU+A}uF@k啮 >`ǗncNviaeaMps&ikv, 7EWvGu,?pj)E>x[x*QyD +cAU\"BX\`TMMm8|6U\lrVdj3&).ܢJ/3PZμ%;|$$$+ƺ(# 0&&^_.7A V{,jjuQĘV>8`l_ż$ϫJsFүZܮX֡( +RI.~*@Ê哙<*K518򛖝6>JVIgE@z-@ov(`j!H}D<*@;5{+QUZlpo#*lP~Cum:_SդTa6\i9S$RKL2"WOZ+>>C,lՊlXz+Yp@)%^Petm~*Ց 3}5ʙ*rmhn D}jJ_-# dA$:||G ,#̲PU +^a'm07׌*ŀ#҇_@ 1&ePzC G U<J(M&eW^opK&:mHP>M{r*nx 1hH.UT ,؝0}3G5$= ?g5_5c$[og:ZQVCb,꥜OmXx_.RS4Jtӆ na7xDئ9MWxzyml6qYZ_~貄w^tY E1e+K]Q-L.%kk/_ δ 2'4> S_؆ر:\M|zW)&duCWPpzXokg[~˅6b_w`jp!G|5&\I"M@?,o$/( /Ui/0/kW kx2E>BB ;ϖFw(ӡ@(-Y+RCaL@`J{.4)i P|\wjz\L;.kB/|'H|e6l&ZWI +|0XqO$2MX{\1`! d;68q5THM;/ccKf*`݊&p_"B6X /ER_ࣿ;l$ CFtxdw5\Uϼ.NςkOΐ(8A s[_O]EQr [tZM'ce蠉{Ąd`fubδ~4)a{Tӛˊ痬_Rqx5~[nq^n;hM4tW:([2-lRe%דK'҈fq]OrCc!= kMء]ցMџrޛ734ۃܧ- AW.M4ק|X6gՅiVg,\DL4 +uPi4#? t;ynp\kidɐWӿFIgE W7F7‰~Zwhg?(5Kc.N0Ǣ^icC|rĿ}tc2org4[}h#4.jcGhY`Y\6}L_Zݨͥȫ*M{ ׭dY,?0xV0مl2WǸ"[ EA_&f7|rT(4/tLjouˬ$\4fQ=em]`7@OǏ&+u83:u5yZv{'jj,7gizXYhO٧d1~L>$,l͎9JCCdN?ء_T_$uv k;-`2䤸̆EXnTl? I٣ᷳ/75.>PM|xT>k_sh +9<ܛg?⼹!m.[C VP?m9dCV8=ި:4'bIԳ%Ɣ|z=OkhH.-mG~I6OC~mYuo{aeOSOyeL7!62`٦ip29:!|9y,zZ(4˃%X2&}!I64&o P5$e%:_ycALrVWBə*gVT/ +J $^ۉ7v. +4u6~ ~ڕߨ\lި_P~N,Zwt >ضg,κ6J񘱡_]&NC4ob?a])^^lb@9A`O+NquC~< +{<ǔ9P0HCX< ~؛޻9GoK} POOtٝ,K4}?CnZA/CЗ*+=dcz=É'XT/4L5 +&iMmL~@?D.31@{ HH1Kw]wL0yv/wDn,Z?vuGDk^jDFy!M1};6cť`qI{EEe䡡xЙ:],:c1f8OqWKI.#?7$%j fXr -hTX(_ヸ\ugFHIw_x;&c3ɣyy-kY<-%c69EnbhM5ij "ϮPS1WcG z.qVϛQ~|W]XP:ɟaSy﷛ lyF{W7S<2MÑ.naׇd&QR5ˠ}0ye@,L0 EQ?>e`U: 3@.L.wy.hgTLj" ʨ%ٱ)7z,;mAbdOS{>4טY(k +fXvɺ&y.آlrb߹8iCoƍ0-/1!_Qޱq_O~DWtEF? +3y"4n7>(4tO\2PQh/#ÁeZ٨eϿt+ +)U_\½0q<þWMݬ<+߰ӳ<<9^WQ{hNMGΤOԎ5yޞlxc,$oDG@V|̖C+}='$7Պ=Q ,_:ą_EAo +#eR~vx"ϷL3UyYWh #*µZ"Gx);jJҾm898R).ei}Kh 4g`ڗ(U-):.coM@. +^}FTr" +u&{*ALa Sy;ybeжqZf,ǎ<}Д>TV`-E m\:D`rQO+XBj#6q ?`Z"`O~>0BFg=n='./PE6mP#vF6!.(G ȱ X؅ae')D )S_ "m;膩=<o{+7$q#C>^+zeKs2?PwXhT`7)Qh{b̓ eՉ +qlT`mH(1'.I' &m7xZZ5%\ɨ2$W(!ZTaוsiXb%^ \~JJ%VrpkWǁ.$>FT4-m=m&$!'PV]wJ/ZiV= 6biޒB)V4_ f zF45 qԄޕG< h-<7NxN1ԸbbjeUj'ƻCz5G~mDg-(<XfL LKc*H-0IQMD5Uv\Ʃ[ptԒfe8+qt59NEBYbk7^"`cxjʐ@Gqvo UNՙ\^ͬ폤i+l06[pnWbgBJT5(U5lFy|}R ! {KrOdZ+E_ +7T5PY6N/5<&6zKb ~ 3krsA8K +J$182M ɂYbM7|3{>"~k +/`-FoN/NN8;2vAU`-:t!P`?JM 'u*^Bk,aJ>cC{bƠn8$0a%`,पLFAAzr-E*K;C1lw@*o0p(q"ײC@|$ 뵋*+#Cp~]ր? \I֏`k}gn +&ئzvsg\wm=q˧KH-^V`7E_/w8Uz pwapq¥JuO)pwh5emW<-Ce]WKl3m.$wͽE`lf7U/F#U_Yբ] SɮB[q;LEC@wE ;Q+T7қ]8(W7,#(sKOoץNP*2[^,8Fv_c=  G]i8#sׇT%䲜/Zn\)lNvJqg'b#pw̏}]7]Tw4BhmgB8`?FW8PB`pp[[kD+h%H]+87q~Eu=4o+#wpR1\ z:e3:aKt^H_t 1lw]xZu7y8M#GH?pVD8yi1c\,8aYi‚/umquI>3A`hw@X|>`Lj:|o0A*7hpwHH}7u6lPFpp a54q9䲁JXk0NQsGf4P +d6lp8L,YbȧaLjΒ<~_@u3ռĖ?%k ;4O8ϯN0$RxN{U3/%[%/!`(@ /.n95x_\:FyO?yQ"$ޓ~8o2z&o2,7K1aKD F+t)^oNl3Fl1:zH[g-"47-/U䓔,?_͘˧mJS J]# H,!:30 *Λ ܾi?:r?x7f[ VJ2AäphV!mQ{Yb&}64:lXJ%&N )o6DPt-],BI:#@6`q%xHQ&R ৮~5̀g{P:8`mݐ,`-&;8`2~7@-qHTSQ*& +7 Tr"?pA S6xv˜yq :^,JMW@p"V0@h!8&,Ǖ&O,0yC YB8{=2'8(H$8s[L-Բ^ ~I;]a&|Ҭrv%A8o2QK3D`&F% +(6$Hxd?>#r bJΞ!d7 >$#PxD`r0v`E|q*8(J@3V}QZy1 +Op=&Lpkc۰WQٛ!ZZ\pg`zc<ɘ:ˌBLE BqVԘ~Sq?^7SC܋L:0 cx~VS;BZ[K^P# ">zhh1k%I"M?~W5VAV6@&t %?LbTFNTP佩.0 4`SzZP@[~5|;V@]f]f)!CY8Q{,-|6ESoĨ./G F2"lSӓ J_pTڵm`a>!IZ'YV4Ƚћ6ĠD%sւs 0= 5'KeqV' T@Q*l1$"# _r&ٓD0e!’+hܙX}ہ +X +R 2R8@x2tAa rUkKRpfmq)75:}>l8vHjJcƛPV6lB!3[ܥxCQ &Q\8ɆGx"1|ԣ6pHi~.d37*+E'OBuж$(kҝɍREPp>!#<iAVE0.9KqR{h0x} &G@{Y +t&~%D_ Ɯ0ƠF? =,8)\ bRySH#*-ݳ{l DHU반h*QjҮOqaDJPycL|dG1:AOE y8m ;NLlep@6Vjf'Wۗqf~vߖ/sL'epqaLۋXbRd3>ӎ" a;jTR9/"4/OΏ 3/mUD/"'<6}?3t +h5U|K)E@HܚKkv>,ތV`_sj)0Nנ[<`]pUK<gk%@?rpRp{Zbjxa۩V|[GO{NWz-VWTU/n/%p.˻( Fg#:esV fT-+BzT<F/RLu 2O{:`)' ݀-!u8:vP]B݀dx6m 蹰 _iA EPuZz>C, kq{n=\6H<fdpRCIn!Vs \l[~+r xX\t`]r苋;f?VѰx6(4ࢪAˁdl^X,KGdi nSxZi-Tm?R-][?^^͢ÿYXA=>ye$)k.B>/_ܩZb] % %(vQØp5k6L\[j+7nGRs8yZ8)v.F_!푋qWW7| ~?<80;Av&AA0Lx-ݿ\"_؆d/=2D)C *Ӄ wI zv=*D ͏ +2`Zp#PI# yBx8"X!?[,]qym2:H +l~Dcq&MPU"/HI['l*'ψqW3Iu/*G@䋮pB,0>/UX"CN|$F ^UV~;N|}}QT균@Ǧ&ГAE+vN4D$@Zg`wnpX:(kvI6&E=RX5n  # 9!_\8`/T:p?:6ݢSTNK*F X^/C߻.Et`TjIc/T}"U_ p[nZV04@9E`z˱`{c*mpkr?hcL`m(FN lrbB@EkqLvb? O:ذj?$ XRwblp+VHnU"$B䊅xW1[)6+E[blQ=*Uэ=NŌaKz]`>?pL .4ʉmC+7cJvMMCu0[MǬ.B+M$@XNɢhe=?e]t bЍG]ځ/0˻%VC37.k tHɊTd]ē}@c/TиQ+`F+s IYfsv%wSрn:D8_r2V.?52.~/lq*d +`S!X"n)72lO&wCgp+l_t~^xT &?l7C;r@#r{mlČQ)B6k耡cGmFrw%*9B +JDILmpQ\r QF"xiiE'Y.GJBH "d?|W ;9aRG\ŧM$niHuM1_)0=I.iOȕGљ**@\.N9+q$\*{DցĜӨq!C7Upjil0Bo<8߬y̩kmft"im-9} +!nI\͔_ݞh6/c8) +HB@򑷛id{[ G9rp! V%p`ԡ? w;PS"$K &*ȾŃ <f+V 8|Rį2 7.@8}l!HGlpr˟T ?Hw+. [k\rBW2n8 evxf7 +|ap^maY>E6Q Е堋ڗmL}ah,E@<&zB@NumrKF[Ұt%k)k8nД8sVZ5dE(CE⋋I@VL!5qC٠ҟ !YM2nmھ̟qq` <ܙ1:|b2.C)xQ[YӞ"W 5PO=!R5MSv{HԴ! vZzy4ou{]/Z +ỶIG= +k+XXr٦ZhPUl8$%0}\hWFY/_n uɣT niVp֩m h7P.P({7ɉPg7T XY Yzw{0?6)^+&{t4Rsi Bp -{料+[.pwW[_ZtӅ[ +cBEVG%Hx7:JNgc7Lŀ%VQ/8 89pTrOv.prO$]pt"\ y R:;?f'yōթPe*G wG%E ՘U)h;ֆ.'U>M'o pp+o!pśb;8tҗ05 m fۆ4LU:z!D].)xqkjx ?:[Lʾ[xZNn~Z>rޅV88vie VxtMr[>E'm^09iI?]NI/FTn_>Do_w (G/i<uƅD]lA9// ,f*S݂ՓV%0Z"ԓ%/ BN`K,dX| E$:CJ aRJJ[Zcskoiiy;|l! ҵ2Æ㤯&|QnԖ@@aq$rQyZ4~tv̓h6~di/ x[9(ED 5]/q0\.=%M5E@bKZ8)|EF`=޸j 3HY%I\>t't>_Vs)]lց>-yCww7U3E<则Bj fG\7; +U5-ni~|Oi |B0#QBn ?m6ŇO@ϭJo([+6ϤL=]KݔC$W/c fO.3o.p!]0OQihfmr (T ,8(1/ Ax%~tF2=)|G &C4kYq <"j91Ͱ2;tTZn7%b8 un#.K"E|9`~Ó>-__4)l:"$y*o}howgy+sC +x9X+/Jmv!y܋15 8[gwv xIuwٙܪF)4C.`{/Chk8;m x} ݙl#a$L/LXlwI? :x]zJ+wjlZI +/3v?YZ.v}tvQh9WJh"nN3--^n|EG{PvWZeFt1d'_>R }Yx'TY7<u519pA7{HpR=$nl HwY9lnENz8r4$֬ȝЦCl`SGoCI).݉;' ++kp[qrZԊA @"(ge7~"{-%t@A@N2-~>n~7Nc @"N8;N܍3~8xp-ZvE aG`PXi/@.Hf7Ya_xZNY)Ib1Z4t^H˃[t D <߀./9%7IlVD`-EM#-Eb1fʣHxP#r~Ifxǘ-p%\`GG-嵲dEX) $әnnT#۴}ɸW*nר%,nF-_ZQuGVDoZJ)]؏*iʹ Ǥ DŽ!7?P&hW!W5iQH?'L85ol 6EݚZV'pp##!`oܛ'[VD\TV!ZԚ~a!ZX{mj!fĒ6<- 410=8qNUcpr +͹]3xVyt\\&z`s6U݅jj(+l0wñ=ր;:ےl; `ON15 H06֥M;สdL460 nǩ]Nu3&syd6n%겊0}FQ%T8)yCsl0rv&@o7mwmjhl /z =j pdJ1MҥH  Ɲi}Xi**:s&/xs"_V7ЉpsR7e;?z8dE@l 2 fJg=6CE*,VfNFpqomt0BmN:;T8U voęRZv ăT8ơhۥ/Q҂ILq [1LMWAIŃ,H)^WTE*cOE?!7Om7N : +PfnxYy;0k@BdAa,lǟt8DҬ&}MٌW E: ++ip".NdI\e(;_1P3%yxQ]`vJRE5E,'D~)gV4~Nӯm$K7jx=~CBnp,`)5Sp9rԀe[JvFHrpA֊w|KS+Vs +Zsv@?hVrnU`CÛ`"2˨(Kul˰xbQ8o`b$U5_,EMvdr|a Ȉc]jb(STS.>8#NhMMYkSڧA~Ni:C $d>25܌;_] 6 +9_dt$t( ,xNIE~ 4 hS)#<\i _r;?neGni|a7Fot`7卓on߂%$}/(wov6OU;{c ;"?pzίOSyAs Ph=]-ҼgF@qnDQzɻ4ড`f<{$MvPE(;uyVq}eW7BEٽ9Fmo͙ >Ķנv]Ldu~^ -BZj Gro\`hFnpe!DgxS_Q@Vv> +??ZY> "s2ԑb TN^-idH] ~rn.h.0( K?#/pr1^_@arScWX9cؕFJ$d@pΝ6FL(8RLj f>wP{+]Ekƴ*1 +RU`c<# t-p;93W2bZgvsKu"[j0Z!\*`2.xvH Z0@ԦUY)p*m>zXXrQ۹:!Got~)# g\n"˵|42 l̵YwHXO>^W#Gt3z&OZeܔ*`Viaa 8ƞC. sMfW5$ q*NyuȁZ )ktg2OFN{_Ȉvi8in4{pH_<ާ^E 9 +t1-Os19*Ҕ. 6b2x#& +|u\"-;v&1k+GrMkxbfga `__Y䅖xr8JI +RL=ɖSe^8cw^qpZacCJajv(Vy/*DrmG1>G_}ww "S0X<Y~4OQ+lZH1o<ȍ?nRxFQ3X73>Gf !IA#b>9Xrv*o*J?`4<%[ߑ`w/ x 3AG=4(K K|\4@n|%Tv <pK/ql=/0V4pܹh' qʫTjfzv*\ +& AEmmbkWm]-nѝˤX 衟>25KbޗLU~Lu R^S x;KC[ߛ2٩>]6aǞ 9]n1'Wv);fU!ɜjY +%( ^p~z +ڊy6FZ̰ѱ֏/e. u +/iP O[C@)h4 ϩ|i^Acz^.]X$gW*N®o]i_:6|F'Ļ7X)bMjd5~ Y0g~-8D[4e[Ed, +< ;@U\~H@)@fA̚FKXkm!Էx[0oXWa" +RѻbLTE6Э]'4idž 85vrv8u@stYW0Be`-iWeUS:5^x㸋SU *9>|#tZ u`"f/ɓV`vVY^_.= ЕJ*D5gys9%P@Z +.8o)vzDm醁J'/ﵷGgE~*[nm|\ð3MH.ǰ6pŹ+AOmia)-@O/'ОB-Q  +Q׈ݾW-̰b \ƂTv*ƽ@rK:fTeI_Zisynj ^V +)TfQ TMFK ;8jm1a 9ѻޫ"܏Vni]ppYZUHS`6U$M*(\_?|/@uTT=wux怼>M  >CNw[o%Oq f!6ϐzQ,H8EÐۛHCx'#1"%h1c)hAd*vB"\2{Yuq+SW[9ƭC4dfAW% 5(OK{cDF҈21thkLJ;{&N( G S㐋0dsU0&d+7:t#h ΢`MlO{v 2 80@B t6Z&D_9&gGI3op&g:%gjǛ8#EDj+Ku{6떜AA9-K :?!KԫXHw9k`xOYE:y$ʣ_o^^82tm }NNW S.8kݞ?էx% ÊQ63\tH]!`|;+{/ xcMT:M(U~Qꁋ:JԹ)y>xA3ݚPd׿ w7Vٺ7sc(jιj?)#L$)Mr;tnOZSaף5@.Jadc(;ofh{y{ZwA*ѣn#\} T,&Ȋ X +l#-Q슬[9.( qhFBֹu[7A1˰f?n2;UY*&B|T8}íJQW Cvq 䴱:y~dMrtNzFݮJ6^ִd$gk1c0mIZ 0CL|]G|GUgANjߢUXlR YK=Hg=J[ u}HcUAá|L +o\hZ9VrK s .Nc[KCN1='4Ss[Q4.pWE8$Aa=3 $ J$vIP u(14 +Ǵֹ @GĚ2$i&'z[@#R9] BVIҸUD@O\%3>!GH@J/EfGOu}ެn%Imz!܏v~3"ܝ Ę~րEQ uX&lePĽmLpn@7!8[ +B|z3#0u"tvWc^-t^ALЋ)9 BˏtZQ_}ٝ]=lyPy1'pܶ@Wh|MzoCÅϏ;F\Do7Kڡ74b4aڍ0ē'Nm7$_UKYaA +OWmX7$ yL` 1q*eo۹5}U9pn]3a*8Fj ' "JV1c.uAnT^b/t=, ICdĨizXQ@(+s7qaf7z>pCjN,z̓v]5w=yTotjчVFp݉Y^na{߇M<`Gҽx1E@aSf_= -E[H_z-v`|ohұ#q /$"MW"t@%l1>Ψ$8&lHaO"Byvۧ~ [h(lڑr[lv{2Ova{fw!``ۉ56ffOIyvzf؇~k ^⇄>3HOI2vUvt>wohU?*ibGua v3^Kj3.I#M*;ٽŘ0maj0-m);BE+W/|nv]zh|u(m&n$$Ln'Ke,:,[pNn`/A Fre'1˺ͤ|sT YBֺ Epg.Mșݢ3Y+ٿ@6员|! % `w|fA.91SK]Lg˖%"߹'X@ފ)f`r^xzg]lML=ʺV1+l^漐Ϫ 包Q@:0F{\fgg@1Q1c|kRvL0f0 k~> D>3bf,a{òM+8vaҳq\?,1T(TnuN"] xJnڭm"Da@,ǻ3 ~h-Īݲ˩sW&'kwt\n4YE=âQ'-`R9ps?8a⹽ˏ lT.|?ui&@i,hA a>ؚo/rhvPdD +13A8a J.:-u͎`~T.O4GaYC.J2X5Y;,ps+|` VF.L; =JT&FҲG#^9ZĢ+T/ cX< WeL3"†^L)4#DUtW"V:$Fӗd^c"#yN*g-v@u~|ѺE6,9-ݹht燶Y3cNIJL,ov+Jm6Ѭ`7@CJsF[ IzNc3`@c<|L +DQ~!R3ў' ?GOavC_I( /"uo/VU;=J/FЋ+meitS̤,6S׍J)0M ۉx<`T)M0#N {oGV{~?D:(U; +jZ +^,dȓp=~ 0IK:Y v"_1v OgV|v3T+a#ɳ-vXZϺΌo0=ZTGvwKF ]0c|]Ћݼkv4f\$`!I-nȼڅ[+6М)fω0]i'랝J3`n`+rfv ԰Ȃ}$cG:q~QEnnA;G[J:XeDOy^2Χ˳'ځrΤ+v$IEyB@*FUHQ27>?[J [;}2ɆHHg{H}(:VJ< {ߪa],Tv˞-{L Sy g{'_,| +`5+>FwSܽ]I 3*-8 u[9 -:|0BYTfjO/aj}Q=lnaY_^hGJ@- Li~ule啀2͠{XWrƝ.PZv8g*N°Z *s/q4z ?33 y0Y.ǛG-5 +9vnzKHoWm$w}hw_@./Z)+v;J3^'*2Zi[wU12 +]Tn>pE"Fw. PMľaV\QY[w֌ʢB&|K2Te?ܼ[͈? ϗ>YLcs͢Rk& F*-?Y\(VY c0LF!#Ls$ +rk7uYLNflFyδaP%\%0eKNiv[&X)qՅB,L_Dd4d5.0F+\E\v[X+8s@/gWԜX5 +oj8ѼJ鞪Uy_|w,NyfY.U=*{~aG()t Q!n}u/(?`k_޷c7P_P^=K(ޗAI3;<}2d6&=RLɷsrvD78M+nOzc +vw~W)OM͎6݈{=RDʯN,οN]dB.y{i a,k*&+k +Tݒn4݌!#~RQЂ__ƍ['7& 4hr"VN+琹naU͎qCjNQ\5 +ct-]7+G´y݃oXjidP/m$RP$; eƹW-z/mw/=H:= ]}Rci, +mh$QJ"b1l@=AjC?ƾcH ؃7>}e0[h(lڑ>5,,:i0c˧`ˎ6ݼfwiga_'1:G7]+?DN< =Ee1RH:#-QJr vOPz"ؕFHL$ [Q-d)>tnr 0!:[|%,Ӊn d仧"VpyZwj: ! ,dm*?ֿ;"NY~TdZ3FEaBU+'|7Sԋoڕ>C +-YG|L,#]U +W*_Dally-)*bytPLxS[)5S7p,ӆa=* nس[-,[!ngpE>:: {*&b'1v;+TBbtdDmsrd)*Rz? >Yq6FݏGTxM+E]yy`to%LFP4 |d#/D4 ˋƩGT*Gx??S?+ F=Pcc,x^(,86Û <&V`ZLEwPpo/x??~(8j|Ssr1|9txdw2x;?;l>=>=5P+x5$(RwLP!>-? i~ $cCErC҇ZAT"G?@x60%;'{C).:CQ8uAcYnťj݈2G=짧Ʒ-9Nc*|zj_[lWE7^Ajngpn7wgc<= +T@|`ߝ8R +itLg%ѧޱ̿PϮ'l} z  +|&n'~0)O;mPrG3. +̎zGu kd*R+E'aGP*4I~ݮ$_cɩbԧ u7L71ܽцhCT,v"ke1tu7;<`Rug8VnP!z|CM'}7CSo&ɬad.pܽ{OZ`0vDp:Nc,úz8g>63%$TE攆PHr>.Rh+zK6BڤEya֛MM<òY0W,iŏpY8& Fʺ?zjA0h\ejS碔ҊVd`.\×a: +PO-kcɁt}o6eXGgr3e2eL7"yR\6%T*990IuSWu^iE[ذJ(͸٫ܝoeV":,Ղ;7ݪcoW#<.NF$Uy_z@-ۭ{AŽj5-è΁ӞYT}0wFCBDF*drĎ2Qb D%Þ)pmƦN"裎&q.'N,0S_ LBf͎, +nI}G}`!4e0= ˰LeؑEvb⇲s6ibʺ@)=rcgvcj2yPIJk¾ԱMq t;Q+8!VNWS1,Fq*nW ]|l2߰vk=S݌p$a4RMc-VuOIHp$7KzvA_ިzd 3TDu1f4Nm5Կ(oA'vKN,JXy5&I?'~c({ub Pᮺ RWLVܰv 3^aFuJ'.;_-#j<2ʽnS1#ѓN}cqS﷾4. 4*jCFՈ ؘ\eJxzR#QXtM+ks(3RqaJGG}HRzC\F]ه@!*7g!f&j}e(U?8_/P|qi.+)Th5{F\aWuWN2,8kB;ȉ<`W9 yΘj? ++%W9Ȁ20B<`9JPAA| g9P(%׻7;|æS)jM)uw]8R >I c'3G "l􅎺d#ԇ`4Ѿ/Bv><^Hra<^;O_~%k܆ Es+{EIP b15 iRJ],aMT+y ijE@>b̳Q: v8q^Sc=0wEOV]nO*8pMm 2{ pۙ,m]AniPl`ۉuFa~IrsFx_w vIQ;J|K;ub·2lۇH.*wع9Xpyt3K2@onI}G?ܜP 㢑!pLa\""P+1V+~!ȉ0q+ar)F6H l 7Nv RdžB unюHgBPJ?;/]3(5jzl¥08?Iź'&ݳ&. yhoR'7hMB},u"azj +w 8yF%a7 nj!H =0%WArkƷmSZ=J~eJdW5{k=A3Sg|5m*^!4KoYT#<`4;3q9Z^aڽ7Q]\xyQ;<;:YH:@}&p8lh". #X4Sd2Oĥgj<İ)8v WᬕgZP$C=)Df}L! Qʲ2.z}8Ҙ]gc7EWK ~w7U?y9чYfcLJvPO<7g1XGU*K6h E`Ƀaz;J*{(o pXDR:^%Oi$nv.=qCjN]qZv]1w:;Cc%&# ^HmSm@ faa2I̿ < ll{AZ('0vimK*H\ +S_`R-,f3Y -m ta-*Hrv$޻R8 [S֥HR0ev7 AQ׉n+- 2_R0{8Q?bx<lTpJq f 'nA`J:8aK{C/PEia";t[O +ʄq&hʼnTTgaŘj#&4n[|睻/h mz9GG0 +6tb5~ȭ/mf}L8}l`MZx(D @u҂'~Z8T=uGniGl +wrRLBĐ=Ռװ7f}-8WdfwІSNqK|jNܰv{Cn^e>'fl]C(){dwVsF[ X[2=JRt(.M؆Bøf(t,b:gFHN->?jŏ;n'@pLFr7sc|(Dɛ.K#|fRڱ|Edy﬌C{|.²| +=IJd$zpdyZbՉޤvhQz0*8VJٛ3Ȑ>$aoݢ꧑KI̥zLf^mX Ԝy+vܽՃof.汒çd|o#+ew'/}'W~> SPD7vZ'0"Fĸ6Rɠ}#*?iGMw'/hYTU%0[<} ;3g#!O:^܇A IDa+IKS dّ*[zhwKZT(mݛmX9eVv ZY+,b|ư70i&flk(٤R:0;F{CS5*ibGzvʇL%*wfФŘ^19!鷛 }z|n$bi +6ݲ$ Ɔ,sRE<ӲC1QQuP{0ACd͈Y.?C9YB;@QgliR/b#W`D3g`HߧPbd2R[x~T@!aPQf4Ҫ0)y:(PwA|ĚEdStaFA-CU_/*#4D љhB3h =N7g23X#uw!HQޥ +Tla k7˅z*n{E;iIxܣ.n1&3.;woȈ>w !ksbQ4yY*nvT7 VnWcfP /&DL=Qןie_YHǢ^/>Y?z9/R?DZsaˏwᓵݟښNnrYS +p4O>3[T_nJg24 +m݊o^~OC/B싵~__ؾxA3dx)!eU-xS!?b03<'ѮŬchqskhͯ(JBBuz%G/?>o!Dž<`C5 aݒkw _G@1zWYrcM~ߘ-'ge9/I v[ǐ oͯ O1n)h- h /'zKk}HS?w #T"` +AWU?8?So.|y2k45ySGAq@Uaʼn !t{~\}5cJ/u[mp{YbM!/C]*/ȳꊥAfMyWU/2,MWe:ຶ+vϩIo3w 6bte m"a[NI1ciޤ϶e'-MÕn)uN6Э_Qv3"iʽS"rva!;3ޛ,zj%F/CFFB),~᩸UҐH햘+omӽyK"Wu2A)`Fw};" ^Wj7}MK͟5{y/ߞD +!>o[Ө5>PnIJABPodz]r/C2r4ٻ7SKL_4w-G +'#\RP7pAWHlDmpe@ՓM3ߋTѯaHMz&Cx}\OWD(?iYx|9ԏV~{&j3B{{˱v.BL'K_j;Szpž34^E$5t8dMz~3a* S(*' l/66WvUMv(W +tNB8HvJly%@0ci[}6SYC@ub2[@F0enߒiG$0E2-L ݍdi,W2)_PB.0v.*GS P+-j +JbqXZJyn$Y< 26MZ +xɂʬ0E< E^0vaJPUѷ,r`0״KnTZyɗfP̰0.lM]zGn0F;RU,ZP +=V 0?k)z`#Ғgr GZqWVyEEaq$ni`礰a&Bz0df|X^n7;S|W@aҮV>Lj*K}'%}V'U0 y]گ v`d *wzD+M0<~1")弻nEDnU#^]\Eܮ؄;U'x"ͣ&UzU2P'{I*F!A TQޅz?'_o¹uO@:rp`QEbK*ArSl"RkLpbqLc֔5FTqN1IJ0}J8L9$vZQgjcſ"XuKy%gS"j'{}2ZL<Zm||V5BѮdE.[Q%r!8i_n(*S$D?w V_X7!TgXN@IƦ*<{^qdroBPP6{,*d_bQ@(nF@":#S)טZs%*Rܑ +*8 Y[' z l6RG =XG,GZF(D=@m-WxUKT1~f/\MMKv`Pa%ͦ <*e;j!CMԳ`KjypbAc"{ʼnщ,e[&M`;VOWQM92!9\lU"(8$B[y8mN'wQa[C +șkz24 EL Ыt`^j)̽LJiHF*ǛCe_~͏iVZ/{_BŤUu00Ud%a_S1eP6#5WD4gaJME^g7T#5dޒ`HM&z +Aᙺ,-8\zftES>[Q Yv Y2ev0Sdj_*QmHDy.z֐c~XNZŰK4jA9v~*pLW&}`S JDU&QE}fN &Q \&SGʻ䡢-8:&v˜T=*!agO"R\)|ԩm0(MBCMٔ<;xETzJU-.z6n*͊<\9pȞm%f*b%$ ,xY1lۙ@\eYa,jR$ЋN^h^`DWh|?- 5H;!,k4*(ӕȫA9@VvVZ#w? s&`AwQO3!jb+MԣiL0N%0lÆtSXĠTա[W[ڄUkG*B @&ݬ4QVPM%^%W/i3}~@Y8ü6JgaBlո[g! ?uƷ@d&dp!zCL(Fä әB ,[@ӫrVпr-BIThwUq^'޴͂„'& +C%Lcn ukц7d~-0?u!s +یƙ2Bi~a*4=.7;nHSK#+`e +Eu+:Y&M&l>@݇΀YY)b[E]peCn⋉qZb' x +"]kTqG_*(Pr +mI!R0XW&}VÜ)16)QW1e+I3Zb+@UcGʳDD1E#+a^&70T}߻6SJ31+%n 8P,,G:vrKtOzp.Rw`! S!;vnYE1+~J`R)<۝ t~ZCI0liFN"ac!NedS wy҉@B 0"h'0C*`쏗)h[{LmS56wLS•=d +-pR`s.ЗXd')dQ#0qaT(Q~+58V1e.z7}n\FV{h_1PQ0Ŝ8ae=P!gC ⽈֠.R᮱Ee O=mI9'y M3l:I]TSSOvGyUje+ySZEMcX&%k_H/䌊l0}e0Ð' +tTJhfoD:o[ j36[ +dn%RExd)F/&hPA ֝qT Xߢ|b8S<06IJ(M+l(LJStT +v+IU.q&rJI#-LTjWI +RgC% +d<_%6ęM[/LiO!F + `M>٘Si`TRalZX8,TbT(q`ASgS͖͓#Lqg+&鄦''301h;T*2Ze9i;PTםXVPD"#JzŁS0j] J4np]tgzU,ɛ763)\@UYQEe翣\q^1"WVT8DFy\2jf' vv3PL:41pĸE O[UA˴0.#vţnr7V%$8V[.U5ʩ͓7dΌq/v@J')YS+j+*EV^o)o]~4µ j&^aMV?j"LԃNP(6],'MC3GUL )txj$<E@ٚ(^Έb0 ;{F?VS4SP8"2b,$L{~JgmJ.,KJ9*0A0} 7&bMaXl-~p2N(Qф2vf:|Z[UƖ'%1VŲ `-1 + =geIll5*u1Tj'p@&h+RzKuj H{E g@nV\:Uᝇg2&&)r#MNĥEdhf(hB ӫERAs{zH1]{wi)oA(͆s.!F0T'2CTt*O AE)J{@V!ოRx իD 1MȌ蘿@v$bYy TR'3He!Йc:9ȹͣMT`ЫMJ*ouuxp%1l0Oo g@Jޙ/K-D~Y_ĈӍKUNv=/q顈$r +(FY@LfT>+P4S| 4&1Kj_؊5+T|0P>No&S{02 B+de3@Iz3^ "hK[mŗ kʰN6TD{o6iV f1mc=e#2ǿ AW9?T1ZiZSy!'R1EۋѼݬVü+nm&HvdwմTs7WgS,cw%Yx! +#a;[\ơ6 `x4^ffi VY@whΖbO@5ܡl@pj(9=fsY0C=-{h'ŃrV)AY5GnD;IY0= ڨ!H픕":J$sSZF(՘`%L٭0fiP=?y^M,6Y_JMn TBҦ`oX<18 ccH >"[Ln0+"-;)* "]$oX)py- +Dc0-/Hy.x'w𣻝'z=T=<b+~ +g) 0\qz09>vn"H &j  0ĈYpΡOِCi* +kr4W=;KQJPΪrQB%ts0ZTy)DUN2¢&eVc6%-1G.>ѷӽ`;CI02ym(`NŹ͵R kL\ +I: :ca[xx!a =7>Oj5R {aFoU2v)mR Ո4!dL< +G)rſ0E?OX `0h]=k FF TpF)6BT3+RL#Hs[UZ@ƫ%,B܊c<9Pa!T]*,C$^04$")C4=iu\>̨V- ٯ;bkLq 2K$€Rs_^A`[^QAN@΃jX靧ƥ0;s=1npI}A^rR]솝n$ LZ?cPY #i?`~WjLqkf:RɄ9S$-u!݊m ҢSZ@a;Z1?,̐b*[)(t/f$F̃f-_!|yXG>! snx(Z믈 ,J0k`ʖ c-&Zlh%S /Ua­\a7Ѝ$sK0M!CXC{s7CHf>'Δ!S8)Y(FYvJ}De]a+lM1دv[I<1&ZCxV>n*id>U{3| +%󮨧0t%'OCr>)M67 EdȲIv>&3xDg&,)FL)ӪY$dgx}ĕ9'3**vj4>Q:AfEFr,uEDT$L ;0Q]JNuԀ.CAӟVXb(̉7Lim@&$3mڠ<3cCıjOJ%>oWj *Rc|eƺJo{x vPfVc +X!Lhe8@8O0aA ݪ`^JJ@zu‰;/+N3̠'QRkAd^ڰa@cXɃ HM)HIJH.I\it5հ.FݪTP{YیQ\y:4 CJjjSapJA$*L<夶M 23MlƘl\e4M•Jx+@ +H9a2Ԇ2u^UA@nKW2)Dݬ3u0- f +BDF8~PP NҜ2bgR/z2=`};C+!Y|xziQD aD(gت4CB"o Hs/<$>>6JlΣ[@JN2Rُ[u;:Ȩ`։BB.:@h+BՏ@Y:]AZCUc!PqC`$2\û$"9L5o%RENUAj_\"֩*AOQPM_ű s&陒)23|4T1`f^(/U* o + ؉F*| :fn6IkQ=ov3]VP8 -4NGb{:SsyU*t&?Ԕt(dM$&)/p8CUr-L0Tal[ sv3>=P,/yfbg*{В~%B/ԯhX* 06 3CK:](7;nv/ KR ,Q +fBoB86;tflq6b_FpouG(WR>jJ0ն/ S 8(74ݺ04UqcvHPv$(8VD%I(`X;f DB!#Ѳ t{RII=iEy#LYFaBLv#㌬&-lT$0"LAJaN{¼حȈ_^ގs' *ca@)0hIE$`P,bDZajTQ3[)Ήڙaf U0&q4\Q'igF'jl?Ok[UyuPiMLGtyqq[;NrhEW0N0I0S'AO4xTy5a}?̙t* r>Ѝ(v*?FP5{AJǞCDRv xVÔ0q?ݳ%|L0T*kfyj)^ajzhqi?#ln9DY)[%tPu㓷U=_~ 3 3&'%@KCƧi~0e;qn%l< 'tn!TP4:3T -0[a8[CIqFf+v,n=I솉toD@CWîbpK3PbBHo}ƀ#If zm\ߵA GEttaAp04&'0v^ U}S{< +t @ EvD2ݤ&\0I)HTa"ݔiLv7`pU 0t(ׂ4?R__PrV;ažW}=E$zbאM75:UWWՊ[rhqy%>916S@EEfB4cVc_9ԣ^9 hAJQajV FZZ)l?ѫL#4NDK=U$r̰Xhk{8?֊&kP|DmgV81p& +A|F^ ]zC;+JL,aXN#c,GCKxM6xR[)ꈃP~(^ͳBw"aqfq; cJtCٖ°a"b7]Bd@=Qxx{QRXƅk?ZQ7BM? ځS_Z*U<3E #@ OP/WwߪtJ4~֩S<:ѬT{(㑯9 Kjtppa_7ȃL|1a ta,lK+SsFPkSFp2.8_ e8/m>"2`VߊlQFSchb݁Ge P ckfar1liqSc,.2+@~)CrԊx c/VQxqM΍*L9tbJ1SwL fxL$N~&swYۢ[~g1 "c70'䰻1Bl| ST1_ߚ۱=XvO*+~P'kPXg$?:0qe̯DTA <0O`9V,P3YgnŮت fh<ÊhI Ń0P$,V1Fsg]~dؤa:r*}b0[cYHIc2[loɄtމ*0 ^Y°%4hu,G1O,\ +"q%B) +J+eKv[[^RsuZ"kaj,Pm N%(L# +{R=^ZJ>]0:9Ajef[W7ڊ*>2רj窴!Eshf'aCP6#4mNR r`RoLR[niMX?{dEГųfw40U'h7LL0PHzelTYRēڂ㝤?eª`aQ=>V&!>aK) M FbsRkn#'5f1lL:(G^Us18$qY;*Iך` +StH;x61Ӎfڨ?AlλpK1hʑC\ G7ay\!&E MCuX&Unyl~8C~#I`(@)+em70-VJm3TF۷7'Zm<γP˛C,YO?gm 0+QWXU,?+NA "ڑ1`{# +ɑ۪ԃMέJN%)q_CEtLJM؄횛]򁾒;;_ ncd(m}P2N[" s\qUT!b5 )S9matkhh<X'T'S" ZaJ +᤼e[-בcPFT>$eh0Z #~”RFb`UY*>2t/P8ajpӪl`^^j@=}G bTs׷oliK.ӚΧK0h=M9ҡʅ1&Vs`z)LJ+c>~;P+%o_aD Lq(:*^˥R!="V5 (ruS@,݋Ԍaz#Z S:0&_ժ،Cݞ5^Թ9,V~}`Yb42EB8"^oQP`Q *:V۲8g.{MZT Y5jD0P`IU@MY7H; 8Ch4n" ,wŷ LWˁ kf{]YI\vjvqWxRK0c2~Lbu:Jᱰ~LZy-}T]֑ +ӓcNGra*,=cX&u +L7:%z& kgw2a-4m?I jX7f\F^V-#Wp]kF צ +dC I>ҊgL"%_UP}ў(Z—C)_ 0}%,sڈk0C𧛟o~UO/n)N7`%wG7[Kr]] wwE'Wz.pỌ\KgU//. +r'יkglըݽ8<}$>kcmIagwV-}iYؑ kPEBG{ApeH+\ddC*#&W$4 +i 6A-WY(wlhÚI, +kgˏxѡptM 窨5B倾AEτ\*6E8H]yj^;>Sҁ,zaHVW-\}2?bow{xB4Nb>Y_#r=!9/JtzA_F$p]'gq'vXlI6e} JY&J |:D}_5Q ^^j۞ |7eW~*EpV[sľ, ߦL d׃ς~]йt(k}C6'8W,,;ؔ|c=ι9+65t)[]ϧ3Usovs}ebS{VtN{{VjÉݫ^^NDZLFG}ăi"}Jj/_ܽ2 x1gH铦%Z՛e.e_ Z?Ec˜ +9=}v"fY7xleI.0zdex}]Dtռ UnpqƯt ~^D &d7 \}G7F=SZmQqvRK #M&7<9gjs_n]Ul_tMԐID3>,uJXXp=/js{^!Aѡ8>˄o_((븩Tz7t mfY]p3M>*W0y +=.INKY@\zZ<n> L:tP}q>W +endstream +endobj + +416 0 obj + 182052 +endobj + +417 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +418 0 obj + 2567 +endobj + +419 0 obj + [ /ICCBased 417 0 R ] +endobj + +420 0 obj + << /Type /XObject + /Length 421 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 419 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm +0.000000 0.000000 0.000000 scn +0.000000 862.000000 m +1440.000000 862.000000 l +1440.000000 0.000000 l +0.000000 0.000000 l +0.000000 862.000000 l +h +f +n +Q + +endstream +endobj + +421 0 obj + 211 +endobj + +422 0 obj + << /XObject << /X1 415 0 R >> + /ExtGState << /E1 << /SMask << /Type /Mask + /G 420 0 R + /S /Alpha + >> + /Type /ExtGState + >> >> + /ColorSpace << /C1 288 0 R >> + >> +endobj + +423 0 obj + << /Length 424 0 R >> +stream +/C1 CS +/C1 cs +q +/E1 gs +/X1 Do +Q + +endstream +endobj + +424 0 obj + 32 +endobj + +425 0 obj + << /Annots [] + /Type /Page + /MediaBox [ 0.000000 0.000000 1440.000000 862.000000 ] + /Resources 422 0 R + /Contents 423 0 R + /Parent 426 0 R + >> +endobj + +426 0 obj + << /Kids [ 425 0 R ] + /Count 1 + /Type /Pages + >> +endobj + +427 0 obj + << /ViewerPreferences << /DisplayDocTitle true >> + /Info << /Producer (Figma) + /Title (Accueil Hero \055 PC) + >> + /Lang (fr) + /Pages 426 0 R + /Type /Catalog + >> +endobj + +xref +0 428 +0000000000 65535 f +0000000015 00000 n +0000000122 00000 n +0000000143 00000 n +0000000250 00000 n +0000000271 00000 n +0000000377 00000 n +0000000398 00000 n +0000000505 00000 n +0000000526 00000 n +0000000633 00000 n +0000000655 00000 n +0000000764 00000 n +0000000786 00000 n +0000000894 00000 n +0000000916 00000 n +0000001025 00000 n +0000001047 00000 n +0000001155 00000 n +0000001177 00000 n +0000001286 00000 n +0000001308 00000 n +0000001417 00000 n +0000001439 00000 n +0000001547 00000 n +0000001569 00000 n +0000001678 00000 n +0000001700 00000 n +0000001808 00000 n +0000001830 00000 n +0000001939 00000 n +0000001961 00000 n +0000002070 00000 n +0000002092 00000 n +0000002201 00000 n +0000002223 00000 n +0000002332 00000 n +0000002354 00000 n +0000002462 00000 n +0000002484 00000 n +0000002593 00000 n +0000002615 00000 n +0000002723 00000 n +0000002745 00000 n +0000002854 00000 n +0000002876 00000 n +0000002985 00000 n +0000003007 00000 n +0000003116 00000 n +0000003138 00000 n +0000003247 00000 n +0000003269 00000 n +0000003378 00000 n +0000003400 00000 n +0000003509 00000 n +0000003531 00000 n +0000003639 00000 n +0000003661 00000 n +0000003770 00000 n +0000003792 00000 n +0000003901 00000 n +0000003923 00000 n +0000004031 00000 n +0000004053 00000 n +0000004161 00000 n +0000004183 00000 n +0000004292 00000 n +0000004314 00000 n +0000004423 00000 n +0000004445 00000 n +0000004554 00000 n +0000004576 00000 n +0000004685 00000 n +0000004707 00000 n +0000004816 00000 n +0000004838 00000 n +0000004946 00000 n +0000004968 00000 n +0000005076 00000 n +0000005098 00000 n +0000005206 00000 n +0000005228 00000 n +0000005336 00000 n +0000005358 00000 n +0000005466 00000 n +0000005488 00000 n +0000005596 00000 n +0000005618 00000 n +0000005727 00000 n +0000005749 00000 n +0000005858 00000 n +0000005880 00000 n +0000005989 00000 n +0000006011 00000 n +0000006120 00000 n +0000006142 00000 n +0000006250 00000 n +0000006272 00000 n +0000006381 00000 n +0000006403 00000 n +0000006512 00000 n +0000006535 00000 n +0000006647 00000 n +0000006670 00000 n +0000006782 00000 n +0000006805 00000 n +0000006916 00000 n +0000006939 00000 n +0000007050 00000 n +0000007073 00000 n +0000007183 00000 n +0000007206 00000 n +0000007317 00000 n +0000007340 00000 n +0000007451 00000 n +0000007474 00000 n +0000007585 00000 n +0000007608 00000 n +0000007719 00000 n +0000007742 00000 n +0000007852 00000 n +0000007875 00000 n +0000007986 00000 n +0000008009 00000 n +0000008120 00000 n +0000008143 00000 n +0000008254 00000 n +0000008277 00000 n +0000008388 00000 n +0000008411 00000 n +0000008521 00000 n +0000008544 00000 n +0000008655 00000 n +0000008678 00000 n +0000008789 00000 n +0000008812 00000 n +0000008922 00000 n +0000008945 00000 n +0000009056 00000 n +0000009079 00000 n +0000009191 00000 n +0000009214 00000 n +0000009325 00000 n +0000009348 00000 n +0000009459 00000 n +0000009482 00000 n +0000009593 00000 n +0000009616 00000 n +0000009727 00000 n +0000009750 00000 n +0000009861 00000 n +0000009884 00000 n +0000009995 00000 n +0000010018 00000 n +0000010129 00000 n +0000010152 00000 n +0000010262 00000 n +0000010285 00000 n +0000010396 00000 n +0000010419 00000 n +0000010529 00000 n +0000010552 00000 n +0000010663 00000 n +0000010686 00000 n +0000010796 00000 n +0000010819 00000 n +0000010930 00000 n +0000010953 00000 n +0000011063 00000 n +0000011086 00000 n +0000011197 00000 n +0000011220 00000 n +0000011331 00000 n +0000011354 00000 n +0000011464 00000 n +0000011487 00000 n +0000011599 00000 n +0000011622 00000 n +0000011733 00000 n +0000011756 00000 n +0000011866 00000 n +0000011889 00000 n +0000012000 00000 n +0000012023 00000 n +0000012133 00000 n +0000012156 00000 n +0000012267 00000 n +0000012290 00000 n +0000012401 00000 n +0000012424 00000 n +0000012534 00000 n +0000012557 00000 n +0000012668 00000 n +0000012691 00000 n +0000012802 00000 n +0000012825 00000 n +0000012936 00000 n +0000012959 00000 n +0000013070 00000 n +0000013093 00000 n +0000013205 00000 n +0000013228 00000 n +0000013339 00000 n +0000013362 00000 n +0000013473 00000 n +0000013496 00000 n +0000013607 00000 n +0000013630 00000 n +0000013740 00000 n +0000013763 00000 n +0000013874 00000 n +0000013897 00000 n +0000014007 00000 n +0000014030 00000 n +0000014140 00000 n +0000014163 00000 n +0000014273 00000 n +0000014296 00000 n +0000014407 00000 n +0000014430 00000 n +0000014540 00000 n +0000014563 00000 n +0000014674 00000 n +0000014697 00000 n +0000014809 00000 n +0000014832 00000 n +0000014942 00000 n +0000014965 00000 n +0000015076 00000 n +0000015099 00000 n +0000015209 00000 n +0000015232 00000 n +0000015343 00000 n +0000015366 00000 n +0000015477 00000 n +0000015500 00000 n +0000015611 00000 n +0000015634 00000 n +0000015745 00000 n +0000015768 00000 n +0000015879 00000 n +0000015902 00000 n +0000016013 00000 n +0000016036 00000 n +0000016147 00000 n +0000016170 00000 n +0000016281 00000 n +0000016304 00000 n +0000017219 00000 n +0000017243 00000 n +0000018374 00000 n +0000023516 00000 n +0000026205 00000 n +0000026230 00000 n +0000026272 00000 n +0000027018 00000 n +0000027042 00000 n +0000029731 00000 n +0000029756 00000 n +0000029798 00000 n +0000030543 00000 n +0000030567 00000 n +0000033256 00000 n +0000033281 00000 n +0000033323 00000 n +0000033821 00000 n +0000033845 00000 n +0000036534 00000 n +0000036559 00000 n +0000036601 00000 n +0000037338 00000 n +0000037362 00000 n +0000040051 00000 n +0000040076 00000 n +0000040118 00000 n +0000040616 00000 n +0000040640 00000 n +0000043329 00000 n +0000043354 00000 n +0000043396 00000 n +0000045640 00000 n +0000045665 00000 n +0000048354 00000 n +0000048379 00000 n +0000048421 00000 n +0000050430 00000 n +0000050455 00000 n +0000053144 00000 n +0000053169 00000 n +0000053211 00000 n +0000053738 00000 n +0000053762 00000 n +0000054677 00000 n +0000054701 00000 n +0000055241 00000 n +0000055265 00000 n +0000055805 00000 n +0000055829 00000 n +0000058518 00000 n +0000058543 00000 n +0000058585 00000 n +0000059046 00000 n +0000059070 00000 n +0000060398 00000 n +0000060422 00000 n +0000062588 00000 n +0000062613 00000 n +0000065302 00000 n +0000065327 00000 n +0000065369 00000 n +0000261786 00000 n +0000261813 00000 n +0000262417 00000 n +0000262441 00000 n +0000265130 00000 n +0000265155 00000 n +0000265197 00000 n +0000265696 00000 n +0000265720 00000 n +0000268409 00000 n +0000268434 00000 n +0000268476 00000 n +0000270629 00000 n +0000270654 00000 n +0000270833 00000 n +0000270856 00000 n +0000273545 00000 n +0000273570 00000 n +0000273612 00000 n +0000274111 00000 n +0000274135 00000 n +0000276824 00000 n +0000276849 00000 n +0000276891 00000 n +0000277389 00000 n +0000277413 00000 n +0000280102 00000 n +0000280127 00000 n +0000280169 00000 n +0000280773 00000 n +0000280797 00000 n +0000299064 00000 n +0000299090 00000 n +0000314766 00000 n +0000314792 00000 n +0000342424 00000 n +0000342450 00000 n +0000354472 00000 n +0000354498 00000 n +0000357187 00000 n +0000357212 00000 n +0000357254 00000 n +0000357679 00000 n +0000357702 00000 n +0000364125 00000 n +0000364150 00000 n +0000375510 00000 n +0000375536 00000 n +0000386645 00000 n +0000386671 00000 n +0000998304 00000 n +0000998331 00000 n +0001016471 00000 n +0001016497 00000 n +0001024424 00000 n +0001024449 00000 n +0001027138 00000 n +0001027163 00000 n +0001027205 00000 n +0001028038 00000 n +0001028062 00000 n +0001029368 00000 n +0001029393 00000 n +0001032082 00000 n +0001032107 00000 n +0001032149 00000 n +0001152760 00000 n +0001152787 00000 n +0001153391 00000 n +0001153415 00000 n +0001187278 00000 n +0001187304 00000 n +0001200557 00000 n +0001200583 00000 n +0001203272 00000 n +0001203297 00000 n +0001203339 00000 n +0001206732 00000 n +0001206757 00000 n +0001250404 00000 n +0001250430 00000 n +0001268643 00000 n +0001268669 00000 n +0001276058 00000 n +0001276083 00000 n +0001278772 00000 n +0001278797 00000 n +0001278839 00000 n +0001441723 00000 n +0001441750 00000 n +0001444439 00000 n +0001444464 00000 n +0001444506 00000 n +0001465743 00000 n +0001465769 00000 n +0001469413 00000 n +0001469438 00000 n +0001481976 00000 n +0001482002 00000 n +0001487058 00000 n +0001487083 00000 n +0001570842 00000 n +0001570868 00000 n +0001573557 00000 n +0001573582 00000 n +0001573624 00000 n +0001758061 00000 n +0001758088 00000 n +0001760777 00000 n +0001760802 00000 n +0001760844 00000 n +0001761340 00000 n +0001761364 00000 n +0001761703 00000 n +0001761795 00000 n +0001761818 00000 n +0001762002 00000 n +0001762080 00000 n +trailer +<< /ID [ (58\072163) (58\072163) ] + /Root 427 0 R + /Size 428 +>> +startxref +1762301 +%%EOF \ No newline at end of file diff --git a/docs/resources/interface/Accueil Prestations CTA - PC.pdf b/docs/resources/interface/Accueil Prestations CTA - PC.pdf new file mode 100644 index 0000000..39aa64e Binary files /dev/null and b/docs/resources/interface/Accueil Prestations CTA - PC.pdf differ diff --git a/docs/resources/interface/Accueil Projets - PC.pdf b/docs/resources/interface/Accueil Projets - PC.pdf new file mode 100644 index 0000000..309fb36 Binary files /dev/null and b/docs/resources/interface/Accueil Projets - PC.pdf differ diff --git a/docs/resources/interface/Accueil Projets CTA - PC.pdf b/docs/resources/interface/Accueil Projets CTA - PC.pdf new file mode 100644 index 0000000..a7a0eca Binary files /dev/null and b/docs/resources/interface/Accueil Projets CTA - PC.pdf differ diff --git a/docs/resources/interface/Accueil Projets detail 1 - PC.pdf b/docs/resources/interface/Accueil Projets detail 1 - PC.pdf new file mode 100644 index 0000000..90b21d9 Binary files /dev/null and b/docs/resources/interface/Accueil Projets detail 1 - PC.pdf differ diff --git a/docs/resources/interface/Accueil Projets detail 2 - PC.pdf b/docs/resources/interface/Accueil Projets detail 2 - PC.pdf new file mode 100644 index 0000000..c163a19 Binary files /dev/null and b/docs/resources/interface/Accueil Projets detail 2 - PC.pdf differ diff --git a/docs/resources/interface/Accueil Projets detail 3 - PC.pdf b/docs/resources/interface/Accueil Projets detail 3 - PC.pdf new file mode 100644 index 0000000..e9e2fde Binary files /dev/null and b/docs/resources/interface/Accueil Projets detail 3 - PC.pdf differ diff --git a/docs/resources/interface/Accueil Réseaux sociaux- PC.pdf b/docs/resources/interface/Accueil Réseaux sociaux- PC.pdf new file mode 100644 index 0000000..8633d87 --- /dev/null +++ b/docs/resources/interface/Accueil Réseaux sociaux- PC.pdf @@ -0,0 +1,3297 @@ +%PDF-1.7 +% +1 0 obj + << /Length 2 0 R >> +stream +0.527000 0 0.021000 -0.008000 0.509000 0.526000 d1 + +endstream +endobj + +2 0 obj + 51 +endobj + +3 0 obj + << /Length 4 0 R >> +stream +0.562000 0 0.077000 0.000000 0.551000 0.785000 d1 + +endstream +endobj + +4 0 obj + 50 +endobj + +5 0 obj + << /Length 6 0 R >> +stream +0.271000 0 0.000000 0.000000 0.271000 1.000000 d1 + +endstream +endobj + +6 0 obj + 50 +endobj + +7 0 obj + << /Length 8 0 R >> +stream +0.392000 0 0.065000 -0.008000 0.391000 0.574000 d1 + +endstream +endobj + +8 0 obj + 51 +endobj + +9 0 obj + << /Length 10 0 R >> +stream +0.547000 0 0.043000 -0.010000 0.485000 0.552000 d1 + +endstream +endobj + +10 0 obj + 51 +endobj + +11 0 obj + << /Length 12 0 R >> +stream +0.319000 0 0.065000 -0.010000 0.318000 0.788000 d1 + +endstream +endobj + +12 0 obj + 51 +endobj + +13 0 obj + << /Length 14 0 R >> +stream +0.255000 0 0.031000 -0.008000 0.272000 0.760000 d1 + +endstream +endobj + +14 0 obj + 51 +endobj + +15 0 obj + << /Length 16 0 R >> +stream +0.600000 0 0.065000 -0.188000 0.562000 0.752000 d1 + +endstream +endobj + +16 0 obj + 51 +endobj + +17 0 obj + << /Length 18 0 R >> +stream +0.392000 0 0.065000 -0.008000 0.391000 0.574000 d1 + +endstream +endobj + +18 0 obj + 51 +endobj + +19 0 obj + << /Length 20 0 R >> +stream +0.488000 0 0.038000 -0.010000 0.453000 0.547000 d1 + +endstream +endobj + +20 0 obj + 51 +endobj + +21 0 obj + << /Length 22 0 R >> +stream +0.585000 0 0.065000 -0.008000 0.523000 0.572000 d1 + +endstream +endobj + +22 0 obj + 51 +endobj + +23 0 obj + << /Length 24 0 R >> +stream +0.384000 0 -0.007000 -0.010000 0.390000 0.646000 d1 + +endstream +endobj + +24 0 obj + 52 +endobj + +25 0 obj + << /Length 26 0 R >> +stream +0.384000 0 -0.007000 -0.010000 0.390000 0.646000 d1 + +endstream +endobj + +26 0 obj + 52 +endobj + +27 0 obj + << /Length 28 0 R >> +stream +0.536000 0 0.065000 -0.008000 0.503000 0.786000 d1 + +endstream +endobj + +28 0 obj + 51 +endobj + +29 0 obj + << /Length 30 0 R >> +stream +0.474000 0 0.041000 0.000000 0.456000 0.530000 d1 + +endstream +endobj + +30 0 obj + 50 +endobj + +31 0 obj + << /Length 32 0 R >> +stream +0.562000 0 0.077000 0.000000 0.551000 0.785000 d1 + +endstream +endobj + +32 0 obj + 50 +endobj + +33 0 obj + << /Length 34 0 R >> +stream +0.585000 0 0.065000 -0.008000 0.523000 0.572000 d1 + +endstream +endobj + +34 0 obj + 51 +endobj + +35 0 obj + << /Length 36 0 R >> +stream +0.547000 0 0.029000 -0.010000 0.500000 0.538000 d1 + +endstream +endobj + +36 0 obj + 51 +endobj + +37 0 obj + << /Length 38 0 R >> +stream +0.488000 0 0.038000 -0.010000 0.453000 0.547000 d1 + +endstream +endobj + +38 0 obj + 51 +endobj + +39 0 obj + << /Length 40 0 R >> +stream +0.319000 0 0.065000 -0.010000 0.318000 0.788000 d1 + +endstream +endobj + +40 0 obj + 51 +endobj + +41 0 obj + << /Length 42 0 R >> +stream +0.744000 0 0.025000 -0.008000 0.722000 0.746000 d1 + +endstream +endobj + +42 0 obj + 51 +endobj + +43 0 obj + << /Length 44 0 R >> +stream +0.255000 0 0.053000 -0.007000 0.201000 0.781000 d1 + +endstream +endobj + +44 0 obj + 51 +endobj + +45 0 obj + << /Length 46 0 R >> +stream +0.597000 0 0.077000 0.000000 0.554000 0.782000 d1 + +endstream +endobj + +46 0 obj + 50 +endobj + +47 0 obj + << /Length 48 0 R >> +stream +0.248000 0 0.050000 -0.128000 0.199000 0.321000 d1 + +endstream +endobj + +48 0 obj + 51 +endobj + +49 0 obj + << /Length 50 0 R >> +stream +0.472000 0 0.037000 -0.010000 0.482000 0.546000 d1 + +endstream +endobj + +50 0 obj + 51 +endobj + +51 0 obj + << /Length 52 0 R >> +stream +0.542000 0 0.038000 -0.010000 0.508000 0.547000 d1 + +endstream +endobj + +52 0 obj + 51 +endobj + +53 0 obj + << /Length 54 0 R >> +stream +0.579000 0 0.062000 -0.010000 0.514000 0.569000 d1 + +endstream +endobj + +54 0 obj + 51 +endobj + +55 0 obj + << /Length 56 0 R >> +stream +0.585000 0 0.065000 -0.008000 0.523000 0.572000 d1 + +endstream +endobj + +56 0 obj + 51 +endobj + +57 0 obj + << /Length 58 0 R >> +stream +0.282000 0 0.077000 -0.008000 0.205000 0.798000 d1 + +endstream +endobj + +58 0 obj + 51 +endobj + +59 0 obj + << /Length 60 0 R >> +stream +0.271000 0 0.000000 0.000000 0.271000 1.000000 d1 + +endstream +endobj + +60 0 obj + 50 +endobj + +61 0 obj + << /Length 62 0 R >> +stream +0.576000 0 0.038000 -0.010000 0.538000 0.547000 d1 + +endstream +endobj + +62 0 obj + 51 +endobj + +63 0 obj + << /Length 64 0 R >> +stream +0.576000 0 0.038000 -0.010000 0.538000 0.547000 d1 + +endstream +endobj + +64 0 obj + 51 +endobj + +65 0 obj + << /Length 66 0 R >> +stream +0.579000 0 0.044000 -0.010000 0.548000 0.551000 d1 + +endstream +endobj + +66 0 obj + 51 +endobj + +67 0 obj + << /Length 68 0 R >> +stream +0.488000 0 0.038000 -0.010000 0.453000 0.547000 d1 + +endstream +endobj + +68 0 obj + 51 +endobj + +69 0 obj + << /Length 70 0 R >> +stream +0.546000 0 0.013000 -0.008000 0.525000 0.518000 d1 + +endstream +endobj + +70 0 obj + 51 +endobj + +71 0 obj + << /Length 72 0 R >> +stream +0.542000 0 0.037000 -0.010000 0.514000 0.824000 d1 + +endstream +endobj + +72 0 obj + 51 +endobj + +73 0 obj + << /Length 74 0 R >> +stream +0.392000 0 0.031000 -0.008000 0.419000 0.540000 d1 + +endstream +endobj + +74 0 obj + 51 +endobj + +75 0 obj + << /Length 76 0 R >> +stream +0.282000 0 0.077000 -0.008000 0.205000 0.798000 d1 + +endstream +endobj + +76 0 obj + 51 +endobj + +77 0 obj + << /Length 78 0 R >> +stream +0.542000 0 0.037000 -0.010000 0.514000 0.546000 d1 + +endstream +endobj + +78 0 obj + 51 +endobj + +79 0 obj + << /Length 80 0 R >> +stream +0.652000 0 0.077000 -0.008000 0.625000 0.790000 d1 + +endstream +endobj + +80 0 obj + 51 +endobj + +81 0 obj + << /Length 82 0 R >> +stream +0.600000 0 0.038000 -0.010000 0.535000 0.761000 d1 + +endstream +endobj + +82 0 obj + 51 +endobj + +83 0 obj + << /Length 84 0 R >> +stream +0.542000 0 0.038000 -0.010000 0.508000 0.547000 d1 + +endstream +endobj + +84 0 obj + 51 +endobj + +85 0 obj + << /Length 86 0 R >> +stream +0.604000 0 0.038000 -0.190000 0.539000 0.727000 d1 + +endstream +endobj + +86 0 obj + 51 +endobj + +87 0 obj + << /Length 88 0 R >> +stream +0.255000 0 0.053000 -0.007000 0.201000 0.781000 d1 + +endstream +endobj + +88 0 obj + 51 +endobj + +89 0 obj + << /Length 90 0 R >> +stream +0.392000 0 0.065000 -0.008000 0.391000 0.574000 d1 + +endstream +endobj + +90 0 obj + 51 +endobj + +91 0 obj + << /Length 92 0 R >> +stream +0.542000 0 0.038000 -0.010000 0.508000 0.547000 d1 + +endstream +endobj + +92 0 obj + 51 +endobj + +93 0 obj + << /Length 94 0 R >> +stream +0.488000 0 0.023000 -0.010000 0.460000 0.532000 d1 + +endstream +endobj + +94 0 obj + 51 +endobj + +95 0 obj + << /Length 96 0 R >> +stream +0.255000 0 0.053000 -0.007000 0.201000 0.781000 d1 + +endstream +endobj + +96 0 obj + 51 +endobj + +97 0 obj + << /Length 98 0 R >> +stream +0.547000 0 0.043000 -0.010000 0.485000 0.552000 d1 + +endstream +endobj + +98 0 obj + 51 +endobj + +99 0 obj + << /Length 100 0 R >> +stream +0.877000 0 0.067000 -0.008000 0.813000 0.574000 d1 + +endstream +endobj + +100 0 obj + 51 +endobj + +101 0 obj + << /Length 102 0 R >> +stream +0.579000 0 0.062000 -0.010000 0.514000 0.569000 d1 + +endstream +endobj + +102 0 obj + 51 +endobj + +103 0 obj + << /Length 104 0 R >> +stream +0.472000 0 0.038000 -0.010000 0.461000 0.547000 d1 + +endstream +endobj + +104 0 obj + 51 +endobj + +105 0 obj + << /Length 106 0 R >> +stream +0.576000 0 0.037000 -0.010000 0.539000 0.546000 d1 + +endstream +endobj + +106 0 obj + 51 +endobj + +107 0 obj + << /Length 108 0 R >> +stream +0.472000 0 0.038000 -0.010000 0.461000 0.547000 d1 + +endstream +endobj + +108 0 obj + 51 +endobj + +109 0 obj + << /Length 110 0 R >> +stream +0.585000 0 0.065000 -0.008000 0.523000 0.572000 d1 + +endstream +endobj + +110 0 obj + 51 +endobj + +111 0 obj + << /Length 112 0 R >> +stream +0.604000 0 0.038000 -0.190000 0.539000 0.727000 d1 + +endstream +endobj + +112 0 obj + 51 +endobj + +113 0 obj + << /Length 114 0 R >> +stream +0.547000 0 0.043000 -0.010000 0.485000 0.552000 d1 + +endstream +endobj + +114 0 obj + 51 +endobj + +115 0 obj + << /Length 116 0 R >> +stream +0.248000 0 0.050000 0.440000 0.199000 0.320000 d1 + +endstream +endobj + +116 0 obj + 50 +endobj + +117 0 obj + << /Length 118 0 R >> +stream +0.542000 0 0.038000 -0.010000 0.508000 0.547000 d1 + +endstream +endobj + +118 0 obj + 51 +endobj + +119 0 obj + << /Length 120 0 R >> +stream +0.384000 0 -0.007000 -0.010000 0.390000 0.646000 d1 + +endstream +endobj + +120 0 obj + 52 +endobj + +121 0 obj + << /Length 122 0 R >> +stream +0.542000 0 0.038000 -0.010000 0.508000 0.547000 d1 + +endstream +endobj + +122 0 obj + 51 +endobj + +123 0 obj + << /Length 124 0 R >> +stream +0.259000 0 -0.056000 -0.191000 0.205000 0.856000 d1 + +endstream +endobj + +124 0 obj + 52 +endobj + +125 0 obj + << /Filter /FlateDecode + /Length 126 0 R + >> +stream +xn0< +lh(R!尻զ/@IA9kfFO=$yl?[n&>9I:wq՝;hڮ4v>.4$˥JǏ)ԯ;(uu]dR;Űo;6ۯƗTL|а?9 ?0?pv'GnXe[NJ?pγ?&0ʳe<;c?,񉪭 &*ɨ, λϪmƹk +endstream +endobj + +126 0 obj + 524 +endobj + +127 0 obj + [ 0.319000 0.474000 0.392000 0.527000 0.547000 0.488000 0.576000 0.600000 0.384000 0.271000 0.255000 0.585000 0.248000 0.542000 0.579000 0.597000 0.255000 0.546000 0.579000 0.271000 0.547000 0.472000 0.542000 0.576000 0.488000 0.542000 0.392000 0.877000 0.392000 0.604000 0.585000 0.488000 0.547000 0.384000 0.282000 0.282000 0.600000 0.536000 0.585000 0.255000 0.542000 0.562000 0.542000 0.319000 0.579000 0.472000 0.255000 0.744000 0.472000 0.585000 0.604000 0.562000 0.547000 0.248000 0.542000 0.488000 0.384000 0.542000 0.259000 0.576000 0.392000 0.652000 ] +endobj + +128 0 obj + << /CharProcs << /C3 1 0 R + /C41 3 0 R + /C2 7 0 R + /C4 9 0 R + /C7 15 0 R + /C28 17 0 R + /C0 11 0 R + /C16 13 0 R + /C5 19 0 R + /C30 21 0 R + /C8 25 0 R + /C37 27 0 R + /C1 29 0 R + /C51 31 0 R + /C38 33 0 R + /C55 37 0 R + /C20 35 0 R + /C9 5 0 R + /C47 41 0 R + /C43 39 0 R + /C33 23 0 R + /C10 43 0 R + /C15 45 0 R + /C12 47 0 R + /C21 49 0 R + /C13 51 0 R + /C34 57 0 R + /C14 53 0 R + /C11 55 0 R + /C19 59 0 R + /C59 61 0 R + /C6 63 0 R + /C18 65 0 R + /C31 67 0 R + /C17 69 0 R + /C25 71 0 R + /C26 73 0 R + /C35 75 0 R + /C22 77 0 R + /C61 79 0 R + /C36 81 0 R + /C40 83 0 R + /C29 85 0 R + /C39 87 0 R + /C60 89 0 R + /C42 91 0 R + /C24 93 0 R + /C46 95 0 R + /C32 97 0 R + /C27 99 0 R + /C44 101 0 R + /C45 103 0 R + /C23 105 0 R + /C48 107 0 R + /C49 109 0 R + /C50 111 0 R + /C52 113 0 R + /C53 115 0 R + /C54 117 0 R + /C56 119 0 R + /C57 121 0 R + /C58 123 0 R + >> + /Encoding << /Type /Encoding + /Differences [ 0 /C0 /C1 /C2 /C3 /C4 /C5 /C6 /C7 /C8 /C9 /C10 /C11 /C12 /C13 /C14 /C15 /C16 /C17 /C18 /C19 /C20 /C21 /C22 /C23 /C24 /C25 /C26 /C27 /C28 /C29 /C30 /C31 /C32 /C33 /C34 /C35 /C36 /C37 /C38 /C39 /C40 /C41 /C42 /C43 /C44 /C45 /C46 /C47 /C48 /C49 /C50 /C51 /C52 /C53 /C54 /C55 /C56 /C57 /C58 /C59 /C60 /C61 ] + >> + /FontBBox [ 0.000000 0.000000 0.000000 0.000000 ] + /FontMatrix [ 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 ] + /Type /Font + /ToUnicode 125 0 R + /FirstChar 0 + /LastChar 61 + /Widths 127 0 R + /Resources << >> + /Subtype /Type3 + /FontDescriptor << /Type /FontDescriptor + /Flags 32 + /FontBBox [ 0.000000 0.000000 0.000000 0.000000 ] + /ItalicAngle 0 + >> + >> +endobj + +129 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +130 0 obj + 2567 +endobj + +131 0 obj + [ /ICCBased 129 0 R ] +endobj + +132 0 obj + << /Type /XObject + /Length 133 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 131 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +1.000000 0.000000 -0.000000 1.000000 1155.000000 785.000000 cm +0.000000 0.000000 0.000000 scn +0.000000 27.000000 m +0.000000 41.911690 12.088312 54.000000 27.000002 54.000000 c +158.000000 54.000000 l +172.911682 54.000000 185.000000 41.911690 185.000000 27.000000 c +185.000000 27.000000 l +185.000000 12.088310 172.911682 0.000000 158.000000 0.000000 c +27.000004 0.000000 l +12.088315 0.000000 0.000000 12.088310 0.000000 27.000000 c +0.000000 27.000000 l +h +f +n +Q + +endstream +endobj + +133 0 obj + 461 +endobj + +134 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +135 0 obj + 2567 +endobj + +136 0 obj + [ /ICCBased 134 0 R ] +endobj + +137 0 obj + << /Type /XObject + /Length 138 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 136 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +1.000000 0.000000 -0.000000 1.000000 325.000000 784.500000 cm +0.000000 0.000000 0.000000 scn +0.000000 27.500000 m +0.000000 42.687828 12.312171 55.000000 27.500002 55.000000 c +746.500000 55.000000 l +761.687805 55.000000 774.000000 42.687828 774.000000 27.500000 c +774.000000 27.500000 l +774.000000 12.312168 761.687805 0.000000 746.500000 0.000000 c +27.500013 0.000000 l +12.312183 0.000000 0.000000 12.312168 0.000000 27.500000 c +0.000000 27.500000 l +h +f +n +Q + +endstream +endobj + +138 0 obj + 460 +endobj + +139 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +140 0 obj + 2567 +endobj + +141 0 obj + [ /ICCBased 139 0 R ] +endobj + +142 0 obj + << /Type /XObject + /Length 143 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 141 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +1.000000 0.000000 -0.000000 1.000000 100.000000 785.000000 cm +0.000000 0.000000 0.000000 scn +0.000000 27.000000 m +0.000000 41.911690 12.088312 54.000000 27.000000 54.000000 c +27.000000 54.000000 l +41.911686 54.000000 54.000000 41.911690 54.000000 27.000000 c +54.000000 27.000000 l +54.000000 12.088314 41.911686 0.000000 27.000000 0.000000 c +27.000000 0.000000 l +12.088312 0.000000 0.000000 12.088314 0.000000 27.000000 c +0.000000 27.000000 l +h +f +n +Q + +endstream +endobj + +143 0 obj + 452 +endobj + +144 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +145 0 obj + 2567 +endobj + +146 0 obj + [ /ICCBased 144 0 R ] +endobj + +147 0 obj + << /Type /XObject + /Length 148 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 146 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +1.000000 0.000000 -0.000000 1.000000 277.500000 338.000000 cm +0.000000 0.000000 0.000000 scn +0.000000 198.000000 m +272.000000 198.000000 l +272.000000 0.000000 l +0.000000 0.000000 l +0.000000 198.000000 l +h +f +n +Q + +endstream +endobj + +148 0 obj + 213 +endobj + +149 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +150 0 obj + 2567 +endobj + +151 0 obj + [ /ICCBased 149 0 R ] +endobj + +152 0 obj + << /Filter /FlateDecode + /Type /XObject + /Length 153 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 151 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +xM6 ^@Q"A;vl) P&Ezq8J/T?92 Myw^uO^`]|ꀔ#ZumR7HS?cBun;:yX=q @.ZRR*U yu|Z]-n#^a3Qf:TYg]zY5D0p%1 eXb&Z?fΡ(᪅qtxƚwKΓRĒ0 ŋi5R sYS[sE΄ڄnJvq: +u +4R!/0Aˀ N<=8''g jP}gyQ\L9r3j&Ź0Km rcNUǃ 7`-qZR*(-J_ҫ:FСaM䰋⑟j|ZTB b1ϴC)ƕ5W8HqKL.k> q {Lp^Ț>t%fM7 əLh\ BM}|f  Z\ՁENi/t4P/Y55zj#FgDTa4sf8St4xR9 +։¨hf֙LϡlTę6+:B䝿h4H:4m iw< + F(>0`k>"4z'Ӕ &[p%oaA{~;Ӎ@eESRVlgK3V6 4sQJkg\F `(+~ݼ~T+qeldN rfO+CxC0a5T I6V|Iy ˀdvj<Q!>C4he$ZQ9†k`h?Bxz0SCXDt",4d޻KK2(/ B`MCk`$6D"Z4j$]RNX~'"D0Qv^UvC$`ڣbG:svG)MiLe@l1H #榊 +d}L4b8&i +" |TDzt%cu_2HK0Թ2zQiGC"i$Ġh[1Lwl?b +endstream +endobj + +153 0 obj + 1933 +endobj + +154 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +155 0 obj + 2567 +endobj + +156 0 obj + [ /ICCBased 154 0 R ] +endobj + +157 0 obj + << /Filter /FlateDecode + /Type /XObject + /Length 158 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /Font << /F1 128 0 R >> + /ColorSpace << /C1 156 0 R >> + >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +xMe;y}҃.{O` g$ĠΕ_DZYp{pDޙ?]\ez?~<}۟|\_E|u_X;_o](2c{޷zߟk]vb?[ ڮy¯c߿=lb?MW}'dw?׷}oWǚv{=W׬7s}]ou3ƃ?>|~~^eAcW׉r\ì),ۡt^b igjz>6w={vVfy;2?͗? _r#xeקauv&мF}خE^Omn~ܣF>iujކ|tDĐЉ~2C3N!e۽/[iaMfǰ×n?O:>qbϣ兏g6f4c M,-jy?v7ϏU0% 8'ȬQS-H@*=ʘ7.Lo?nVgBG72o~/+e^7ۼ4(Qf~vcݝ~8W38axnjVCć] &FBep7W~=6~ 9LPOyN;`޷L뫥!ˏ{dIv5 oRR }1-n}xAkmSf +F݌:H@ @Tl5CIJj4˴яbO q~D?> +)w6]EvQ䋴1MoQ%ޯ-51KoW%!kDsֻ 23Fѽt1߅ZKVA[K붣g%#P i ɠ˻=DMn5_NTsLM+xjPSWnT*Rxu*@rϭ^* p6fZ4^z=tUh{"843ĖPޤ +z4Jv.gțv +(s_i!{q)j_:*䃉 +[:cK|i.zRbjy}+`c烑^ rPL[tŮ[EtHB/0ORd ޝ˵׵fbHsbӎ4ߏBqZ;`{a+hnRj\{\K%-vP>%RghJlVLЪ.[VuqZZj)5oݽgCZ-B15btVhe^Gl)K@}TtQ+@xCeOvK|J] ռC_'~iH +fչvXt/myJjۇKz(i2u&BeZYSDs2XDzg+;@~^h/ ^"*ҎfUM&v˴QQC,7@{} EMvq%`Ԡ=~,ޢi_.Et]쌙jWA)AZοA9X=vHlףF +p߄@ + V m1W𼔙 JvQI8v37VG -2HοPf!K>HN" +mɿ]vX("Nz8h'G:)R.I"E J;svF[6w_b Il͕w8ze8{ {}:f\3 [uHsQ)IaQZ$A#䠘|4 ,/zKHqa2tyvUlv/GaӮ'}C1U˴m(v_wFsS4GbDbn۳(E{n_lVLЪ.IRtK˱Б09ʖo= +dɿ=TkmFɿS\`ɿf~}ȟ]}ZYEiTjXVKP? ]h`zw00ҪMi+inu>Wj顜&%s4Q;!GF"gPuo;Wh1= CH{;- F[T2'Qy5wK} @fQ,,pPaQ^я:IW.aeT#(2M z[ -0wqa.z\@EJ]:`Q:vxxvRTvmZ>2].1Ƃ)2-;t,*Q!2eD^w {wwhMU<ڀNy"Zs-с NIW0D3DA˴>]~ +3=̎ؤHq5{bB\/li^;U9vii>FR2g>ܩmm9\2;0{hf~ʸi,Pe5KJx"ǻd;nGm'ogwjZO*k6GG-IK}JE;zM}ZWOsw}PW/_)&\?lLlWWa?/^##a(-hb|j3ĸf5I_#M&X[ШۢM5=ɭ#4vXI BT^z3nݮm ,,pÀ;8`9tƎ%Wҵ$kc,r!Ln!7n&dQef5$.ڹhB[;Ϟ(z֨7Uo~5exFti'֥1Ě>)BD+ς gX͂ymT"zhǟFB繞na5Kc%5s][ؼkP=7RcT7\JݵzJ} @f SA% %-1 3%7Ȁ9U-7z!}f?[K4Z)2vi[y2YО#欗% 4cn';ǒiAB-٨9-=Tڏ[=&B0LXI;]tŎ<-4-VcwCfcKwىy?*fr>.b;M?(?a?}|z ?7|M6a?]@WK^~?m\}tӽ=e؞IUo;ÊA TدoOBuӪTJR΍rl 'ҜǷ@^y2155vޖ =r48ƴjXklB4S Plu@M&[ӛV֨꥞?8 +ZS0e3}e~e'N"u6 Cطl /NGaC 1[e{\sP{9m3 +:KClz\Ӏj4=PO%-w3\g +#7KeD,Ió(<50Q;>qQ/Һ:%(xΨ A }у<rqTywvJZ}L"%Bwy)AUШDJ@h@W(lrwVYj#5q}HT*3׬7T}V=Ұdž/e\ޣEឦd>uWF/4n2MEEńW@F+hGW%`=t(sgCd h݇6 +^KT11vVD{D=4@Bw([X7\(q~ªVgH$.zMyuU]P6ˡ>}Vbbղ>CZw +1Mʚ^SwW˺QܢƔg$@\gDsA13;jEM z BZb4HJo%Jƪ9нxvW& G:Aܪۀgܷ<\ʝnK\jAR쒍KtV]\YUʺ+v |6O D|&Vek1Q 1ݸ =,zn\NK]R#ӒqE疖V@pB3?1 w\DZ7n! 5g\4YzOS\J;L W +TkADޕ s<Rw{(|Y@(ΠUD@ CAZKtv +u;Ojږ+ыXP6"Q:=w +\ QMz?kT0csh#wR O-Ba +KYMd/@~ڳؗ:W&JAy"!`0!|Ze^ژ[j=7A}zQYp9vrdG*N7m|#Jm;Ն2ܨ5B sHtp!hT4VX톕4N4[-EKv؂w]Kѡgs0}Kzc$63g$X6}^{m0G0qf^l' F(LGKhc0Tʍon-2~,u_<Sܔi{wQ՟zSڻw+ܔ[dl1*Xyd0i)\yi {vggcǍQ-.][> kl+IHiP>e;^fGsXK+Jӧ&sofĈfb yPP0O$>3S!0;)8iHXEƫ>TeGs8fçcǒT]^3 e6! #-hw&*>q4RMVm/욉g?Ce$=k\6lCs6anKc73chٶL+#kϡVzZ=:G.9\kltiOIM,duyt- mdRD啢'yħR8X9rIF +]O@h1G] +JQ,UGG xLNuK;QU^伖h!r$J쐩܆+?FZm2*eqomato?;UFT骣a]|u_=^Yδ+T{6UGg64lV3QUoue*S5r]S{ovsGP6fhI4h \Kt dDU%]ȢL-v&DAyAzL;}&. +e[8bȇ?QB53!< 7:wgj~܋{ HKߙ獖OCa]8)\< 3:R(C{GV$У_)9u)PZ}Bc 7޸ 3L+7ˉez(ġmt壿 -O ٔYQ%g&{|y"C9d[Gf_ID5X%*&f+319 d+d?S}AFJNQOڹtoC"EmzuΏ*·]vuWHV,N W{~Š8cqrO; }j2L$;#$8uBBe@"[Mg:$}DiL.GXbD΁,dWH(V3ї,I4.L͖Np"k4(HsCܼxfg!Ъ-d +zx $v Cw;gDY[ɜ|rbVnXY~vAKK3'szeFdEy#d}Y*-ҡF]}ضDHi~ {#I hy!Bn5%Q5OAIjvoUEcjϛF5^7.5;VIEEt3̋etL6q&k$hwGi$eYmr,6[CH7%%]W ,=q<3v'>d|PK͵NZ +HvsDMZX9顔XT;|r"L[ꈡ{=rVLv!`!+RC'W %)QQ8G]; +s8kޢ_ gdW#9U͸1޴휑  5F^Sχ5'3׼JXz] _\_)vPAw0O|_#S1Z}G6]VWɕ9zTq; l}%:P~=Tǎ\j|9<_0#PƬETX+ȝLQ'ͨEՅHf\yS'&Y$o^ko_ $eT&yVZګvfÿĞv#9CDY;ፘޙXMZ2WBZfeAy?֕hJt]{ECH *Q%턄&٧#vQ1[ZO8,F['Dm!J}MD$$3@ CǤ˧^7!NR69)QIG,fr5_8 ڲ_GM+B߄<TgP{V-su`jw n]@;NNN(t|N\J~[!`OHgؖRR-.&XҜ@`= Őd&c168G/Herӊ(_^r,8B~ݛ}%m<$Úx]b/Z9%7ʆ拥x60JmM_q#}ZѾ Þ1lُM#튩BӮMfO]l迥ɃX14ttkٽ!s&6,(<O*YgiG44D74&nҎYZe0ڳ{;١7^,-gNpcsc6kbB!:P:> `ZȨWsK0X7!FY +Ggbuc.j(,{%Bu0H|oؙBD۰!ܤ[gy n1L/w +"(BCMLكƐ{jn gCH͍!d34hʪ8?lz rV1qD$11Tm&ٙY['Io Y`kani'5!rQKavƀaܡBi~Jm(wwe}h5' Ɛ{h4Q)EݘAb %'ιrײD?Y7NўDM1hL]FHQ&s@g0fvwڑE8cH5`f㰒|~҈٬ŔaY̺Zq΄+ZO`iJ/2f2?;`i#~5wK"J;`׿en/}تw®L<B.]dkT +{'̬>úxRVoP'ivg=Et Gf//pl kGwڍt΄[i iJ qZȨDdeR=~)CߛyZҐ}\YǩH2:P䷬ћZ+#p5l0,jn$%ě][UOuOA}yYٱb_!%XFO\gZڙx;ָo7QPq]LM!V~mgxGYG@ '5 t9MVOV'(VO,cirCUD`h&uiB3 ++gIh*: {.,ys(hB.2K9qۥnM4QSvdWhZ@Uqʗ|^~U.RS3>_tN(hW0 4CB<3r?=6ӛ6AD9v/ݳP1+Ro|Vʳ ,j}Nc&w=Fo#z[@C!ah_-3QLTfVa dOMkڙSt)e?˓CRQt+Q.vBҠx龯*EcǞ;YBǫ ~]ݽcM웉[▞3^QI>"-k&8]FŁ f{OAP MAP +/h˼AH3wӃGjl.蠗,HTUx$McDemh8Hi/q\M8ugEtcYCp9&N+GS_$8wx ::pe{QY)U2j٫/^@n9Ύ]喺G' NM*(PcIW.:TM6J($t EWCt8mI/W_d3cWDB1uFw찹Br][طZ۟B`3#=TQ 3CQDC9)[jK'\x{.z(x!< oȫ'ϒ,%zh'R̵D2D8c? eO;7ٻYxW>x3yfAy+L\kQfZ:Wp7s9ӟ`#h4;wwFI뺄\K|2gσ;#us~Ona˰1ȣ!E.`skr`ScEih]1GK!=>3[>24.3B3KcYLţ~OyZ% Sk-NwΓAN以 +TA:DX,I?ٲaS߅ UNSgŮ"@^_@5f-ނfvZy̫mQm5%;F;%@4" b]=DY东f 4CX]+*",DaB^cyuʇhgO^Pjj,a ڥv|Wo[S +M0JtOPJVVZ影IΨvmbl3*FtA+0H=nT%I (ѻvT=vJ?G3Q+VrFa[Z'.H#tFj@YpUPV͌Tre|[G;+t}6-QEH,[ʍB!T3*3DKbL;gKi'/D(vQۆ;VѨ=N@$UjZ)CX8DS*uՎ lLL<==djޢX<9,3d?=Bn^H\?i!|UgLTi]ztĵAkh޶^H"1!CRMU8N{<䒴G6jÛk}wuώ1P yMwXqbE(AQ'"3,+R-^Pe%>-&3bL:ڑ6lK ~[zO$.%>T,k Og#rrZ0^ln;o er cdd~+q.ee$ zg @#r@a#Q&D:mvćJ{Tq:@VM/! ~,颫%Pdy9{.8;ĬO9TG-B3y>V.DtYeAX!Yy*qj8YZɻM킔oq/j@rQQ Bn[77YHoǨDt$КkͲt?A*)h_ j%y(5cu6r-_9ݧVoQcGÓ5ׅb[eAXPZ~@(y BZaRf#ȵN}L>e+7=i5& +uA(P=Θޮ2JT$^|i&f{)ͿG޴*OZڧ<7iDT/,Ŝ 8_(|UˬnEMrڣJ[HK_@':g*ٔżfGlv&]M*y !Z|F,gb(Wi週ܳ_+__.c+WO囫[o;OS3-z=U7*1I^WǼT&O~7NjbwrX\47;?גuIѼI"mOJ%j\DZkek;6Nݽ>֮+h,Y-vcѮPjP1HLѵ:C'JTRjLo].UXm`qf(z3Ygd;LTT}ra#)֥tإ ^iYRbp3?Gjf5Ul vsrB76v.JrG9hE[tkt͍]:Va-{7!=B7C*ѶmJq}J\#6o(bBNcWd bReAvpn*nygyroQ+1gE;gWF…\ ɼI%J|oϨ|%!+ UMdAyr3c6UQuK"D] çvRt'*)!BK ٽDze7KDvj>jw z%;׺5:'4g,\R[8?jG;Dh!ᠾhcODfe&`nn_I/!jsDDFM(5190)%Jt%iY `ʓFBݘzTts]w݁ϕ肏2! FMkKI#sgBp=WBvDPW{D9:8 L +VJ;|K`.̡6AXE;Km;&|U'΄ +adK^,[WbRRȃUYے +.?O|tOp}t#F}_nsqyl |LW*v1#Rӟu:ܿ}{pmI+-|z!浧~u1/bgpMY, +VmfZ⮏nAofVdF E܎x}~AE򚄟9+ yV6q'ǣtבÌ+0srQgq {2әc]aNײxQA(A&dyn4 :R^{< uBӛ[@kTNDr+5S~^zr``Ȓ+~a8d)B"&&f299ln;P!F_Z2\_sɭ-xRnBFsECoJ-vZ5خRm*Ji_=AܝR-cz(f|=^)*Y +AvT:8L6o'Ɔ}KzgANmzk%u2kI1VRvKt!&u!TBޔ=P];UǮ>\Kt`qB:PO]= +=: +Mj5MNd$*+Z9*(VVa!\'\]rN#5itcvD?.AdofɩЄ.fT #UW +c~Ҏ_,/+њC,|Z ,cAn+*.Gر ]!\O4ݣāW@"Z@."YjW*1{ځ$X. mY>BDJfAHEڣVُvF vU!;4HCi!rf5Ÿe\4>bԅJVd*(2AElMjAaNK</LF*M{' 6~cܙZ'n\ӣV4gȲT|Ua14ln'kGq%-i;scGG얕)iW[vkl*f&a٩ŜL%7L\*K.6`ޒVQi)(Ѱ9(*Vt>ִBIov_WϟS)&زlDQIΥMC1CM]l$i;{6-#C%zzQzNɽX.ʵ2GdiL>N4MOIkixWM0oU7Y֝N?5P-{~Y0+oZtԯ(Z|>Sőʷz aJnG"l{^A\flTG^H%cS $shYlIZr,7c`(v>^ З0]̴+i좴̒i4f&nbhMԒR` #-B5лurmcܴtYI+>m<-;`j-H;Ĝv%}KZ˃Bz4۶9&vǍv7Zh#ecGڑ{hIW +u.yCއœ5{~,MII- +>I +7H + +h ?3*Q?ꨥ4XCJD IXhQkHq1pBD[V9Cjz3B#˚]CD$:O2Au)XPez +bg이*Qiv!b Gf0?U*Q͌ju;+}K#o}S@`TiiԵq q)UvbNgMn7J *K8KWo J|*Q e5jdqA v1@ȵJ Ys7* 9]F;aM^}Z>*SF%3eIf)[K`1{JH?XԉYˆ֧0KTw`++*H +X~cCCLVSxH7QJnh-4Tkm?L} :(c%SNߙs'P=Q4}JDG JNIZKOS{Lq#%&X*㠗᫶v|gT( +=|#tep❯zЛOen7*ZO]LK=ߚj= Ip\z +S=ZĖKz(rK ; U^Ai q@NL/b; ,O6QGtA/[f#fTn4}TfYhu!* 2N1p¹G]1 ]ǁ_E])(FSmI3MgT4J/ќ{f{S[t9̵D'|ޙwyXg4ߢkRk# B.yǨ'Ga;4s]ʂ VXxY =xNDU̥B|P8ܮ%& Oa}q|0`JGhWv (IsGZ`5|Uy]pbӣ$]\%L)4Jz/VK;d!z߽y +o \de\ڔ4=إ0Ԓfn}J-6~DY1,0ҡؑh"%%{*fOGu|\'{']h҇"d&FW%#W0X+W<}2#`ZD>,f1|x0a%S-@I +]gռ]lJڻK\Z*{rlq>"=iY5|cO]#: nFǐ_CȂC3|M9"0)څiaMǹ$ډ15@2u7o{,~:읈i$-BdlZ +_9ʧTF:u #Z9.CYR@2q}di+qu3-?b5ʒqja槾Zڭeޅ,*&_=!x&rlAWK.oJ/UtA2Ƞk] bD~=eb@9A 5s&uǝ, eMI>bADZc@=z]tD&M Fav Ai˕8Q)y1hȣ[tBhFFt}&F@-nV)(۽KiZ(֌*~DݢFhRZ[hKF=26g1V~&1ulЖeADŊ8vɅ$`g}P肶r= IDe٢*s&[OhaH#f OK͸`Kz(-aޣ$.<l箥$u/`kޤjuk3TD +I\ vW}r8kEt~$\s#H{E%׷5jӴT&zNٙ=5-w]]'G](bN)\TflD3ut-v2SEZ߾ݺGS鄬ܶX#}&Z1r%&.BEGr[x@Ϲ=A`P(N ]`P2Dͨj( 5f ]VYTf7-C $Y5V^̯68Rv|xqrGwtևk)M趝J[*ݵ[Z9̕'lْv2iA 8,=ՀZtW|p4-σfԓdhtʂbA-E& Ĕ<I{L[zTHcp4a*0톑z,8f>qbK ڽԔI9ݳu~;0ʌ3zLԝQcIfhWCrzFFZ8(,ŜZֱDō>ևeͱsڮyK>Z&2(j&݇c=H`wDS}OdafYz+&{Fs;_03<я=4(-]2b/h,Rm4)zN=kV׼(Iz+@}bȂV?(dK.uע-*nMti"J[Í\HI-oWMu!FVUvW} ,,pP* njnh]("Mhd,t_<3hka"G[3>C a:%Ye-tddE򡉚z%>A7WqPL#ZNo^B3GDgp{ F3%4s](ce=ǧˤћQ"ǨY?a\Oplݱkz.TMhpDh'\W|~v-qH:kmov9N.׼'0%mCn9_23KZs3R#*z{B'& VC̟TLԣi$ +{/h05/E (MtbZ03:dQ\Ҁ//i>WXy#*. L }/񒝉d>H2|+ 1jTqέv˵PK]!,3D.LV;UdkfO :'*GgiWwwyS7a.c^童UU%-]_a0jcR``n+8{Ɇe]ͯ=Dq?A_W4p^ ugn K*b^U75*zEԲ4sGZ #3R挴8"mF.\]6S+%O)T6Z[ j7#j2q|S9*R:Ql!e.R лZLj@5r}|"6=q*sj; +gxgtӉ.1eȳHGS;1$}7Ԅ\cNF_la|E}!$O{(=Qz-wua20/xB&g1[NKyUCʄd])gC4(GVcШ +pKo)H55AdN%r^ޤ;&<ɢp+5ZsmцB3A_5'큛 ֯ޫt0^f_QBr* ޼] s`N<̖A<לQ^]'2eevt2 w?Mn5߂s5V~*`s0Z;0H|P?uTmTs1([>rn0;26#rzuaVO?:ԣ˵F;fSܵ-Z}6wϻ +NYxŏÔ97q@F҂'d c +}ӥW:#0n O)6A78kȒI_Q<{i(SOLZ0HY&1O3X}~h +1;|Ɇ9(vQos>{> c7iHs1=n)7rк*Z;cz^jO;RTc,s3,d;wqX{u=Xt+G1>^4&]KpR(pT3Tip(F0s6`Ǟ]z}JRZv9&G{jO#Cif7]ޯXZ1޲y/F:OK-? в|Ǧ[fAK-﯌@ڕAUD̓0ۺm)VJG}EIz ŮϼdbtlZWUv+ȻPk3رB/A_b|OBYYd6gDά%`jVmD48J 1F"Q:A9w!eVGa&lggvЖHQu)1eo3V9AwٖQfF:KoJCD9UBGTC+ƅ/KTR9-FV[pZS +v9#؃qR5HѮV?tQ!Wj}=!cB5nOPLM^l>8@9B;7HTC3!6`{ 47O%VvK-dT((d˴ v[@(V}S]wcG2*s{2zE؄G1T ^UF b&]LlwJvW +vb}KWRQS ;W̮8!;Qzx8 +>.5tE$ .ٺ{뉱`oN9}g:L\mCW9GG,_5#:#xg#8KLzT(rOӚʅ8-_PԐO P{Cʅ=>)<htquY> +endstream +endobj + +158 0 obj + 20870 +endobj + +159 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +160 0 obj + 2567 +endobj + +161 0 obj + [ /ICCBased 159 0 R ] +endobj + +162 0 obj + << /Filter /FlateDecode + /Type /XObject + /Length 163 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 161 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +xKndْ~"&P~^ hߜA2"`[\_f˖-_ߖLJzz^6|rܶ\ޏq_|8ok]qc韏ëu[/bc/k/Ǿoc}۶Z>}r^?ߏqn}k}.o߾3㶼\z߷zyǾ-OoݱُsowĘ}y߶͍^\~=q}|Z]ko_gm9O2>} ױqe`v|_e8X4r/=/~,+w q>m?/v.WۖnW~Dk$?u;\|tߖy3x=|cqzݝnh[Xn/uۯq{}ZlrVcg`5迬]`vVW ]/:]cX3Tnug>^u 1¾,=c;7>'y!x7^;o\e'X}[v: +kpe9`q.G^lِPGm4|m?qxt +6 +M7Й1YlcwXۼoW|%Ypl 8Q(sr?8raڑ8 E﫟r}skq+l^^<_.a"GQ ʿ=pg*?܊:Nb(Xnޞ!An(a?[jl3fבl ~@Ox| +9ĴEfC\hdP 9x4x9䚁xdѾ@8 w.Z8u-~[Ol z0di3m=I_>ĮƸ؏9Sm{ &ny0ˉݧm݊(f4Ppuc/Q|{$!mህyX1~Ɛz.F̋ﮍy91~Ac@J4s>xIA]vtˍctKoʖ!x 'iZ0x }NJ,}`)λ[kef#QU.(A\>,7X\`o &w l ֜ Jtw~G8S켸:m&l ͆9^;mcц@n1RsQ9V`z>ce ,` zaQyq]x,.ܛ,NA7mbΩ*qc2Ɓ;e8AȣP~dcS֡p&CKZ]$ʠ|9-\ũn]@M@Al+De( +ˈ ʚKBtEKwDC'ڵ6ka  ? ghIZrU}u^)Cer w0ŋvHGQ;GKw\u2=3zF:4" &e2:5('.; B}doAIl8iY?6@&H !Dm1C>-!icʀ~g#Eߝg$ :vHMcP4sg‡lq/^ufCPpTH?w攋_)LC@xsQd hN !TV' @!."Թi~9.x;ӍB_FȀ\N0xF5zqC',4lCG ÕWN@s%DIN `. LfG9՘SYwa_oȊHо N j O=ˮ#-L~1p~:%Lڟ*OJjO!$sog8$Sʱ]"V$l(i69ng( -4*4D pǠV.b1m6QeUuΚ 36"w)'#Xvd* +pUdNW-(`'u7ǚ^9!-t6:j6B]1qGF'|yf#ٔQnyթ g;M h j()u}%~gHCD̅[ѐ1ļHg NNVz9k 8ĈHUhKgҺXxROuAC"mEG$=7$ S92MEP%YV(;q_ts*qi V85.[*0TfHSAIՑ =Ժ,Lu(z6ZF{I>ZR5i*Nt 'ҙٙG #SnHG^IR*Xg6Q!ʀЉ%ܓ-yhLz,B8áM4*aəˁ;8gc`4.@Y8"y$> +FJhۑض5:!yccWLQҠҿ; JEbMR,Dvc≒UZXUR}Yϡsڂa~&uDg*g9[WGZ)^w[ىs(8B&i%p ' moQ ԡ8R81GKltnℒ ]Lp|`{*"S utG~f#y6YH L?8>>q jFKSW 3纒{:ġ`:&!ۄ$vBb)K>BE +NY5Uoխ]ͨOH;Ì(З6~Ym'ICi['жT+^gN@)-\b=g NkmI%{(x'̝O+;);8Y5B;`5pفSﮌNs"0,"[RX0򪵍Iծ"rfs )D@ +d Vr=ƈz'2 I ՕޱCnCdkRLf9nT{ۛEY5Cj3+o|NJvk)oq=@X[ +T2IMC1غ3)@:*d*)mbů@M::֖̯R<eHB?1N2u z$)Pɻ([6ĽAv $MԌ +6eE6kdgu6?kpo)^gHhD*{#fԵol5 kjɝWlaj4Hj|\#: 沮ʚ>,2XNZ7yNf!ZH/Cb,ZB<똝s;Ttu?Aflv +p[#&~M86`8t"|}KOk+16v%ýy:N^~DBؓ*Dp.D(a"O߷\CI姯k[GKOH̉do'7&xlU?u]W;6c(p[Zj>ybivԔ9ÀFcJHlB9Q;Ne)ۢ:tJ(#,7.N͹&Dp-굶U 7}Xc*]'yiweΘ{B@E~u&*tf:su*(hQ.؝Q=0ץ^AQ4LKzt:c;iqVZܞiH6-9mGwΕ*``2}Z(SZKA D2(F:l q+Ai|l")mB%Y XPH6eIي8@ ɤSR+ +>Vx{H lDy-]IP1u B̄\]l@iCsG1dU]fDK~O0Pkl]Uxc,qp'U]yfy 50 GEn^ޘ8bn6~sgOY)p7~fcku DNi|qQBYÔCЗZ0chuco !G`6xmHI7(^ǔ(*Y; *;"mk2g0$8[QcVVmq{ Y}v2GY;M +B &nIe;"ve}QPfy@ Y$A>0^Cq6Ӆjշ$jF +RLuǑXjyxX֡G@Q֪FMK+Cxg?'-?INiG!E\s N(xfplLHS3fc:5 +&$X4>;R#Rj +d +nBP9)1t"noEb[,N*aU"6RWvITG-񤥝`PE3g| ;~aNV} + "BZ0T]搣ِ[0 eYD\נ9&%iɧ#fZ٪6 U$^/ |Kk4CD4f4l|#٥ޔ (oսzϪ%,m,CwJMhoE}K9[i[:hg+CGl4[*;eU2ccw`sf^suXL?&,+aR *y[УW}H'8 Cѻ':o62cKɻPcV!翬 +}{ctGSV ʲ2Z"Tr3'N}q.qF|:֬aAJNvszZ0GeTȿw)s@:/$"RDrRs,t^xf"=D:~%2X'Ρ/[,qG!',ZSWHF A.;81pna +0 $L#(N͝] y2s6;RT.NNXmQ|DCYaUBDMGTI{R9>-k+pVZTTHiYSId5) qfIrhT(5FL4Vڥ8{28N;hSo=z~ d2 +"\zZmh^lDvJp"6:Zo`:h *7i3m +u@MAH BЇW;]d6ooQ58(\RGٖ@].Sp· ᎛fcǁ6¢٢اn6HѨ͌I& d2 2O#VfU +EC4slʿ{s">X-d®,GEl,Js`=*6[8Rs +"!坥쏹? <2A\k(JZŽXO%.KXVZcEYHWhei/F˴cjO?u‘$,C,rfȖīA KGvZJ)Z""5[f)-%/,@OQFpa%9 8vO7 hűXP|YTWTj@tcQ DQz}3USi I5"KdN (X*ϼϝ#4't!!9C:; +-wB7 R\H!u;0 ׹?~XU!)iOK0s*08CH:pB.ĂCXg% .epHUFI@CwB:Eo0O9}Qt48L3W?O`*4[Ѵ9C!WVvJt-)A#}= ~GlBO,d)U)N[&K|=tR\j|i.[UAӢ;JgNR{,LSS}cJpe8y>cDg5JIi(m}7;dfmXI{4ؿ0Z6>8R?S* + +=i;xUWWȯk} ,I%KiOOe' +p+)]^U?̣UHTuq. 0{84x"0qGa8!tөS iR}N7Đ(({L*PM2ψjB +MpQb;]/`W +%Yճ([ߖ ځ;*L@*Ps6g OYCAsTc21YR8vc: < WO;L= U/2.bX?,2d+5[3HCMmg.5St(亃G4>1Yȋ Mdn͒< :+wiN|U0<0>.Fm8:3`/^R]^:6s9OґUsnjo},AЊ^}u̶N.-Ni&u rMF5FJk^ʆ^[J$0I,<HٯX@E ʚP1["{st9]XDmɍ.fG1ay@,Y5*j s2i y^&)y@ +>NXAlŸ!g6C wJoWpyc$vyd 0g ic/DL{'z/ Jw%4ŞiNOyKc E`KIy̢ `rk d]D]&ۻ![B+6+w(;x2(ZTh+.BBaj? +jx.d{{!1@jH<*JfmF1V",KKzg~O]Qo_.&ˬfb렩\d"RM{RU6.,9"-3x0HWl#6\D| =6 c.B#ה)溚f+5A[ӬW#Chuq|+S8>6؂*zExM.hrLIsm+C*X $،Ou|>NQHrx]aC ,ۢTL ֡أJnH ZpJQh n jZ% p"y4-lT_uĒsMBB$őQ5)[q3ed,>4 MYomPQ~įAvsj!q~# X;e%aotDK}ƺ)u`@Gyz 8mx9@6E!=C/$ϱG +G(3 ++MX7e*ӧ-"v4cxG؝J4?īZwx_*-^B8T)XGHvDJ<0(F&+>:P^$#Ԁu* r~",'p(R`>JP+К^̶_yY6N(B!+ +z@7[֥]?$1-ZXzB~%CU$˚ L:JVq: t@ yکHxމZ>AF U\,v5er;V+ʕ]qCo4]񛭖0;3*ڲr`Cn 9a _BOEȻfKEh%&!S 1oEWWlmND`';jjwT{΀ư2dj̦ (BEVd* "[g ΐ2\ dQĚ` 3==+)611U7p}kMQe8kj~ISF@Ƥ(bP}O܃v!Vq/mG nGŋw 6eK$kӠ@3:O/, c*b1}%Z0Dl~p\VЎb_")ep1Ā3jD, +r#m-\ RYd#د,ڮfv}e2!k2ob3‡=Ε ~H;Ĕ +p +[1[0@J0ȧl͞K62ǹ(XCz4#ЩINBQC𽦴 A6UQä۽O/J1-K 5K:RyJ.Zΐt\PԾ|o|T!]S X Mv?0ht#m߽|w~|z_m\ +P|a-!.,ɮ*/Lh@jU!waO}nX5*,.q %'5 $[R7F_K +(IY &TPYTMj Q dvN<H6[#zVozU?&$ىLB2rnÂYz_DFIx0<ƾZD$nO#pO{pV0GD?rNL#呌vצNEԢClCSł 6d'JJr\H jX0gV )5}O-P1yQkZS8"-%>@L`p)Pjlɛ=A|fKQr0UktDnR: CYM{K,+ :۴ux˫½ǭ=R$T"e:6QlGL~bh?R{3HAU|vY>VRUoN+DԬcT!2rVgſeq _(r(%;Ĉ&"xN ۡ'#[bPƖ1aVt+̑{ + ȝFU{N:aB>7bA7fBy5ꩇg".Wk!,k0sEm=QhAfA~`ZOPDml١$dKR5RՄ h?n 7r8${%c$'(jew]?mcOVsjv{6ʹzyRKđ1%^ƶ(xfwGr/q)O(I:rI+Y|zگkGz4WO_W z'_{4RLh盤V/("G"1sO! 5P! T5U E(!(7~E3Ƴbsd WՈd_ +E烱8;fY|Gpܬ)`+zf ٳ'wִva4ٵ8TuƧfﺮQ8* +b '[SF$ڞ|`m(;хtƛ0kޞhٓ3:;]#J3QlN({ z=.O쮂͖ ŽAY1Hs6d Ea0l.;a$YlDdF+{ɘ/b:㡓HMLiTѬo?m?ƹ4>)wDFZAGF ݙ?eK~;eFȢݛkrnD弛ތ jn<9$5T2ld'8p1yЅ"+$=F~Ӱe /u-Ȝ¿g?] @]$q(X.M7>< ?+'.Ls}&Wu92 d =2 TmwaГ5trWAD DXH1q\sHov}"ؙ$,0a Oj9DF/cFABݢqKC +e, O>3tt46[L% a̳\z4;z4j|BU>3#!E%;keIRUB i&'B˺h1e͘\Pxnؽ,+Jd +Hز 9V50/(A?"7gLڣoTE~suUVRE!)F+udM*3 ADh/TMEjST%Qp Gb*50J½"BW_}?H66v;)hK\a;|v-YJPnEt:އzTK%掁V9Ecd[c$[<$^̆FIf/zN]~yY5l܆a)]'2[ttD'T#CMisyk10ۘm)`7%YzEf]-^;1])j{AK~K0!*xb2!yJeS Ӫe,"Ⱥ&!  эf +u7`,#"q+ Y%}MP_X)H1kKIekAdC#SrEѩ`'=pin j3 +ý铺2rb!M^4CC#,-e !D*2نffpTkMcYPؓNGh9Ii&X6zR +U xaB);%̆rw <˚Ez24fq0J JM RS $FzP1=y3 !] x h!ia 3 ('eyo si+W./ +#!Fј [y'q.Cq%{wqSJej'7= R 8Cz]*Y0bfjE)A0c#椾l[4,PłT#I80uiպ5DjH7OTq QZjv"0Pd!SI fVuiHvel Q}ۖD/ˡ%8:A:=MzVWW@qJ"ΐ{KǏA R"J{q*^;%HH%;*fR& ±$ ٢=PKz*ܔCe4ucԙE*pN]dQ\"QGѫ V{ v'3ӨDAdސ!s8$ꬉŬ,Dޘʚ|O(R;[Oq L1N*߽+s$]Ǣe*-cx HʿY(i80B~sla0QRQ+N ` 2O{ ,ۡ^{!d&0ez⁨2YR[XFȈẬ<]O zx溴GgIUwU}L£4#%tG^CȘtY%dhjn/J07 +">!+n *)fԳ'ۺYD@%@+PWu}@ 28t%1=1!m(2 +iOfTՕUBA- 2/*85LX 4;Q[[SIyXtq9zru<6ǐe8{vE(BeY +o6EF}@FTˀ]D-4~uIs??5, 4I%A">Tᐮ "?+;vqzz}",\O*0;H=EtmX^&bKk%f'ێ@~K%B;8T"{SQ–Q42Q]%^4:Y:(IlPPn,x-U@Zg'jϕPMl< hp(bl2DEa)yR[T\WڂLd0g1a 2e +aB<Љ=Ep#I׆2eP'\$LBdž9PFYZs@K>\/!IUBb^&sXTnxl@+v طa5\I6eKp={gf#f"ש$*G9!9Q4ϻ'JYZ4㺀d88:E̴EEr +b*\ZPJ.p UDm=jl@rfr0 X? +1UQPMd+LēԶ| ? SJ:Tn!Z(@:\,0:pO9^V̬&r +t KW*`$ICq*gxDSq,e`8ꈐk27*ۀ1d+ oPF.J7zK#)' HYaArl5Qv6~N299k_B"DH"Sf.-|58b#ܼHX֍OAte"ft~y1 +j +J<%~t#'-tiɌϛ{ez^g%5Gm\XBPl !!󛽍Ӎ6 *l[J{nHƜo3ZchLRo0=ѽh]F{:$rS|%D :  |FNu?W7Oj|Fɲj3*w@8Gs7"hn6oLQ#"њ1o<'Il<:|I5&f#RdZ);Z`mh>b2aw>% AxIUgXHZ +bO2ӵd\|e9V#)7PT:p2$ˮ+@b)$I8 R@"lZ#y>rwOrm&p2!l0Jtn>32TIÐ"ǏAl*ZM` C" +]I^Nx=y?"Nb 6Ȏhv N7,`3OZ[EyyNw=Ù<d>Łk i""ނFHrKC<(OKjhAL>@4U)&l*c5[ҦIZDn$n\[ucLi <{͈đ!5fjt: +xL+9ɏe/qBB5?Xܷ.6˭$2{l7&M"Ky_ȒJR89i.xd +\kJz.d +b+&Gfvl>b/exsFI?>wKmXpa9n+hLfm"L$4Ԛt-qܛPq47;➚7"haD<٬$uv@ | +lA/3^Jqb(+`C HdZp ƒ]kK Ġ@I<7YEOۨAe$~2?ygy/gm}&iu^ӒZخ1VT9VhqbOw?y#y:e nH9ku֣+pW 1)ö(2Z(&ŀ=e)p%Fa@L"_PQ;LeQxJ}˿[is<*4HSХ3%(vFik+<:'y5Ks֡Ĺh + \5xF`$ɝГsJ^ma1's +=+!LMX@F/GhMEfuCْE@9?k$4yĭe)ZqmgjAnt ++*D+hQH+3h51@{ Ս0*g\DَC3SX}'He@(WDg\ZB8^hA s\@/p_B#Z4kU?Q^D +;TpA?](lOZ MT >=0| r r~ `x0*pg +I6$K7y>ސz 3kcӚJ+Quya;X>,}#|enCLvt2N{2e"YHvRzrRQTC9 f[iE(# Ď::n@AUYZˊ0/j>Gbh"A? Bx?j⍸A.,"ٞк͹P%6\,C,$i%``vƴtr9j2K}=#$G ` +BV!*7Jqle3HPp(bMăLV1GZ|YF=-Ӆnн|r9r4gxu  +iV' A,Kض +dc$u('g=RJ2fB JP/1\(ie*A__f q! ιkbI8AI z[vl)Y]0ZP[Q/HlTf'xT] U0/o9iL+wӹ]jf􀽍^oE3rLp"5nÚNNcJf8Ю~S8^Ճd9bB +vv\cy!#z`“ ++S6RP,꿔B8[`v74>YT*8@=Tm2b\+QqCm' R9h-pTU*oWЅӖ'4O<>Ov!,┣>3Ӿ̡tJݍ$K/lk!ER]{62Nm}}C *JE/䦬}^`6r1Cp)F?Qel IȈͱ` "6⠢ԑ3#2#h3@_fGCb UG +$Q?gK^&}[3R/?0Kt7;+,&ZcްY,tf 7pU/UQA20#Y +jpatK=:ƒl!A([b]^lܮq]T8JdztI 'BQfk1KѱQaӽ1؇6"b{9+hDԙK$ɩWcX++0b'eAh$$NJf_bg-a>*Œ HNS ݌XO93S%̥:f"`2TpTe委(4eC) !S4$cE\m6v,깬͞qS2:'pn' Q\7s7b)kA&S'ѭΕ2.3 z]৩,Ix¢vn'1hvHxr[}QҨY*>Aԍ ΃Q >{{C f#su7m%僅1=xC{a Wza[ e^̦ٯS:꾷#qoLE Beƭ#Br:dlRoz,Sm_LM"D"˧Pf(:9#MvQGqiDz'2 +y2>a9FWd-2U'!,S@j4ٱl +ʂS,IǒFV"slH|rY-v80P4[2a>P]J" C~Ү."(= ɎJ&n_Z]џ<QlN\ W/|V +6ƪw^v}1)g5υ4G"$7$Rbe2 I4aZo +nRULz;RUψ.՞wY9`" NIh>_3"F@*A20b6ktԍmU b Q۱mUg-Uʪk re jB@Kot?7zpcXXsfKF,0Er^YIHIs]b+ϕ:6,d) HRK@T*cHI(lzQX9JLnݱx{%iXlgsV}%<]V$zY>6hԒ.)Qhזf]ϓ֝A90@+YdnE +Ml7ЖRX=UtPtPKg-bw!Mrlq5'@HcC8(#2vPeTLrϿc @=S&E6KX>;0J¢Sm)PO|$;!$:NQWYB  +dgPXsxaAT!Ta @MT+p/fc +;.c!/1YH[opT24P"9;غ.s!2yEgS`(vPRWt[uËQ ϙM-~2*ߧDŨDϑ"4&,"^W :S0Dh.<##[~֥e&!"į%yCpx)sˠ4QMXk;+e񲽥 +%$u&h~}}\C!\$lï*.͆)HqhQ"T(A9'4an[hJs5'ZXT#lBgW̜-GlM/Y"V$_pfT¯I{I Ȕ Rp5=hJ!/?PfpK!A!/9;!6qTUӞ4#YĶs8xB +;NwC(hF:Gc " ?p?w" ) @5m )Tf` ,ٍgl Mdm *}6YR0!,VvƸ‚uHIȜ]\(.!X49:|,>8ɞ'B>6H7Ϩ8`  2F1 E`gVY@ qt>Ŧ,tf 'a"AtUŨ/̰@ }dqb@vmmnҙF8Ndrj; F5]Reť"j̆ !6ϯtAUKA5*Y YTCّʦ49kks7::y5iKcEz3d I+[H5hɘ DV$/PJbD-)V=<&ZOdl$w᤮9F̅-'V;-#$٠Sޙi)9.qN&%fǞBhOޑ bbFXo e&S?3_ [ͦ%3e$˝6T8??ΝSLJR:}ua&ۣ7Lت| *ܩ{ 8[efbypNy?:QizGњTyNVvk,ȍfJd 'x\ !xjGk1ǯڤ)_KNb`4aȌy>a*)XtL5O0j~-tHN$ f Qf沥u :b~ %H8NM>vKhҔԈ!rrRs?p+bs!Q!:AD&~ "%{/@ K^ DuZN@@j-͖W1`%~`y. +Ov^)'n7w K%s.#J ~% bǶ. 4DXSjwC$ +iecU2ΐ"3gH2$#4p$bxR2 z/e y^w)k)KP(b*qI~Ҙ$(%XX!nZxX&= +m7𒰚x5!|YnlCFbfGW!Do'c^(%?SZ)8 o <1'}^/Jn#éJ^V2f#Y'V%!Gyq4[$TRj`0wwoQNDȾٸ\LAlC_F:dgE|0(fC>wQSBKBMg)ikkO,e0N#NV(KBEC.\Zi٨ 4v0|-RpB ]o#xL**N}' jorqs0Υ +.x˚ B K ]\î!}j6C +a +!!M-1dF1RR\jJ#%;RRwdƑ Y  +`e0W9b_t4MA,<ꀱw4e@|]  *_n ?1ƒc<;RtLH?\^iБ$)I s \r&''%8T:rm- Ku +EŻa*uJ C:$ڈ$HT.fRd3)F+!Tɫ<#XAfo7$N_K'TI]x2?5vϬ +L0'2m[Ŭńa }W<(b1F:R #wvRy-g@!Q" )sVKk 8K"f#Q$Om@\K)5'<&̈́UU&&pa + 8ݘC1$VPLO WHA%4XGj HI0*0Œn-VKM'm_c84P.(j 0Y gCnriL8@Xiq +Pޭ/ cagɌE)lE(d%Gd=ٴVI@Lj`= +X͓g$yb6 +Ɯ;dL",Lͷ|(dH$T0PeNR{imEI @XІ,I" o(C6NBum\aA\>7$;`L*P3s;,ch[1h!W2\IRkfeUtF3~=ˏWX۹ny\D?Hk$Nw'ZcKʧ&\Kt^&>GY35&qrpūd +# %[)Ys!8wdnM{S5= ԙzڙ'I"iƴۘ%ay=сݫ~62)qy5,YtIi +"{* m8V=u15ڇn +,IHFymX:m vJd֑)yɛZ9DJЈ /Ml_D#x/U$,iʿ Pcs4 @Lg)3I2f4 nP @o x1PPcPvG` Jԛ_Mcʕ@ +ɣ=Zip|*Ϻz"QN2c9D#X$R$JșGovL/1 'ܯw*8 -X +ʛࠀCJ\D02\)>I8P.:2#ЋFo+l]Ù$I2ZɣL p|0eV{1#h!S,' v:!H5Gpٺ+7CIeK8ȿH@O E3+)@)ܡ,c*D`E"].T+5yDH !s tn0:1dɆw ?  fMGheI 9L3,+xtR,t$tsRhB&V)IA +svMKCHz3}֗S2q)Ic4D܌}x%h,71 Po W&ݻV#)~g9QkT(^DL"sI޸[ʼnhY~f ?~iwbjc?Eiq&4UcuJ("V noG{ BGNXZX$юR2`{$!'Jģ@G<^"#]01 |zӸiRor& B2kV.lLA7X[>_x".8Bc8F&1DM +:˜[ C/ $ >b,'/TĴBQ.1K$aJ4ofK%eR}P& {i%yz˅i\ |iw@#>Ԋ$NmhG~kAأl%2[вQ21rV~`b_4cDlQ}(O_5 l .XA&0թ1o6+s"1ϧ=KUtgzqǹ2&.YG| 5;?:8\3:I:RqOb? PpԞ!.CzYlHM&}B +3=Rd. uj20S''fTVJjI" +|ƭi~(АXM JC@s"_8V?j8X5G;YCDF"^@X9P$}/PK[srސD0ĝ2 XK᠆xƃOJ*0-(S2ͧ>e}|ҀÏEmhTA/0ѯA F<@!S};o}C~|asqR\E_R@ T~H?YY"_(t"!NybPDAG+(pYC[=ǠA42k$cэl$z:>8: +^CEL"Anh ,_pR5!1h„H.F{v[9ܤ`…9s*j2C8rTH*NnNp $UפeN1E+i*(kYZQgqٴK*JZ94KC^gs*v3»ձS<ʠbɘPwG&ji2Ri::֭.qȨh8Ժ*}kWe֊Bh Y;Zp5OǥvI,`y{EuU5 $w[*Gm:אFBIB hj+LPofJ`N@o L0,U nn8݋Ґg }nT;HԍN;C؂B;93$CB(ڴ6s$\r6OwnMf4@ tFVeoeX$D2G))'4r'6G?f8Z C NY(pLk:0yr",%XX` {RsSb]9G|/]?AmP"Xr +Y̔=5Pv.Ylư Ũ5ܦ|-uQifI)XиKP'F<;"$Vfoڜ.! P~ylG@4}LMKXτaT 7VДR]13B4QH:}2kwTH#]g4gaV$w,&pi}|!IΊHS)=ʤ(}!IG.;?&xIZYsV߉`/.,c!Bܧn!lF}w]0  ꁨA+`\9E%%fodm4N6Nb5 ᡲ=1'P wJ"#ք{JqHQpx% +gĀɎFbSB(ތMFOZJi۝%I.-@T+Q %FYs! %ߺ" < 3)_Loj0AVJ'<%y+?hJXĥjLLVh2j"\DQ ӌ(N!UK(_)BsGFNJ&к1AWRXNolE?dЕ+H `pQߑz/QSxuX]-iPkW ^eSrLm"_6H)58D + + =$Px'rl>rΐ݉r@>PX#[ a*wnZ +ݶh+g0(,g^T"*o!er!乖9?91i3Gi D ĒbV3[c!,"ʘ:û[&DY##y~>@Oe?,Jax*_t}=)$imPVr~ATsW]@ wH'nα| :7S :bJCT^~.#m!J"(tuV.Ad8%w0ǵW^MI`g2n fH{}6e9P6'Ϟ<;~^|&We 6; }Q([nHe~?=Bt3D:P' v.;´td'TTv$ᒜ-ew3UT&}ϙ|u6N?u ܠdPn8w2BIRhCU U*r* ّLazS2aW3Oz /ے&dBIYFJN $7 ,H g# a`Jp| !J@AuQ,ZѨu-G9_F+[Q8, ֯0Xv GX.hr4O SQ .TLVn6 ªL.$]*if + m#(DLUH#0!u<̶̂U0\W/kcҾSA=\ * e"PM!LW/6șHE<=z\RPЃ7'htŚMь.a.-QWNoB8? :=aI,ę~;'sdM%yA]Iggڪҧ\`]dY`oC&F`@5[mJܽW(12$"T+TpFRDi1pvL̜Jqq +m<[U`^[j#q6t>޻ .аM]%煚6 Enm״\GPr!~m(ai~=D2P~WcGK4xĐ$U/z.B6i7; " ).m^S *{-OGLJ  c, I~K`aëUe&"CK2j'۔%T3 J3;܍ _&x:8YEWƸ<)$$1K45A:6ڠs~kׄdF"HTwJUdN2+>gZ $3yV?[|^[\ꓹZ|S6`@#X酺Z)}Йn*" AĆ\jE蔱ђe!u6Qn^""N?4cF!4K"Es, wL=K M@w. gw\ jO_ 0p ZC`k-XQB`"W +\VG!byIrPq.dcBcg<3hna/h!Bj{FDK@;xO5]'!9[>Nc@ZQ!E1/nr&G9W*qh7* 0F/F|4/۠s?CX#PuP(VQ[N}4ԋiO\@#TDch.!v1ԣ °#)? <pU"07@w:!ګgdVrE.e]!gsΐ ,SR (D1MkBRWȄVt~?\b/(z A{D7Lø\M.N"Ǩ5۲2r[g;m@NtI * ii*4QBKu\ wd&žM'X-ǻY\I?T׃E +fLaH}~\ww +֎uq=;;sMl? Tz6wqlMI︍PD|ɲ|e#0 I'7''E>]=KqzI[xQGb:!Ӣ 9ARo9/xR[<Nw1iP^_%#vyÁ-~ݘµ7%`QN r$lD&pZ)@EANR.*712aCL"ӶyyqeY=FG;K6tx}z㣾rpŽ_'wQ p(g` g@J?q)7M2=6> ~&! +r8vkiVD5Rh>Ь2 =~?D6c +wŹqz <Ⱦ=<&(jY +|i"{ +XOVN.Snќ(N\ gT#6 {N4v}R>u W!AtxRM9ivZ")v{bt~!eCctWcj%WWB(ci@U6\+.}%&&$RtM+@"ܚTv`UQ Rx:w+]`#F꜍(Yֻ{ߟKX+ 0\TZ#]SHֹba~pT=4?ƂsX Owqs`#ppWQ?K'eyٕ] IEJDiO,tS->v,FtF^@w^F֔1t$7'vhM-Τ{yTyDӊ;3 AHš}Pv)f`kz˰#֔9]NrʊKoم]K_rE" ?UؔU+e7? A\V[#^lLsyIFUkqЈ9œybcR#qWL%00;#F6G*kY Ў +\#R(O ;C&hgGc`:F3tӍx.D{<]~M? +(sHxBtѹ_ ̨,{1ċiYK|Wh\Ij(\Q<$y?G +r}Ck4O?9wڕFt,*y+YV +n _ + \Er5= -qֲ_aƛwl7b@&M |B,_l_ρ嬤n\q)t/"G,SYw\'%[g +'`L +g_kFqV2|vhI4jK~G9&|wﭓ.O@dR2ҀDI*QTy;KB"4b!jJتd'=O+&fP62LĘzO.h +m!B $h#3@"(03|X4UW%J,8/*Zpб$!Rޱ!pml fŗpqAkxBb4 !$ܚSЄL5C9 $۽j\=fŠ$N¦.(g:62tz/˯)V?  U e) A*5Q1jD+U)!jsj4S# Ͳ4Oq&{0DB {gw3͸m&2NK kjg5)Ȣ KEa@\X +#,`i iI}Xʺ-E%nAFCX:z +0QsF-ݡ p /K<7Q>Us:Ljܩpty|P.HgKJiL2&Zw2 :{#eM>,l%g+ I +!^s?)욢hҊL`&6;Й d,靧mb !CLd*SC:@Z`f΋^,W-}O} 9.XgBs*H#ֺ9f̤zH0>y眘z8")8|.tvAH*`^`@ɀT?y0#-5EY4% (hK(F +=RF'ZPHbP :ic )R + \܁9[*/Q_T/.dD@j /fڛ@R\epdo5~8$ֈGI ;|à8D %$|Cc׽lc&*30" h&JU@t4mv N"2nG T$<̼;tJ&CK!_ +0 1T2m2RkCbV3'eC8:1{"Hro U^0lFuGmWfIX؉@v~R!:yV7@!M\GX#0 ˞1‹.LQjM+ pV K3NO9\My$hTʠ2 (!ToX.C;S/E]8uMRE"X&A|:. .||ӍV xBڥa?Q7 UDanQ2o2X Vo*#f_9^'{SIgMG T 2.BNz@,``AFQiDPLaBO[Xg3 <}fG&hrȇDn e@: =.NY̢BBD6,G@r&#6~A `XU;2ayاaQ&5Ml8㝵NSl`!KBLC" =p67e>u꾡`1vW,q&;}d2 +c AaVV*H?mr5ސ 3YD԰m&j/Y{)A=hĉnFDW愣jm/([qg{ˤLY +%ifg"nnpbJg}FL- D&\REvxSu"n !Ih8 ̑ F`P³+QAK'khmd+U r`W V/9X4**3Z\ wz%c(6N=z Yuru5Az)GF!2DV)}Op"mTml {WݧyNQD&QNdԐ#[#ra2d)i@μbXTJA,t/p({S-Zqͷ%b* 0xg!!(0m*iB΃̷ud ?|^/>Lج3cbctTCaF;X-ZePg $B<*zqi 9U>z]"H\`y ʦ FzLNb2v̊HH#=9v+*5͝jC9eeRk=q <]+n ˃㓇ÅP +6[ұ4o&Ym?! ̫aZLIr1B2i;.~% s1bL߀J)vf1r+ԭ$EpTc-BQWf($f3F.4&2f2v,vQa' v!\@ +,8?d:XAs +\Y@ ;kTzG-4L1p#퓾i! +6/(*-YKNI8DGLd$&4H@"ٸIfM*(8$FkL|T:9nHKRTpf"4Nװ1 bh.)' JH1ZiKgXB̓+0I=O>[Gχ\uP9m%VzXHԔY*瀁a7wؼLj{/k`BUxlj3+Lj +4$qrN0Jt}㠌#b)adlyS6L417)NבG|FHaXC2Kr*bqh1eCzT{ +pʪxCEn$hVT+\O !:*XA-{4cB +͌Mg}H]#<iӲ1K6 dCdP\8O!qgW1p;\|*iC.UrTOpb86FN#2>gyuERɭ8^M  +>G9w[A;]qך咋Lfuf) /BGwv;8\B&U\f +.&EtҾչ0b&/4tfލ,0/c (DG jb DĥwgpN7EKf( )j7N{pYl5 +eԂ&.ԺJ8İ*ko/ 7YgrFM#~μSW'L{Gw+dSi_ۀZGB [{f|xA> +ّ9 ̾2K/1.?Ĥ 2AU4Cm .庥c&) SD:#f|ˈy +oJȚ]b; +]V C\INk^kܿNhP\IXEr\Ш3$"sVߩ'0I5@W*l I`n"~V<' Nkb^7TZ 2ĊtXOnOlP?@RɴAYb)zr6w"Wt=2hijɢpbFQ]f@;G%IgVY2-HavWĕ)9bZGqM xcUhyTuWgV8/^nYG|-0pRE +r`|:ȗh ѝ/y;dS 7]rfDz3~q91ZXȭ7-R; FDzXOt5GbiܶNf^Yo=K e9u`.(Ei-yACEof<q:yTA: KVųSCTIظB7TP"B & r'Wl>)8l@l3_y9\tDVll"(eeԭ RS%Aw[f¡NX{28Źd!p<ک~z*&i9.qGsi"b`:绨e zdq +w>Bbit]-r02VZXAC]ܿGRTT0 ҇ՎOJYD*9]ߴ_BX[i&[8.؋:J(*pGT}-t2>u*(m*R _q @O6sg-%(dLGpM;; Lu!0b-G-}i~_XNl`qbM Mt1y`tDV%=Y,D[ NWM,eX[H'D陱w ixKsv7'C[1;1px0jTJ>蕖Fs 0SgC"Z yRi9yd2냬C!P9G(<(AzFQrB$KIqV2DB>0'B<7:9)qX4y$1!dcIn膤ČU` fB[E NzHI=?a"דszM㙇G[ ) +f:̪W1/ X )^s{PO([aBL'0GF><N8FBKꃏ1 _p -ioPvFC1/ӷ!L擜";f& +-m=B%CT=Tj򃫼x0Ť_1c2Hfs֞As\3#(N Uc6'vlvReTnijz)"\a[HvO\V;1O*B%% +5yn~9%gũAFs @63ZegCe$  Qg  Hv+<}ȃ pxEO$ ]NZ?.IAZ_;[{y"̊1dWJ$z]X4ĵj&Wm/g=VǕ4LWfh3@Rhx l*OVl=PRzC 6N&}Ԅd[th\,Menvks'yA-6Tȉ0;_2>&P?RI0(J_E&/eu ہ!nNn6vDSr(MXcuTBC;[WHP\+ B*BvO͕xMmwoNe"փ*uV2-)"1!M,7F'.4nWpJ>̅pA%CbdTq#BQ/!9 89|DYDh4|KZӂ2z}Hf,:f(|;?~t8΃;7;4A&> rW D?j-6 :(lV=IZg,YF״>VC,OITIgcQd-IIYY}fz&ț IA"{r>HوK븁+GI6-zhlp,g^6Td dabW0eoNLf&K2cG%}] RBXOoiX/*5 Ȟt8ϧCS Ԑ5Kٓڂ#D$ 6ʕiaSDg2ޔ|(`jNf^W B%$i;X,p{](hRý /`Y,ydn -~逗02M O % T)9쀄Xgf2>t^W1rʐRBɿ>\@H @fuBZ6]΃"Hj obtaWpqU[8ȵ}EfP^X#<O uvv67p/|G}p 7Ueyu*AʰJHSӺ f3_Uaf%>Eԕw*((1H:?;z  Myhzh sKA[Ix2hctuYB|5`,6+^rCaRh%sխ`k'1]U J`xzٳ-43A_]DE+w,,\Ӵ _"Oj}K9aBzсE8qh2j/aW4HG -{$M D3E ) vIGKg ]73c-EBd0= +'U8 W r$"y:2ED;;,#FyRM݄+[m"|((2z^Y!$Ohb/!s &q1M%hI i[UHhIfT n-PTy**s'U WaPa#w +뢦9V`t6s/8_34. Qŗ"8gzbW0A@VݜQ/BŽSCY C؎*i ]8DLȥS3E +&ܡ#H+'AXB&w5(4Y(3aS4>Di ="GC`FKD!kֱBԹpo>8q`%;32!PDmHDt+ ^He})!Gyכ]t0t0 +G*xҩ4*>7&r5p(Go[,nF3I4젳^I3 5*1GjA٠R3 nI\WIO"u˼oH$JSN$љ;[#FDɄ=Βa5.nMֻ=#sbDҀqfś1Y̦;ۺ0 'E@;|M&w#|HP̂jAAdq*s5 / jrAjMv]H%,YֹO BaEĵ; m :H4V !l^`M" rլŘrf@k@uP۷K+%4M写EMjM(!1zD"R'qW0h&aP0p C~,@ d7p)DQVm9kV%4uٜ͝0-Wuof;L?(HIG,ev Sv

gElPL9AR>STD 6"av'a/|ܴRq*lNle Bᇶj>^5i},<-)Bb/0&T\]+ 5Th@^R0* 5EI&$/$|kw e:pC+U+;LÅX覛Ԍ4h&S F1R;RX,خ(vfZ E rn纣.|Y +xW'eO(vsR4]ҍQ"&x-UD-3(Yx?ՎCU%xep*o`~(bVj!m&:%;9XjUSی`R&Y&[jtmDjM]-;5]VگȻh-xHV^2k)< ̈HbV9fP!RY%v61O1>%o*d80Qm?a5{yIhfؖ ` +EkMp@}UqCfvV ++gD{]4I>v5vxQȈ=$b)h8Z%ƝQ .X9MN۴N P57+ ) IDǑ9X%q,/M8E"-'AjL<DSya%JH7%UMʇZ=gW nNƻ0P5Zg,WGۯ?6joC1V)iX=.IVÓra,LMѥnTX?7Ͱ)%\m֙_M@TZp#w1u' )TRbvDp7܅$CEaD.O<F1.7Utᆺ0gRaS +ͨcHZ9gG֥^juQT DNJ%T}q"Ԧ~2/y:"y)t|NOFR\ȚH(%3|rT5,b58W+XHY$BDҺ8T!3'\~>),kz@/ +JmvEʷY5m|B*c;v4ɨH!MڋﴷK +owyٓ7EyOڶJ' I`> hWqE솝4fPkΪhDRod#kC#t`B +puͳNp47ykT]D20̷N6Jx_I& Am>^<#_w{R0Q7zu3pCjgM~ٗ0ކȰrK3k/RVxN= ∽BqP2O)v|O9Ȍjb`0Nc +¤cPv\MGՇP!h2%)AC9\@L3/9!H'% aT@ + 7< UqH? ==bwV&#'MXFƯItRt=◱49\*E(cQ#rgmi6n D-e2Xz8؂!Tw_$[ru:I5eALl1YJYõ"bغҦH99IY*ƵG K!ƋƀzjFG`4I +=!9PO =Αj>d*lL~i +ΉhH1^Гe;$С+1K+\ӥǃrHGѷ@HY +2%jiYHjSmr%/l!UB+CUhͅ e+TGTu&tO D6p1ht,@E4$!ET3׆Ѝ+`!-M1Ŋ*+C*DCaIY&Ρ1]Ӗ=p^cʬ/qMKQ?BFd!U> Eq4Ƙ@NY_g%xX`C}QW' p%_~ U|: +O؉T0eXdU1 NQF`$F-=zv&X( Qo 1j(LRy$wt/@.0K:ewe!hj &P1VC ܤfl)D'#2!BmNQdY+rƙNӪD`0&RX +)[kiD6ZorxOuUQVc0xI'EjF*fQxlm(JKD]@FILh3A! $ cv(q +tsHTi+jD%? "0iM*_d}+*t0މ}i@ļ3U;PEBXcz+ ܈A6O*-~h`oD_2 ׼&դ_" p )վE&u'k DK;Ga;c)P;+e40.l_k̳y3~759uSbypSV',+>rn6"X[ S݀+W4Iru.} Ul|Sg1I (Pul"QZu?RG<}EޏZ߲ Wp|ԗZB{ =—m a! |_aJ ߇W + tCHj=h¶p,tS,1Ii&=/Sd96@<9R7+!Ћ ^ +Ҧf{0l̽cTowP!чW\ +RRdpo;R. F^`/@ֱVoB)Ygl@oo)p3Y`k@*B]SAr +=VAB]2jEf'ԃTuT6tp@ S%[NE<1*PqWeKZ :0US +T:eCY +AlaWyubPmڤ?T&ke +[h&+(j`u'xU |$\=\dQ*%z!< +{e>jH6~d{A!Xe"8xαj1`0qM-Sca6zKTJVo9{OLBփgStWʳi5d'!cxM%.8 vpvَ#yMeo秈 h0i=4sP9$u?Va*mP';݅7eo$_1_;=AGAA*ky8G?{ޜÒn],GcG"Y#6!RrʇH:m+H eU@ M'H>F`\&NЄ0~3}gp&T<5FD?tPm(Lf(WT=Վ<8)j(,eHPZN 0Thqd/pF|Y٩P]t)}J'Lz`cl$s+س8F2㄂˅0Q9/*n@*chrDE647-=tW䔌S `ZmtE˘;ӓsLj'hi.YIT,f.d Jh djCN>F:g2X%Rr@ڒ>w1 +G~6eF+P+9=rW[8'iMYԹ0>IP)~]Umo +q/>(0Ŋ@l85Z#I( u[ǀ{8QzKfQu +D@rEן٠HDLb]HnF#j!")·|i+U  +T)#expZ.\0䲋x8&oca=b|)m eh 9?3$pI| xߏ"*TD<(=\ӏƒB +֙AeG(p,vE W:c6jFFRA -' f@4هU'_6xrzWpԾ24B)nlI + y_c׃.zAL/:+2WT֫`%;| IN6+m!1-ZcGE +|`Qxp(T|0;s27!5|xwz\801TCȦ'Ml~_ + 3=ilPFKd&Ax"'w3r!bs,,hs:PcQrm ŚqcL+P$]2JlO*J- J'$W +_Y7csW!bLQێ"LIeB s- ރ`V1Ȍ0 e- #bUbR_8a&iYڜ3J*.K]tZ{zNd*&f.0yLN ׶wժ6ݳը|CnHsH F-#j7Խ(yȜ d":ac i<PԿIzCq^K8hܣon:2T`)<R_C2v(e(W cЃU CMhF=C*">#eu= rc`nqAMOgLenb]'XW4 +7Ds 6TyQfH-kP<(HFL HXnjXU\gCbF$7Jx j{=ӧ Z.W$] f`#7uO I ސ+8I7 _rat|#'*;"fXb e>\ikI4H<SId|eZ@k@Ѡ2&ĝwR7oc &_q2ܐG]D yAbs1zώf+. +-kaA]l*CUr\9u_0UH'.d]7Dž Z2 ŅòTK&QB\"U&Ϳp?sWÁ6IJfS! ?{u!@;I&o/]eWKu)oFRM|:EQ1.L9esM@?r$`MƐ-1YS :e.|I@i8&FLB:2%x:Tc~"Aʌ(tXɟsp,ƥ6}ʐp0Oݟ  m@@VT9.&V;1̤FOM6^ ^Tfa|9d )fZ '^[grI`[RSh2pKauEA(j;DG!у0@>[ +ILُ𙃳>^b LF8v85",N{mV +YmᲝG\w`Y] +2ڙKL]g/`#oTIRh$8R4CWtШyUJ!;Xc>$DسmLhmPW` +t_="p…̌|:+ZJ +e)=x1&w]b2phK]dhVi!=%VcrvlB[A^4Kk>A"͐]'\v{e5#*FT2k !FC< 8KHT DChBtzvi4\Jvn +*Eh*r'ddst;@X͒X%) +?.d[RF"l1r޸8N=E=3t JO҄;3VRN* *i;[}D(dç1("\܈cꍱp,$Sf Y>Je.(G!D"BBp-ґ5M \쭥а Gm"Q:\bRaM9.s"L.25x?& I s-:n J +6ݬ6H5qnA(\qHRyW2r͙)KՉ= Qw)/.b_3!W[݄/'[پ%Łt* KJ'rl#77,@~njh#!K`g.]z3ʇk;D$J5{.B0U3"e 1S SCiiKgnY=mG\`HhTRC$a$ $@:Pյ,'"dѼSy_A,])Uډ[_ٰ#cؖ:8/_|P +4jnJynY*߫gPVk̠n&ETjo6Dck Ut8ˠ1]p$8m. l%lAKfΕĀ@qUdP㺡 Ht1ZbEG8 eCA)x][VbLvO͆I`Fp:AdDa/HÆ60Vq5oO<FG<)Ex'(؟dOavTHQH`/Xvr W dNSCW U j8]ڠ=bt7sdG36pxg(ksxMk. * 3HԈB'\pdwʂiR~ 8HMHc}O3% IoKޒ!V;;2ʨ8WA1rGdQeP((Y', fƃnsJڢ#85м\>5dw$b: EGe#?ڼu=̪1-\' u4Ӛ <3-׼>nW 0y!QS@!|4ݔ596G6FA.(9I +y֔1}'K*QNsŐ|"4`X\ɘˢicHt qJ* *eWC*#Jlz8|*2 pJCOm̛$5$~`a 0 A$[3DC#^VP'f +$9bDaf=yHo|Ot"gA"CRy2&, *L&43 yIel>@0%rcl\w$^&p#\^2vD3֝>;`gr$O'8Ifş)Bm$Fli(\ 4 3SB=b +w^Udiحc;^B=o"YBK䉌U.Etai%xo"W=lI8*cD $h~#lL°ÉutP*u +S8DPPv>ރ.dFީD#܍`R ES“A0KQٱLuKڨUDIҊpjKEG+_JKPsP\ +P[KApA`}IDAi(H6B{h-TCAʾzAb?r#6E>.YĉL6n0sMSe G +}Su| +4!T %9 l%H㯟J$dvQMȓ쥝8ECJ5z0\Ep_|83EYأpuTt5p@ xm♌$)>k=0,d0Z l z~:6rL!6x1}΂`d$RM,e`kTxb҆S#380 Hx"IPN*:E_+c;V`Sk@i|lX@bS bE-Ps #RS-o{X>RW>&%J a-1b`Poj?5]PYhuN̈lء8f G-=6,ë5pg59v +f>SIErI U"㩯E2#d1KdfLc"IԪ,S& ą-+N6jMa[=5I> .b--̩D[t5NT@HL-+$%X#N +mF3-LIOkmn" mU5; QLP%*&yI1a]l%% 68 b&Sx<y: L&aLǁgւ lNs-oLDtǾA|fNѴ&qZ1S$i* ʚ_5#vi z %i4.Չ&Wd C󓙺sAhdwPI%Iw |2%Fħ/XX8M#B1?LGS&G>Ԧ/tF%A<' +Ic;8dCP(!WS iJ2w-n)8,dPGyI5}arA Q.ٕ"TE˾r,!FT]yUK_ϯ8e*JГ ?ٻX|2?*,^ )n>T3l!r} jo,(x5U^c(,_᥌z|gB-qQp"nt+r-9KYR[b":ֿ;md1hRg,R :&,t#膜pW/d]6PeXyAo#5U Oe."PX( eu2 +:yA+$xh@XTw7)PRU{D)@. +n0L~ BԞwe0>\PQGRo(#LP#J:Wyǿqz5Ioi ['2> n0-ZTUXko3=!DD(iv"k098h:Hv(W@Hqî쎎{Q}5eF*`c# 8]ТFFxхH̖DB $SXD?P%٭V~MZ9O)T!q똛*~j`p?LZTO:{ KEA XTLf2S@UN̡{jdv袹=bJR'f"C9dt\9l  8_Ξ̢dr)IlB;R1c:{"RN+'߃=#>5֡FGf^Э>̐\+9/dPT'fH2ip-Jz}'ȳ% >%D$G, +n8՜)0=y103htxp"t b; ͎3?Df?4j=x0glOS=-tTc{%"3@?Jxt]IW%Ft֐aJhB٪*:J^dipgFc>%@})3wI@5 :lW&Y@L]Y]w_@vE9e,.A8'_l/ 3~F|K Lr%;i*z_P>v:!ʳҡRE1a#k NVmChpUkO ’!s +s$ ~P9 HyD*jiPONwD:݄)*I"W?B_#xD,aqT0񉔚!1 :~H @hl +3hH̤ N9E+;%I|0ɟu Q5a$R;( ?m:2 PTTn%:d>DTtgVdT[/6}P,@ՙ;cc܏Nָ&$0>XT{( ފLL!|MC|IGlL-pX(KqBIS1e `$ M`Y93WmNEwG*J"7 D$v`FWJ+4Mhf02Ld(C.T-V^n$$L^_7*Ofw BIaD7AG3 L`g˨homj%Am /4 ߘ躨 tt’UiUA ++^@Y҄(` +~$F:C +(/O:&D]u'dFNγ:alCyh8P:A1sffPG3V-!0WWXj틨ҬETV}g|dWql3Z* +LEHsH'{,ػuOvY͟BfV2G[Le$Pvպ:F!a!蠘{ut*h]M +{iu,NL ̑֙bYܟ0a*5řpe@?2 QӬ'SIJAiu;Kfjރ=p|5QG7|dáƾ$5bBPl a F ^'7xNas1@7߂! =\wd!ak[^e'yu(Ḣ6G\ޅ'\gOy2^~y*^pmN[B~VM&? fΗ֚ux.e*۩nZ]\$N2r%,ZH" ѿx!. l24``1rVԋdxx16jMRebr2=걦KtpRޢ'ptJ‚(gAjFV3c*d7H(R'*9`rl{ +߅5 I+vfa%sX1bARENYuCQ `QlÊ+B=nVX I6zxNfHSĞK@aM l}QA_Hr$J7gfQ2jWn2abv nROиJG90@( +;KL |S!]M̰-,#Mt@ۯN]ufn@APMt v`zjE+eDdɴ*&9s}e0X9$iIOWHD{ O| &tt\&-#AŖBIcyV3z4s 8!.@1TbeH :nAE (\0 XFQ=IX^K׋̭9 {%Amvy]dwV~E `0cݰFb/ߜ'0Pg(ɔh"i*\ `Q*QyX f9&4fmϜ7XO LDTހ pQu* qpd+;1 L(&CĪd(i%PHOd\Y g^Wﱱ`~,;V;$`)[9L(v [} Tk.̞ J@S>6 /'lͭ$jG%I;|ʞPcO=>ӲUtTYf`يXoe+6+Ҵ^5'8M^&w5Hс65tz⟍*n`op* )H{(t}z3%/ކlumʂ62IvSw$(1I#nr6a"iI0 $p@_3m ob?gDb Yܤ lw˖H"#f[b}`Ch=G%B4{MZHp/j$Кn1N,tHNZ0{P: p Ѷ^m7=2`DZIVr|u9A0*^RaQ +i)l̠m*thH;bʀFVGg/85JA2_` +BNwz +e1" leQ%L( 86k@"[!z62 WKPE:۴Y";&ai6yC*KGuT.,;*e܋({9˰. 3*AwPg: 0޹ݯy*C6DPe;̓nUv2n  [d_G a%2Dsaj`Ua ;X$bHBLjug8 *N$|Ğ u3)VC@nڡ8HcAme~.q|Fבhp !\Bu e ^Г~Յ[o 8[FIiSRHdubxģ99:XyFFK:7_bVEtgzg<6$I@SLMw:R2^ *h/2 mq|;tgyQ0:*w_Mc[-I;p=hx6hDY瑭Pei-0܇) 6$QWP.1=ʐɰ="ES;7'ey)m A| +2?aӛ!c1p!ќS*ljX'nwʸO*Le*Aŝ&) +?A ψHTσ6%T=!F/ha}$"&hWJ3zpuf񠌓)XgR${z*lu꒣""~LʉQAR0 KuڙYLL)ruRԶ)5LpY 5,SK2_$/toF\!qU.:᱌zbng`  ;tfGy%jL+zK>~&H]x.evFWsf?uj KѵDX&0);c{RjHel\ A@z^ҧ6eeKIQ艅d{Q.P;%9h&o tC#!0v) +7!ITޑڬBH!^L$UӬn\Mh?:!;׳Q$Qu%$P]O"D +1) @A ])u+ل5) )/bDHM1 ^2e؇ ! (u8 +o]tP" N`U> 0w0V9݅ҜhLavJ.ji +y_N~Jm/p(΂f3ut1a"ڋՎږL*b'JȰ֙ѷdM8%,4+ݑSinS{0GV,=cw]h9 tws49]OIQvYOFO"s [ hPL! DlB{t;~U<|K7%GOdvDU4Q5(|NG+WXק{4IB ?T 7fkBgSHK( +ӟenhkXՆ3C@q2RZ˦ƎoC/$-5E6K/LpqgX_=IOmXA#p/j0(6 bbp5s sdze=jbT81G7VUo"K&2&H)o^=X=E/=s`F@"zRG`l? l*l3. \[ +Ejuy%q疚L&!W ɂX9] +&*rcv_ԭTU +3t'29l4l鹴&-q$ $>l BIa&Ƃ9N&+s1h9q^' K'&Hu4RSǥNȤٖ>V~M_d4(07CChmFף-cr˒fym9E}٭$w^J$SPF"Ha!?-hr 6x,(m]x2P5). "% 2 3DSn+?Xx%#q5t(\&E8,qkb@DPMh`W[HUXdbg6+o@XktFU`3ܕP9 TW8h_U|9Bˮ KiӘ "lEHoKP.U_i?rHR퐡H +Vx=D4V."Y[di p9))A͏p?I*{MYv;3L]r&/ۨz«N#&#d0LGHdȅ^P;o.LSNa#&S# ( R aO"HXѪ0vV`(؝ޢ0((i +p&~pUDuZ 嵐J! BvWf^_kx/PA%S:El˵^Nj$GUD ? lFw-eɤCj쟯Ua–|.%LGZω;e"Zj:W& }sHܾZ:Ձ;TȪV7裎"iNȊC"缢\xT!+)[ʙԇWF[ +2Z<*=3;U^5Zރarw΢>d9 0ax@'ȪB3̢xGe?y }k!)#lE#a-!RC\| +f'Tl[2BɳOg.^Z>O +OW1Z$BH jc0dтWjPk߄¿(f65ASAmbމkbZSFcL` JgQCAxNR:Z=6QX,O `Ȟ{4!u^a0iZJ%H#ų]󨮚7rc6leiCgvmVECu _dL95}NNk8Yɡ [prUKnu 4xFHjZ045mtPW-ΒZA :&TSfrEpf 5B7 +Bj 1yi-RY}fjpWBB ٹKPJM֘؀ L[l.EF@.*fD61QXRTZp+P`YɒA2AsuCNd_W ܃S:¡$F7 "̖A^w=*سv"!O#NiKk +OJ@F5Cξ^딑Y +4eOSwcץ<;H^u; f#QxR\We KgzXK3~|V..U.w6:jLr;#Շ(uI~T+EaaUΦ4uDC4&$W:NgL*q>+}'q} +jHf։ţ+ zfQw  @ +;z'[ɕ5A#yk0Gy݈+ԅf)S<(Ӈ:,؂)a;3QMУ +bU  + N]):K*3%AeEq!4, [ؓNNEp R#GS]0좻͜P yXF'e%!rUN3$DJH#%] LI2¤BD XPFG1j4%щх*0l5N)6 P+߸?Vvu~.p + 9udXh/gJ8]4*NK!Bxt]R.#yP=y {JNAm!VVK)FUkQKޤ|DȂĒq$ڗ_SQD+Wpyc! &ױ~/u6RGИ &I`*RY+DSv%)~pnjTywdw~ ;s"-h\YG{0T۠d5V>$%0=fFVxi\{@,:TZM64P'D'K$B +[%y(}w,BW$)} K0T?RW1՘NpDL5{ qKJа![h b QL%U$J2mt+n^S= 2_c%mMO_VmMF<$yF{ĉxXԉLtx]z{gXrm.|o^'%QmTS{Er +SST:>+ lCNp.tT]rh)c1 +9Ohy;nD2qZ04~SYMqٛ0&RiKfG8h;1Iy%>05ܭJ{Ǒ6FՈB,b93ג8ȼO 30(5rm$RlBhJm~BקThJk!K b"mD)u}45\=RhAHt Q: +DĨDD$.ѿqwh/ +P~``UDxc`W +#ĀԆZJWM.,klX H3(*LCl݌z?g{LMs +7r~>.WZ 4/Im_ Z %V\y + +a=t"mR#[؍IGM?bc!UYbT\W5>x) Cu_1x䗛=BEåP2N4hEJ9m/ /e~rSg("(03 MwW64vGr]֑ϼE`@ JXo"#462:8/`(?Q8?+ (Y}Nt;s?7R1(TTDGW%te ' +TF`iSؑ"V1-Nl-t(#;Z"N~w2/RV >LY>}d[KY*LO1Axl +}g3>}GkT}tqQ|fC[$J%. c{/0=0ȝ̺$!$ >ZGS`{WЀ{3bءxp-Ia-Bz 4$")aY Ԣ +X0~`:@ m;f2G{ 8c.\3K$z ewJ?qBs l&&eiƭ-vx^6UM +CHoU +VWUpv_Y%7E9Bh1>"+2b#\EaXbO`5OKG|sVM S;4E#2%'߇<-PD[xS0QRv@X!KT#1"RF_DTXpIRA; +gbFG:k3d`(7 +c% 幜 05Hmod }/p17<Pm,粍)׮$#韬 )0 뚷`oXH+rz+(E3 ؿ8tj% 4s겟`g6o>1G#K#5/;F@bz,<chGدxXfc=[͈/7_p n:g^FU8ZKyXϓ8sxu޶6*kጓ)n62q(F\.3fi$Jp_#2? kth|/ E3 I a9щH +T@xNp8ˆY# FaJ +{@'s+>Z3ϏDfAxL#!1(GxFf|spה/aR(xĔPVNH Z연Cb:缳JeOJq5?Jl(wygĨN2Q=iSBIhAt1xS{wD#=ax0T<|9NRr=R,Y˶+Y7[QpspA +$3(8o%r^͑#뾰?6-,E%/Jxq1*'Fs0ԜRU`Hs&9>ITPX(6UHj@$yŐk++*L}g:uBﱺg= W G˺DrPi JVpɋ$=EW~Ou&Sl 9c!+mp'\a(~\f=0Vb\o`jF-@ϱF0Cd/ '_m#_Cϵ3#?nwY@,W.)PuYـCN¢98ϋ u3 KWΟvz7ByJ#ݣ%Oj;nET,RX3Z6dfpV$h#CU f ՈbijP* *po|o+FQg2 # +Wb5ץI'Z%r\B];#"*ᨂ;r6?'\6.r!Dϙ]JlT1 xhܙ}@bu{6`z''xzd'Y/uzjF^` *pjEJMo9կB|;>5q(%yGS<ѦՄ)<\Ju`j I?_Lhyy0SxzrFl$y +vmaˁS` TCďU]< _CZ"Tl.[d9$O^~!Qxk h Zlre(:(I!PfK5w -O +NL+pLJI kJ̥D~wSoUt +{71x4E[it\֐s~sb8tY5D RA?Nu(\H j"8rXC"0 a/~=/ZFX̏@ͥ("S-Hx@J:ԚSV:nȕyc10drAT`* 4=b`ɌP +@Q?-lLdXm 5&+{/XIFWDeqnuiP'(74qڌ "KY$ChK-XuT]AXk+#|/#FS=Q`:Z!>ωĩrY5. uq̛=a vr%upIҐVJ@( @{( }P 2m;/`7Bqʍf-*g#e/.#TMY8$kXT0{"sh쎭o+,|x[dOAb +Qט֤o\Y |ߐ|*u͈.(]KdѺB?75XǭB,䇎EC*ךb=Q^ )DdM_.%ŎiS!abSO8<+2QUOuzcRnr%x# F6tҫrb|Z;C1$HT&J$T>c+"r8IE`J; a \8*|P)ָd ̼4`z}LX +yt׮ + r}o 4,+1YE'BOl|{UĊsz)F! VJQA fwElh#DYN ]LT2]Eݳ[ "Ж+5~yy`EnhKx *Eo챲 =E5R)6M/]ڠ uR.![cX&EϺ*Q|ocl.,` 9Bԍ俟i i8LVZmʨ%C~jDC; RB=q΋-J||V 5xC@xEIwW^"3TF}qIgJ9vtU簖J~~oo8Ͷr3h:GuN$5ṫj7[ߙJ ) ѫg3p ta町5jMBTw8oqja]an_06G*y7]J'@ʜ.6̤Ͱ* EOwk$Zth;oU7&_yqqM#l%8ۢNY-J5A{z n%-3($)Q!`5Sh-2E$T- OgP + h$tFW|ry +h盄#phvyPw ^ڋ y5Q $jq4}!~?gKa[(K6aS9/ maQA +y> Si'9悀&r@ñI[V+O5Abu"yuUBZ"|4~Xt#&{]-+H#MT.1̺9%Zw 1ۙF|Z_d0 M/ +]:P4Go7c4&kgL +G;Ln.R3P8¢{ +}A"*YTiyDžׂ/-k5!SA.,~H#=-f'1A&AX6- 0h\Npa45F}ݨv>-(D.븭! F,}h-ZD n.j~:E8{HH3;;ǨjM&9ĭq@+BF^W\Lb@*x =J Ny _Cg;A :RDFPT:6@l`)+VHq4ֱׯ0t +P4$H@Bɂp]DxS L垚2 !u]͗ ܬƮJkCu+gU~^ɇgLM$-Uf,-|czkbQ+wFi63Z!](IBb}$I|`809D1bbum-,BQb%4Tq4ی"G۵SκHsFhM꜖,xHqBcCj^ +t<؁K$nOLBhHӾ4wq`bIqYjG2U;U3Y^vq\o[@W*b4DY~]ҌHgbG[2Ϣb NnȻJB\T2rA> )5B m)SxEUvjD~Œ(ݞUDM˪P~&D ,OzNur3JWYF2xإyoai5Qfq[!Hu +6T_PpH:= _z>T|L2ѺUAlU)ihyWT5aM-m9JtW s:}?#X V%4g`2w@^ǚ(R tY] R[9\$LHyoS +B|H)"KyAk31" :Osѣb@~ӐNkBdH(L;A;1 "!XQ3uNS&T'IOj6& ,TGAe3f$"r}6gFߤJI Y<Ɓ6 P G"# `b6POB-QmK-0b.!ޠ8dp#RPmp%sd3g/)b+~ur&?x '/GӵSD6:CwF{50|b@KE +HB9@1\jxO֙ hA:qrFXn44x8L%5B(dB!ʨ)w*QK>G;_J\itɏh5)Dy.X=|1]!ئ" I kYJiq#=r!+\$,<1J^up"D3y \0Mt _>ЫI4Rbi,p 'jC[?B~Cun6W0e6Vjo"-_t]q+{y!e`sRLH*0@Χ7,ЌPgTJ #3T VyĶ*YK'܃z =PkŞKWJ` {\fJ +ruΐ1ϹE  +VGjcΦĜKr|)8Rq#&9UEЪF}(fU˨ pvN!OwNI$LI TAGd̥cBLd2& ~rU$5o9wγZ=xCkr!6N[#2t Hp)8 DA 2H*b=x6CYLvvx]Bt;P;dDw"jJAS~v>}r7Y :{P~^ ٕALҨL)Cyl" +YME8iyP%t ElHћT0Ql ;8'B`{SY9bnRM+cywCNPUQZ (X 1[a*m)5Tx8J Yr⃿V9=(HQ { +"E|xps+s&#BՍVnt:!W%ۑgJ(/GS0<`=MRr&J#`jL6KKj({~ꜜF@`1~g@eK + nW#6i%-|6q2MN +,*N++& T0=+/Z1,c~HgE8ԽdOnB,Lʖl'ڸotC:s1ŌYCEѲ*IP\6\Ib29)D {BJHA-z&[%ⴍY]$h-Vp)|+P3nD1"@l:xaʫR3ZF +!9ۯ3gK 8/Wc:iC'Yq^k.3X˂hFR~걯`T3]1l9\쇤1)HqQ%s,+BDkWڡB3渂$4hg b\rD-h汰@ +#QmJIV0LU'abV%sdZP? *a҈El!WkS&[zuj{ʄ$I;209;Z #.&TĊ~bƥļAgjCyϕVwR%0"ow)/*ŗ1ݣYea +J9xl*Ġz`KaFH>k4ڂRƖTdNʙF u<;qaR_M Os @rStw:WV VYT}xiILr7 4TJÀ62%otmq[2sg +a=<s bѼ-kЫeD_=?[ qwaccI#:nWC@VP^yn4% עX-{b Ꜻ3M1uaIV|ЦҚ'E^Mr$~t(%CEc"ǫ;}y%usNTb))て%ԩFxgE7I+è%s_ %H̢1>c\x9@%0F3WQ{\՘_aOy59Nru_5@*t`޿5UJ֓U+L&ntLŀFX8ҁ%qoH\Z2JP&qB.F*e09 yyg>< 4mH>F<$Uϯb][z5r*}L9>A_)#k]j g?o[boެ1*|J m&E#y;p,$3OpjZ̈XiG!Ybc:9gXNO@ +c=X%?L)WYوx:.ԭHxp?;ĆrG;1: +q8&nɅ*J"aü]B3p9šb"V>6\GKDȁS;zňDJXJjy5=t-Kp`:|]󩳣=FFcYc*s؆gwy'`+D%J . +/!0(xfc p~}0,15{2|ŷ ^~%7Fyׁy#2_ +Ȉmѿ["l|c~$[4ƓHMR! |R>{2"(md)+>gBa L O.qg52 +:Aga)P2Aʒ9Tqrc~s-?יpIR_ibiR[ˑ"̯ʁ~7sFݭظyja<gFo84<$D}'0odJy敇]̘fi[hnD7䦃=cΉDF~q#^+e|c B_62~:Lo#Z=66ڦ)>p!,9tA7Ee #`ݏ0l_>jfZq 0I +j₉X3"(FP 6O w'1m?b;%`P3jH4'SXݪꟘsC#HJa(YY +" "\m?cT6Fхj$pD ~] 8\&C5+2-=NӳmzTR$f;MGv3=T$3Q}v|-bZ PMT֩)lk~&a,m,x3T0ARV*,(ü + vנ,zG<}_n*3)`X>SŁdd (8sy0s s/TL+*.%ȥˋ.oC { + QM5_SJg{:[: MƁZ)=DaC\6ziiaȑ[+B-vnU'ӇS2|d0S4$f]d+J&]Rh Ӡq#C:Eh*Dž JU.KEU/%M)#AB<,"\xGt10ۍF ++cb AkwԀ8SSI9.*Q D"y)7ܑ>i*Rg_1iov5jkD"5Wk6"B|ˊF!CVj 1#TdKݡ1aAJ&I-nڧ"PW}xB8i@8Q|ulC1R[Qwɠf]며RhQQZ:ԫ #\+0F0ddEW0q2$>.L=۵I +ge'p7FEƨgzb +02cX<GbuS*U<9Tw N +GFJ}>iI!J\F\֢jA&\\Dfw{Nf0'DGgnbl]1*ufA]Fth:#AܒJdZ^pm'6≯3WI^0H%_<|悘ʘs?rX@C"Hޔ +Ԍ2'\' :0V }B@&$HQ+@7mqRy+r"A=FF6!|MBr{h9i^3 .<^3ՃLEWB施{TBQ&ZOuF'&L˧]n ry>SVrATlY/騞HݕP1ew6S R?dtz)]ou~h h!˶"d\fAur݄Nr6cwb$8=ذ : KXiBupKz%JOlKAEDh.4e-Fd> tj 'thm ͩK D!"@+dVe(rf4y/2 *wiv8JBׁ +v昂jE+_i4B~.u>=ݘǔ:*v@kd0#pӽ9tyH#Gۮ119w򁓪`޷5]zTie>~2nn}B$=_&Cv (^ޗbf- xPv@,DG(3` CC-[FA}-]UFi:\`*&3N N (~P$rfP)ɔlE0ֲI!EQ?`Q~zoM@čyOYYk5'4_ Vp㱳Εm2 Ph:=gdf_#WZ(PF_H bMu!hpF$TPRߛؑnkm( Hk6qFF*ڛN- +n'P? ŪTlE?F[,4smm:f#8WJgEX!C'(qZg@PĨ!_%1҆oQycTZnͦj +ճ>}Yu@zl(v +c!sqJ\5w݉PkPqG_Zy#f6tcTgw0",z]uh4@2gɪ'ŗ:6(o*sJ"B0!*89AWmD +X`mTzx u5N 9U2؅IR܋^[kNV1W1 + , 9;MVɓB˫(G1PH۳c+m$ ۦ#<*m =?j]IL~6M٢~ NNSg$+wXl ۄ +-o:(1cM1^iQ%nTvP:yeՠ!\gW徃wE~u7Q\ǔ@ժ@$/M +K2-N,^b.!1+3ACW̘81 Hkd82[Qը^js9̞ Uۘ!!>ၽg[4Amoc +ݨ?8TJ  XH-T|݀e|͈U$_ÅdOt d@%g*r| ؖOQ._PFVËnblS5X;q_b`$:bTJI⵩-#Ro;=v uAdf'9"6Af̕ճoGۇ +s0{FX6sśCqhTE duLKlV3U" + ga'ĉŽk@ܕQ<d04Y"^Tw#@pZ8au´D>(lJP-<ç9CFڑF限:v6-6jI1慊p-jK!PxƔ :*`7h/U#h@ۭ$VO;1Ox8N;uqxJ +OMshĂV Vu1t5xKbkR_Ry"%= +wFp?-!EXN6 +OҤOU#ˉ .!ςwb,)! ,sCGP.FƓ/)"[T(&Yb%4Z z)G8`-R'PSc\}se1ONYSNc +$qmiLv[ y r56`T7hlwEPxKJYS~Y;\Ɏ!!I\A~4T'sB4nFM[lXiS^ڎ~>9bR46b +Zw]bC%<.L@͡+Ԕg; +򳶧#br`"[-&4DF5UCߩ)[XkrCkL1r"*=k 0)ۛ*6)y͘&4ژ<3GmƁhy٨2쐨[k7 =30~C_D(5rQZ&>g擩!q$#iGJ+0YкBvrϔe`eQjrGQdszS5Jӑt L`; +X2\LE6r LOTDO2Rca?&kƐ& QeF\TObنFNF3d ; .Ԯ,vG1:]4nd91 -#u#pJzW#o%3MLu#$& ; ܯ$OQۢ'g91qrѐs bx>j ~FP?~81ՠ&AjNIDZSځrqNd>u]8` za}]bud4QMڠA38+as&}L'xkJEe/5ds)HZZfKݻX/#Y~BrI!YX"0' TR: Po#P"jr0 Z25jo;2jW ]x5L(  nMP^  1 +='`%16B`ћHI}&c0)f)XWȡD#If N71׼*Iioݑkj 'ڦdP>bW}?hHo ;!yIx%tf"K3"kHVe`ڵ!g^Wax [-RzLk5<R6Z&w 7#μFXiI|BI)r(@=88Eכc[uE8Y*S&# lU 8;{x(PN(e_Qq %BfOtnGFY0/Y=iH^ou&JO MM6vj u`VY )Қ`%Wypsc-hP% 7z ֕6uĔzfjd+EY]x>/61t2;xZݽzSYSg${H+&P!-Dҫb*0zto/ch.9"5H%wLX+g݅tYČ"OZSM2S +gC[;aLcۜkdVg1ЍWOIp+fҎpc|J̦@ɜRBI:^# +ů,ސ%r>7k9,_Qί6xƐ_ aռ5*ݓj8q0ΌN, Fʓ)% +ӛj/t#&81 *zsBH(TK5i”;2Q4TLyGfz[K@ߐaůFנ&v=j<WQV6$Q; (:3v<bD +5hC:N +ZOJJB,*.s8Z$ RXZ#A]S2@)Q +vKr5VY ,J9epTOYzXNrs_W8Tq\Oy͡ .>Կ"Ӑ ҙjĿv}n]AEh>,$C8BehG_J2n&%B$ +G"{^aT#;ͻ=>w0, +WjkB6m kR"b?vd[RWtG$%J(v4gyKLګ6*ThL?y>ZO8Bc\:K{wfyALD\@4C8DexE99M`(9F+O0;tjR)ڥ|R ^95HUbVkN㗽Ç0\BF4Z4cwjc~%s.X+'A "P&`F[5`C i0-4 pRpC5ʦv T(`ݚt5Ԭ1Jߨ +I*$-7m J8ezr/4cTpp$\mk\6෥!K&S7t/~P5RU쩎qt"ė!\Ǜ>p‹k0փk}vpvҚx U1 ?G R ڎAw~(aCi&3J,S~ r(!g$+ +V4Lڝ#ЉH鸥S98*fcz2{"A^e?̨W6|6vw͑&C#J&^j +E{k[G5d%V4?VH\rcz.d +黑;$ +v:Z5{^[,Ee-B^!la=!d@9"zPux$HTbTHOf!ww>X?asf_*#bCçQZvE83W/8^7R@!Og2#jňr-Ie+m\3MNtiZ{ex'1d]||VՐ՝{)@3AhӮn8,Ϧ] }$x-t%2Ńѕn"LP< ai|z!DEhe@JjBwu-UC-6SG8٘& EILԖ043t҉)J+Ԙbstke]%!槝xUͫ2.]u[Mkbt':;%VhAѿ L[urt}Bz絗PG;E\ݼvm 9;)#s9׶>K7VB{#N2\=(;%dVr=Lv~/8lAQeމ៙zwצKPhS]SPPRI/ +VKƻHwNUo++!҉;b`O +Tжu,(.S04#1*;J-biJA0ɬil`\=M@n a/Dt 9u~lkbHBA~J ΰa]C fPt[@*V=Dف񝜿:`]չ+o3I`h6ڗpl8w=k{V8cse00_qHA|-mm'0n+Dul +V$j G.1# x\pJ7J|Y;̺2DM;\僮f +jلcHI1ȹĪ(Ŭ +&v z|wA$sByzlR +\B JEcuſ/s\C+Kd=PVg ';Fݒ+jD=Ý)jmĮ#d6 AFP9].иA* nEDa1'Mzw6(:yr5o!&~Nd"pkwn'Sxrp:b&i.(Ms2rm>p Xȟ~0ha! zL%3SSqOynPK^s8;Tdh/E"0x`p=ٰ(%ke{"߈5&UBL'N-_'QE6!%3UC7Xb.UO1‹+ùmX,#CXUʭ )s^[BT;j5n. +iې8C"4UӄmH(~b\4CQSLD#!dAg%93ȊpSTi5FA9E?MsJ1f%#GJ2!˪0)ue[V" Nry7Ep,;9e`>VJ)h],Ej"[J\;\g )|dzJdI7V?Sh0W?*^y)ӟxjMcB뽢䄢<(l,kH R 7G-CY # &5jH>P :c +𮐓yB;zQ7Tza>Aaѐo) $bT!!W6o8f5΂-' ̅&+\UCxue +XPdU ۍ?C +z9)E=a jG &VDBŨ6u(X"$!75/RhXt󛐎E38CK -6#郑yru03x,BJks"U|16L FDfd?uTL(n'gfSM9ccVDxҢNE0SEu/4L 2|pY((U8\*sRZqc%9 Yv#.Sayj@t1@,qEvt9U ;`UA4!'uANecHDn58Gd^$I.Qi6BH(-\S Pqх"zTZWzп#\HKgB>"!ĥLʵ'ei4}mʄ61hTNT9eG2/sp{L +?) ÖEwtζtlH*/do9BIBN'OTucNsRȃ?*Al|1jY>+/g. +C,nHbFI'A I?@'a-TݩOIAO>퓼nVqtٚ\ J*.pBػ$P+ۙ*RYq֠#ƒT-ߦR*r mPQ!'[l8!\㔢fT_Pӟa "Ai/P(ؔ= D:ܮIK&pb69APAkI Nz2Ye&s}(12}ֳ '.zaQ&s.z\TsA^"DC*B6Q0D'++cSB7`ڌԋ>ڏSu6.~t +.B!RMNi`XLE6d"F}"9_&E +$nS Y#ySE*"!bᲸ=A(G Wb +ȏAPԳqAh.t,b[3>>za}gE9Y@f;aoj!WnEY8wP'AT+d$1_%NiyLcz:ێm8x5~dWO"QƐ{2Y}CW ?p&"rΤSr蓓H0cm]8NcykŬ5t9i4/=")3]T/V]`2ĊvS$* Ir`.T+Flgk,Ey wbgmԐ<+Qj]!wKVd8$o)Ր H̐e'oA @eԦ[7(]e# I2:e5p[v2+uFA!u~yBy/j Zw~z6 p7imaAhcIȻÊVJ9\>l JP0+n +td,3C+cfDb%UD12}ةy$B"pzW{qd^@)bx6rTYI[OHj 4ptp9zN)&ls$,c}/ɵ~RȢXѵ +̐*=\ zRPM;L `ӑ-"_Gz2DHa$Bv$LeTG1[EԉY('pZ* +t*:I5nj"Ga?D~'0P7&?SY]I6$,o>pj.Řoq쮪)!X2'ml/FhS\Fi1TgUW M#9ݝ(7ho@yZĎ&' OG GY |1$lq qJ_dqWn4}efr?BA"S-31CEܪn-$DKL/a<3/:e@!%D,.d28p?p!%o ݍ2_,s ?HĤ:*y~unXyDҵ !ehe`UZ@UXD3P< 'xiZD Cn-]B3j.Sq_fMɀW`l8AK *]!(mDoߩll7"̐3"p:nU9!(k"[3 SwYr0UPq26bF~R]"BT g h6:.cW?ƚ*C`vhKA&]*}g볋2S]_sϤhY%dȂsCGY f.) l78FwOg0jҤ[݊']u2Jb~_J·het֭ٗw"*Gq`-L`g Qi"m¦]kM{. Pn,!WXE_CB(iɍLj_;0G:KeeSX":Gj,o0؜jf2ضtquհ7Zy`a рk4vQ **AQTpU64E.A HAPݡn3v{N㘹6'4 >zprtxDh!#YYd.PMPJISk͎+-'@hH<$Mځ5MJU*(xMm7aj0$8'pBUhC<~G(loW3A*pΤp}!D/에^D-ֲs:e8☮O<@j6}HTB>ǀP]pmA"]SäO$T +DehDCRfl.a31 !9Ut? +9~u|l9"5h0>ᭁ*xQ@9K1eTV)x1@V=~Fϲ +8 0Ġ*Sz%u?V~D2P_We8X`5RA\JRcS +bv"zpO'Ku" x+d3dʣ/хGpHT&jJt ]s%#w;Ze-Q%|tA8߲_%*"HnjiT;A⧦r2d}15(s`{Z*"ݫ/B r 'sKa,W|?r4esq~LRַ $3L@Ѹm4NRs/*@߆h6o~"6_<BnX WICMıTe*A'D*Ѻ Al'SCh0vZLAP~EIT&z,t2dq /ۥ2Y)s5r2o-Ga' +0OZ,)=82Ʋhu(>=7z:l|!g׬"U&LvU;jr[zSXMj3ggͬA9w<.!@ (`_栐bzւ#>+we3ߩ~C +ZE61CLK׏oy^b zً'6$ r Eyʆ+帀a=ёmaH72n!y".KKafP]+5?U$ Ǡ@Q;XA<;"FP@ɍI-@ P(&/CʔոSP1z +]9aaZaC=jl60qb&GMd4ٍކ״TԼ5-[ kM&DCB8kRx:L5Fl䃮,#8FK!Чc'p˨fsG8LS4ñgܪG]tjv1n1爻=wX@@!kJL[VhXAht?:,v¼^TE +N* nzt _L嬺$*uKN&,dz3f!IjyZ^X˷~i)Էߛ3,2R +t1A_) +@p4IKCpP=Zp|#+g&޼Eߡ:n6=D%n|Ql2rCWB -)}1AlYTj>q2`kbdxA.Qdx(jM+W.sBcCzr5#K1-oFF'F q>) AƓܗ%!o-Ih19eU5Y2$ݰW 'Ln6T4ʛ22XtqSȢnCYE-y$ 2g_ǢnAj3x[ܖ^\.(U |^ЕqtiZk56cΏCBڗ+j-ǔ-A5*|$V]4dᯌ'&\"д9xROE!4QCfq :1Dǐ(q4ĺ@;`j!;[\%N.yp!Ù[lS-#[3''& 2fw5'6GJ:򝡢.U E''3Iԯ(;z,%@]HQ ԇ/ufH]KȰUQi<fs>#* 7+;(F@`EPeJ> IQv9Qx8 7GO DW`_̕ax%:U,v:b C!.4O1bo $*\HW32(ޑ R9qtaQShi{pUɄP1-#UypJ18H䇻4q&vI[o]?G)0biR~ &E9+FyYʯrŁ]sHs>G `?gQ8yr/z ͦլʤzry-9KqB֚)i f+$RZh'Ĥ{(KRih#ƙةKL4gxļhѼbQ ubxZOUz#fy6 +Ҝ9Os 3mRAb>^ti)Hc@T.TR# ;$0=~aEg5{J+N&.X"׈c䭿`"S$80֌B{roCi`4ˆ1$F ˽ +rؒBLLFbX)sn$VP%(r`fXޯԔ5h콒ME۰)kVe~ȶcn\5}siż0*7DP2S 226+dő#q;|8,o?AS@pp'bsħb֌'l"A{BƯ4sa']y>RuNj'J +B=~6<^ñ<]A5'1G~%@"F$6J kc1ēGõݯy^W)WBقl>[N rSW5{sqy= @ !93wϱO.WLC`+%9VvcusDZ?fp2gUxa M:OTxM{ҮA3|hj6/~ɍ +"kɘCfFNxrXIEIS'*e\FG9ɦ[SOY|+7!$&}]gXC #)@:7**?+sc~ί{Ј4k#bu%@,J!V-%AL=Om\D^M[(c g[7+.x@}@t1#H󮎏tfsj3_f ^h}pF2mٴ `)NmΓ<*Ur(-)wCZfh.d%Z 0vJX IG."t_ "871,)#e4!ᯄswHLձ5/t)j9$l@U| d{N} ]XсUeTօx'\XLm@@E*CH@E!e(eiKJϱZOHatyΠo5ՒP"Pl@4n{uDc p6 KTGxUߢCl7-_u9ʢ-HHsTG҇T<Mib*O(x33f e$c7jEi2NfY|Psh!~f; ">܍dg{fI]0Z"F»ĩ:59!"]"1M~ %G]gieQd$Qvɦ&a6SY;gL0sCif^Mu9J"Ӱ*@ʪ:$XSpnkvr?rWRvӛ}x ȴaT,vtÙ?aJԆ'xz1UA[JӼ(ټ1i +ӡV5TU&%-Npr$;Bg(zyTƒ)Nn.{;Xb|tU'Y"LY!:O);4jWK<:L[W5͛˦H<A*&!2 s1N\f[Wc`-(Id\Șɥ̘qRdvUc}?r1]2819.c$nY45j-gcm㲢3 2$ű伂hpL:IU!jGt#]l;ʾm{D*쓰D9ъ+dt'=Cu_$\0:a^r]|%1XQ pf2A‰9*L^W nڃ1(- .6IT¾gǪm`[˫Kh﹄=tO;Y10ڃO39U)33_ ^逝"?& i(w32Z+.s "1U@V,kl3UdQU>NlhA3sY !0tsc=7C4In3ZB ͧrȩ^iCs'3n</+VҢ͛F(0a86D9#r9 @h|+7}6 + +~-$xTEM;ډ8cK]?>~?(rAмFO):*VG 5$ +E1.*E1d I :C9.iZ1Pu/@NXk+eŶbml_/si2G%|1! TSc9AL'ɵ5Vif3~3a 73ndS ;lH9 +Q"'YNzyΎ^pX3-ŀw唁*")IMZ QXgJ +?gHrk]&NzaNfj EFqpEi:Rz`qnelÌf$eXfF cx`T`uŊ8Hs6yM(}ifeJٱ fB!k )怮xI2ڶx^m; p-ing]3Xv!bG11bɘ$0v}\ fv.&-WGoJYFAmB%a^x0lN1}uʱrKFN{/Eڒ16TجQܿJg@. ľ:TY ^P#u) +z61 |yl|!M- Ԕ{q˝ av.5`[|X  ͤʀȥt[,u*܈ePW)K8[j&KW{)+1bJO8S#AMh'mΊ՝ Ϋnvd*e␩HxM^}G6#pxPO"e^Ol%xZm ͡wQ"B\]EY۲ZRXALjϔX7M[X X{xGEТ=2J5K;J Py|=$XAۜ&Cn)\.-s9/@9IlQپOP-R \ ujmv:7F"Ƴx(w%[ +B᠐ÿaذMK q@ 2'znS +ĆPa%O!~Cb7sqvTȮYڿǨhsFM@¸'0nI.8))Ꚛx~PBUvw.M(&8L\{Hg2 +1b;|v&^<ɱz hL(A M|s|„QegCn#懅 +H8cr\L.KR "ĜH8U27k oDw֨T~+:BS}?AAEKiOݙƋ-V*^q{F^4Y(' 3ʧh}}}ʇ^=lmH2[DK^YM3oʫ^pOyP΀P{02nMvjXZ + *2di`c}mź߼[0*vaN,"9r YABq4+ XYu@qSx̐?XLSW[1 H5pI5Эo/2JEJt%"2m-'`}ԊIp! P +1wV)e ؉ZN18-aK>lrujXv1x]@9-~\~pʛ-*2s\vEspQ&EByX y*Y.=< ^VV)D7Tpeo/tD`Co> "ĞK  \Wjc%$ b2\Qz t"+^@*L-d!t +fJ0ڐTK ԧH%OSXOV j?xuS<X:qU)*J{s&RD"&A2RW賥h;9tŠ1!Nߤ (DA-I# XP:F@8C 0 +e +J^>5b:7ջA%FN27L|K)`F,{,L x\aZ*k嬍u"jN*N D"=Ps5R5ם(cb:2e)ȍLˈ{|A7W89+ll,U12ǃxxro +(4O"PRX¸=DTK 0&.`Ш'$n%'4"~?%1'1BD:2L?J<= @vw]Xv)P_Dh:'~.%/!.Ay&ljp3܃ {;W1+u ctVu}OېӾ\SλH.$- 9W6c(f jn{UOL@9mEBLj#^lbRqrBjNVw W}o0 6eX7FmBTC7=(D<_b AaA4U[Du1fOVd A\R(4 +0[@701V $7-83W?(OlwpE̗p +6B|0Cc< 2'5qA}2T~ vD ėQx +XUpi)`Y` 6|7L*d RF&Ea >8QK)+ _B; >K0 +ΣV+$^6t ,Qx9K'ꎶ2D! 3NL3$QH)i^x! :rr 6>c/Guc:;S8/bh;Z8!$Aռj.Uv~RȢOzC~B񮔐΂F8FFY,GpO^kPCu}416`7D&||`M{GAdN~ zziqAL su}K6=F"1D&8P8b.M t`V3%Da?NJNf~ =66J"Wr Fm=Ĵ,@ ۾Vܙ ]L&z+ȶX6%Yv5K°(~Hϗk'upˈh^#-y(AczrC7ы( hH/#`((Y˔&?&L)xH89R)<xɜ=X>4uX-.XR}P{Ge~LG(qӫ/: V7f X!J(C<9{qBx$Jt,v4H+h=e+IgCmUY`V3ѷAud>hẒ9g$n.C0b]vYoV?dP2u4gV+Y)KnljCZ+_i R\JXr +VBy#1IFh83boRN!EҊ>6R/D׀R4pJ\(@`6]ϲ4 ŘIBJS(R{X̍X'ֻ&6rfGÆg41ΔT60V27kS)mv8ÇGg5Y&3`FBJr;3P E{5C +&"NHFUL8B%b4,cAY^)Rr G,!A`uW52%ՁpU,4d wK@f} +nƯK#A&-߆lk_pdQ }hqM7Tx;]D<#jݸ "p'裧AO!=L.wџȩ8VcE(_P" ‹ iä4?:Rn7N3g))\*.V*ugWG`J +JįȉoկpD“]2)a H]3!EkRCzK2d=[=En2q%\?aLjR)@ Qc1_%"MS79;_|w^=L=2;}ਨ.KYI'VI, )$Ea:gh$z -XAbV'*@h|4C,9x Q)4S~!e,YJVLLg +݁,3(]©z \'HG&d"tφz(kRIbM`Tlꃰ9t4b 25MHѲӥiQ +tjStC(̾)0oV.V=c T렞a։ŎN)'2lx#A"O:5J)ҋ5S(} edSaR2S-AGx!U&^+ṮÃiGaꢴ0+<_łd.TOCSyHZ|e*F-iVIx*0O{3b[e:'I34YϜT +2I`RO $$^x7' u&~M|uteHp0ɾN"c +}La#%soK[IdJHMN´LVVF%bRta/zh:DqJb|t"j3z.+3!&w +QP\AH1%4uMm-AQ]}hެP]wㅜi DԂGbJBUҮ @g+Y#WoRn7$'9Qj/ ! 鏯!%)feeR{\p?[ 6lFcozi +ߔj7RJRRX`pRlff2.$2& ϣh#^W,r-_Ucl|8FI`=d3N)^;:$u=iA4.0(ĜƐ90Jzq +p"ڦH"̇P]s3XBh<E쯩8uYE Hbmh@g N dmGmS&p,!S y;bnBj +?Wi=nCDz^7WDו7!!38 8j@[&aN۪W K2;g0pwy^3C/l*j @DJT +) Ewm)#8 8Ab,Ɍ`&B5uVH u[b VI483;(x%eh@xH;f x +S#0)Mf4]`k=>yHz!\}t_Gi ìK Ґ!$G0&-, D*Z*Tax'dT1E/N k\gwt5 +$hzLL_#J\K.T ?\pQtx9*Sd>Wg"BF&]cޫ ON* +A x=ti_ +on9c뷿HS"q~f &PRd.ta sZnoiL;-3du,e~vW-28\&p +88vci "nBENkk#)>K<ʯ¿q R"vTW[w=DR#6\pܻ;Ξ n!>!sA2s>k +9€E*F?Hu|PAMмH0jE^0 Y-bE}xk3gyI0&] f9gj" D>bWͭxD8C]*:Qbnm,S1I:AW`NO N RH.#,9+x j +ڰ7K +z 5B9` hPKhS-F@HBQ !VoXY UKMq0 +X JGPBAkXo)Ly% El,z" PְѼ>PW% ~T2==6'H.X<֑8ВQI +8+0" @L#4|^l{AWT'FxI@CLr +ɤWA,'* xQs+!ÏLn3UaITqh&s*H8%K*~\M~`HTݵ$U`uM44r"5]Y$Jk,lX s4WIA4g$ !&zH DuFO0[<7=-i21\r +U)7 ҄l/u`8G/C Qgˇ#b^) g{HO'*eZyaETYꔈ$ am~Iu@"p?;t5Kd +Ah(xs `TTZ(XSHC6"LN_n%Y*jS0D{DB"`A +,n2#.塷,D3¡/Y +ԯx@ f%2OD{[J[NE>*20FhG(`E>2kԨro cʚ!w%2a<`z:(%_'+ }*$N:L {:Rѕ& jLǪDHLaLM?^OEtp!p@\ b*R\|)CH T'^Y%b.):b2]Z궘hy?|O8"稙u\QXte^5z׮f4l :Q7sT95=0b/z(E +#h)1eJWTs (mHF{}9{Q +$.}3Q{CN`]9M3Hrf^ĴEhqu*pXAѢ\ntD3Os0bIS+(`w7m5 9>G0М6HyI)ZaysNd̡!X2[iR'7yHD8St.`I e5\(\'3n=|-mTuJYb"7WqCxzOۄȔ=jc!1}R 0xʄ +?Jm$ xB(>'ݭW٠ +{k"uOQ!0",e=/q¿%ZA'`AIJI*jv0-zpO M!no i~m f4:&Pij hiJ;C-^gV"UJ ? U+,P$G%ſn^pTMzԍaGfRC. NDŀBM;sC%R s]Eg>a8V&AJeL\h\o)F2灭 8EL^p/7ETg` u\>bY L aX/W0۾ +Ʉ 62e2CR/`9t 2d?3ðϾ#;t  K_E1 ;i,VV]$@.d][>ÎnbwH ߓrW|!=0RLE%i]yPʻ7Y tI09RN(R0v5O7zg-' a'{0B|O#^Ҧ@QaYPqhC! swQNWZwtve U {ն9&LQDBR6`hL#Ztx A8(ǖbQ|@`jָ:%gI)/;[< 25B8^t@&V9)M1 oχ '%.7%$q4|th*"{8F:U`t7!VBGam/fQHt )vLv$z$^li)ZnSt0"%x=+\$*JryAdnp.$X$'ILʣ6y)f61-ҟ +(K1RSiNBn4DG{he-=ˈDw6 i_e2@Ee}Qilct~*oQ(^a 𨬺.'lPPDkh KCr.(Ā؏@v ) 8:(i^hrxO9aW%˘KsٌpVjJ-Y5D{g_Kh#"4.#j)4i<* {H 7vĨ^>`i9T6x^ +"<)&Eb?yJ(i1EQx +OrA\0j#CF<)Pf|2KۭLWd,=H(s?A_(s;FB Sܞֱ3 "BנU XVp؊X+d)ِ>A}]&mȠ ζCH븾MJUĞ|c7l ^g*#y03=p'WEΧ +Hg63=P +ÌlH(DJ(4&kNi`MH"-Ӣ*`K``P 2DBGO`j,n|T!1ܭ@~xWsT"7 BX%U1H髦2no]X*"+%z`CSQc qܽ#=; V9f^",l ^MjBƛ(h0QH-D KV .!YĽG* yʟLGY&Ƥ^P(Ţ'V:/HY|Np<l utF/(L/!>t$(؍s30l 4&LS*_NS=6jB;Zz !:RB1CHx19{G0n<,R1F`L{xN+e/ '[u,\!=/$4ÛZE *|Gp`Y;/g5 UE Ӄ@X7Xp}gd@Y%IZkJЖ蝒VmP6 aڌ% fl 7?܍A_,m.5"!nJR}j +(Vd-+!Rf2Ҭ ,m7 o*:eNp(i4̛+ewO!|1 :u\ lGhW45TNFc﹮L`eݜ=~vi1hh*bY ayր_b"@D|z ZG,D3fH!oD'8c94L$BKLpX*5 {)=~J ,[WV:XR< ky^>{"O:+ŪIHTC( +nNOL7TEE\DX4śF +p!Gi:b\%Yq#Cqk6l*#x*\ q9E]D,[u(f/!I+ك0B@!~(b"9J{J?afpL(k׿nCc:%ۘ'u|r9)FLϤg0 j&1)t5f]I jUz<ՇQ6$G@˝K8)nn3AbMBO +PD(kzYf<(VUOIsXz/Kt(mT<-U䌄TR#3!6K3,IYÖ6kFy2xpIPx%a3?m(QK \sTc4s_*<e%alI,G!KTF&!eKyc|D&N rO`7ȼ A&]KQDѫ3NC"=kK$hD C^Tim\IR)PaB M%B!_U2'"xEy,ZNfܭ{R0=3F+$I(enYG&hvO;q669(n147=%8 + +A5 (:=-&jdNCfX"LY1g{K]T=8KQ2Otd-4dA%k5O8@"K.ŋ7>%dAc֋bPng Zeh*}z PtݡEk j +;7*`U;%a<{}CebBEyNSyIʡ5Lp)ް딏` +M=B`cCaķ "2QDƄ&DI|*JxɔvWY /o=p+_ ngrzX~2E6ܸU[7_"ܣ޽%;GNN8xV{#.2F?$".)Q +2]w(acJg._q4J,ok-YA"M!~wˋaX=OIlF ߨ#yP)3kR̶!\ p\H48Tm,D"dp! 1C edopj Y6-@2P(g{,#"SBBC0Rmf<;  Ks`|V>MoxLJBi3] +z_Й\=PZ0RރnQ  K7@2SR*&5V<) n.QE|YW:ug&XHʁt2仦򛖖TPI^-/|ǣ3o@921 +d _v05@ 7M~*uʷLӠW;CeT +/ 5 n PB#Qm1Qmuse`sIBIWm:qZw*,u625€xIZ'2gtvVJ2{FTj6\M/,%lRⲃ+)_;&KB1`@Ѱқ'>,\b,ZCO褤L:߳crg YB`2R(1%a?gX(P[#wBA6 AX2L "@,ħ^i'#iYedfzÖ5sBrPOיKi҄]4$iH։ Ct¢a0B,fK +m։CǓ&}8;r. =8)vc\2G1CY[ܬhlY}Ǜu +XIk'i Uq(oNGK%r 8&$!@V8] +Ǫ\Z)),ifwd QVW+rB$[Ɇ^# I{2~Bb6>d\W7CqJb +=HZ:d#1PZn9RJR{Ыi0{&=ZnjFdGf-4(lW[t+w AM%: *f]u"΍tfCUeʱJ6xli +`?*LB 9@|Zԏ" HHYohb`]8SDDZrk'v ;ߣ CCd=OdgmM;EX[ &0O&iOQ'?3e!Ʉ 軱SEhw:k%fR0u܃fMs3? O2ߦFɸnwJ'-< gа̥ P$l^-"ڶNʓ 㙙} ů֧щ3}8GB6:)Q:!=̂)W-U$Y)'PUNzs:%?>,*:dW7,| VU{v:%e.bAUx CTvǧ4Ho \)HBUD륾y\g^KD=" c$YopN`r^-u<5nj( H*iz`i8:LfF X߃4$u|[ + MwuP)ܤ]-q~ nS`//Є:"!mTv{Nt<9ʤ""XS][gT9DICZ]U|ijuS[oI{8 !ݣ6P i*MV(XoHʈ6vqF?# *&6F#9]iې6.Zgeݩ(/:rkn©XX<.E>[3<"$-;cwBr0i܍$c2$1(P4:rǧEly@|;B(tJuxQ+S,K.aG +w4Dej P< +ۖ^zlRY{ж_{p@ |#x+pqx0+nҁCꜹEQDC^O(Rte93q)2`|D'pj{Pű?$/g4ķbwV9ySR&ij%2b4J@m( xrjO0ნMƫ і@tC"ztY!K"i6p/CL yQ: +-_i(nI`,X 7D*wW։0J'LRŘu$첿S1h2}?u zHl TCfP+=hĴ8=7eOݓ)*zPi0!@ɰ" }waҴLr/rYY +hHhUn:AR9gjo&k&{RoҌyD`A[5JTWc>Ъ$f&ejF +}% - +GS"*i)w$:ac<3'IU9zr)d)厶>{(rȢ[]bFxfR\/UHBz^W]$޺e6`R:X$BG:^[wޒBsI68$ê'ڠ[ȿDIG(SZ{*##5)AfuI)k:gtpUVSɌH^ @ Hؾ B6-@pP׏/&>`gWj1M/Jg qN"b7NӤ Jz+ Mo7&8hXw+;N"T d62EQP URxIɢ+ZT&/4(XF D'F%dLᜟ㨦M}.t6.|Ee + "3&kbRoYT\-e<%*8Д0;"=2^ "z}0An-Ω$@&8JGrCq;dQb@|i)C'" bEBUUOuȇDd.ǚwhJ^^TpEt ̺I,(4`oղ T)$i?êN֙X +B!\ŒG~R9f R\DZ0ZRd:-u½$UDg Vv,jx3FDѨl8Ҧ;x0 0qQK v f J93 A{PT7 :XʹeġhRd[%d$;$BGنQ@'QC3[n|w6NFQQܧt\>:IܵnN] أ&<.:Q\]$;P'#*|#V49k!cNKk\i;-{)G2@6XXXɩn(8L)laV8JI+!z}m`sw$|at"Cg=Rvi6aEG ZG(̲L4JP\H8zPPv@52@5;GNwɗ5s|ac"Q(l9uQu?)EA:űklJ20~,叻=(3 芿L(kL?Kc꺇S<@/ +WmBXPN.84#&F|dpyF'g+\mٚLΞL S9~Qݚ3u0{2g&T 1`g8d.ZuGKQsN1Pt)#JɁnj^jjOJ,Ԇ6?Fd^E-+Z4 6\i:7Jn=0!^*u pLT-$j=j'/UũfF*RfQhĨ:vHX"6O~N8'!\L=-rʴjܝA~1Bj=$2`dxq[L&  ljIO( Z'$jl{ rn@P:ŭ vcu & +'cc~wF~uH%T*\}S3TQAke?l~8~e\>%z+?ISեR{ͺG$2NW-pJ[D4̞x-`\)6KƺqL[-uHq)+6シurI =Coax!0NEi9tjs4* ]X@eS46?O9=~cCOS:B bItJ{)v읇tzm?L -O9:ʵ=M]"襚hPcܬ6 BwQEM:!F!bRQYUN\\mHaOPvVש s(pH˅J'|N!j?A, ZC"8Q/8p=ɧPJZ1FUq!=elhىkXLn b +Ψ T^D*Nǂ>482HH$ʽec$O]KAT5Xj=H0çpW>xN+pO_ !]yÇfR8.4&\ i| Ahf kZzwѰ 2{ٞzY5G$\P{`ȯqč3_9H@αh)<8P XC0Z~SR^y,g$.VD +d +bV›$mKf?VJ%T+Cu6Xj?V1fBe򔈶8ȧ#C4#to6}D1QFB6FN$t%J`JD B8_8^iPk9w3 G$ЃHK X9Oi?fQ +oie%Q`oSV袘FuYXc,CWa5f٬ E|w5Bh)ŸkU҃qRH;:I&gh%[BZSYؔ'g^w.uyr*$x}V$x`g)"$ $JY4d:Nş`j|/EPdq0F,h-KЖyaoL%l + ~ha`4)`9ĂKK_KYO4^(H.I|1(i2h! փPх[{Rͳj&x#f&"ѱT9.w ~؆y2ngu@Dh9,3|͇kNqyj륕ifO676) LY'MBF8nR ¬PZ>P0x&Qa)1'w8u^wd " Gv$j4Uu52DAr>/)\I'@bEZ[‹ d~hhC7N#_oq vD^d z&E"ȘK+:h\:kl%;^2Dn )S !d/Մ#@ډGGvXG=ձ T;-=.;NPF''b Q8D ̑#Bi`)q;$vϞ`ENCFsLvr(8cq[bGż@eX4KيĹ=o['h4tO)+ Ub~9Jx93+5vgLg~2 eVy Nă&ʨYDXq6RZU2uG!ϑG6P;sv9f2=-x9B^L AS2lʉӌ/`FQ%E!}}-&>l}^P Ҡ7V`Bp sRjȯI} +&{:]3j;Jj襮TTTӖLu` +XjGLOYZ}) *؀#Bb-L=NJh>3(tt:e`8x?$;-u$6=KH,j`)D ( 0YӮ>CfrsV@.BA|FeV"[%П{ 2:TN1d{>tӃzj߃/ڵB{,;&K1&u:n,%}O)$יY41uvL第&tR +Ko2xK=ο+{c$ŊHU:`*oByK|@/brkBЂX'ՍN4h (joA :D`mFi&3p[U@'ϙ_ JQ|$ SСt]Ȳ'n9 _xB*wQ2H$l=(ZY{Tt]^u ++`S ZC`&xX2b^0 [) +yf$;lzr5ׁ*ACan\Ś|X ̺.vKH_B H-[WӔzttb'*Α""Opoe@I8St|/n18x!F$#:}eA!dʠSi D9!zkd)"sa*-V0(a~8', AV9ISrPtxW"&j]up[sd^PG" ;m&q Oz +M2E=?Vec}YGOYfIh2O{ne "ZoMVa @H||'. |%[a˧v&uxυ fvںY=`voxOK>,/+0Mc-K"DL9ȃ8d, +:h0`=xk%x?ȧA"sacsFS,:2Z /.ӛV3+6p= +흍`:RzDzdI|*$S+!褆ޒx97H̐I;KFbwN*j&9Q`ߔnLrpźdk:^W['`zpDn"\][ԁ-Jw P$bGncڅQ>!*6&qKT!qVY'5 C_ܗ_V"۰3aa+) 0  M-FjҘAZ!W;,jKFl re}FY.-["q-%q#2)pm2eJzgl荩",:( +ҹQ${$X˜Vg4UzvkgGEP(|#boae ^waWtGh0h^W7ZAL $G}L?$&qŀ P8_=h%9^'q8XShEb.f`l +3vIBU +yP1jKo2Ze5vEOڍm$45dNW2zd$"zcN-f`};d8l$Z#Hw8{ɜ#&: OtɉEQ˦SDPb$f CI@  @Jh|$âBz20bTIސk]Stp] +&w\/u{KDHpnv*zYZu9XU23szR ؃Inkw\r\mO8%{ҁmL3&2)KȫY!ܓ;`Kٮ<9* 馉H3m9nYA$'fG7R/ +$O B\ݢ(I `,:} +VfASUnNQ1ѐM ðVY(E4'7Ns+&\ru_yH揹YEE^Ш:\~ "O s@q'Stg[@ +r/rzB_(ԫ+>0_^:W{>vR='REM\iOravCE*~4կl{*Eqs;݊d>9. 4u(c@ȡ銫"2zd\$hI p~i";56lf)c &n =^D⪟M-x@H]L;6A$¤RpC KG\I !0wTcK8˟B}P860wV9Q{(Yr/[!JHb)5X]ۢ o=".f#RuW Pc"c|K3hXy4YQTW3I[x((uhn zPPs3kHLŌubwZY?%.ieC_'; w|~GЀD̼`j% +bY{QF;ނaϷPg JӺ;CԈU:iD&$23ȮFv09HOC8[}*TUZHɦ:~f"8O28IH I],)^٧E!q.?AD4;sa:,=4JT50 +XQ>[b O :cȁH]5l,d>H$bLRc!8"M.08Ѡ҄iI{1" q?V6ʎڣqƤYZ1*+ me>G0v hR_%?<8jt:*iKuPFfygD\b&Wv=ƚlP^ZC/IT]^D=X.Sʈ|2{AT$55<|Oq銚V@=C" D2yYڗnUA>+SP[Y46>fv: ?~BZ1-P+Ճ +za0 /l\dnOV5:N4L0u~vd @K>>_^T Iv`c s,KDw @?@#zNVhF\n Ae[{[$rQg/-u&O)I[+ak'WR“xxc{j=Z㸉,E+6F]FK@$, 0cX.m'Ld@2y$]LJk1d`w,n@@/ ,:{5`P[`*d Z\(vցNXjv[Hb\Qu5к3`vB° h,ĚSIx%k*$CeKb?tjqMŢSǴ|QID!zǶL;ۈ!8\.ĢI@E9u(-P&m11˫@Sgj1!C1IBXp[X3|cp%tGbO ; ´nZd_zQ?I$Pp}oId|'4%S|Oj5@!$HTj؟Lp# 3K]۩h:ئ~& `~ +;:%\2ze)`7b fU33]cy H Q>{ea~&3T:)t\r6™G8(S|Oc+; UX;FMq?VP8NP+0'[q.d2)Y p Ze_: "9*$?FƒxK10sb`ųYo6kP +':s5It P KJ}/N,d[Osќ&\ĭ~yޙcX.AbګuX! vP5zA TNyF]f X{m! h5qC~ZD]EԐps1B?+8zz C<)JY yRxSi;i%fjQB 함@a:2u$M re;3k"QӨCjPM4-nbH gWשLq9*.YN<@K̓"M+:PчHtDЈLaɭ4 >%_0Kj|[BҐDeJ=Ȣ "Tg4Z-@!t ѱ1@)fˑ~/~ SX_f 9GPz +i|EbbILB%vˬY욯k](HHP.HɍܝuRa4K,tN() }zFa/*乷W-8~tʹΘ 1 }T|HOuDzRB]-$˳N9;5@$}W}u*@/#k@G a!%:$1iŚ7I +\; LElMI(µ+FЬH i` qLH}FDUa'/F;IV'6uq& *|Q{f+i I`ȘN轩uό% #X eBԴ0z#o&uB›̵hC>emn 2@| @2z,G pD, F&t2pD U] X 6am&n2#9WLQ-yTpw) UawsWjH0bQmOxq~H|zloPC|Kh=g7ҍ5j$:`"Dh[o錔:pIT{4xʈr 0ΰB/3F*^k- +-[$sFR\˔$U;e$,l0@L_` 7å9DU!RȌwb,awr%+-}Itps[j ɁRAlMS_VE8ي-H1@'4ءfTq=s9m ƫ%P [DIc`XPGGq $2Wi "qG+>5}Q݉U^ +%f7#qB,JxC`$dla :6uH r$09J:7Z?!ʊPTe!;`Z%˲KI{$1sє-DHz]4HN=Œ8{Q{ [bEu,s7URg#T_>Kۊ I[S4SZ'RS6t&13$0G\JY'ժ=rϨ:$2ɬCqղsQ%͕iA$P~f%!`=۴E f3^LمǼdn|`¬S TMOn0 [$4Ea XXzv=:!HhR؞K";b.guSE[k'%P/)э}.s }kv1;+_؁hwoU>8Zs`b?4.5Բ6ֱ ´؞PƐ' `:fAuCP3\k#*\>dQ!s$rSx/ +p@Na [SWyle pY'[[&%Ѓ =hhU.;inePG +6S=%Z|c8R,%{GrD g&QSu[5lNiˈ8 hQӰgR + +cudުt#Һ|*b<1&$ , G^dzd +RK{vf`^Ib*ǫNdʗދ$n,AFC u>FY27Nu.ʊ(b&>Ѭ^HfdXL5t0aB+hݲ4%$#!)Pş`'Zl;=Ug4IԈJ4<4D;|/jt XݚJ%/|#ΞApiD }FDeld|$z`$QYg`S. 80K0( Ω%.خuP8,a$ ǙT իwܖij[je~碔s`f0E6 iS!1.9gk5NeeffcUHPSG*J5#ΰbѓ*9E!c׭sg!Hfr5+˭Yw6{ȄXxDcBZuB %2=ˇ (kݗ ݒZ4XGL'^>d6| ^w)Fp e.I$ĠFE#ߚ_eƇoZc  V n7i+Sq 8-g@ $E^ސ #uOM$v@v_'=@: +42݁>GSŭiY.A~a + =W$SWul*af H\L YANP P^B9,҅sxV ŭ!; 1|8X 4a\}Y07U RAӆxV^tE' P]ܿ$53>9^_'S n3:X5~2je7.j8%RI8M$S[SM_!/eU]O."$Jl3̴W\ ˍ*c@RD3)a!"M8]K3 ֑?Je)WDwRRMb"bn/d&v3 !.[8#P`YhP #2?{3n%8A.8x 74^\0xׁQj].WCz,D]Xԑ*:q9Mx{rP:19QF-PD[Qa`#% Z ^+W"3N`1W0Ut|)=Mi4!a*&bR&R[ Q˺ ѝ7D X#r\3NW]J-(V<:`(H;˲J h؈wrm*yq +g97&2߃ +5=΂6, ih,_E6Qc'C' JeI7v;'WL']>C9V5$XYSDC[2|bU `Ϩ4FH4n4j|iӌL ; +MT + r:pDDTL_|W:tԶQ"M4Ah祱Bc#Pe,$sU@4#iL }k+u`%el95 xk-HI*nCB^b?m86:+I5iǏYԴ|"ժ= ^u2"=Ib#|%n`tt7/I!-CD1D?Rc;VB^=gv0uðs=?GdA85HPW痥 +RqΣ_A;X-Qvo(=nL?ʡ(SQ'Ё^0!:Bh:E@8INe ?0"@ :+ؿcv2*IKMκ6 > ĺ#goпJRQO4u"3yK=*^$b^Zr,]׽E'[")GlQq`^&&&`rOdÑzO"!gr1aZQIǼf[h~5c\ޑ)W ,YyI\4ܫ%10[֏]C7 +GdrA<VѕKD⡹̳EaI뺄΢*͈bVFnyOaJJF֡\Xn|֐jgk&rtw9ENj£CR`*Dy &xr'UqK3i10U~yS]A~-ʎ=3Y}X&bmR?LW>YN'*'QMH҈ 5.Sm@.W>^nĔyi<yZh +W0}&oy6Z@Q)aXAze^R*\F%1"5lK*E̫A +iAOߔBq_IEq9P-]I?U'4"OiΩXQ3OwҼh9SmN`~#p!A-`zP$,̡|یGBF̦g.V'I+E5"XjaQ)#ң1Vhnt$BsAU?,kqHp,> I@@w8"8U&z\7hH-BpfT^b'gDCCe +3>4_R -?/ Lyjd ۫yʈ [d+ñRE@v}uʭ֝WPjO-nJF0{8[(G%6}1rx?%dz1oj"H6L@b: 9"7JL` '&e@OAx7{ZIƩJĂ6튼VЕoT|(:yތjmAjFϲ? uhܧVit5bQO%XXjٙ32жgy*a*3B`xq:PLb2B5UGk7Tcs+d}#Z)߶"+/3O1;>IFUH]<1vfVJSJfa:t)xAMq0'm#aKx8f+R4f(z#L sjOˈ9ޠLjya!36!Cl@1 +LK gB1zr?:b-D˧F`Y|RjVR,#ȸr^ B"FlIQ7^bXK)I"ףB AE8Ʉ CBn.l {@gJdq@>n*ʁx2s3dP 1 +7_]3G*q癇͘ЗXVVI'^x#NQƘH|#4,/c^ZQon#i\ sW'HW"cz=F+#XY'2U&!M5ISK_bCTW%{ɂ>G4›Rv"<DrUQZdïA%uH6J>uG * cdϔoNH[9Pk|EE:^)wr. &KG:hQjZTcJe@!{M}cl +`j V:ˤ>:?Re䷸qoťKUJ[%Ҕ_d -pH$Z>hF`Lûas<F`Hh\=u\4̄D)vLI51j<'jQDDIôq+ +8# |Z BCIF'b.ǢN !x^Mr3 wkXD"0?3ZD) `JZ Ba6c5U1L4f +*&mĞ^PLgc+$u˅fFŅ\)>txL gIHr> P\z@l5-+AH{hD#fu2[Fv#a|% + ;#8/ + +:O +Cg)gW d䘕wPAE?W@vF쯉ҒXsãHBݤ0 @ +!KgsNw=Dle)OFռy؆-́K-%6X4,들bc8opS/M"w&s󁒦~qsc֠ +F n =>^ԏjX_ MŅY!yưoC"Dw"DE> EӋ,L0?Qr^Q13#x^o77f0$Y@A)%?\|ŃYkl@q.:˜XbP/*֢ +,*9#uzqbkֲ~ +A8rgWvd,oUa$LE~<?JF<a`7mH +.|Y ZK[ۢax>"z[R-"`xAoPB%6 Ґ;bvg1h&Z +m.`vP\]_g[qt6_hc˨hae6\q`Ĉ Zqz ,k-U:tƁzo扂䮯҈t#T~}>6 >$!xVAf66O Q%%@@ #d6"*:02\$0sMUQ,>2\NNZQ60!*8mcp*|Zͺ+%%sy,LH: #N/~pf$2@џO6A>G)(-@8Ɣ3 ٳxr=ȫ +.J ȏƊJdAP8 ~СG':4 j?2vՙ>`n+ɩDB=quX g1o)^ľY.EQ[6bxACLqәԫP 92aiOz *)iDB6>\.~6&2;^RގH(I.S; Є 1᳜f/0k(.RC .=Y0ts*Dd.4Q1-{a$b-4)+w<ǘvXj~;JJFˬaׂ#9 [NนSYWi.1Ikp6- jېJi*p`3 jFSL0!*&K#AAa]ЮR{*tA#rZ6;X7TO.{gWUO83W`9] +ƁO +55Wlpb=,Ae6GCaEbaNnv?C =8ʊ2ȂL7!QMh8RqI< IMP6RpQ HU#HBx BE +c F(* feqn#7`"]9y@ޜ9\([c̉2\pw֖ +\&2DbArfHٳ Y"yI/p*;9E^9GuP^<.)3NP wo4hôW7'rDG:cxP^L@6~jXOH) +#~!yX@p9shbZenCGaHdSiϽB`S_DXSET e`ԁUN3~@M&LiZ4SY?#BcbII(*nj}징 3X -۹y$e";yPvg3CsTrW3ZDLv |_;r.1xzxr+hXU b,I|}_Z͍ 7a=}SҠVF4?Pp=?rm0m^lv9@h |P [~ŤsSh2s}CB'h“WDdݸr1|8V`?GⷁBU TalJ}Jۤ'%;t|՘'XXcGzr:قHaH1cI}3>yRi@1ƾL=2ebZϱYVo^.#to}ǒdf"%PчsiGe΅ f{QH {"ADh:K] ߂Y/_ kM,pn2<1B:j /(\sFg8To`ErL`Q vaWuF}(I mM=dNv!$Wr7p"t!&.m-tVÑe Mdy)z`shm h*:r"1)+8zAf49/{\69GN2klϏACS +_ss활cksks gJ h@)_X_g 8(ai~vTyg.$\f'CzȱGfA \YS4@lC(9ѵĤ >pPQG:LaS6abÌAr9~+W]mE;r?Hנ)j\%.BV2BP 3,@?s@t-|wa.NT"QzUׇb\(ӹ +aW{KҔ:@l;Uenc%m9N8-)wB l#\ӺF"Fk2w8(Ba֎RMx!'/? ߚ!$IKYR+gP eْv`ӁУ(>u gG}9VC[;R@#n6|@x·>jE4d iUچBɴ[$& 3mW }]s` +!;-:ezx@d0 1۲ +㻒EnWƭx%6f0lrL|(ܰPs\;ڙ +K$Sua#?xzUI^(`LwC׶spO@Š4s=qZnA%\8eX2!'> 6K]2P70纟"9l4ffk{K-1| qG$Tą˖E@aUݨ"dCvڥKdU.jrKzwe,%e6_"u^%Eha59O2 4=f3FJvd͊ +d M$x|a|MܥwvM$ԛh܎B,j1~ݢw/X̮D&'`/f%S1Z|]P +Ekܒ{ +Kp3n+؈LnE']${.@/Hj^8_O `Al +X5dFmjo 4lN +-O!Ivд_g@޸\wԸuGB-7W0 +#jC]x&ّx q<2Vx>3,HxǡZL2~L ++#b5P^\h~jt"X (#G=%$9սHf[e[%u\lQ0Yg!B-rJ}Ttv~6dhP6?hE0 +P/*aEZ1¸8GbS!;D'Qs*WU^C +DN@Mhb)Je,fU2h+ 7Gʢfmu1vM.".yDVV XkIePV^V:jh]K,REf\ +*xL\f +7/H%8vZHᩜ,7%㽀 2#rV_(ކHC{fr؃rEP j/6ta݊1iF[X'zD ux5feTc8U05D^1A%]Q\rm{109~ Z,^3;E:fNQ ,vD Z+ޛ }c@FSA\lL kkP7P{g@h4B:pG6~wr$ +I;h\_%P"u> )= +I]_-`2@p}7N0?)FA٢Njhj) +"B^ .͆! ʾsA`ji_Y Dk#4՝3[WˢR/B@ż;7=3따l莺u XZwDC j7:FvŚ +my fÝ"Y_%Op$S4eֈ碂FJ +?xARJb@1<%6Fkb!ȁۣg"ŌN'IglxPQGz<j;ÛԶq2PJ b*rb))d&hΔ{ta>qRN-$ΐb5lKN-m6=:J }`!lR=UM%Dݥ%AU%XHfozӒ¨Ѕ ,z:kL Ic&jB5SI^k+1U^BFTqYGРOj"Hݱܝ'5]5+9*/5jEGA="~9%s3Oվa(6k:0LpbX#k2E3VXU+Q\:!Ke:T +.YGmEP0۠*^O{:4H:q0c6Pkh5W&A65*t!G}(q-SJsR#UZ[l$'`@MEp4R9gWpT;1MО!,8a6}T!Upعg ̸⌨h+7!3']6;;^"v Mtx\baYeU,CptˢޫbTJ$ΈmQDWou*C/su&q&#}^n􆬦$@&]!陫z!\p@* 5§>^-<0Br$aV\ɬ/C!bz+` w AA7RpڊE 9m!{f$t^?UJ[Fv;!}KK4' hO>d>2GoÒq UIdtDD"L*z{?HӺ!K<|)#]gelCW8D]׊RsQǦ[/5;>9idn\j] QMw4G m:@ȃ6(#ZD pgSR'{),c8DBIn1lsM#W3OS^'0)&w>rTU< k+G2 pj4{na R{^cO6"2~S %f0,$ N{M2ќ01Ek-&eQlu 0fPxXtkֹm!ele_gPhHJ[ib8q"bJMœn, RD ^oc&" EXΛq5PBC7ꍐ C7/9ŭ@iaS;1-TcI8>ߍfk/ qݦT;/g yŸ (1??Z"*JІ2 lO|PWVRJV@8 l'=` wN!ȧvLO BKTϾ0foxy]5B~*mAoG$+7e)DBZ)TF#!LJNFLl*l +<7uL.Dٗ[ +DNF#0rZS+=e) zGJ1H$ +݄#*R eL1q@T֛2[X>ŽDW 0- uF'(PZBI]vv:V$Hh1+dNȴM2!J2֎`:B: +zoqBԈɻ=D-K E+ţ ڛ@ 5 ĘGȔvs_*qiF-c4ơ6fg ) ^qv5*pBL_-,A +N `bݒ8%^dsn(E`IƣH 2)3Vp&eƪ gțOP}Ќive+qO 0J۷q0hLT"ulD)눣8UM֑(52tp5Ho9j16,*{q* ϜS_DW e5RBrެqc5ZwTa.^ZQ3Us!սpXoF5Z\W9:DzVHH>T QlN +#;*]9R3bfupKt`h4X +-‰Z9#cbp4]1 K"0vB2y֏մP]UEŧ +yq#n*Ry9_\,BȘKHwH>r8EQBoCëfBI"kZ䢠"r {+920WwRvYId qxM\qJ!5">c&o2&l"sm ٢qD3D^dbF]S]$?sGmLp+<2A_+j݇KujJﻃ!zE'(/I +◻/u(J7ՠu; +*"e(7!fRG*FY4]w:Ŏ!]|e <}/MY@ǀ:gljbQ -7ly8އxGj#?:k$pw6M#".\X*DBޠ \li3pbv6Rqpۍd݌VOPqϏL[_C֢ZOZߴ U2 H҂maN,ԚZR7_ϐ$<#*o4rL4Π\8;/7Mҡ_Cv,+be.n0[XKISyj7a T`q$!E?ї-_!W8dy#XϏSI_.sdz?| +y0kCM(*; + ž@ hI*N!ɥMկPH)Tf xcr3T)8i H_3wܨIwFM?Ю](ȄU@nG̲ĸ;fpd4kseIpj˩ +!^ASUhB) =:ʆ`sԊ Əj .iP9@"~ iQ12vWDǭ|/q'w(A/S,+=?Y|걱S Lrs$vNֱb̡٧匈QZ3j67:U*ŗPZf8n">lkkYIS`' %jc֒> Phw̥ @f EL:EFs0H@| r_qrzT'me@!6D7 5(4 ++Sf*7ϵjFeH%M55L= xjjz斌jk91^p7(\&}M3( +DX.H ЬG|/4dwL 0,Cpd͐LuV3BGC&RlmTCH_T_(:(5SXKX!kNgĿrkw.I4(,#5 \8xk lC2A3b~ٸQJ)$ڝ RV3~w}>S9A`"؞[!ܧ:)_TY'Qh]uPmC$ kTl?̌mAdЏ ;?@ވK6MEE1tȄ)SQ"{qxDp]mDek\1Km<pӞ|"`a"/pyJ"qx |SRLiV9[ێf> %!/DY)7' SZ7B[ [Qg*xLB}|C^|jM_̊[ 2j@_K +{<aHp^z1A^i?LxFV2֠ܟ3B] Оt~vLϩ6]~4/ `%. ?EP!ܵ_"Bzxa)&ZƓ@NT"z&璓kiF5[>tgDP@eL 16"<ǘվ(xhI%ZRs.܏ 6†jV62Rmyt<:q)muBxTϠ3@Cn-ĔG5ç+Qo CJ:x*Z"$@GSE#I3-r7LJ \-"yƙ^q#[# 6Jm&=rޱZT!K v-[ͅI\]A5CSq< q ¸_u^)Q*dr|7M)q.Xr비ˣ@8AK? ?")JmCTɂh-SAԋLJj/\24*K} Y_ICA+)pA` I/JRb&75+]XT!nw3DS 4VCpf +V+I-ꈃb2Zʶizwz7bbNVɦ?ywf m7ѫf'U:=?8GlcHͩ䵮U>20Sn +`Bi39i$1#D,Iex[JC}E %TqlwjBNmVޒCn ++݌+kD}4'b+̟9 K-GʍZ &q0hkhyiY(b w-z%_9RJ"Q3%kiHݘAۏ`4EYZH md%EY +:3l Kɞ3J8'pJ!q4O J>wR7 ǪZkE#zhhÐ}9נ-$oc0)lIW1sdYckƟ3#9۱LsiWóͷWYXL˽|J}u&t>cz]sQ`\.bP> i?\PFCf5'yB]iaZw*4vLӕĈNO؎pqAWf`?4(w=A3F< +En_EH2a}dZB %4q6sЍ*Ҫ",- CP$jȲ[Lώ(]]W&ifbk+*K7"đl ~|lPx#dFǮQJ:\燩Dd@418#B*b\ tb~Xdr$Fn0 0=V!W7CDd)xڦ:\Z{wU +@iK *=TX&h I>|U5_X}5 *bD8HԭappLbEmh &%P>") 'e;۸b棓MzBM Q$IEZ?>u:S*In)ŨR,K8D=EwzVC_jQ哐/0z*nA|C}KluߑPbFXI +R#wp+XAʛ?"򴏐) b7Y<=`,jO9PUk";i & WRPn!1JOE嬣9$bp9g߱QHw:+%%ć*ovL,88!%hϦUnΊhwؑ`80=gDcB9>u +NT3":0ȹ@bI*UPBtH"SRJZK +]5@ b!v Db:SNȸ'̺:/$cGC@I"![vE+#d˹V=R0* d_2T'ғhio^)P9 e! JD$;ը<.Rba +M0:K/%}'ͤ4$bKYu$jyB?̌A4ؔ_3ҽ_^i/|Fl6Wh !՜5"S%+ <@f"FyP3zPAI(Vb%OZN;~J! +愜 J fK.)ά-S7B:Mp<5*{1+ifm\,Q3@=;.557q5Ɂz}?-2J.Smj4uwlI lz_;Uh S!<>hI@!e-Z_MuLdQPdm*S%i61@,|6 0;3;;9.N"P1 |`/eaI) =MN-s,:X KWwD/Oh:@,@&Etx0dm8'+7MFIlQ;&"SG Z; <ǿ  GϵhN`t7]4'/&̿CAp!j`Qq8j僕`kM-^'bӬ74 3JR= hc ]o 5Ydre ʓE) dT`Ŋ手WM14ĺnhtK bZ.# ̛ f] F;Qi6FUJZ g FTЮߨp1L`uI :} Хf9Yl֍}Irc]?ϊ`ӀI9/ElG+8yF!JE߄,S0o!I)p!IE2Ne8^Hm%`EC3"?fa0?P͛;\J1{h63L 51X"#FUvN;TNAyP7P鈧191S+D60tm'& `sN'\ Z/(X)8ud I/8HCА0'&9'E'DyɊZ:/0*=V&Qx ~x +jC#39"2a^հ">7!+"UuvO$&2]J$GO-]䀨Ke:3`5XS& & S(ldw# +q/>P΅j aJ!ѪB"5ed-xB覇Jf\ 7zb@NE'(3fӌsQ0+YgΑCIai]O C$dT75h职J Ө{ǵ${źzl>';N.w^`xBwVCJ-0K/)2 6W-UcA_IӜA-{w&y 0XiGDtSQԃr8"0*f( +(x|BFJ$b5RbJ]NJ/$h .dk +MxJ&dwOxLz59 +[? ,DhC5aXIVL܄ F +ƤJe( M^*o:FX/!hכ-tXpn9T?'Or2 @yn\'gܔ22Gʊ$=u{}^.@'!Վrx,spApPrՃSj-d*I"v/;D_uH .|l5'm1*f)ӺF1. 㚮R,aސXljMJKhQnLj|qR̰l2GYeI$ˏ**\{̓^4OIGڨ_ZpvѲ ߣEJ6'ۤnnxlicLc7Nj5v6Mb6f4P9<@tGMbwc }|]_2eN8cwnG{r󰬬/}bqE?8U,j$Sq=$Uޫ)N}if%?U͵Ygе+񻦂#x WmY1)ehG4ǂ*i沒70Ng_U(F7yRA7w#| B$`]̵1ϬX5WKr&鿸Rp\P ͈LaH(׻Dm5L̲* cv&31fsC,PL .*hd~ᨙP+sjh0Tud +G^8"4(]ÙH|6;0.j\>>]#o5<$PRQ0Ddj"Ay_tĈgMI)Uw"did ]H'#X.̆z*S8ë甂 "6*ڬX-(i#1=lom +]vRtEW f}/A:%Dbgu(LST:#K"xfZ~|MO8Ptـ#Ap U|}Ṛ؝z];S~h;9rʳ8 +!EO)͂#琿:Q!5r5;T[8LFϴ+ݥ9nZ65Iͭuy'5Rbk\D3'#5DsP@8]|"|3,"@ 8UND@4ӂ~:k&6(&/RO͌~mLᘍG(s3@bE1o|cE(2^K +'7J !+쏿jS  #6؝F^7flav@6'="Md# RRQXڦR DEk9ITo'5sPE!\H’դggS2rxPk{P"{5 g-ЫQRyew6F/?:sC< +dQDE7U_RvH2mcTEKlDZ'*K/'A-;!D7FN+VV̪SeDgB_NM]kQ=Ls(c LxbASrIe@`N'tm mQ"tH%yL,.ٌ^Auy+1GKOb3de,pKSm2sf#KMcDUC')ZE{B!/QQLf ]`}MO4JGTFo˚0V h9 63=|P֍ÐJDd4W.4 96JـC'˳.Y$6 +lB~oRS~|P?JhB|9kTahuw#Sez.(!5p 52P13~ulLVl6$ B%<"4XY`!BRu: 1> +nTK 4M>A%H1^Š6<\o7wȒa*uJ U[P]Znyv愡zb|rKe"$%[i ?4 +:\h aq!ҌƹJ}(H +Z3C6 +X7b7@q$SqHDhhMj(u^HZ-WMgo߫~h$ H7d40 +1-n"1"]a0bl]!U!2KJI2*L2(= >C ++1!$x;12 +Ҙ v馓88Ot>i*V +pp0Qx M9<]mĎl[rALCcI jZ`f.tg-媓h\4$ 4FO8_cu!>.Ɍ*doP̾}׹B}% rxjTutFl>y @Ƹ pXrRz}6@ˍ;RkdBRƊQN f9tiۧ9P&0T^ 9?@1qtWJiO"cqCMVɎlHGL9cN+E?ohlE!ro +7E9}YFV^8\ZOpE58 tNAGRb@QF'#=i)GCBؚK&d"ItDH2 ~iX G۪K\^f Y{ROQ%#"FamāZgivƷ<ڡM"YdOp?C <7 =ɏ$)p\idWV!.ϧ,'2Ew0wծ+WD <@<_iHOP!%]? R#W +ŬWMݽE*c[za;2f牒2nXs,.=W3>v7-"U}h w_. "oMG.V5^t)̀M=o"'m#g8f}%+Nчݛ׹S>fcP2@ԀD6ZKY7E/0 %0HpB,^73cE4ƿ;[;Yc +hB"]&L-A9FhpUٸw୽\C 6#؏ܯv06-:x)3yQW9nFbOa@UQA\ޭ;ٴx0V<*)vb5^%X e_O9bjU?bTEI&[v]H.: q0 jSp4ZUh0Î*&[1٤ӕaUc>dK&+'hрbToAKD_=4mKhFr>X95( ڣP$vh*.epI`ĺ1 +?_TL)M0N%6Dxݹ\ m'am鍂 6F Vy'`3+ .i6Pfm0AF?3~d¬ HCt +endstream +endobj + +163 0 obj + 179273 +endobj + +164 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +165 0 obj + 2567 +endobj + +166 0 obj + [ /ICCBased 164 0 R ] +endobj + +167 0 obj + << /Filter /FlateDecode + /Type /XObject + /Length 168 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 166 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +x]$ :E] ?Ѐᇙ?? zȤD!z,zzW||(שk%zrv.Zyk=c}>eX?w+䅽=~x|7>/wogvs%| +gx|./]A5^?ǟ]zx53{k0s襝1:g; +W}gט+ѾNCk5%fFbDo~ͳǎoGk6νGoZѣgw+${͖MOX{gqVg=Wj1=SF]Mu]3Q጖Y̩^>vihvWokiiV[fj)'Nvhϣ̮yem%:[j20r#6.zy[r#6]+uZ($"#fvyU:sFhgwFq`},9Zu[lU\~EbJr{o٨xzQKټpRd*v 9Lh[MZafw#P냘@UsF?gTBI ouE?4'8HZ(ۂ );KlP*kWr>0ce,'5nCJYh]^ђ3`Ǟs¬Uֵk M9[H&6U$ۄ?# qCs1WGfME .kб'SdnF祈(t qC)({hT}7``ݡ.oe,] h'}쪄:*Ce{dW ~x1JvHT6o0. T2jO:90HXTxs$3 k~&jɴÕa~bU 3 (eq5a,f32v(5~N;ǡhGh=ap3>B|'Y&h+8<Nxsy+wF6]nv~gfqy8 Lݚ1 +DΣ^ǁY2hؗ'vN"!htꖸYYDa_Gr^}Z]Ȏa/a09:EbL[̀1##m ':תjPs6)o}P>pfjdyAJgT$wu9Cw0Jqz\4#3{bD8N/ږИjy-އHߧvPKِ*9eFM+%ow81D.IlR8dm'(ya:DdNa[~H:uje!$~[{\̫*YeNrKuCqh /'#s߻7=x;l{;Ε\dUxM3?QTF v}˘].[yۄ@!9LMnI .PΠ2άZ^\|W5Vߐ] _/,3oB }d +endstream +endobj + +168 0 obj + 1700 +endobj + +169 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 170 0 R + /Height 2608 + /Width 2880 + /ColorSpace /DeviceGray + /Filter [ /FlateDecode ] + >> +stream +x v@0 +endstream +endobj + +170 0 obj + 7313 +endobj + +171 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +172 0 obj + 2567 +endobj + +173 0 obj + [ /ICCBased 171 0 R ] +endobj + +174 0 obj + << /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /Length 175 0 R + /Height 2608 + /SMask 169 0 R + /Width 2880 + /ColorSpace 173 0 R + /Filter [ /DCTDecode ] + >> +stream +JFIFICC_PROFILE0mntrRGB XYZ acsp- desc$rXYZgXYZ(bXYZ<wtptPrTRCd(gTRCd(bTRCd(cprt +γsNmؓK3]D@D_*ˉ$(,nv +y/MF$.smLр6n:s˾7ӨyjK,͙T-Rr^Z*[ꄻ:s6r4'IwԳ'C09ntY\P' +&w$jIn*KX;/%{VMQ%Ie`9Yq'qAbvo ,ً.]T V?k6O;P,9wzkjɞ1x7l:1_u6OS +1K-x\K2@9hl3ye/S%]=@o#BY.'-8v`l:$39_Vf~, 者菱 yH_" +SjudeQ,˄7gvډ9m[@e,g1xjud-ɥq%ٱl,Uv(.ƭ rK6eYs8+`]@co+=ujs#lXƹɉnTKE,E'ydKd\P3NW#oqns]m/(_DMP %ߥ Mym/F> Rg'qIDPII + lVM* %`l: 呡[B_'JI%ˉ6OV<"仮z@$L ;gI<dQ,@rtvoL^ƿ>k[yqjpIllI/zdZh֙;47MuX;OK}jYUzw^:0묚mŷ8x^ykрLکK6bQ@P9['Df皠*`%70@%,nnv]~dN_Df,<3I1NfL-۠ +͖hL[@gքYe@I?J&M 4vs|tڷ.fK5B򤸓UI`L xʢY/՗>*=z1yuL)IJe^`L [L34Y;}hf/Ֆόyh Hlf;cIuB@$&Pٸ( + =hK'S*ˌY'2L-Hd(qgtP Io%n@TN7T|h n,*%}P~[J{R@IKtPKU~8vIK/KU%߇c:con2ӗ|eԓ)۞4IohHo`YKB,U$I3mL-T3]gK*I'yY [tsLW@\~۞3>SZsO <:hK6b˗\*ܲ?D%>g\֭=lgSY/@dݺ$ިKe@InMY5&jNW#t29RL]р ƙ;Ys՗fI_*1l0@961q'i|;9gډ'>Y?̟Ֆ߮'CRY=f*{@@LgRqTf(}l-œT@o;uw@IeSn(&W@ٸn +%!sÄ۔~sրu` +r6묺َ7N2~l $݊eK=YT@Fg^皠4Y]OfEL_@hK̿V[>*Y/ ,M&Q8v4%߬P|?/ou/ӿ: .o=hK5e@DT@<&@K{R_,Pb۠ +')Df,O;Pyv\mƄTfe@ķ=& +~,@{$|[m[',i
_:bK[}j\i'(sT@ln[g{k@6r* uC43K7r-ɫ&.%٥pPLPI3[ +O%@omuSm9K|Krjɪ3Vn,@l &.* f[';O/P~SR>h@L 9J*$QD}}ŗYjb I +')lM@yε:1e˩ȠO@ Q/) '|T;^]Q=tFxkI_f\i9\'Iu + s^TIU%ـ +&(d3w?.B͉&xd]*%tK%Ͼo_+|'Ӎڙ37? +)7Tg7Woܮg%} d;%٫(-9zoN:0IOU@T,Df[y$ϫo4Yn*zy[>Fum'bgĿa/,Y\YIS:L@sLW@NR*fYq %OgPdsNSc~/c@I#%y5A{ ̿V[>*7 @M۪|R|Z_9o~43y۫.Li_T3DdA$n('+d-ɫ&=i9ͰO %bN7bl\ +%Y9wFL:W/F Yq~5dn@f8nP@/9oM>[clͶiUA$* cBY/Ֆπ +?)1ݳ1d[A-ɤ56n.yr͙V\ ր~fBݺ-ɵM]򑤗m[0P e$&K/PA-oR3 K)DNK/RUTo +t3򵞮,omm-6ly5tG;'KN|ӗ=:q:1N=jIh[dfˉlVM +^30mM3:iqhdDz٭ '.:Y/eωǎ(I2@9tY\;P$ɅPn3s:Q, q@&-]T s;̿V[>4%zꀠI2(_VL uw.9;up*IfLKv*tXNT 7;A2}] +3m"?3yƒu/ŲϠ +%z5B] + ֙~'ZVw" ZԳ(%=Ïgn.LP@&57\* 8%YpP=Q,Մ@gSfsVݘwW7ԒG/u%ivOg@T1r㼿9,[t`9ntKzY|NScw>:{sqT@9q͛͘YsmhK̿V[>*1ݻ<[ 2=,\}t'pg0ܸ@P.K7;u +_֒][7PsnOxjhl xʢY/՗LA~ oe2(dP=S@nNsidk(l4>WƲ~?'QA|N;*u.@TMT[ + wf8qVE/nzlbom|coƬ@mr,I3 +O;,ߵ7bN9wYHԓ=hV_z&Hl׸ (T 4g4%1e˩]̚p9ou\@7`fI%us`އq߶w..j<nz*%(hI' &|>( ˎ&O +xuko_ZjYfIJϠ +nC .Iw˖x{X59[@,՝dh 7@̈́d] +[3ˎVZlK6%7Ԛ]'N^lK[.18zM5d* ,38KY#fvs5A2K@}Q,ߧKd-F-6=N6l(qN%P@}ZӠʵ.K0P%||['ՒߊިfY@'.r'?iλ@;9Kd[3IuA'(~ 6c33N]PY$&xY)&xd]Iu9/ӟ-Zр,ٌ\ۗM fI@,Lr:Q,ً.z? 9]L@3P6n(]ي%(rKc<-̘[g-._eH%_g`*Q,eYsx`9u 2_:N3'iqsPf433-Ƞdľ(&~ZY.'{P$@-4tD.vdŷ@~|TK;&( n[q %d}Yaf3e,՗-˓՟I=PFyK*۠ +|%*ox-o'?zla +pPI0bgLsjg@(Q%ي +$@.@f\wÏhs.`l3eJIrz[&afqT{P w:PN?I>-*E,l[o3ۏ.?w 9[9^U8}ut`9\Ǖh v3wC=MYp/`{ I$ȶM y}%<>fq,{lԷ Q8%l[3w sfjl0 vhdb6;Oqό#}n@Fe6ɭ eͶ_#@4Z\%ɭd$|[m.1˗ͭsζ9Xw\@d,3ɭ sMq29qkY9@uspz_0@Sg@rۉlVMP-^3"dW0YS v@@fgzons l2(7W|@RHrSc\ܬqўٷ,' %:9nt&b;3"|-iˎo[$3ek@b۠gO +}%M& v(3sНM>6N}+$(g@K:8Ȭ~ fŀ + .> lvjbo*w%ŜD4Βo7\PqS؝nx7՗`e%|.buj6Ln*f([X[Z6c_?[$t2` n( +cIlc7Y|VxK=iyS%Kdgex +'.XY7̒goI@Djf*<ցfL[tNW"qoqu:I6 _㥹6&[qYװϠ +$n+\fl<3l⤙ً34[i%ճbVYY5v4d'/>рɺgt@:n3%X묹d\GW{sqlc\ζ%j e41؝oX&ƚK,$}(U&V*.;icZwƧP܅')j}7?m64=rxKf* yH93{Z 2}P/$@8v.$P@J &-K2n$|7@9۸p-jO@s]8[iˀ 22n& +?$Om@\n5yj l:f%˚ _:N3j &L[tPfqЖKe-IU%ضg9MB͘'N3!u\N: yb['d.Yu>[eٸt 7>$4n̒x[ib㞴9uݳ(3˖\.mdo@t`I$I3&%*dV\Ėrl%%y[43e՗jɞ%D}PL4@6'3K0@buϦzqpC%I$@_:N;dŷ@$˪ &;Жoey D/Q%٪'@~3zY-K {֓fd힀4Θ1;w[ I[n}'$*l5:6,qm' +["[MQ%Iw@9MQ,eYsx˵Ny̅i/}IlfrlcvN@d q%af(3xZLYlYqdiKJq;PI1hfZ7֧bq_*r8[}hfwW| +O;N^W7QϾ?^8Ϋi񛪼K&Tv6Y%1R][0Pg++W3Էȳjqy=){dC&`%e@MV~1_ř[pMKF[j.:朗I2@ouά&@-՗|M@9M%1eˬh[@Fe޹4~Zs/ Kx'љ˾IxUgS]ew* f(mim1k#+bKq.:&M[c@ gC=O9|w;Y$g??ֺ |g?VM lYgP pg:ܭ̓b_m}P 6bq_1@TLKşP_4~-*&x9n u\mr'o ֶf4&MScYL w3BI<\Է"d~l^rj 9ukN6 eNmY7Ɔxۍ6YP9ntI}5@T r$, 0@ -9M+S@L $(1y~֧6l bMT۹s~( +[(Y;g} 3fƒ]f* mϋ_vqbKޘž Ryǖ3~nk@4[K6%g%XZ#<޿EO %}PIw +'*K/Ų@(|f$ +|  |PRIո4[U,ىw]՜%Z@-363y۵exH ,Ϻ4cWxN^zē3^elTNW]7<@llg"˔@9lx;.yH7rϦYsř ${PI$?#Ilg\ܬe7:kY;Pu&1n*KP=Iuod{|@\Lr=cx6 buReݭ vR%}Y5@T](bn0X.vV[vnzdPK޼TW3T1˖l|{\8ϵI2`Ɍ[P fq[-9js\.y:u5e٤c~*_8-չ*&wwDwKfQ:%Ğv} 7;Q8IZ&Mkؤ:[0р>SpӗbOe"7=Ks M,RDOU$ܶ*K@f[o-œZPMۊ%P@ߵeē"ɈB]7.jހ%ߥϗc3Zt cl{ R\iݬ˷3K-]@6n ˎRԗ;y/Z6nz nzs1_f՜.㳶9(%q@g 6b˗Sئ`d|T; -q[p+_:d`:}[IeSfƼ@wm88I޺43[p Ė߬Tm\~Y7r͍)TgH蜲I2c;uH ,N6^}b~KK,5s`{TqF>SfQ9nt1g-l嵫v4 SfY/Ֆϊ^R\V9u{8+f:oXr( f2(7W|A'/J&J l6jl xʠ>*ro_5dKd({eߍgh$@N\K%.3}T흿,fVMh_%ـ +r(ܮSdBw %eܾ;\lKdj.oKEW@ +%%}Yŀ*pr3m^cs6|c3?fē"@TW?-PI1t$ S@Mŷ&ʹAou̸l'LsZfYoe@@[9kif5q;Pj3@yq۩]ksd]N3"{PeY7}9X9hIj$Q_${@ 7t wgR4vo +.;u,ʲlKd1@Po,Y-jR_4oɶxݶ~k@:07T"[MP` l( +;YՓn5.̸,=@,f|I$P$χN(^?C7֧V|$LqC7nL/zKqbY/%Pd uvTsv)&x]v`Hn ˎK2'*%! +i`8Ivj(_:'u6ʲ6 d +%<-Dbٸu.g@Toz'{hc_3deԙ'2])Ɓ$˫@ ]NVq϶k?%%٠6v4I9nF-eu2nu?N{x ~ܚj7;U@gYXvc7|m<{;рbcl2:sۭ\d҉f3ƀ&-tK\nݲxodj|(]Ι/c7K 2ւn*flQ,ePKd-& +1lպ ꦘ rٌƹ* |;633:&@@ڢY/eω҆Chp9r݇.2?^yy-A>3uA$'-Γj\ <-:z@&A o$(7Wo@_L]T 3Z!3o ["['MPgB6(lxI1I߾*$bB(.VS_ YIeXlN2[0godQ̗Z\/(_DI&E~* ~_ķMhA,ءf~Z3K~_L(l-&{`i΀LW>8Zj^;uD_- +'?9\?IU/@9M^͘ĝElĤOƘ/lq_?-׍ oʲqjO"@/QSlˀ gMԻYT@L͸k@4ow;Q3]K(p7\T@[U,Rxy[[vV8vֺ_ ]޼Q,՗c,̱͇`3y_Ж[cg. \ΫRd/)*Ŷ}k%՛gA3@ 򛞥}Y5@T'˼Sf*lʲ礙0$.T4T-V\ig-œZ b['.q lmRg@/7T 9[<%٪&]-&ֆ.3;_~6'Jܻ63fx ԋb}ַiR-Tm9g3;dN +D=''%٫f\TW;+wx3k|yjw=K %Q,@9y[&b}^r\[ Iu6n.T@۹n,*.:3-@9x^onx8W1oF%ŗ>4I" Ύ3皠4q;M + $`&;/\z@' sўyW&V]YQNP9[hշ@A9['J%,Iv*I'MK@y 9^Z~cm̛T9qeVLOw/*s5>qfi} 7 tٸsT@Gw\TKJxʝnx?;^7bNlŗD1Vnz*r\Ny0:0';Y[5osItĿ@OU,Ի,ꀨ[.L|K6(&@gY6BqYvi| +rTg-Y}e@lR܉~,q9_ +9MRon* fI$A$χ;?hmH3vb[VMhKrjmb^ք.PIeY:鞭řZv./ +R]N2ڂIT.hK5e@ٸ9KoL^q%$['+ndxu񭙟@ 0 NW"qVs-~nk@4K33K:IǛ]x}|,ˀ &w`K%ZdIm?/iً.]N'AɅtPKr.n$oTR$L'KEfqrT/PY $DɺT 9J%\P8ݝK7t5-oƀT=~]2eƹ@6s +19[˶Y՗L{d&1v76dox ɓ#6 mrsԟbM/1833n4mn4'.BL.yet,|\3g^w=:@KҀw;PI0 + ! +m-œZPb3ԷYs.@ϗ-t217͑ȫ̲e:tA9\T'n2E* uD4@vVT 0?381j@tЗՖτ0='b*3t1Ϛ <{,i9qz7ӏdUȗ7T3@_f1Rnz Y rq;TKړ'*')rbgYI,m͊h?Z~%M_L3j]x~uW3ImTK&K%gg@ir)fKϾ-jxf+<'W? W|iԿiKdLԻ'br.Yi=V5<[3(ŜSfƯInnwW@d=~=c~:IKd$Or|7;Ir㛻[3uӥ?RI瑛Pl,՗ q;O@%yKo3[s% 2'b7i9q[9Y9cd-ȲyK|jLK_ ;o,-0Fb ހ -@@MާTIKj9α]us9jyՀ@@Ik@43M5@i*([Y-<^fN7ZI2)RQLs8읨,1-۠ +h,_0@ oUI2b۴Prj[Tf%ـ %ߗXnɭs6';V٩f\TK/I +lVg[53 2 @o%W5dۍ Yvif\P p/zH3[f%Mh@>Sq-ɪ'+vbK3,|bw/Ư6( lgcm-ķ= J3˺9[o&Pyrj]K%ۿ 2'+%M& +M3:`HlI$PI3_/WS~6L.YhzY>4wT,S38y-|cq{KmyKytK+E˱יIv &+ssoTozY/Q]jݘ Yu36c? qwod7bzs|T/ǖ..y%8C9 [f̫.z '30n48˗<~R厼@&g=ofZK-I.$@ @ 7;P' %۵D@Eu6b˗Y3րI}TLl:f5:9{^3u6o}r[Yd 21ֹqe*qy.o +N9mQ,e@9K%je39ۿ@@N[Uklqmԓlr-֒q6]Գ2 2Dٱgek[3d){i%ճ9\' g?_>k@4%6f1_0@g,1yfe%٠6nzNYW/:'2ϵmm2~L3/NV܋&P:<Ie@r\N}y~Yn&_|qo@d*I%fon@Lgz(1y6+G/fk|}2+4P-1-+ukue\:M\mI1H|鞷@4 nEg鞭b6|9^ K/5zΤjsm +)>SΒ}VdZ9KVHMR]@Y|NrdRmĜ/Vgvżk@t`SC7n \ӟ}?[&F&EoFoPv|-Q,ˀ +Mg+sr9llNSb3]TK5tP,.cnƸ;snC` wzn,*͙V\@$ϵT 357;fu/ŲϠ ΉԌP@O ؜'655dNW;I-ųcbq˳c6g + eޕ%P@|o2jugĜr,yN[%PT +-ϫ& +lg'_ZY8̝,1-@ w$>C{sw9<ޝmRԳ.* l>H}~fƹZv*I_* l@ٚ $(>Sq>>]+{`:I'7E@,ءfȠgtՓn(_7ޚξ|iK?-Q,߫.* [jɪ%T$v܃;M$~`HI1;ej\6 #FMzg3S%JYIpFoߌq,.,ӞdPt&1nT-͘ԓ&-hbq%ـ ?/dk$39ր43wl?k9o;}P~[%MK;(an*3ˏx̊38jl{c\ܺN 2ݍg@i|mJӟoMg%ߢw;[">_H nF%|sk'[1׋2g K63m3_kRoėb.;8,uTL*h 0@c[;k'l1yY˦VdϟԷ[,:0%UN]NYb"3o(͚<q@TLTL9\TbuIUc߭^6w3rLYq2anT >;U%տPcc=snTڂɑ(N[U'w=[H lymiչiR(KoضOH, 7=I-v:0@NV(jqϵ l_sYwo + s u%ώ?:]~~lŗ.dnɓ ۠)m5:ImB[,.Ԝ{Zs9[o@Q,՗;L[tPg9KoLw\U;緩wƂx:0'`EgֹN4 gw_/3ˎY9*gul%lIR +N n*oP*{\ndv6`H scV>j.͉f* xTK%@7e Pfu/Ų$T\_:b|\ƤiMPZ%g$v lZ xA8݊KK0P_T3Fg$y~* .(o-lgMK 2'Ynz'9:M=&Nԗf8K*/zַ&6 U>3u.g@TO0,NW!;[6dg/li%)>&L{I$T[@*M% v&ꀨbMˎsVW' qz|Izc2ɴOnzɪl^3˗Ngtq^dvrgvlI4&M7-ک(^IY-Q2f.*.XfՓ| R]Y*<8lc5`!Q')U%ضg@/)=&Q[fsu@t`}ި(n@I&E}{F~=@Im&[ @g8o1o_5dfBY/Ֆτ*')6V/jud9[M؝KljT-Ȗ.@.I1Cw鞯jɷreh̡4l}IOL ˖$ߌzkIv-ىjY>*3x.kfs"۩7nb(NL Vg-/R\%P_ba]}kTg9~z 3nM&h e<[tP%l\ s͘rɀn4)o.c=s:Z<@`(Ǿmo} rv|fЖKYl.;O̗OitDmOߠ +a9Jn/ 7kLn H^f,3:ـ # '͗wZE@9\lќ4'+ƺ@A@P-ۿ|=R.E4)W9ߦLsճlkd([+k|oV7y*['~ӗ$rw#rs͟Zο/*L'oO'Š +gz +tgs$xK8'j;H oZրi͉8Q2[KfIp@9M%1eSȢr?@i + 7j +fK3/n r 'VH(&M4P gڲo ,+RIuDMPT3@/).%}Y7,.e2f$ɇ7ν/R}$&jC)ٱ'+ ')o-Ȳj'~gKԐ@9qg|P@Oڧ~չi*o ')A2n|A@Pcn3_Ԛ؜vNuePflmʲkBKZY>8ڂI'ŷ@6n*^;eVfsrnqsPf[o& rg3WWUvk4@9[ps޿-Krj lW#}|κWIvk`ly|9\%5ds(~@e,ޤY5@($vI%DKpO%${uR, +3mNw|43k@dy=\mƆxK=iyͥ|Tnf +IY-ՒO2. w@u;P,ـKA'N[gIYC?Mo^et'_Nz6+/m 1̳j~6rۘ ^Uko_yڴ :Q0xە; ,Ͽc/;f7̟mf$hf-ɐ<@5D|.%*'P6}:13ƺ@$m@943kW? 2z'T@&˽Rq6| r1z(9~_ƄV\T-ɩǖK5@T[[՗@/).+Mcddxx\ݚe[I7sl,H]bl\Q-6&(ړ$ ry616siˀ 2 &}%wRŊ >[(N2}($|7@'POPI$ +ǖ^k ?,Ylŗ.t/3&@lKsɭ di%ճK7;f_qsP@/kBY.*&_*JK3TOʠ* +` KrmY7%ٰ<T/).%}Y-.PgfU.ǏNy^}iK%(&[fI2($(%K4þmHlB.?zu՟,?nif(}vdŷ@-]qrP'I>-{I3iwLP-M( ޝqǮ-c=d +O|Krjy[|Yd/uƹ]mL|hf/Ֆ2(,[ + |֒Y~-}T,*rzߵg޴ݚu24g[FF3kff6Px۹Z&-l>˸\:9MQ,*˄f'IQec9R_UE9LV[ՒR\T͝` N7Wqy7@t`c-左o:Hryܚj7It +;ux[}^SN3'n3;ʀ@8-PI3ŷ@KE,Q8v.Š +`-i}ų%s%ճ}P%*6tY\ms2ani-Ě + nM$j&j3oy`H ;hs9Ptd뜠 lTLyoQM dO( ycs\K-F-ȓIqd֙l[<%&g&U3ԫ@fzl[%zH6x /:>3w.YZ' &)jϵf')|VlQ_ 6Vyl'Lh%"['dȢKU~ЖjK* wuI1m@KT:߸g 3˗g3joƇ9.u&Dz $9EIv-3m4H͖Ƞ41˫Yr4Maǎ(n oq-@PyK|8̎y{=g3VM֎n,ٸ.''.X]şP bqmujugg~^tK7"֨^I2rN~3ɭs^7U8̊s\@-ϭҀnzN]ճbf~5.O 2 ?jf&jP{_քe&LP/@ qɶx9vnzY68S1eˬN7ci&^8C@N[q-Ş + &]Q0on%YlN +Ci[Ǖܮ$%սL)et\slg-K%Zc#R1^՞j % pQ˽<:-RfK +^?\n;܍^lYj7f nE4'p}=Iv&Pg-Ř +19~_Ƭ<9Kmgwu߫@9yK+E6]Գg|O*s? |oٓwϞ,[0рIn*IgV-[[wzK( +ӏ-iþc52hd餗V|IO +h̟$`rډ&Iu@/ǩډƒY~-}TI1R7c;%[5@iT@@,Zͺ +lս],ꀨY(Yˎ]uՉ. +?͘8NNy^L ^6_c=s:Om@IoVLQ̗b4do{7nsF?z|t`%Iw|Pn( wN19˺m˾% w:(Kn;fֺL#>f9ߍ qxz@$R +nPP/,POTP['ՒߊP9\<9\nM&vԗP@e)$ 7=[@7Kh&\mgnwȬ͵zϐ@ru[jɷcm95zMio*xȢd](& +{I3R͘V_d|g( +jnzK^2Q,˟g ً.]N3"&L-@TK%]Δ_<o@/dxd@7]~qy@.M :dIm@%P39FY~-}Tyܝ/;g.yHgV>o3:H^qfDOYaR_LK +hnMg-N2]bζcS3@7%ـ +'[%]@/LmY6Bq媲,Ϡ +'fT{ Kd6.(3u'/o5nRw8v>%;AZgh/3&%t&^m$1RͱH wPNSbfYpPCpPt23fù |K/TI[lϠ +&jW>4%~R<7:Ƴhٸ'+zdӿY{ݚL@ց$h fTK7˄@~YrƙyOLsuImw0  X +qS@o^2Z0р~,'.$|[wYTK4K̫*['l\T@2vdŷ}6K$ڠb۠ +rߢyߪ3sQ'z\,ul:O;z %q-5@P!|gZIeP/@;ԛP$‰PfByX6`u Iܚn_$*[0Pϔ"پsf6ru2n +gzg &-$ID@ lNֆ/ksd LK7lhf㼵-̿ZP0ɺP7o_&h'cHK5W'^p*ճ.*[AKn҉b:KPE ++zN:g7bN^l@mV,-mnV`LԖ_f@T Y5$ZL%ߤMPb8Imh3[ǎzomչvK0Pt\oN?['$"'T/Жjˉ@!@,YMTNsadQifˉlVK~4PR\fEIuճd~M<]hL32Ww.1Ӟv:g`]PI$ ,&φ( +|⤲*${@r~Fz5fֆx,ؖgPy|ՓZ lc[֧V|iOmnF7hK%dQչ5e٬u'^k\ϩdPjLKŊXԻ3ŷ@@N(_om9u@9\?Sqr +[O9@Zh rwWq6bN29^/cfUs,g|\ on* r67~osq@i-(oʼnYݪnp75@iMĶO& +<Жle޵APblgK.$1A7Tfq[_- #j۠ jfIq.@Ng>Eߠ +&N\wfo@f3w_ 23ɾ3Զx}8? + ll\TO@@@s嶵YC[31'x-jLk2.RUTLg67P'Pw͘fF}Ƽ@Krjŝ/L s63L^n]g,2ڗΔIK&JhnM dD&L[6[znC?wZ0- 2>u7axI|yyl5.Է`LlPc?+ie`H˰Ou|@/.}ꀨ^NRQ=PtG96Ic?-8T_bـ +?>gX'ָɾ/u@wǡItKҀb[*K@-g]Ι|R3:$3}[FY|T/Js {'ilb{d,@\NlNVE3ۑɵ@mgc3luRK63ǖZ$[30@ 8ZI'( ȗ33:hK6b˕8݊P@ w* +rgYZfp~+]1y]V9{k?  wI$=blPL +&~Za +vj +Ymdƀi=W;v{߀.:ЖK2N3'j0}TO-I"T$Q,@,S\V}.Egb@@-ϥ@r,7\@4cVɱd+c<.Ɩ]e9qߵ %A,ءN3"IBP r$f@Ttw;TfP,/)=&P +)u7gj19˺ջ0@6~2~&TP&N7bIMVwꁀ fP24 $~*%|#C7~ŝXdPjL@NW#3ܗ+SflY(dy^M[;k̿՟~i;@3 ܚNR?_dIZ]_Yn*|-T[@9o˦ޯ19^`l&O媓slPLPK6,?%){JG/]8̝|qy];_ zNr[VMfE'Jg$ zq+Z64l sV}[ө< @yߦ61|kN2YLh: ['+Dyjg,NvLsbnx7Prt_bϬh :t +K5o,5;^Qϟ}~sF,هg'n@~z&h|KdR}K9]l^t/N\\S͍ nB]qsPK6b%N-T=-@-ɧDv*KK IsqsP;}/l$ogV`wc=[>Fa<dI8uk<\4 nMKpKWLDuw9m鎺:6` |o\ξ:L|*nȜyk?sZORrr-ř ˳L=qL` $(` ox_y'K.^Y=ƀiL/Qo}3zY-h@nIvl[3@= %zQ˾Nz|,H[J h3yeƒY~-*TK%򬸒dP_N-1-œT@>-K38z{ο-?[р&3?L]P9MÏ?4')qͶ\&}hN6V͉.͋rڹcrcZ=&xrsşex/=,@gcIwgYZ@o.4~-}T-ɥ$*3yel72v3.ƯViϝKuLsdS@9ݺf2(7W|@Fy܄3K~m 19wl|;99$ߕ]Td39ŷ@@gj^͘tsm_`qNL6]ZT_ƹt@9MV]N3fQ-Ȝ-̎R޻d`$x[>[6$#u|jfzsd ;,ل'`&LILWhp*n:^q[Жlŗ+߶Y/x7]KV1=P I,U@TN]Jq;Q`H7bU}Y՟@goƁ$ŷDTTlhK7ˀ +%f(j7Ptۥ1xWsœpg K;KI;g K ΓC7n֧VL$d/@ [|Yv]V9k6Xˀ z3oqb-8̊63_YjIh3l֙fx$*K/ųp˳|[tN$573([Rr1|nNst`A2E@$U&j +`)r59Lӗs,ӟg'Sus-ɥq%ٱl@gT%.K}DT@ юoYdjMΆo[?>kRͱXYխ[, IIul@顛άG]N~ߍ[q .mPd7$˩%m _($ ;uI$r].K|Ej|ci6c\ܖU{i +'~>3cz7y\ͺ*d3w|Y7R|Z̶iz|[0K}f@9I}T_R}PTvLjɷm̸圲t۟[dY}R]Z~;jH%YO + KdZ +nM%lÏj?)/k,l\nMfrۋl8Ŀןf{@mKdKNmd7>=7? 7w@-i2oYZgl j*.V_ϵdߍ ǖS/3nuijw>w1S{U9M 8򶴜xf ]ޒY5@TnMYQ=~S.4 4NK=^w|8̊wӎ/Rl](%gdx֖Yf̸|8Ի*nf*PK6cX1Ƞ [ &xeޕ'-T&K`Y@Y8%\g$2ɔr𿶭r[ Ձ9\g>c,m8ur6zNn69?[ylI@OT_f*[e٥Ou|@r"
 rr5swZ %D丢~bIځ&');AϮ'W[缀Βܛ{TN3"@-U;/֙ճ.4I|7.U@4 )ɫ&hcm94e/]' 3mk|trn<[ 2TI@ I' &| . + 9j['<퓣m Z0@IC9wuwiI_b
7g?VK~4H9=ֹyX#:8%gi,.*窜Ļ,'+o^4I2l4rDf,8hfs,Kqq@TS1eˬ㞴%fO&(g@ ЖK_'b˳L43,ً.$ Z6vlg'_ZY %f P2v/n\]nvLu`I׵LJ + vif'@r['ՒP')~%* YYՒߍrq奚I'g_ן6%02(7Wn` ,*|f],Y/M+V_ &'ǹcC74ox?gcoMr<'r:sus,OR7;Q]jݘ)7@,_ﭧ6߱$ 3mDMh@=hf.4dIչT 6n,mi=wцy/C5mfˑKǽVf֮g 2蝖lEډIv(]Pz% Kd|eKř:I3@@_ba +*rnx7P8f43W|cv63?ˬ|?3iO\3~@$;mک$*s2z%3:rėgjԺYD|>NW!l~ vh b۠ +gVMOl NV^֧6l }[lKϾq㊜z\@YpP9r]P@$;Q3(6nR%Ô؜&& %Tm r?Iw|Y +_ځmq߶?^kl@Kdmmd6rֆ3uW0Y|NI¹u'~/U=i/NL֨I]$r4f5@T/C'deoNRuoz@v.n͎r[uל+@ sL&{` w:vdgmόFM/`%*dV\I}%@PfI%Iչٸ .2g&=k'7P}Y2t uvTgxp1o_5g+*mI7ВU}@%3[r/Kdy_:M'|gIݺ'V3#;1ɪL4ճ.*'@d8v_j`Hbߖ>k@6[ꀠ ye-ɪ^X* sYֹqsi˂K4=hK6b˗I`*gz`gId@4 Yio*h(['lLY|Ug\ΦUω&%@ 6zRk`41w6 ɋn4'+-ɵdL'pX qR]`h^qf皠*I%> +I≓ +K["[$gY38RYg +{c,׍<9H.M۾*KN2(/P %ݟ@(oxY[֧V|N3"ɓ"[* Y;MT@("*$ک_QA$]T,NW'Ig7|QS+|nsͶ7z>yqL9ogV 4K=KfEڜ-Ɓy0n* f%y^iUn' 3% +VlݟbxvsmL@g,&ՓZ*syo({L'+-ȹ3KKϠ d@ܚ7`Ӎ؛7<-,i: 2%+7gdV}j]If n)~xP}I #oq@t`mo[&1vxf}ƀmgʲg[q2j U6S9rĶId" +rKggg{fus* $;}_ fsX۟}g3q[X'+IdەY(H&w n +3K/ŲϠ'+''oKVP%-S&TKsI$~ 9mT_bٟD&sO uXlm^P$fN[6c@41˖]N~78z_S.4%{VY|cxw\]^hV9K|*Kf7 2~,lՓ~( +YD|>9p;hc?7[lFN[($AB͘fE&')BĻ,1߶筸d/)]MP|8v.[0P-9巶Ʌ+<~mF}Q,ߤ3xϢqZsm_ 4OUś=I2bRb? dHTOLTK7{|<:0rNܚm.nLq+s[ ߔh-[u,g@ Tfrۍ$>*%UYpPm{'ҳu ou7i>ڞEf?7ٍ3ˎK7o?lk}^1?ej,us;fۭI'Ŷ@7TK%]\inܶdkW8>jo4r*Ku6dY;,J?Ǔw\}btK6 n):Fh%]^WTg8Z՛ G/Ձ.҅ g$yIj[ +75StLT +◴ + nE,Կ +Β܋tcmݟ &}=ָzyɪll $ɋnTef ,L-Q,՗ l( + 4Yّyu6˕rIJze4Жlŗ 2` +w$P=6~%>/IwdMgz xY/:V`L ɜYpPf˽VV\ r;oyH |/=No^+~Mq5s^9+}g4[A g:t[cN?Y58L O% +(QK5Cf%4@ >]t`yr=u9VMh'pil7K6* +ry^_5f--I5@>-9\8O\վ9Q͉ǎ37\$р'`b]qs*P g) ً.*@P-yj͋fy@bNY%-œT@@Y֧6l'cLb[j }DV\TJ+w#=\3k`43Qgr3:Vd@(6rjNWƺ@IvxNR;Ϯcs?nwyA8݊Ի6%%( Ieϥg MMg*% 2td]*3KrjɷȤPS(xKNm I%DȺ')* 9v6߫d@?-Q,՗8 + fdQ2nNR҉fYrN ǖ&
6Lޤ59i;o&h&O҆hN[qY=[=k4'V]%\S[ +@O^g_ ew-W+u:N< ^wY՜oy49Obo@>3uA$*Ygg?oKKlVMPI(x\ξ::4[VMq)=@'{DtPd⥹5/Ŋ39ƉԿ ,^;vKeπ +q}] +IY +z lE ؠ<ǎ(K~`L Rg8ͻ[I2+d։A90n4I⁘$߸_[gVLi $_:N;* yIq-o tTqSfPlx݉_8{qx?.e13r&m)eԋfrj]/|3ei%ճҀ}c?Ms4 Iݺg,ƒYVܚn3]i%bNo_ث.fPx3zY5@/}O9@4^c$%m=/).NL۾OgPYYP wU ꤻ5lOY+Iocx94g^mԳ/ <ǖݍl-ɥcSZem{hf/Ֆπ Y\I4 or+^9ί+wr7nMfMQ8R] 2 Ys>h@;]s܍,:01˗lgld|Adɉ}TKdYdf[\@\N:&@dN2zY/T I'ϵsc1yΕZ^. Γu<րi,ً< +g@^o$]'wOIeNrd]]N9:lIPyߤ';I[р e;=L@TMq垸]ė|W@΀ `If8K@ȖՓn( }ݚY ,L@` '}T/'LW|@>Q0P2n^9rޣ=u9Ȗڲj.U}@,d/Yp-ķ=(.Vtkݵw rA0PK6(i&16JRr5˵kN2)? eY4#z{@vrĶOjɪ$*>*)Kdb3elhL[tPTK6b˗\]x]^d-" 񡞦ŗ qn|gί^:ywr;;s( U7(3Krjɷv4*v5Nrk(l z|f=KZqߵP&_:f|$ŷ@ A3-TN6TfQ-]-;$ϻiy[V~39:yP-],I1=n2(18{^?F7Y'Ż[m4=Kd,۬h ng@/D8zߜt;d-3i8Sf%Vk)$TI> +yϹo8[Z'Pk+6i;gNgo>52_N7by/3ǕܬޤVM _mճ.*% wz/P .S;ԻY +^qLEOTN6ڒ[fOV/dk'\>DڃsPNSgI|'%4f_f*x3yYՓɺ*h SméJllw 7YM˚43slŗ. 2a}TKN,;1n]bύOI>8u&ߖ}*Kf*/˶zf5$[@KҀV`ɲloܭoY.* @a@q۝c|?˟unt36(`%*dU>'8I'~*["f$KgXYdI3[D@bo@Iu@/` $~|룱lgg_Z,م eXn=TZ7}4Ͽ26|iOK-3jIjY|T1ZsԹsetcSZl@b3[0/wT ]񖨖Ke<~rڶl$3|?/pmhdŷhH9KgIw +19]mz|jy &_-ő@T='`Γi皠* Q/Kp(')%2q 3ķ@bͶyu0@sf/L#ԭ˼@:0&wj3~hg\w;PY2b_Df(D,$1m@Mۊ ͙V\`9uzi$-ɧ]);')n&brbݷ~KV;\>dķn4_:%ۊeIչT׍z,s( 9J,r4)=m=F,\k8ԙ1-۠ +[O.Pskp@K^hw;P$ɋn*&*r啢}fg,\r~xvֺ_ %ʜÄ55d:%+\w|38io'E@NW#3O9VdIPnLf*~$˶XM/sT$ 0 +cƸ[giÅO1ƴ :Krjɪ3-~%K0Pg{-őNΔ*Iw?(%͉ǎ][53?@6 M38colӄ5Kvx+oq|us-'U/^m؜$KRL+?k.xo][72O*|Ie\@~3uI$P,ـ 8ȠI@p3ymk| 2 |Gίמ[]z@rET7 + fKq + yHeyW? 2 f&'PrVdŷIv^YqRYW0P=+I٫f\TOFyqzOfԻ2v6K@N2(n %gj$8/lۖF 2Y,$ȠIlh튓wո5j ` nC-MPIi'nj%IչTv=u3n6'V]`%~Lh/%$(퍷Y'@(['h n(7ZIԾE@ٸsuc>lQ6n+R +_+gi%ۋ@oe*d[0@YUMpP6_NudW$ w-œT'^R+7~?L {ЀI[8uEK6%gIuY,6RKLw7\Pg y`[rx碌MKVyMgfpgfY4:I"ICt@>3yu^ZМ7;R]Y*֨dPI$@N;ުKVT*I'&MK[%ޚ7Z_ 2<:hK6b˗SؠI v*3_2۳@eX z@OKd訖lÌϵ&T-YLk&(5jui->Sqz.ž*T6%fo%ߥ%"*(N>vϱo@g/ޗo.jIi+L^|m&9mю_ܿǻuӿ\hI>-TlPLW@_T>^qc;`&w djg + ,).wIt-pP%I.$ @?%u@ٸxu.g@T'``ft ϖ$bnwQy6 4w?['%;poYP@7Pt}@I 7o@x{[.4 sH?bN2)7? +ƶ W~4,i$*M-ȩf] Y|TO? + YY/ +[TJ$7lmRKl+Ռqݚw[[d@&lcso?րt`M17@˾hw3%HIKrj˳BL=zxܮlI29^-uu'8:3zi-$E~4 lulޤ9ߍ ~e٩f* +1yߦ&Ig/s}@:0l;IչT6In.j5o-6bI#[R&y>%iٸY( 嘖ɪ`(϶Ư6}i>S!'+-ɵd򑟕ӏo?߿]גw!Ǘw7_g~0 lYfT'Bs dK5S_0P v|- +&I,{ėVPOU\v[,yd$٘{PKKSgoWy&Y +'϶Vyg5dKEc&ƹ['Z + 7 w4 3&ݽ4Ied]l nCKX.Y + ,eYsؓx .T@8Ie-|gA$h')*TPdQ, +ˍ3Z}Q@oָvn5yɪlK[*['Ւߍ*8̘d|tƹN w:Yo([I'& [WS57qF8ۭ 2hrxn4[gzZIr6$߸((K/W*$lIul@6n ƒ]r-I@哺ޖLKV5g6K2Tf,:t E +L2K&E@/TK%3^@~4zȸNR,3˖%M&P>3TI>-TM%̫.z ?ttspP-oh_}TKdSg@I$PI3[ + grʢYT tP6(oe/&̈́$` ]vjsV[dW$ n%{VMQ%ث.dv$ک7P&Փ|OM@>SrP p9rJR\/ZuVnz? +n˚*]P@@ &(wmyΥlr> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +177 0 obj + 2567 +endobj + +178 0 obj + [ /ICCBased 176 0 R ] +endobj + +179 0 obj + << /Filter /FlateDecode + /Type /XObject + /Length 180 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /Font << /F1 128 0 R >> + /ExtGState << /E5 << /SMask << /Type /Mask + /G 132 0 R + /S /Alpha + >> + /Type /ExtGState + >> + /E4 << /SMask << /Type /Mask + /G 137 0 R + /S /Alpha + >> + /Type /ExtGState + >> + /E2 << /ca 0.100000 >> + /E3 << /SMask << /Type /Mask + /G 142 0 R + /S /Alpha + >> + /Type /ExtGState + >> + /E1 << /SMask << /Type /Mask + /G 147 0 R + /S /Alpha + >> + /Type /ExtGState + >> + >> + /XObject << /X5 152 0 R + /X4 157 0 R + /X2 162 0 R + /X3 167 0 R + /X1 174 0 R + >> + /ColorSpace << /C1 178 0 R >> + >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +x9eIw)\l +Am4[h覔@B% +fH/;Ox\??]yxܶ{o\~?g;HOy}]^˟~y~<}ۯD~>~o/\yQcz>??Qtu}/?? >ߜWݝ}_7o_Wʺ^7o|O\1}ow`y\_C$_=z^럷{Wl\>w2^邍_Ov^j,c8v<O' Fqp_/8x|?/gߟ }.~R_OB})ׯZNnG u;{ac>x?F>#g g#óχ< vuy|}@^Ž_/*nRۅOsr̟C9n]fr߯z~ \=xxѨ\ܗKc r'WdB5#/)+ +H?IX:w Pܮ#( w|J ^ߎI'aޒ-=>z(|}QOݝ2zB6?(>cELЍK1CgmI#?@Cjhufq~:~;Lqz{qg?ŇNa;WJJ[燩V K̷}P.lsۨ/.EOo4I&v'R ]:䙖=esXnC}_w/=qZ?c) x[)m4z% nobp)]& ]LO6w%U)i߻&n]1\4"q?[d W$O-ㄝ<Q=}a40%utq&jAUEǓ-'LDIA"1xA m1D$>sFA΁˅:' ]^9Oa +r!28'Ys xrQ4OM?xL(f :)ʚ#Mm,qJy|ʭkQuv,M*Mbs"͒4$%~].g>jb8߱>XœwTrD9rUO`o; +qλ|dѴ:[6F6e丅yeM?PTj((_<6Y|bv\Ҝ%x{CAiÐj8Ұ@?2|?OT83i&6$mc!1tɞ|}aD7~Is(<ϯyOgM^>X\kOoӛǓn{!FmޖGOB5εN 61loo|EqcWNe?޹glBfd8r;VbVs92ZT,E`+?%lN8?_5Q&HŸ1iAqp]x7@~FOW-G8G6\xlBmμm2--i:lY,zlQ5_NZFS15ϖ~8T#(1!9?9o*wyA)ǐC㟰(#7z*ǘ/MQÊsXümSg GP q؟J]Z;0 Ҍ'.}]8e'o ]cOq8?5E~@ +M4yvr"ϒhZMڰN(_^3Hn#qN<2Н~oOfs YZ;|g)*/gơGiZbWcE G76mESlDT>/^ҟv=ɳa8xb-|8Ǔl=3lpI>򄝴|BHI:f7Q;85=YkeoeTX:|.ngƏ-?v9.in8BQ߳צ<[6mɶڗxi=yXr?MwMܫuE;ϖ:--G7Ww6=fg{w8wϡo5dOm,vB)0|X͗plqAiQ|gnqÊ(򵍢l{hYGi裪9qM{Vyꛧ Om Y~En+&ObH3 +sGa.8xLHT߸^p0jت kb:=meAq9G]8a>y{]p+oDFeIE˭HEg?v`_V;ph +(7TnuNn~ |dH1leoH&m:dX.3v`໷LLJhwv}~BvqQK&ؚSGoU^d :'};`Yg f-Vw,}! gDJYkP`2R49B ʠI.!3d/&5rb0ߝ (ڀ}l^%ߥ-*Ptޗo͛gI4{ankV;=);'\믏XwǼ-j`GRL?Z6ݽ=٥zI)~ Se Es6Ut;j'=,UQ0}Qo +ulFQs8ͰqY.[r*hBuFy]?"?)U@iȝCS{lmMI.Gl*?fP䟰~6gGt{V4yuDLO3·hVd)1ez[XΙbeYvei0h[-iE0; \5s#RfJ=Rwp;k[䌅8gq;;aē{dwN!u\F3FW8"i |ޝ18P3/VMbe +7e .#p '1B}Ӓ-ִ' |]-(?-<=ŭ.g}i,^DM`ڔ1 @=ܦ]CИDdY되\z&8^ä4Å%H@(Ry  73MהgpM勀'_AK. +j=|$C.(=^4B8YF( +~? ]cD +x3&ǃ;@:jXx1vY]% +y9]lB(WOnKvSF3!L+Q xp@ uO.L p r}I>  ܵ6 ,8?=`o \- c#eB F 4DjJ0_]!N6퉃ߒkZ:.x(VY$4V\p"yA[/j8Fp6EvCƘ 8EdHd}!WVcO4˔zuLI+-=4L1$}(R=2S+ScAU޽l]H6Ӫx.Uyo4oNY7;|8)ݞá;LMy +]| +(&` [Hs9!PYNe NySrwy-C뉃\`X0h!lZA7O *+.]Τ&b$k5_p;|`퍏_XW Ǔ$ Nș~K^A[jJ~4q՜`5?WnE$nkG>GOO?X:y0'W^ep9H8sƬQ3ֈbJ\U纺ž"J_ҊgS}@WX:\3XD`,38@kUb-c68` p+Pp(٤AϪ,,*0ckM;"3 wGrŹs/aT_1s} 3~qVYp923tKIG;cъ*LxY̱O.oHjPO4HCc. +%ڰ38p8b @-4֔`K:eGE_R"IxL4KXV:AXxT-H`i)~*ov-H@NK:)vL<:[l9ou vt"i\qXNF@BAY^H_`@*8`a`cוLix-;`;SQt`rKK$^4 j޽ +8qX!@!q i]-G)M_ˡkOn= 9GTrsV lX سM'f2.;FBuw%%+tJD" &1iLétE@Ix VU?8@C[8NN?n߹GJ+^"/s Ps`XHBm c@~9@%vԛ/HmzQ<ѳD-w:\7\M (߿0DM t:)!19s> Nwђ~Ф#?XG04H:.#R=Ӎg%,/kxhFȆ,Ebʱ ^ieYCTK [y +}tc@hDBTáTwω+F]ߩzC?98Gwn9=|Or0Gtyd),BS(ok(qPd N38ŝvc{VuK`1qYgƶ5g] NLKV"hPTܖAyc!.G Cz %5R&/.,=%ok(:dOROF@Z~kT8tqRxÇF$8[1G#n`ɱv: qzc'tI`GaB]xs +jn'LC?BG^؅ ۡ*yȈ璀'HZl}ێlU:u*g@[U(L5{fd=?V Dv~:2. +"2+a0dtw!@ٓj0[ \g-.8/_+8Wlq \?I`ƨ>޶&f3BX_`};~y®~iW&66I"@\4%zǚm(d |> ;( `Hi렪a6 up h,>զX& =`#ض6*h䢟M* ޸j& <nT7~XdCmpWܱis"rCA<5_3Z%˩ʕ^7O?'n][芶-@\,==:.Ú'UF`TLnsvXXqlA`h+}i-Pŗ'Ԡ@}{ձ?[*z}On'tNW1GeswHJRfobe-=Șvaw`>ZPxX]ҫWফo-%aϿ eLCX(uEbtO\>җ9 g|$ O, +oUf۟O+ˁOTge2^J Yr}o5b;O$"r(+.OxZ?9o˓gnRGS:!'em]-zVۑ [N H)79`r8PIi͝/ 3).c'Xmmv۟[7 +f(SyXB^2k-& v',i WפC;*peJUtqH2a\/PCa)8jq]8 P*pX&[u:ixM6q!K,l +{-]*7o@Ѣi`&4MhY =>E)xG m yoG1 Kmc@q YhTmH٩DNǿD#Io:G +ÄxV BD50#-]'*f T^NG@c<|Û45:GgkEYvu g 7?`/ieFJJ"OZbZJjPv ,DU¥uXNY-ƀSP9SL qeS`T2ɴl&d9S% -JɁmx$xVӟY3t1ъn^{g^ 7f5ԁ5"!0fBQ 0&+7Gn]?RT0;\mKz\y[XKT>McW~5XY.6G*au]Uoă.R&:a T=YgPŤs֝|8)ݞ`^ 3?7~>V@I0!To!T~s< uCq,0"NS p*a\FD@<,:Җ'p$`ShC9`Yb;ITnv۝q8+7EB;nWA4#];@~{!᳏ d@܊PP?升*3)ى0sƨgTtH0y'lkG>0_9qwzgB}rD/zMn2BdnByMN 9Г +0eȃ1McQc>TѲ`T8> ܩ + ĭԍ~K.G1?z4"Xu1sq?ԓ'q} 1 d+R#I{Va#A1l`X`YOa a x@ߩ1 +ƑQOP>`I. +_@Kk @,(dJ3$3tܲřh:PNSCc8Ҧp9&x=chQ@~1vG><*Lfy$oPw!\؇8=ERH~VIb<qTI}rf9R;KƯ`OL[fn XS'ӭ^iXy\ xV ZbcRix@mX!rY#sgzn%Hkغ^qIfLDڭ >qa"rn-%D[ǫEiH /jP0pt P'^Dh*.wGp\l)] .0x$-blNB:X ԃ 1# xZ B(7JDU{O<`)D8[*4D3E9 upu8.wphL@09lӬr)z | +<2ΝI.`ȣs9RƔ_Icط0[Q8.݊~y{ם@+vu +^kPY!)[f4K-ұuKٜ ǪDmX=T$p O밍RZD 6nMZs^ӥOTt<J(9hJ\n6`r8p9=#pEZyѧl IVg8=^ K03l85=t<+W l*FDa xzrPJp\W*{ 'Vfgn ܣNrஃI`-R{ȷ?]%4;_`5x8.-1&G;Vqe=1" 5m#_r̜IV^}OGܑk{zC)T0%xy3RQoa Q/³J- ̲A`TFWR ?Mf`Z\4do?`=!>m.UB`爽@n\;XTH@ciƆ6] Rː G70U"?r )ɕǡDS ?a-(Md5W~f\S6"ٿ l|KtxF`|m)zSJāp2u& 1K? +bpCj@qxXJ* 5S7qm }#pzx7n ;08كhJ[f, %-h n)+MrtVR'=9ބ8Q+u.\֠V'cHy,hw22:p=9i@I˾_ vZR$e3+@mg#r ""S: L@s`K'`n )ܦ 5uUA ^77lL5f-{D=p/rSG ok~C }uoh S跱ک (YŅɳ-ij)0*+δ&'kouu&3ߵv% ^mݤ*g'/H1]-# q [k.|(Pe1;^#`0|)Smm~to.y8Ź36~jNL8r {!!B0w;?`,V(3[ xDχdbtVGS H|FD0 Fk}&.f]HϞAnvY7PHiAŬj 5#/֧2œ,^zX#Hȵ0a+=T.P_ψ ;Urc+n AޔNC|.޳^*[Ne"k\ND +}1x}&s3v]\npwZZ@U^*eML 6bV nbGgo:6◻ʊ%pIMjNIoΰlS%o.:I]>3ktɓ/xVO594ف;5)F@0^'{GUXA*z*atR6=`%w߿)&7XX{ M <)X4 s2>dQIxU6 ++ZLNkVDTuP`FYMOoa/T)fkG +aD`1r@^" qʑҗD1ﻀ2:C(_1V#DEEN_Q}"Q~|tJ>.`Q@S/ :0b| eҍ FznNƀm)yTC\7?{F"UG&pk3YNU&GНasq |$C$U7ՀEp_= y׀Q6PL91RK ZJH:\YĀ3p={ +Q+P`x 0 +dScA@t$BWF < &UkMDpLw8L#ڀ5ZP47op^e+8pE ]ҁǾ(z2pO3fq$&<;n~3:YLnxT5FwtvU%XZhӭ"Gcq*?D|SڵHui$ ;FҢ_";SbʞʹwRB.ESEG>OH+=7E1g&4X]Z,@30x7_%6rMxgw|6h征cA;Wr`"hqZr + +݉b`=>CxvS+P4z$vmօ`d_`BvcrV޵ 跹V1_U@{8e>@ݣI`5It4&兝!lЋݍ V/y|7Rh?о?pזO8W +™>Yw &)Jښz iZ$c$:aW ց|vqmT曇)c1MS=`3-ܸg t5#/\yIkzp`]2\OZF82Lx4 ܳ$O6b~:L][Ab  !կ^#1.pyos^~kf,sFiިfyW޸,.Lغ~=?aO_hSW3#KYΓlg߄+X!=ƀHM`)EvT{)2p53fW|bZpЁnjfMjklfnE$’‹2KC[3s5`j26iȏ-QM w qJo0L]f *stI`G +jn0: lSw!XuJ+{ +Iҟ/Hx2sA]_:$pyTJC*xI&(GȤv8 ,RUlU+HԵV|;zyV|- +*.q@s$G[9GXqT'Wfb6<)e á#z +4KO$AhH suS}F~9`E(`+*BZ#X32M^f"(ÌoY4)~lZC\wH_W nH4ƁR4M\<{lx*=wN8qNlS%WcњAӇ4_,cɡdK@v0KO,&GRnop9itXl&{0ZyYL-}kHl@v ?֢4頢e|:*"MɫKLrP-R"@;E09a#6{TӴ̷DX;~[;`7U{2ُl a6IlGq?`zMo;ؔ<qtEV0??`WOl1 xoJH_ +s $ ?`OYZ`xŊm{O2#"Q҂.h*[ZҡxkQeKz`xo]@Om@8`FDŽP\=-?~8qf#]XWTgw4eS b6~䠪s!AZq+ pV`tp5vy鄟3, _$7s,#iYa㔤)x}(I Q`yWXLdnTyzۀI[_:& >k/*_?;ynﬞ|XcxXE]79goܨ 88{9xC. F08hˁrӖ43nYDb$0Z+MrUX# l4ho +l +yrP;>}1UJbhў +E,E@GXwiԠ8\@{.P1 +uMz[,XW&cZ^:ݺ̥w߲U4P%@=u\Ÿ\E5`orKj)k7.0LK9)F`b^|dFG M64 ,ɇttJKvYv_o70K<%p9t<]n:\K֧̱hb#`G 3 Ew;l10E !q yLW1HڮU?7xص80" Pf߻vXK[v(r"p<3An{zp%Ik_Pͥŕ]w*=qa6}ey0ՇJQu$&Ny`狜W T4T^7~Zyن+T-<@`hX@aR +ܺ_R>8pEl/*PdF.B8rN\dаK D0jmFվ}6';#b쀏Pگ ܂:&ҝ/Ϗd!v>z&OxfJ ɌG>ZzX3~tX9UrX_.J^ ++,f׾4K[t@1 W\2ͧϋOٌ'GrG@pBvBDGQiD_lQmXXʑ+oY?}Y7M@4wk2+|Ս9 WfGn{'”ɾ *FOoqYkW +9(t +<0 +h" 6r A݉0! UFoPm#"0Ɣ6"#oM24gfx|YmmZv8ЕWw&9d;_.LL.0b`ڗCv(6ke}{j1sof߿u+_lm̍K`HwFF"rxVn}pYwѝondݠv4Fw&#!^@;c8>iZ{tڍbܩ2㕋Lg $`wgX?u\c KC%*I"q{v.L2eҶ\%aWiʝs0XwbM&M%s 2"ps r~ߍ֒,\Oiaqy[iiXgg + ,tER(=*2Wx& +v4A\9%)t#*22pl&H?8 jV2t{fMSH7j}Ҝ^$S~P}4[A䡏 49UTX9FGKF)Qe^##&Vf92 zV#!ud"pzgFYw-ҀՏZC&.xE{sN"paFxPo6'e1:P͆Yi& TՍG8LX֮Œ+I1cw0x-GF ::Jl`;&k`O@]0pY,a5AQN k1F''XXvi a Tyw]WvZaN_pHw/=Axz-ʰ \\8ж5(Y{ 9,p f-`iUn%ZD;!E;(Д`Eo!»=cgIc\뻓a٦Hùô2"%5 fX+FW}<+z/+&;pV)zqE_hB*XW㩺.'a3a Cy&[2ފ:v`)a5V6(Ɖ@9Ƒ`&4W.͋O8>r?T`&'$fNN mÁlɁdq `P-.1Mpſ` 3_7%4ueҁk߿_ޖ^NL}I`Df {с(/4S"M=2,ʣ +- hSW#$4Aڨ+pVS25T ԏIơN!=Տ72夓5dgM%b㙉`@Bw +pCL^+'FQ=Ӡu.frWXr)7 4 yxPQ\b`MmTi'ƁN(9s+IC%}y. O>6S l} n}4hp]Т_z$"_F@8}UX!;iW , f$=U _9PT0TEL⟮ +I]9|y&“ԬgudFMK5۳hx$D^)j>SsC T궁1]1Ɵ_Lqi'heҦíekdTU~SV&=d+N_"g= 3@a}xgo?~)X|m~/M%dtlwdA}ǤWdQr`<>uƕ +燞9?!K[ɕ_h`˽]J;je|) +R72eL|?/;(!P='V'Z{?ǻJөuFwa[N ++OyBVШv.iQ+>&'il{@]85 7)CA9J.BN r@#ٮ<0T3'x9=UnH)ӏ8'-sbqIt)]6^@MAh'ʄy6S4W)'nq6^rH:fhLJX>nwжT4'U[5ɖ2T-L~"K ,Nqq)ӫ/J2ԴnP4w;;+APuIC"bے8\tS&*?:VA4ĉ %zU6U4ͼ؁{y!,Oܥe :+^52ܟ I.-YU!zg_+^I 'TnXܱ.]_\mv U%&ϏA!*'̥9؎ EoGQ31#W0xRW(Nrϓҗj,4Ysof._Ҭu_r"Z|>n+Oʧ76É4q)ׁmI&Ro<`V3ҠO:ťIO!Oe)O6Ȓ e8G+qibCycMid=%Pհȩ:ZN3w7P]A7,=GvKZOAbH}&>J:mUTD +kf4/-cYʦ!x V&T__5D~I:xN:]Nw$.cA`6ORy;]ArLY]byͮZqQ-ې}p}Rm}F NCHj>Tې¬Q0x_I͗D.ϣ g Y; +)TQ(6= $KFY2"2 Jz{D*+&M_ +/$ n6=~0w3?%@=Wwȫl@*|T'?TOJe8CKDP! 0${HBy=`jU"OQkL{c԰5k*Vmx=;=k zv2 ,lf%đ?IV5tJ"ԦyAp9@vX){k>f~ʸ/JKpϑE^9҆]z_>kįSvIg I_=W@݈'iX~}n`|j|mUcm{%y# :٣a){Mn2J?l!_w/-|\x8xk)ICґGiG-O"YMmv*RqMyq9SX ۤsZcE;Ud9iKl |`wٖHSю 9GOQՅk-qp#t?ϊCz]&g:X:`t>˓4m75io΍W k !| -vI&'Hm tI:|lhS%; Ck2JΪ4[6(E\4K6@Q>IJ&,0{}}S6S^e8g3yQD4yMw;^I9TD}3a/ cU# vȫU5658e:j`K;Ĉ1AWaНѾjCXCj7+~Rg0YݬSGhARUiIw fá&Pi=Faqӝ#xae;{tD)\EGЫzuj.{+|]YqU 2+qҙE?Wч-ЎRh p6YU! / wbWsz ]9@qDJGM-ڔi43It[>'Kx.?Am %b šW2|U7ѰÌ^k +i{rՄ,+W8r " U&p]{ #K*U@8QAhOUjQlLEgta(^Z[,?.N)7] aNXokfmG_;EBɂ|6tNxLGiؒ*yѴY37g} +ao[_>dBKvk ˴pQO.g[' ZfkqQH9xrj|\w1ˎ*K;{+aOdP|d9fmz":6^oE+'Ooh5=g{ێDԺ/bV؋,wz.(Zw6j|qbQX)]A؞)4gP/JuFsjĔ:[abc=(q3J69ɨpp q D޿rQ~e~ډJ;8 <>6Ι $- +}Micq9r:0Jy`)'I˃%6b3$M;ݞ} h3 +[Ѵ 6x!+ PX־9_O{Qw?:P8e:'M+.ƳNcV7xIhy/o7OAD;P2%xѲyBS6z$&gb] IȳØEBO* 3l9_#uquYagЊ6vr]#19Cl. +ԏz.нgc@( s;H)pTaOUX^ݯ}E9tSQXokwXޕAm$ QQVumZ0:wU{2+)QKn_Fс\D`2`ω&9oTQ9Gn 瓊(TUdA0;E(+]׫͚nkeZv& [\f3b=(+Q@ +LD]A.0i1'PH['mɝa.Ę6,C9*̓8ÕHXAx򖟅u' =aH9I3CUqѐx$gmꉣOg&";F cfc;(^R@64Ű"&ҽ8jy|hHL+: +y1|e<%cp_AB5ϖuru1VWPW.ydDQ+cJExrR8pv㏼T63@ @.SF@[85|3R5_y/ּQM28LMS"-Suo*LD ++DKe\tbD +VZ\˭Ir5mZ0b6&> JE0~=+f+Q刹xϛmܕE!(1|"5HRh<یSEp:*0GgkG}+O)_H0 0ȍ#W"xݿU<>:CmX +q9eR/G7ǭ<oHg]YZy}=>ak#@AC2,Hz0p]tiӁmF33Puah|2Vb??q +ӆ{xhVI[n#eF[0bm<ƳWF'Ya@Єjg:@.VJde3sMI64% |ZLfI3`x8|fr0ktdEةۋ`<]( Sjf' zZR8vYaa~q܃jT9I Ӭ> b}f&`Nr*0젚@eò2%!t\wBi6KmYW8 .;aR-kP$P[03ՇNX)V]6cobޯǼq-x[{($sޖas`ڕ+)}Kk\GRaoM!.X`M&&5Oy!FF)qBlC޶JKd]9xZDhS;7=ˇ*!.=|JNޢYoW+  +Nq~ǏdB.U:/PȕeO[YqJvJ'-H<+:Wi%rѕ eRL+F "PgS;E:FjUMP2OB-)c0(E<ɀ[ie}JXK_??40POGcc45P^2Aa7?737LdrC??ϳLh?? _O?v6_wxGo\{gP *u oM]Ull˵?UdS;~ ?!b O=g܎2p($ee#:B$Eif̧59f~,(ѝqW|EEG *B%wYj⊺[6AoB.j08]TO_ᯮu$?\!clLZsՂPI=&TmwmVpOFg#Gcli@~&0~Kq7)dWCuSi4NK9 럸fIHfri w4NT>wbzR|ۥLIEcO{g?WG<I+J뚇.|:oibPy%T%?F8\d F3+mX +5ɽlqLȳx+(FP1,u/E`7ϨLD0șR5+.ڮFlS“=gڶa\( Ro4^Q.?^9hVc pCj(ğ Kh4ky|%a0Ιhdo1])׹3ɤNuv*t~vK /]4<$jЎwI򱦬S;QVs;QB`>,G{X=In#,&uƎ3E7Eқ7hh[=~BNSmjɿ-&DOzˡ]KW 8O ;zө`P4dkDQ^7yR r:W ^eQd^k<)Kˇ_G*Ϲm+V /AjP>,j༉5w΋-C1=̼y]\iҜQ4xm4/8Q1Q3S'?p6_{Dѧt{CyU> +*(|Ap6iS,elf`IΉJˇg/Neݧ](ciÇ{h98L\(O6·Cy*E ÷,w;o +CB+zK|zh0ݠFZ4p= +Ӣ٥ :t +u'^2i]Mw.,MO=NV'y8?hӁFCW~cPR$dE8y1_0׆ )GDвj=odh ΍_PP{AYIѸԨb٫4}6 (ܭ2ǯ}huPƟAOg񖱇I+G2d?>Nv48EmԞѡ,Э[}mvምkNvQ_]]QҘ؇zX|8<:A$1d_KP=votkRcY+MUDOSl+B_\,+DYy)]4O/Yl>(FNDĔY&Mm +4 *.^N-(g^G^}ɢXwv漿Ш~C]hw>Ɯe҄לÚ AR$tGʴ߅N1/BӡFcuhK6 Bj$:Tꌏ([U9mu0fzuZSף҇AL + T i:VT51Fs2Tʕt䎆.|LdyLqѵ\=ļdssWQ$NcֆV%Fz  &ne,hG4m/eUELrE8t:e1ީ]nPԠ #k  i%= Bțjj( 8$zGLeE5nT73fs¢#ʨBY=vVcRn(;_jpݝUWg^]ddTp⃽t-#oO$^X`q= 0Um ?>Br\c[8hhU /hNtOBy/|E9M=jgG*ޡƎ3IPwelCBZ`-zם),U5w1Qkb+tڿ8q#>o,_Y"uȤM ղX=vxw:⁎B mHV@eEŚxo8Pt"\"UOk ztu%%OmM|t ? x갱m/fiy7 e3 Ǝ;_*2 g6wD 경Ы]j2Rb74 E 5|ǣEG[ gMr724rha8~hjDفJ, R%ҍ ݒ߶Pɩ. D+Ϸ#m*dCMkԗIW8 lл"'R=A_BT4㖆VO~tZjG)B%^7E ?,.C;thPX\DlFL;-Uǩ8RIܞ8Uy._f|x)fg׉Xj2nHJN<Ѩh,o4\趽t~:,e;$4tTW3G1|mWPen >r1Ow]ۋ n)0GV52iA7 o^'F[a ˨"'#@\E#7>2%7ϊyd$]QL2"1W#/@c4T,fdܶ Gh/8 Aw/2_1bke'*uJK7:L)`sFA /dI~5\Q>hI|ShX 8YfXLBI٠lyh]Yv\>[߼7L8:U:e>xa`즞ݶxdsFICu,#8L'4~:~d%ӅC%,vV!oy N[C߶ܩ;|SA=tUݲNCIhcRpy;q8=4GTI +ԅ G:ȸP+kC@݈/- ,pr=qEڨKLd9eDF؆΁sn!8'|eh G_ȵpv>ֿ >(hLYTeIHݯBF'c%CrG?qNiy2ʆr|pGֆh5t4phStl/'N!ˋ/aCR՘a[ιd4}IcG?΋EזB.qjq6Yru/C +^~lPt-&tE_O`_ozo߲܊xPDq=Ϥp&OO( !'4n>i,% *m({;|Ɉc8Óeo!.uK@r)_tFCc?G7JSwI{ӟ>"qß/Zmod!O J-8|ezO` = n:V) ++ +y&S,OiʢR.ҕK Г~D|e2VWǔqJA{Em.9P ]E zO57PEV4Bs[4VnuKrjƬt-?i7m~fdpԿ46loYL>,/]9fYt{TFw}Ԅ`?AEQ> +]6'n͢o3gٶCЧlr3G"J]\]ǐҊBAo6i]S<5oٜ#)GO;~*wXwsvq9C[C>/; G5JUq4ˣ7>ɓԙ5i hjiʜtT'?C'P+h74$p<ǗOKi%Q4/)=Ɓ߾ "xEI *B]0/>o|VzJ}jB#P[ɇ|).= .ͣtkwG_jecW]+7~c‘yv_Z|C-&*i/3ͷEKtnqH'QNM~\>vU'~јxnzzqmcq'x6td u3}/eҐ?)yN7> efy|:H=Qr$ /rw+.I6lTa偤.B{4MӍ?n4]]y:yW{a8ѐ*4xjO^z6Z(٫ԅrRe.' s}zګb^g;:Le/ +JL)gUnHK웇@-%TՅCW ܉?pKر!zhJ]kF5&8WXU Rdksa7v*"Iʯ|Aί^}9$v bK+D{)At66 +(7#^ȯ˙ +i[}bD 0߄Z5&}k_+BPɓo}(/Uqa`|jL.reL}R規P6pSt$Pz-{| +>J$fNS3h(km+.Q5$@),?X"M|(7ͬH*Ru:]wߤAmq¿}'iAQFrrƉ>ƆcP" IPCo8N]n y-{CUE@rۻnTh)/cr<Τ<ƅ4W{`9R?F^ \UW xچQ6'@yJG4NM\z&@:~@Sqm6yTb(.|#>VhO[ਨȥ-'(,ӿWn>l[Ԯcګd aGGNU%fCWey$N7kCݸе ݢjk ʹ|$Mrt}1Ԓ;Hi{3+cP=gUOH'L—}ź55n7g^tUEqugG8%gEugql4h-w?$vB]#؄^K+b +b]vc4WڬF<,,Ѩ e318㳆Ug_ W C|XbJ>N˂dךGw{jYNwh'O mj/;tO,hgn&!O}(#J•]j62? 4$~µ.9oY?tIpu&zZ٣rt;렡鴔 plt@ B-LpqD) 5j4vc'$@槼Z5;3jPGVC0vɫ.hu!e;,:d%θZ'#ApL [[4E8nf/.-٠hψtV?pQ2:,#UkxLեEA0'مIi ЩkCSyFcqeN@}W.>s?$Y49/L03}۳gPjf9o wYS1TfZ +m͵:h{To֍AN~GR=dP7Ӭ~Z|87+J}Q/´g' cܠ)R 59=ٸMUYiR.+fy'R Ъa.-kU)%eKX664seE'nɕq3sѐ9 )Ɔk?(rl3X~ lrp}T.wG~I:gV Z߀2pI2n*Ni}Ӌ}$gvmMp+ÁfI4Ԏy,@yS. +%юB.D9XqG +[;C@usEud(?BI{nlE+>" YPqGKmF1F nS"[g_v:efi3.vGazO'̉3vu< GS[^dXyK#Bbk;u I}+:|} +>l1QXnX<-tlZ?Q#nN;.8:P_vOx40Oer uZڬ(lu]h4TMe +SՑkAO:Ւ^Vx-ϰR(2t-pGy Mrr^ZvK.t:bN \e&o[/d{mFD}(EC肆؊iSmGrkP**L,UQL"\]0a{EmjZ4wɵ?Ad/!ųwP~~գvzW/;ݾq>T2C pk폼zE> +[[NKW =Kۀ؜I*Ԃ&VZ<jܾIKMFr=|>VxPa8&MQ={.]Cai^}G}9{qၛjOA,ς +r}X*TKƎs/{b-_{h()w+QHmrumi`]DTQKh8ƉmzLʉKQV|> +T3)sQQw?wFxv&Z W +H|'|"MF6:Ӕ2pNUrt<,qU1D*K~2}w~C?wOsO*+*6a{!#iL,d6Y_MPFoOQ|@1q^{f/N@eG[?5cF?[LY> Zm[x3ӈi2"Է.eqZ(*=> k(. +%fg`)Doy8)T@FYgDɀfP^섪l# \C]ͶSUJ>KrA Qd,y5lyU+TҚѥ(l:{GuL2(޴5XP0"X]?]| 'ԩj(NY$;fJpBUky#AwMK+'(\rƹ(q8c!ˇ/aCUcmդ%5+t fJ(GN$w1Ţkdu5:a3=dQ(wH|#Un[]{`=a^-FhqoPsP.$=񲴷}/@!k>09BdIctFЕYNe[Iŋ[#P6l-V ;Pk5 +6Wh(R|gNƬ)k)ol\"~]ARfԱhǝl)GrfԈF Y|pB売([,|Q[hֹpRYȷ 9^uW4: mP]QSh kHhzљ5 +L0Ɵٍ6tuKqH96_6@MRKFk?->O)I#٫VB;O&aMaTLƇe?K1# Kt&|S!-qN'Ǥw +UԆ?=.z7]9NYTp^وVզЋYɟӔE@;\4LCOR d('Ԓ|:1_]z:()M}V5 +}PP W-P DJMq +h3I6?+fx\ \_ުm5)4ϖ#2ڙ,:i=h E#{^MIN, *T\Rb dj&be(M(E3B +.,B>J+ +NۿmO ׂSǭAPףq;.L!m 8_(j? fiV*fޤg;+C,AbMcjcWazP5 +NE)uQnm*ͺqco7֮5 +^hAO? FsJsۚ;rgb>=OB&30ޘ"$+AASJUZ<0aɒ}JmTWzt@]M.,]z_' =e! jRP\=0Z_bYG,6PL)wZAOŘ%6g.?(SQeI4ܗ7:_Dq+7H=B(N@E8{\nRϻdNw*Ez.0Ҩ4}li(CCWbGP0ܟ㲲l4@C+ND-<Ũ܎=`bL hsS^}yoD 5IuOUP]]3/?@ b4=\ Kjr-~¾-2hAuRI^I=Q IԁgmqPMheDES HMp 5|js&.N m:F E_ F_&ʆ\űgSpCwquRď1X=+sk0 %+J>ّV`s$57lq\J#Ǹ(s [}>T.$jF**G"us 1B!׉Zz\T8gȑ3JA* c@ٔLqpBhcۍ sv'WO`]h:m7bt#Yϋ{98$P# +1JiZ۳9 6yNLGNȫ$1\ -/.etT=49Q.D$@%K9.Ot._»⑄ j-/YHY?%Ɔ6yRrs. H +q:qL#tIY2KQ <i}|xlb0k҈!K\ #;=`Z_5apc6jD!'6uKdiQTԔѫ2Ǔe^;ZvM;?7B$uCSk$兘ttKqQpl2cIqX!8۟ =M ,/y`!<#[d2E 3U Fi^}IV$_i徒:3$%5^W\*aBi88Zލ);f]iwu'YO +G3GA,%ed"HOdb\5a1F֡HonTg_˨dCG@dB@I+ޝ̀@mn) 8'Ѥ,x:p ܹi}x*=Vy[<ǺGfߠ]>P/3*w|_.j}B*N}3uI P:nY5DRJX݄*)zGU+D   _'t$=ܯDmXXwFc%-9ǟ@'?;F9_9.Hf5v<1?;sejH`IEqG)8fK}]s Z2}J҆0DfعO2%#zil;KNC5N{Z$3GfGSdld+ot̓>tKoGxotR.Oh3L.OzmFhݒ0>0ԚI#g gS a;sK olQ13Px tsE WLHm*R$Kd +Ä0 s;AH*Dv; v G>-Q(@0IvXh|A_NWuc8pٝ*y `!2`{WǍET{S) QI +uk$Pỹ`W˦CfC;*FY%+c"}7y햚3l~*?VSM럠2fcGu礄i `QCyqKMf[?:[M[lum6j/S4 \_#+*w59۩>ty&=y b-ws}h 1 &qI ~r \cԴt?%Vj_R |̎ dz3'Npc;@u!eTƁ&mmú1QqXrdߩ|YB1uh~J%H\I{OODx ƅva>E"S'? Yʕ\+[ +Nsk0hw)@sj:%]ʈ|1]J ` uy+q@q_;)ǎl4qB{Sb 4P;fԖ(ѣʺQ,c΁D0-0 ~uh3 +wI ch-ſIeG7.gK1sŦyTم`1󍃺@F\!IF?\+a^dZy?U%v<3)EJ +0*sؑgr$fG$Im7ǹ뵚4e@މrGj$9U'qkR(!$'p0hO)}ғn|_7vZT.S`{~WSS[*m T ĀʔrWg;̈́& j|@C-?m).[ +M 9>Hi ,Noˀ<@Ew)gzڂ5U ) u$[qxg7"6s8y!$~8lC}0b%_hT +8IJql9^KH\!,tg⌡k~!?Pʧ릱#:ن O+[–|aǻ ߵJso1CB0}OP0'&z# R1Ў , +7O> wPNqdn I)vBf+E[ A|bC.~0,;R(L"ͅy7 ;vYNA8>wLwPöjNQy@SO`H ZayZCeq|A#)oLHS  MSK5Uk~c`l+%./k˃L'nq +Y͂IKL"5_7?*X0$˱"M~D =x`KJhsQx;}]{qGCA﬍Hpu/Je|~Fsa8n#C 0C2'2jގ1NTa9[)KSkPgVvjHAg9S{xx@ ^u +!N;!'P01>;~v+lDKy_(X$b$DB(ut,7^v=uNlCnXR@3o`o +J!)𪞥 ;9Bj u~қ@Z|;Ȅ>) zb>Ω̶8]a ͭm~s@h'=qı[1lq?uJY\a}!ƁLB S'>[$ʵ i0fK7nI;-rn 7)CM=AT#Cw ٸuSeSJ(؆4g|Ș 1>bQ}Kn.M-Hq .FDj<]Ĵ}K9a4(#P%`N& Nش1 lO +;[x:j|-ag9k&l~an@o2.T*$oWŎF&|bCInue0Ќ|}%` n!!>mԂ_C5/0Ҧ޸vsD:aj9n{G9PE*-5Z`* (2њ>0ԛ~ЧHfã:g? klgo|ᅽQ9?q5Rt6QgZsHhZA7 6SO\&1kw7dP0Nbp{H+"zn0^^S90*}dw$]Au6=fYlȉ}ƍm$,bgb,%Q:P`~D8a-DB$;@x ;E!ݤ[qї\x{ Nf3b/}yv*a\M]}1Q KsU0|kX-E)P=)1 }#f F.0VFIb\S3*<'bHCOq?haT +-WY :EgƑ;oQn5I?^l={ +7JG~v%HC =j]5ť15tw-V&]l.iPm(2̾ +KADk+` ԘvV^x)qAy%}n(v1YA ={hTnfRT?З@v@G졜*y!;r۩-{ + RRq ͕!gsv"@9w"q[5,=tz* ,| AceW<8G4HG 0 sMPJf +1]fT[ɟԟNҎtlܔÁ5`(aBD?$9A22-ɞ,;HXCF<䦲Ήq4u<*IwcUC?>I5ER.IA`1WeK;}n$'뭰 6q?`~\t%qR})eO?alvd`IfSw7 CZ)2?6^6p5wq}I4> &nޕߠ&G$N 6r6-L}dYއZ4)]t+ٰ5ESi_M=0?O |P}_Xi,f;J?>f!stB]:B4#5XNЄgYåt:dK0?ɎPS|dbQC{ uvg|WxfVF!^p8RZv>9jO +Ѱk +?`6`|4ޡDSXO88@mC ?h0i[(exv 3ahӇJ5npoFk +'-UA\9{jMj2Xa%!{cq|r|qQt)lqc2ߒon;x 27׹ݸJٰWkrݩ-CzsuM@dGs,3\#|vVq(s0obț@|}G~89g㔛gF_x?Hzs;~¿[As)ޟO 7ڽCyc]LQl |hxQZa>iwGVfҐJIH\q|~4a^.˜d.[@ۇ֧ <ߦJ$r+*x 8@?Vli +^ y@`πqJ)b+yDr%=0(¬$ 6g(vT"(] +Yy,ŵ_\:>K_«(`6 /*1f `"ȵp6m@n+ ` '>tH zM'(@WQ9H {ʭx#M.2/7M}\E/|mS*?l~k[|+p2+'H@KGa{xP79H'셝PR%}0d0~,W'm3k?~ JH}+_K|=v0Hr7͝]K[}4&7-ymRзCnŵ:Q^9d펟zmʩ+VyV BTj 4;hq05nF8A[saW +٘E775`|x$7CNu7c+E1/~1#x#1y e968loVl$+E<|WnK뻾;((0mF^+ +ooE鏫|墮;liƁ#SLjGGX 1Ec)tl+rniQgUoE`ߊA?LŽ/؃0T{;D%I_eZB#xI/Fr4ۯ/XZs]B> 9vܮy5q,5Z6ӣ%]]&7prw%(6WׇRRfyc0#QX]m]jMayd5;S_r2:@DӺE (l['}{ j;xㆩ16‹7jS-jaj 6L-S,xS+~9[*i_OBȒj1e{R/sꖛS_x.6v6|]nԚHRjʵI-s{9 ^@QR'1iJMsT9 W Yl1ƮR_MQz堓K$_kPc CgW>W, }۷BzPmִP'Y+ Ƥ jk859$Qui^\/@+jtKz; -"kXcJ-^Vq/7^Vv*/m~˙43ZtyBm.{ojiBM]ثP3o|xbO*cB-/+U*fBe]/1T]K#ll= S5]rW73Zv$_=-b|1JLE[ؓSm]_w1E2M~+c,jl=lJ_nN-uLY)wƌuMS?0ڂ]~>ٲ:iWdzkX 9Yk갲y)N>/)e6}{yBͯ-+` \m9-yiԖ;}ȦV\J{nzԼвRT_v'b-F^e'OPrȗWGFc'ie%glj<.0{ivX–(GPK[SÝ%ESeŒj.~y>V*:B(s0cV9LL.^5SB-4%.ou e%/X\Ӫ- ;3wN +S3gOŢ^ݟɭ7d-R+sʤzhjNJAԇg=yR4J}^x3zqNsRB/ԯSk[:w`m\iAaSo*b-d6ҠXv|ZT`ɘ`+Q,1f[Y,bhILa)vSg W紜W +CGXkBTu}bW5*lR~hg{=9BŰP5'SS ύi{~Ⱥ/r~7zBm.oUr򪬦j/+GTj:=ev+]#H4fhͺQ3gfx-H_pIU֘jn&XG_a>c-1Z-eW)~;3_u ؿ0d(,όIx!.+3bhLzse`~)fƨYsZ{Og^i~SJwY^^钽|$8 㽋\a>mT^M +`JeNh,;g61s΢AF.Z6udREP𗚈ik4&,*kWwL_f5$S^iWʵ$o1,sMm2.|m&l}eeA*"#mҭ.agy+4uV+%3h +ֳݯcaZQɐO_5Ub\2I}sF˻IG|{y s7K^tȂOg!wZ6`OI: ;cd Dx7vg}(EWjM/zŒ2>[96AM-Km,X~^1jyWH-Zbσ$3UoMmSSH镆^{X~~[juOB/2͠T37|0IJ]#+-zs>̞3ƇvZt0 ުq\(wTgYˎӏf#.UPͧ:Upc|rePq~9tBT-Ps}׆黲>sC}nl||~0Msu, 5-+WY-AZ5{JT\5/njSEka,\%f:+oZWʀɭVmXZ+զ8Tj[E`dRŒ4 E{`12L'9rzuyw7d[ T~` +ֿ璦~Yѯ9 |QG fs3ΓeSU+dG-JfssY^ʾ9*!l~ +'RzРܷF\SPdsʾM(?eeQ%2Ij۴cJmX|jL.#65K S}LoBd&2CҦӛZqҘePʲGgZՅf^+yֿ4ֳ:Jֳ]EP.tiX._B-ʴJZjj9d&olM7TVr9_1c攨.|ܵv7fJ}Z&}*gojERaL'*why_N>uy\MZcSiizecŋW:tıMimg8W-syOzP¾gK/]sᯮC٫YTϯF<>(55OƷ4oNsӲZ+X%}*k"N/c~\ {ĥuMՖ3nmсkx'*LZ6Ԇza7)wg#jMٷ#MmYwN6H߲q*luW$bR;*|}gϝ xpl t["MXW:tO+;+L6KM-ӂ„~ -Ԏij A ۚӖoKgf+^eLNeۘf_P }s'Qa<Ӫ-hQ|,*ljcf"Jv4]#}T4 ͳ`ˎͩ.üOK&rsX Jb5w"|.Vͧ^-BE\.,ulcb5I4iE5Wt핬߭z_jCU:=bn ~3=-Ǐ-vj&v28 ZOt˿GLdl4쳊,j~WwE{2/y(VZk\\]:~i4 +,jL+lT)YU>cKCS+,𲰇GczC.$ [x͵'='uy0uǗjEϥ=J<7%ԷM{%;R rac +狼5 5.j% +!F` `}O.B-\Џ!kL\^8"K.fd"hh֛7Q,fd4 fj1}]ڜdk5T(%.9~RaZ+ɓl0C~-6f"JK)k&,fMaߗ\?z^g,QSVquE_rb9Mm8ҹL_ZFz "Yc u|*Lt X%5݀T?5cS+\jZ&,ط6\= g҃ijiF 0\ WP+A_^i6fwMlxɱ{G'Ұo LS664jeM}VjH +-.Ԧ^3ׂF)LwKRJ9̤h@C?כkbO=NgxUz>P^Wħ80ٷ ~C-Z^az8sSJ)L\I5-#V20=g.)J+T:ԙ͟1 mk^+^tK ;QtSfN +^qu`)GdjtmBڼpB},+~Pg$iAa5 , +h0i♄t+sw8-mĖAvUZ4&g5O1Ztaz|45"[E0͞Uޒ) +K `WBi?eg3ě:Py~a{i#X,QCl^9Լn.-@9:[v`zI"g+.y^! -L ` ڿ4C0RXwclC_5^a& Qg_U!eʗ1tB 8ߘ]UYM -,,[`Y茥IgD[E"4(VMUx>[&kje\0-ZV0%`ΘA*6{]Ә +|NY^+M՜떛 DKS4f +h[J,4U ^-%7fFnMgBFJcrMaљma>GFE_9jo +X~,plĬ{4T "d# oT&ua~c4uik^%\b%Eu+2&9μw4$j8uP+$Wja:m|bݜܙB%2PV1UtNa&mm]R]`kcB3 iabcgvkcc4jB}"Iϴ8y,g'i_xYGx?|M^Xwhjmħx05yS} gP3f )LfXWJ'z|d~c +t0t}MZt$/4c: p19XgBJ9s67z LS4TI,*N*YWj⯪o͗w/待)eM}1[]rab%S7c 'REb]SwljB(G{J՘J-GiT>ƸPˆjTF~2WXRk&BpcZ7uM1hj}G[ofRfi"oPu pIbo _vO%Å!앆f}lM@Pa@F<LtZ<sO:ZԺ-\9>%[ZcS%GM5y`t?Ko-%Z~.?rZJ +a%(mcp&C-.LN<ϑ 3̴o~pwj^t2M})待I͕sxw۴)T~%BËOT-Ϙ$nTrw (1+ Xr{q郼/ZUFPZO߲DyЫ2W D-Гwzw0OחB-4#Oү!_VYe0Ĥ-Z+j` %o)`佾;ݧIWzV'?=cƂqeA_в1!-7+kT =y0QpM-V// #U{3cJ\ؙZP}0ڻJL+ s¸-AZ$zO E 9?PZ!o1h좇PnV-6Wϕ[0QɸbCsWt +ͯ7H J:R)mcu{8z;No9388C ͐wnou7 z8Cagh  2Càfh&:C^QofpJڝ a9Cw 3Fw<xfhħ 7A[`=34"C ?C#=gAF\}`32 bPbϐ #TM̺ntllmƬmd:Mٮ>!ڴ 'h.>Aqع5ghN6(1O!EmB;A w $\ez av=C¦m +?CcX?CRE%\SRh|K`\x9Ur9fh &dAjM_Ș!*ъcغteC;3`o2 W ھE?C$D8u:ڳm@F!^0AW==܆THYkOJLᮊtًuYMC<;gCfomdxM~1u)^B#z%MW<ᆪX9~^gu~JM.aD0~H(!ijJ^N<ȏ2S=~4jP/cJh[3$ILK=ܤ:Md&V"?6Ajٰ0Ѥz+@fH`9u R!ICghId0>fhn? 9CV3W*P &:Z Ÿ́zXgpJR Z @EB34~xys#JPV 38~yDL$+E !YH*#)nVP$.Q.GA7:~~!Y%TkWzI ,јE:޿r`&dXi/J$!\,̠lt/m %#H_1C*9p(_+1!Qq4t_HcUu7 +ӂ8>uU3ې712Az| d:r ɯf8~Y{T> L--3e~b 0k_kg$ժЧbT%>Ӓ"ZDŜw`x^'H3[/djҒo[A,VBpJSI@+#| (/t3Y/I4} J)5GAȝ@똡 R/reb L_X'% i\ 1,E|ny4GS+k+eӃ Y z"u'pXHMН!]MNڤ:- 육5~|kŹ6Jp(w.18#G GHSkuaI`tGۛiDQP +T"2 GWN״ &ܖÂKgHR3_ATM7@:3 gH @h,ys4@^0~nU2q]׹p5A&i}Mz͐e˩P9݇nd9_"͐qKI}5A]8'.9_1A犔ѵ"6Cf\O5{f7~19AꭥjYYVXP I%2zKM_9A2S՚t Ggp)VtVAwaJ3d2_lؤ:C|gCu!F/aHee9Z|RN)RJz삌SNɮT\h@A&x R-^IrD߀PFMzթT+`8@4CFFGJfH6Ql20_QtI"Qr/ )%f?)',REnw<^Hc}~D۬I≶tANg!e%u; +.#OnI-EmRZBIy!5 VB ݍߛ.v6) 4ۅ.߼N6ϿuiEb9)+G486^!JADrb Mpϐ"LWBhRu_y$\ؤU\gO:Cu%e(ŦR]Ǣ²9Uʼn/[UA3"=syJRbBj; 0kj̀~R-zIpI ii[%מդf3"ڔVi\Ez]e Ue9mR pX}7g/! +"*2 z 9b+M\8CV \0n҇fp,lD?*JW =KΐFBg^Fg+"+H].,֏|5H&ؤ7irTZ44J[uSm?z (R>ܟ'6C٦.p>+/a}!8W/ ݯ>5NՁnkJTVW/]_HJydذîL?CUH(" 98&ϿHu`}3=Ӝ)7;]|,H9 4ufK~~X +o Dw)8\#b3e^ox/VRU]X3>XV-KLk6)Np }d+i<.N`;Mj깬 k@y~'Ep]TPo5$)E$^ޚHTG S&17o0Igv>hzz|'U݊4iXp HT HR"}X&Sut0 Spr9nפ&ժ8PثaYtaT1'z@S9XW]Wv!U4N] Y밴ٱ:%͐fy.iDgH[Zq(fHҐBgUO&lNxmHΔO:ʩ +~]l) 4KÔ2mk<¦;e#Kj3A Q 20I:l*upC7˅fէ!(\i %WI>BлJc1٘̐MzkRbԤThާr/I[zIר zi5 AE*XgHUo88қPWrL>R_,7&jy~˅URRi[A(.!QV\4)NtNzM*fwsNwfRDci ] ׉E4xWt/U:@r}a^jc ]#&:MξHkj7a]X[R@(Ra|z^aJXPQ*i*uuHۨKT t4)<{NT5 %xHN +$ )g\*z݅Gr'jH^/Qr9 &LVoUS,z Q +S /I_/,~8@'t6u\8W U|!٤Z띭D+z@XZY:U v3 +Xc(W@Jd o c!5n(uk⯠rkFP/mR]E%TH 8I1o#9ФhKׯKsAgI%XM*n.*H 5VyR6ڤjeK/H>5IrS7T3ȜL.n5__IU+΋w2g֤b m_"ZH 'q}!=1^SЏ6B*#si/oUM lYKhRY> 1T)Q;+iKKPZ(uҟdpaS& +r@n!U_?k_|R +86_A#mlRySqo$d&MҤk%,Mj&٤JU?]j$]nR=|:(EC?kR%jf.'T DRIOM_$N9 eJ*NJ2iR)LU&%9 J*qp`˅TKi}ѝj6^wHHXICPPMA<ךT^X*q J*7ufk +\T⒆76>Z5Twi./^@~'P\/FJ '|V??ml\<Żl薕BYĠLsGO)u寔=j!֧9ax[yѧy?'1rTn\{f"m$o.r4!`Ư3̕AڱNcv\Mz_/_7I7+ߧ?It1 ܟOÕ΃$ 0kx! ]B}>3yԧ8s@PK-+uX_` `.?oZ FD0 J|k@2D%o4Hp D4G:}~Yl񆫤[$ix4*"nLЈԌкL(<|.n*=.)?<"!ЋwJ$?P*l8aRN[RTGSPX1Y2̭O'peB2|1dnEN}6jM|! |XnNߠ?V1-frC‚)+1D)V)ĿxQJ 4 B0rq`Z +y:a([0lԲտغ2AM G, =$ &pUr8ve}1]M</e4w!PeM<`y]ceb {sa0x@JM-('a^<}B6ӣk_r,AM/t8ZbyпS ּ ԁ6_+61-ym[m׀G +-<Sݴ9-8 i"n&%Gն* < >fp$ )a$L qnO ~U _KJk$(Y'[qIYN nTv70! K8\$8dIqDVđvذWNƬCͱ ]}A)/jr\oqgHFjza^hݘu{ +u7P+8v,D`=j.O>ṕ0LQp7)<j% ]Nj`V.WIE=` w\6׸:9 P7P0X$KTٽ2; '|g_gYDRW (LP$yD?௸PHer#`Vlm U^T!(g %F.cn< ~ɩnr k 74w&,;`)iz_ +0ĝ72u_p>LM] _%5r#*6 #@Q̰ wI3 ,\}o;[ͩ4 ͗ "8DF 7P^h̆P`u3Z]RBp:ѶI)6=qҲvg2XM@ԐDW [N~Q~% dwlG฀*eZ݀#I IHZ9ĸ>|$~b!%^I +YB-EəRzB4qI.S / ,\4jF+i ٝ]S.׷E|DK^Gl |*4˭DOb?*bO,nqd Wg#:jPTކ_Js7w|0Hp\{ާM 4(p}5@Av8N v=/ѯ;ŧ h݋g#L%LTj +‚ix5 ae|_]l%?{ +a[t{ W({r+szFp + IT#d90\G̼*5yGjf ?}"0(?fv$Lź&+2Uޣqj0*:ReUi j-=c 3TNK.{d;ySPy}td@{BxX"@jgAm +T)7Y-yV:d j1(V + +M/ b-S*lt\$b08Crpn=ȤLūP'W+ FڅJZ +9~)xv\1Rw GNl;RG5c&$bY^Zԡ%ة;<0 b ar.l*FP*5˟(Ƴ/,!ի>TeDML-f -#AkX(Җ (u_8G ¿Q4;C)s ?gw HzDA3%Hkk'^2jdYi)~Ddx#AP_+> ˡH21G脻 +l@/+Hgrqe9ɶο/$xtl$pc}~*tۺv0ˬ;t|wx*dAaA0k$BMnC)Ǝ" Q0( ~Rw{-6 Bߒ&)^Cy͡p_>0k"(\Lxn]Oe)292mrq0ʜdNi5 xҔTY0j2v|V0 P՛ %A)!1>~a | єF'\} ${ `6^.:|:ibJ1P]s<H]Fk #^ #3AFs/9 + p"hGZxD#ԟOsN(JkGMtΖ5h,}Kqv1'|a_B!{ǃX/sC>yKU!lwsӜ&?;^ovuQpRYDqȣj}wTux@W؇z?E"^K@uEضI`  r>8W`H/a/i !:bJ VcFRTe;qQRfVqew}hxZgX0zоу1XAesxv'C`oA3cSO=DxYMQWK zs/cjK[%v)%wC%ڲj.5Fq]㥨Tt:#N1o4ll8Gl3q8``j{wC$F.`dWiW>vi ꯳-wo [^3aݑj *l/@ (rMof{ + +zQ93ာ kls'ec[,/d .au@Hx|AfabvӺ crae +ӞPZh׸∱  =@ !^ĩOji rum3}/>>6u T#,ZpKCdcO: +|[N}L+L3:g*,ǎ0`_c.h*2rDZF`v$.}]`7e9T{Q.2Îwi2IMݵwugvc,+@ 83>NKx7)5`sis# iz w&sp2+i8#Ύe/}^dussPb?L,#sζcDQF+dOrX;ތd$BB!u-f- +BJT +C,1zo'ؓGg\4 >ݰa C=T9m V(5rt& dcVyx&]T+R.,DXn21L< \7,0xaAPSam]_ϛ"A[C5{z/gףpShʣ}P^8fn FCM%`|G.U.r-91RMH)ރˈ‰3C ,*uDŕutB*i!N=(.R4w0*#K#p/PHe~[) ?*KB>" zk,rD۫ +@-'S0sAA"!7kl[%#zat-Go6=%c(sݧI`xDwAarp':<5~uiCF"]8P+iݨ9إs8r +1攼6yw1w;hv΃! X`iv6qG|9\Bv77q3tφ*5rq[`.03aA}5궻ٹ鐢~>Ny %~gP3qsۦ-8i$GD-hgq e:lqPK~84k"ض(')9tO66~r'W~m#? ,y .g9ԏZẌ`_9,mU0!fB}G79#y~GN#cBB}`=LRI-;r%>P7}K@ +Ts0qy0r+iKнFhi8zPS7 +wg%2dE18ej:? y4>ori[t}XaTű# 6 wt$5X;8v@ ڹ[dM(˩]Q%ij R)@΀F\Tะ%& B*u@ri@y?/N}< V*_'y[B2R8S7vjqd,ѱʏ`ѻ*7{Z3`DXzKڻu&{S`^I RZ4e{ALB{{jo>ƤK#s1&#⡷|]gـqT&8 NxJ7ؑþnK +ez7``? k>w;>g914LX/0.5ə5`~}\NNAόU/8 w>6(wwo;* 'Iv#%vСo֒C^MN' ̉$ۈOO #=Sģݽ(fG$jrO7O']m~`)qqxGFxgn֠6mt092~ynyUjxTnR,nLl8}𡇸{@+.|k7P¬j* oȾfWGHL-UujoF_%]_|J%7Xe:) ) +͉|MHjN0 v\;}׆!ء|j)U4v4qF%j][C-`Hef~a.77|)G;6*|K+YnN<_#cI>;~3؃_%}]ۿ_Y?_c/`r?磠iF0BmN"~d>8_߽ fzfL.ŵ_w̌X4ixjY~ |ΉΧ(9|擁I:>“g.}~u0nLOL%^״FTݐD~Y[{8[* CIehRi)˦aWq c9/%70)*Wx*3w> NXlw$+"W`o>%K`_8[ z$uV5ә`(ŷqa/!F3[uOgQδR5)uGUpl;^TEtle؃1z])ű +eO/Q\xy-sZF+Lh,.ü0tGҨh61h}rg +'G$_8$g)L)ʓ3#``lތ ?Ag=QXv5PTV)%N\Ø?ol)׻R): bٸKt0p]~.EB)#?{ BAg+B3\T4=psizybItI E%i8*,!㧽L3U;)c^= ty m0*n?כQ|93? ^9 +#Mr?,O`W4^d*1c1J(;ig&ckc6K٨MAfn𔮊kdaffR0[ |^03<6Lo1(F0AE=ċG1σ=d~%q˗F>820˶u iةqapN簫l' Wf\a53ݨ_\g?GJͰS%oj}_)]f7{- Mdx 314I[iK,e$ĩ&m`~xk*m dt&s`m NoX|Bݡb#}j +nLY.uS&P J5S|p ah $I``3@z]6Lǩ6GC_|!ԏ"&Du{+N4 qnO\51@sϨCfhQW&^3JB[3;ɉ1ca1ЏPPB*'x|F<gJܐnsG/Wݦ{- 16B<Ђ ePUc"/vܘ*a˕Z{dYɺ3Ųt[MȍtY]0.jbY)Z_aƲhsʲRg$PKZ/Wy.\I/WsЂ>+CtmL֘◛J1xzPWJs/7W,~p MB]+5VL]EVu5*D-+MFls3*,IlS\pOŷ˻o[mWszo7Wg/oGVLR hcl)re+d9ܠDZ^Vjgtd%Dr/Y,6oJ$,ҍ@h/HN=ISPBf¤X;$Ajt 5fR /F+kK!jY!-G5-/%c2K;ōdJWLRS湒0UΌ%X1-Td\PS5*IWv}ޟJfTKX\lL&g-ԧƭ=KJ5kR^b13UuQdqi2ĔcB-! +LnjE7ubR4 "o~ D_UY^ZRvRB7o 3_xWطDj,gȋm[B큿׻9K^$Fݲ0sUJ0է 5[0>l9[ޭftJ.@V6fpP3-稩JɓBW^VKkڋ_kyPJPk.Q6505M$:eusԼвRd] 3/RJ&P Xo|ZyY*`_Q]-\,Lb蕲w6P?kz`穳R+jC.sl^> υtji4t`~9^С(1U(e^9*kH1tuV]ăJcEr_V-7or6gX6X^sU̕ +S/4pjܮXu=.>voOޑ9Lcz+Y_W .yQ,y$Z.ͅX5MDU4')P-Ξ +\cxZ3mYoU*1q(l k6|pxR96fd+j!>uPkt6=e6(/=Xbj}k\'O9*g~H9wr $-Lx%4$nVkt +cb5OeY\a!s$XShaJ3oYrsONf6Yƍ %[ M{ \.Wj>sj|ڠf: U 9{+ф zwƄЕ1epPKq!/g&kqUSsCϟBhwȞjN;h?~B] RxZHmRYyhߜw]y'^}ZJRuYArۧ؅GRҕ4Ժ+%#50i}WՔ\)osM.Z6˔D3t@i%FR̮0U*1y7/_mg7ShdbS^ #Ub34i7M?gkf,R/T-[I{ʗڇ/ԉ\Ë45_ٕ4-+yy731(hS\H{^i\uP'ٸR˱wYccS$zҖ`ʹ<ġ`4>kσJQZ3{`zyI-+i$LG̩O9kj0]_d0s>{S_/^yK>\]R<ܱ ^vhJͰLh֚Z?`-V=g+qF#ĢZG b]kdq喃QPC}K>LQ rʹoav9WJHnccue]VI-;2UD `^Z9Jc1v)nuiPՑڳ@ba&nH56fX ryKPfY;R?qj|kVLojSEmaf-13Ɩӫdٷ۹fJInjKvI[*΅df̴pM=ߕ$T_YESkǪjKlN#gojV_QnGݽzn]9O XY_vh4f\>K35hj&?%,u-PGcWMZӭmTs,KFn]MQS|uf\1DƘ%00͢dGC/;PDƅڬo0]rZ&RKx~1_[x~y;. !u6J-B(/p6*Vu~.3HJΧ¼|PW7nj vDFzq) +L57ΘDSw~!,:yN^cB[#hn>F5J`*s y-07kΌ|1z+OIn^%ojW\4HO/Oy_zؙ8ZkG04T P'{k&(-\e%_eӘ6JBqƘhkeo[[GPse%*bhP_R9" +{T%1z:]N0cwU߆K!:_ "ESeaU˂ vKڞXl̀lyk/64_,B*N +36X9S'LhZ4U//U/-ĎƸʅs=VJT+.JjFS{BRc4$W|*b`۾ 13Y}ZqnMUΧfljkMEMZ)^./&^kD-LҲ>Zƫ4?,6$8ږ9wEjc0Ehm%zJ01}?vF6Sa̶ u 3[O7+e 9k4c`GY Lr5@#ZviꋞIsi ̘<5E+SEz>PW]8K:M}gzTe$z\G>03gͥ8E7"/|ܷ0iXyŁRV<}M͡OY$fG20d~,nX\vsLtۢ]jJ[3 YӢ]JVJlkj0^4kĭOV"܁zo0R÷l\|`"g+"Sjcky)W]SC b5[( ddN+fy*hL7ѧ¤ /z4#4TkZ4HMkEW4%#h>r}lC;!iWC1}% +*/5Rje\-u@ (lY-\PC_ha vט\Sq$ &T/VSJzc2R`SIiwڍcMW[|kr~ӠoZ-/?׆52=IQczBit,LSԺ 4MP ^2wTq,hŃqS-80RSթ;7iCx faxmB5sǕZTVz0M}" Bӓ_ͣ0U[:,c%F".H+y>[G6P4bjw| 5A{B2_N_h0Pk uoda {%_z|]Sp{_MlSyhzIGdڗ%uccƢ-׋+IM&Z[30۟*u׭g$>R,Ă?[`]C.oK/YBTJIegBƦ-^_|ai6fr֨-v?:sW`c2%~*z^!j4ؙ==Z͔J\1x& MΩWjْB ͤ{RоEG=nV͵BhY|455ogDկȩnSt̺3p0!k;e _<~Vʧ^a&G~(a3y*޲ުNia~g깪qڒ4ojӰ#:x*h4S/hoUv8A׳x;|yeC3XM}яsl07_l존hx\c}֩lj)dW0QJ/IhbʟXT BB ɐ +{/Z]{J480ݰ猱Dr=B4s[&k9pJv&?P}k5F$ifi\c6\4UK:S+/iRe3g` oyo^D +-͹^ojh+YJ#l.O¹t4w,L/b*]VE1e /)FMSDi +Tk/FAeaJXf+l Sڮ~eМ%@K7L SKE/y^sc:\e^'in}\,4ʸ0}-惚} +c 7iCk3#^)K)W.aZK.sk.Me83F#W=i} 6%i*4qブh(J;>b%Ld/خUHެJ0hMP3z,Lɹ7(z]vIf}/3iL4"Nw ֙W-AO?tZެP{t 6 YVj[}̃^3e} Ɲ_3)Wc{Gfix5,A4ƂI˟t#QB-C1HH,YϾ }=cx}Ej0[x +fpD  $tG'Ȣgpb'gAF\2y 3%+3Ȇw3C[4tjF5C[z6#M'/@3ghKHgpd;Mpgh˄gp3ĉ38r) Y"a޵ YLGu2CڙwY4Cz̚Q(&S(ghԋ3@gh3$\-.}gr֩RzG=C4!Nr؟ 8g/!Y}3834 3$GZ@43s;I34N3V5AN m-th8fy"nMښ3834>Π(Ybzw3ghk{N?:C:C[uE4Ovr6#d{80Ca=b!q.w%{/fp9fHoۅo#afh̠gfAd4C>-,cϐ0+wD5c5A3$XN}fĂC |OfH\; 16tq1 y %^9 JghSge۫1 zrgh Pw7p7CVm&=Cct=CS ޯ<o jRjװ~㨹6u|WI&ݾ0C^_7-fHD-͍T}d M2CwU&б?̐ȼoLK73};gūqCl!)WAt]rK~ m_#T YPEDE5CWfP?d"jھs6b}* L1Q2pqQ&լOݾ7CfPeBu Π\bVX*S!&܊E䛏$I_!,& Mͥ@@'}tE!o۫Z-n% 2W_ƷogHb3D%w$-F}ytھ=|Vfh|zbϠ٤0H_!/r&ݾ>Ci[3O^ ϐZu?70CI _d n*hY?1AD/5C̠fWfPZSI2nhE~f?3CqlM/%LfP1*I/L3peX_ Z?5YwVR{Jcst?6fh8 iJl?7CfkELV I茐䄵NUx Uy~ryZk&5! z )rRND'H7dIt4flXgPV!BjxYd:FӋT cA2\B*!lȬԤ\B|>?#=㇩gRԩA"} i7'.9 ewvҤglʯԟb +bvLe>,PM*^UVW34~ eR_g@ʐTΤr mxAEJUk%&P]^ĂxT%W8B_17n̐ICo@VD~# m:dH&HRŀ&˳le4ZLoU!T--3.Ri9-&_R7iRM*!>I~) !Qb$LgHl^d 3$rNt~ 4CjbDw9/) :!Jo%"5fHZ[i7-zWM눼\S/,&﫚 a5uslf*R]$=&?#ΐ|'ӝ悰UVa9>IMy;I߿mĺލNG4 +Pr[_P7& z»CGlD@uz%a;)wZ>5)-R>f(=&_: *9b*pmvqrI^R],_g):@m㺘3SNF0gH] KML#JFH:詋?g:I͚GTn@o1A/VVqCs YYT:,X] Uk7%٤r"ea@?7`rZwqfedu@0l}^3$i֍Vj*w&S(1?fk4Z"hR_`\ - "*Uq\O-aŐ~ȼNI'tR=C dQFg.#hR9f gSDcJj]׽TJPiiHCgHP_*G<LrDS{gPU&6B/q$dIsYV pX`uiC+8_yy4WT0 ++1I.tgiԖ0!5iR1b9UDZ3AYXwxMyYoLYYp j4I=E@O4C~Wv,PQb!Q1CP ]!>u&Hw3\H䊔Z]K~Z5ud6u©< ilZI*M2fD4֙{&E,uz: 2"K2Kח q ~|׻H%fHzVgH4[ +{k7oҖh%jZH3hWwJ.ۤcufȨ@4A&!8 /_ɚ!-M宲Jjճ3a+ܥS%-ڤ[5Cxf#IU +Ͳ34fqn҆ i3A(s:,Q7EiRc /H;UJG6X 8V_4 qΐ:gȨdvZEʗf./ȡo[\I%3)gHXI(ϐ̔)we --/Y!#t5n$TB$uD7[5 ~:C:p!"|-T͐dup.彊4i¬ +^*!4:FfQG0 +WKF#թO% I"&^!綩ɈfH״@"EJZuk32fw RT"ӆ"5YI%YE(11CAx)ҟ|-ݐ|e5KnLhk4wsanidUy|ޅT1?n e(LjzRju8_oY )~R&fH!fe&o5\Kg!}5 _Ǫ,[0!,.i.9_.E%.`t1U*Bʅ%3\$&f]M I`( +rLI:q5=%EtQ+rgRpE̴̮+[R%,aԭ!Ւ7i?K&)G Sn#ح}8WBIRp5)?9KXq%<lWu:ic1+Rq+qlA .zMgHA "ty +R .d:_:Byݤ_!ySV/m̛7!j!u ECrEL'uםTy%51,1)LD R%E?\9>PB8BSx:`&# +lAd*Ya:SꭑQre' +wx~Nw }WELy֊U:^wp{Unt['5 _yߵ]3{5}t2"bs3t2&UӖdzսR^7wT@8%vBxyQ iV-pzf^l,R| K#Mʈh6.*TXjH/ +7)Y|S*8ֺiS]wէ 7t3DݞԧVqw[w0˖/Hx&}h6i?fu1&aH`et, U0VfCM*#"iͪH*HY*#Uqp~E*b3 Oq4&uJI)TJz )R|j̐!>cGF8|T UnZx &yQyөM՛\Nꕉ+%1أ1مcGR$n,apk \NL(hLN7`>0S gL-@z%Uu=Q`1AS*2Yz5)q +9:Ktҟ#]&B/|C$6 !zVz^_f5W[&YINJX4LK%T>ʑ@&=$319CYH8r) +dE P^Z1C](t!U\toR-#db3$YHK䛁SbÅ4USsE_Q.5:Lf1?Ytuz73k|rv,tyRʹlU)% ) +Ŝ~ξT.Gj}`REx3@I,v!UᰝTmtwWWwJ\9BBc*ROQtw^k(j]]Tu ~[iF&3 +ץS7"&aͧI +R/z\JTWtU.6W~Jr< +H%9 +HE4%MVtgHXZb.jR^z1ςi1u%V + 2^O53uq1w]H:E%VJjATS>mAjrt%ڭ3d0lNF'4fy&\Mza:ދRq7ĤZwݤ=ajpiRQP~mrߤRIJ%#-iRj@>ԼI|?yֺ[w9y&69-Mq%"`@!rW9rD̩ T5mptyV1q~J5 _(m&b_RUL*~ b"hRyRrޚO<ޚz8Z՚.% `!lR6WIt|7J_YsM*%%Ǒ_,Mo +>@>Z/(T2;]Х3Y%l7@LIkzHBאһ>oߗu {l xL@mF}ֻ +:͝L1r/ Vr~U/#MS +I; *\ }N^uڮ^#r\tVs7$!ZHȥ:uXƵF:Zyd LR7EMLC'I.Qj@E%."/tM@щ :LW#^H=b˄WSUeݩ-P^'pKsEzV֩I`j7;4^w=/$.B]f s!s{dwח9cY{7nbezia&>@>U_|Է +8ЩrdI^GYA5֝Pp!B7[HRH^י4YHkUFO -|| %lRrk4Jp!' > ;WZ]IԒK'!dPTu8ex;i}2lُx`4] )jR !TaV.ć7dTz^b_M*&U Dי-.׷"JW/iM4$[_Iz:fؿ?bx6xJ9RBy2?Kw1Z|.%rsi}~}0^O%JNX8}euK$.,|]+q3"Zwüg:~%Z+y=0#ǯ3 }ߧSf7)LMzlA' M`_@FfV)C¸,_?ia+ r?pEǠ'z {>/Zӛk& vTwj*qڋ/L.ƣ.o|?/R}%3y<$ F%^4tK9bESqNEN$T+#u2 a0?뾹K9uyzXZ\ʖ$2,uDHy9B0.O\x&BJgGe\0v9*0gw6G *e'ӄZ()> :yL_9]FU,剝'/Ax *eG{Y(ǻUsm6aHhmc[߬$s8GHzv\tցؼ +TxA]PZ;{g#  S=1_͕ + K9 |LxP]ҶAV7>%}e]3:]huv"ތ3Buv 7&go{\Vb|ZIͮiߟ` B2 \%_?J@'r=Ɋ‹D9"^$ /uml$R۸ø] + cLPU! ,(Ѧ^B!ϬȠn+C}/J1?x29`3!ȞB6`npy/u܆IZ~nhCJD¬wuhw>C'ekY NM=AM7.t0x((Q=ܚ+I9PcO08; (~Qi QtOy HZΦ sa&)?j֐dE)ЗޞIPH~@ZdKn_0Ҟ;wzI߽} sMlQ;ɚ10 㿃/7j~ACwe((+jcLex;r+opS"׎Gd}!8|A֐8+#͆U҅D*:>\80Hi8088;,9G0# +yEԀGYǯ&D$OcbV[xU9螫 ]C뼺͎ғ5-=yd~g'j]_bD25Xe퉇nI?\§/ƦC_oze_Oı|3i9,5}= 5r6od.m|Y JV&ƒ񭨿WgmhNv yOeƉ&\FxP|zlߑ0kx$氓f&hQ;RЎ*wMə}<2D/03r ۟&|TYi*ʾ{@c-JMi 3Ckq-f/9LqyXܿKzYi'| +/`^NV+r`n~_aIY7!n%^|I@Ҋ!V46ثB42x%/2p#<b[aYYcosԃ/nA*A((#J2 ^Eh`YR3o 21)D*t{,.,c9`"vP,7a +LyPgVO6uQxFL>C K/Ɠ}ێH[cT?@kv gYq`BX^mld[l9#sZIj.(v?ΆgcȆ[^"/@x!?F7~E^Zblf\k_vxVߠW?fl0(/ & 0q?ü ~[bsZ"?)v0/f4hUF_&qdd0ok s32A%6GL< |rbLvRmO\Ĺg~ +mPa ZwdПl#%jK47:6`ޗkO{` x/h* t5v +iA[G7{dEDuWnsK9{^55 fdbܕO?^e +;8c s񍶆ɎvzCSRMb4#)!Kf>q\:N<4g0`}<Ʈ޲=)s8rGfk@<&g'_<%Eț#;& Q22 +R-xڝk"LmSm_1"$QQހ+bAq4wѿ [ U8ʌam716laـ\Ga+/@{#2p.Uw,'qhba`▥0pc:LӨ&tБѣlP}}FA=+?;Y Vk&P7";-&s#M.ւR6 + rc()F 8wn pm@_k-I l/zRxegnFԹ12]?®ǵ-nMp6(2\6a o|h;#I-l>1\0q4c+9BG{3щwp3oal7ߚ0ucaM) o 5u!>/XIݮgNFaxZͬ0?h<kRÈq{l@nvʔ4;W>"VWh iyxA0O{ +ؙ ňqE~܌悷. (CWPu!Obljɟ5]D(L|b懱jT)Q">Uӻu, 7 S}=ԟOhUh_$ uoI:6t4 T|@afr|WmXT0\cZJт!*ҎX=yQ̭:ǐ<`(uQ{W>cyo i\й!DO5i 'Di- +H4+b5P|nY@rkmWg#B|A^dw8EI|9-hƇ*1颃_4,lŦxXָ84.w`J'h$`î4Vq}ܧ$pssjbsh/J}LSl:N@b}{)ڃ&k9cfF; UXrth-V_bExc[y60c@8;{+ea/T Ohq%f w|y>;p/rKf*o[] S*ʍo9 -cB rKv8="p+6 GlRW,"ܺ#uٞ)6W >%abď ok5Gup8Y#o͈ T>Vmmk3p<)-oePГá/5(T&7a'D4 k!p iJ2_nE­| fs @26xO( |\F?#lGc|p7[f^Xwb7Lͽ< p^4$V,#ǘJ)U+"LR=܋+c"5Aķ<3_g!=%xTvnpjo!U9l|@c~#{VΜLO3{'z<_aw{J_|&]mʌ# +aRx0aMa8 njI'q pȍX`pef zɷ(wIs˩b?TBc7Y`6Ha<9p wBjdh[5g^; 찚 ƾ3`/xj?ǁ:iYma$1q99씥[jڼC\2֮_JlYr.1%ۙ)\_B?s!lV9r*.n[R8+/<׍z'x3vOaժ&r 0"JJxWh {)X0~-͌bwyhW& Ae.P~<|θ#KaCGwM].x_Fs`,'[Z)%{MgWޯ&OzM+$gEqRVd6iG:O;-+$c5]eW 鞿7+ + .19d܆%ꭇnݨO4h=Ic|%J:sEjc}@3.͉!.X46D@s#<9)%J;`?^j< e =~0L1||A=ySәy'*_/ + 2x|q;V*}oÜQ0ռ۳k=_I6ASC}9sSZs]ٱaeMi;$kJtʇz PKer/[,(?ץ 8Nvn6`Xc<Wn"ĨL& +Xqzf;، +HFGYD[n-h< amy#KC6p͘v8#:<oN"7PA/ XcLq#|5{Z{ ۮ\? t|XK*TmE9yͣZ118Bn|z@5d,+1Л~ (D226 K0Bl0t Y-_ .Ɗ?nܮ%o>o1Լ+<`md$"P^_`5憗cg16K{x-$,Bb#o < EY!7G ׅȏυFUn$nBp/ +AsU6!J$'TɳzLb82l m8[si[ a?cN}ekxg7+EFH;, /8 %Ys \﵃ l.199-] WYz|ghn ޅOF$Ŕ~+:n+E%jop鳖x0y%ae<Gn2}ٽ_r|}4p^{ff"6vo+_?p {E|`m,ÑY毿 +X'ή_M{ v?nG;.+^ ۽o`h7:* *4;)b'o`SGT`ǏuS'H1Ώm$X v*.zBpn +ϓjc\Qb M#*K9 (uNT!&3w$7TL'XZ74Zf;/l0 +#eۮ\w/o_9+ҟ\a`k̍A&GdfZ5=.GJ&-Keߚ/ϾݍZi]n#io9ڀ%3N0kbN)OHܚ¬:_d/B2BŠ膳1uhsMeK<Ћ[¹?6q2@f7A=lcD %V cI+}@=蔍@#yK&ayEzսI +2x?{=.Yzn:nLkpwt=EpT6p{| +M +Np߁F}1By#Wǣ9OW moAƿ |.THǸX:nc!^YeoP4yjx_Ujxk"Y8Ab)Oyww5R T#k\M9$J, CDc;aAt.U/QJsJ $>jk]u?dx dG} +kaMߠ;h=^|᫏t,Wiky+rvʺa-OLmHYF~H:J|l=3z* $/!!Ϯ~Hd=/ Rl{WٰZWWlF vاu]e1ֹu%[xKOJϢ+uc{*⟾j=Nx@>Mj.xkM0ߏ$&8Bd g=pԀfś7:0/u {W +Ȁ]o â+/f@i k"- _\%s/R_K V૛' _Ūl.mhszw^Ԯ >pWmA8LB^i"[H" tWAmkٱC3_u3 9 Fa +TeɃ<GM̠ۮP3"୽'lz(',tՍ\o/STaePVU|v +p{"o(_{oƊ?nۆZ1)+mޜFZ]A] luB3fx}`¥=CS߆c+5|,6EisMzK~?.{ Vs?q>Coo|p߿D x~R?N<9|Lͬ~CUo9}@G9(NARwWp_W"𻐭?ןV/==UU{PS/o sBO5nv_L@ocnow3##]}}@KOA{N;s*p'or@ßÍwlP.۾pԎ>?q{D[iv(~??sˎoע? rE߾:}}_)|xJ4220gVxG ol|o;ǿH>C'x1/g|(ۏ<^3mR5gP磽6VX~ d|/ 1|az{R{7~n>l1F`||)~N=|]c۟Q^Jg"q>'hcil\|u[`(>sj{)%?/y~IНa=C?\άtq]!A_F`T+wnTG~v産 ~:w W0+|SK}>aƟȗ?_qH0ž*{\tw2Q +endstream +endobj + +180 0 obj + 93401 +endobj + +181 0 obj + << /Alternate /DeviceRGB + /Filter /FlateDecode + /Length 2567 + /N 3 + >> +stream +xiPow-Y¾M-la ]QED\@EptXdQT\ +88*tMիW޿}nD0rŢ`_OzDd Ƀ9qi}wowܙ tTYPx .X@B<9;}ǼU$g\-1HV,I ̓q +p6Iib+eq|i&gJHQ6YbY>)BM8an! l>mmÞkd @-D9Cn@DNԀƀlp@ +"j @ +/K'~s A`@p"x"B p0F!*.Pb"q+@L|H|C"tI$i tt4BHV"Yh|IO~CP )(RGDyL Gc6U5˽'{ȯ_'_*VAPQؤPpNaHaZhXxRNP[tL(Eգ\6j 2uشDZ'Z/mJYIV9L9[BTbVIV)R92i4,_^u*_5_Qu@][-ImZ#ur,':/._xf XT#Xc1ӚZi5/iNjhk%jhuhMhS]%_Еdz>#ѩՙ5]ۨHԋ+қ_A^i`pཡaq#U#:zc7tj&XI!ۦii-3L`vȬch.46bLF=cBbEE+K}(˽=_쬒js۬1T]DYhEmlmQb`/opwqtbҘABUGfvǏNNb3N:3O:/6Z_\xEׅR"uƸuqܪݞkݟ{x$zxi)l|rbmduz|zWx{?] 7dsu)䀐KL-/ݷ2ee- /QQPzЯ˱˃W,l!'&dȻPТ+$+âއ{K#,#6F܈TDF¢jWzܿr,.:/zpѪUVN^}~Κ119jt,;2vJx|~1yK\qxK҄IKP.xx$}R`|JL90I؝ڗf&MwJߟ>% +f@2Z4GrSb,.tͬu6[1[}s]kYzz :n豱j)vSf͹Ƕn95io9V99ookݒ;w{}\(oh#;;;{w-up|^҂υ?XPݽEE` u{Xx]辥K%%oԶiْփ\P>PYXQ!ޡh)8*ߪjccǞՄVqquuu'5NSѧnSkQ48-9瘟:)ϸe_L} p6ev;bf6 k?#IeΎ*C8\>AO=@vT|! +{9AWwd^kǷXj5iP{2s1Vp(90q|_l5L y UH[߼-35mH bHȑuI;njTX I1#NE6sKAd#cξ1Wٙ/,PtJ# +endstream +endobj + +182 0 obj + 2567 +endobj + +183 0 obj + [ /ICCBased 181 0 R ] +endobj + +184 0 obj + << /Type /XObject + /Length 185 0 R + /Group << /Type /Group + /S /Transparency + >> + /Subtype /Form + /Resources << /ColorSpace << /C1 183 0 R >> >> + /BBox [ 0.000000 0.000000 1440.000000 862.000000 ] + >> +stream +q +1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm +0.000000 0.000000 0.000000 scn +0.000000 862.000000 m +1440.000000 862.000000 l +1440.000000 0.000000 l +0.000000 0.000000 l +0.000000 862.000000 l +h +f +n +Q + +endstream +endobj + +185 0 obj + 211 +endobj + +186 0 obj + << /XObject << /X1 179 0 R >> + /ExtGState << /E1 << /SMask << /Type /Mask + /G 184 0 R + /S /Alpha + >> + /Type /ExtGState + >> >> + /ColorSpace << /C1 173 0 R >> + >> +endobj + +187 0 obj + << /Length 188 0 R >> +stream +/C1 CS +/C1 cs +q +/E1 gs +/X1 Do +Q + +endstream +endobj + +188 0 obj + 32 +endobj + +189 0 obj + << /Annots [] + /Type /Page + /MediaBox [ 0.000000 0.000000 1440.000000 862.000000 ] + /Resources 186 0 R + /Contents 187 0 R + /Parent 190 0 R + >> +endobj + +190 0 obj + << /Kids [ 189 0 R ] + /Count 1 + /Type /Pages + >> +endobj + +191 0 obj + << /ViewerPreferences << /DisplayDocTitle true >> + /Info << /Producer (Figma) + /Title (Accueil R\303\251seaux sociaux\055 PC) + >> + /Lang (fr) + /Pages 190 0 R + /Type /Catalog + >> +endobj + +xref +0 192 +0000000000 65535 f +0000000015 00000 n +0000000122 00000 n +0000000143 00000 n +0000000249 00000 n +0000000270 00000 n +0000000376 00000 n +0000000397 00000 n +0000000504 00000 n +0000000525 00000 n +0000000633 00000 n +0000000655 00000 n +0000000764 00000 n +0000000786 00000 n +0000000895 00000 n +0000000917 00000 n +0000001026 00000 n +0000001048 00000 n +0000001157 00000 n +0000001179 00000 n +0000001288 00000 n +0000001310 00000 n +0000001419 00000 n +0000001441 00000 n +0000001551 00000 n +0000001573 00000 n +0000001683 00000 n +0000001705 00000 n +0000001814 00000 n +0000001836 00000 n +0000001944 00000 n +0000001966 00000 n +0000002074 00000 n +0000002096 00000 n +0000002205 00000 n +0000002227 00000 n +0000002336 00000 n +0000002358 00000 n +0000002467 00000 n +0000002489 00000 n +0000002598 00000 n +0000002620 00000 n +0000002729 00000 n +0000002751 00000 n +0000002860 00000 n +0000002882 00000 n +0000002990 00000 n +0000003012 00000 n +0000003121 00000 n +0000003143 00000 n +0000003252 00000 n +0000003274 00000 n +0000003383 00000 n +0000003405 00000 n +0000003514 00000 n +0000003536 00000 n +0000003645 00000 n +0000003667 00000 n +0000003776 00000 n +0000003798 00000 n +0000003906 00000 n +0000003928 00000 n +0000004037 00000 n +0000004059 00000 n +0000004168 00000 n +0000004190 00000 n +0000004299 00000 n +0000004321 00000 n +0000004430 00000 n +0000004452 00000 n +0000004561 00000 n +0000004583 00000 n +0000004692 00000 n +0000004714 00000 n +0000004823 00000 n +0000004845 00000 n +0000004954 00000 n +0000004976 00000 n +0000005085 00000 n +0000005107 00000 n +0000005216 00000 n +0000005238 00000 n +0000005347 00000 n +0000005369 00000 n +0000005478 00000 n +0000005500 00000 n +0000005609 00000 n +0000005631 00000 n +0000005740 00000 n +0000005762 00000 n +0000005871 00000 n +0000005893 00000 n +0000006002 00000 n +0000006024 00000 n +0000006133 00000 n +0000006155 00000 n +0000006264 00000 n +0000006286 00000 n +0000006395 00000 n +0000006417 00000 n +0000006527 00000 n +0000006550 00000 n +0000006661 00000 n +0000006684 00000 n +0000006795 00000 n +0000006818 00000 n +0000006929 00000 n +0000006952 00000 n +0000007063 00000 n +0000007086 00000 n +0000007197 00000 n +0000007220 00000 n +0000007331 00000 n +0000007354 00000 n +0000007465 00000 n +0000007488 00000 n +0000007598 00000 n +0000007621 00000 n +0000007732 00000 n +0000007755 00000 n +0000007867 00000 n +0000007890 00000 n +0000008001 00000 n +0000008024 00000 n +0000008136 00000 n +0000008159 00000 n +0000008771 00000 n +0000008795 00000 n +0000009377 00000 n +0000012215 00000 n +0000014904 00000 n +0000014929 00000 n +0000014971 00000 n +0000015717 00000 n +0000015741 00000 n +0000018430 00000 n +0000018455 00000 n +0000018497 00000 n +0000019242 00000 n +0000019266 00000 n +0000021955 00000 n +0000021980 00000 n +0000022022 00000 n +0000022759 00000 n +0000022783 00000 n +0000025472 00000 n +0000025497 00000 n +0000025539 00000 n +0000026037 00000 n +0000026061 00000 n +0000028750 00000 n +0000028775 00000 n +0000028817 00000 n +0000031061 00000 n +0000031086 00000 n +0000033775 00000 n +0000033800 00000 n +0000033842 00000 n +0000055082 00000 n +0000055108 00000 n +0000057797 00000 n +0000057822 00000 n +0000057864 00000 n +0000237448 00000 n +0000237475 00000 n +0000240164 00000 n +0000240189 00000 n +0000240231 00000 n +0000242242 00000 n +0000242267 00000 n +0000249802 00000 n +0000249827 00000 n +0000252516 00000 n +0000252541 00000 n +0000252583 00000 n +0000345072 00000 n +0000345098 00000 n +0000347787 00000 n +0000347812 00000 n +0000347854 00000 n +0000443280 00000 n +0000443306 00000 n +0000445995 00000 n +0000446020 00000 n +0000446062 00000 n +0000446558 00000 n +0000446582 00000 n +0000446921 00000 n +0000447013 00000 n +0000447036 00000 n +0000447220 00000 n +0000447298 00000 n +trailer +<< /ID [ (88\072471) (88\072471) ] + /Root 191 0 R + /Size 192 +>> +startxref +447536 +%%EOF \ No newline at end of file diff --git a/docs/resources/interface/Accueil Témoignages - PC.pdf b/docs/resources/interface/Accueil Témoignages - PC.pdf new file mode 100644 index 0000000..964422e Binary files /dev/null and b/docs/resources/interface/Accueil Témoignages - PC.pdf differ diff --git a/frontend/.env.example b/frontend/.env.example new file mode 100644 index 0000000..1d6a802 --- /dev/null +++ b/frontend/.env.example @@ -0,0 +1,6 @@ +# API Configuration +NUXT_PUBLIC_API_URL=http://localhost:8000/api +NUXT_PUBLIC_API_KEY=your-api-key-here + +# Site URL (for sitemap, SEO) +NUXT_PUBLIC_SITE_URL=http://localhost:3000 diff --git a/frontend/app/app.vue b/frontend/app/app.vue new file mode 100644 index 0000000..f8eacfa --- /dev/null +++ b/frontend/app/app.vue @@ -0,0 +1,5 @@ + diff --git a/frontend/app/assets/css/main.css b/frontend/app/assets/css/main.css new file mode 100644 index 0000000..928369d --- /dev/null +++ b/frontend/app/assets/css/main.css @@ -0,0 +1,5 @@ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Merriweather:ital,wght@0,300;0,400;0,700;1,400&display=swap'); + +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/frontend/app/pages/index.vue b/frontend/app/pages/index.vue new file mode 100644 index 0000000..29c4832 --- /dev/null +++ b/frontend/app/pages/index.vue @@ -0,0 +1,5 @@ + diff --git a/frontend/nuxt.config.ts b/frontend/nuxt.config.ts new file mode 100644 index 0000000..6a63c5f --- /dev/null +++ b/frontend/nuxt.config.ts @@ -0,0 +1,44 @@ +export default defineNuxtConfig({ + devtools: { enabled: true }, + + ssr: true, + + future: { + compatibilityVersion: 4, + }, + + modules: [ + '@nuxtjs/i18n', + '@pinia/nuxt', + '@nuxt/image', + '@nuxtjs/sitemap', + ], + + css: ['~/assets/css/main.css'], + + postcss: { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, + }, + + i18n: { + locales: ['fr', 'en'], + defaultLocale: 'fr', + strategy: 'prefix_except_default', + }, + + app: { + pageTransition: { name: 'page', mode: 'out-in' }, + }, + + runtimeConfig: { + public: { + apiUrl: process.env.NUXT_PUBLIC_API_URL || 'http://localhost:8000/api', + apiKey: process.env.NUXT_PUBLIC_API_KEY || '', + }, + }, + + compatibilityDate: '2025-01-01', +}) diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..176af6c --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,11936 @@ +{ + "name": "skycel-frontend", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "skycel-frontend", + "hasInstallScript": true, + "dependencies": { + "@nuxt/image": "^1.9.0", + "@nuxtjs/i18n": "^9.0.0", + "@nuxtjs/sitemap": "^7.2.0", + "@pinia/nuxt": "^0.9.0", + "nuxt": "^3.16.0", + "pinia-plugin-persistedstate": "^3.2.0" + }, + "devDependencies": { + "autoprefixer": "^10.4.24", + "postcss": "^8.5.6", + "tailwindcss": "^3.4.19", + "typescript": "^5.7.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bomb.sh/tab": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@bomb.sh/tab/-/tab-0.0.11.tgz", + "integrity": "sha512-RSqyreeicYBALcMaNxIUJTBknftXsyW45VRq5gKDNwKroh0Re5SDoWwXZaphb+OTEzVdpm/BA8Uq6y0P+AtVYw==", + "bin": { + "tab": "dist/bin/cli.js" + }, + "peerDependencies": { + "cac": "^6.7.14", + "citty": "^0.1.6", + "commander": "^13.1.0" + }, + "peerDependenciesMeta": { + "cac": { + "optional": true + }, + "citty": { + "optional": true + }, + "commander": { + "optional": true + } + } + }, + "node_modules/@clack/core": { + "version": "1.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.0.0-alpha.7.tgz", + "integrity": "sha512-3vdh6Ar09D14rVxJZIm3VQJkU+ZOKKT5I5cC0cOVazy70CNyYYjiwRj9unwalhESndgxx6bGc/m6Hhs4EKF5XQ==", + "dependencies": { + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "1.0.0-alpha.9", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.0.0-alpha.9.tgz", + "integrity": "sha512-sKs0UjiHFWvry4SiRfBi5Qnj0C/6AYx8aKkFPZQSuUZXgAram25ZDmhQmP7vj1aFyLpfHWtLQjWvOvcat0TOLg==", + "dependencies": { + "@clack/core": "1.0.0-alpha.7", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.2.tgz", + "integrity": "sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "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==", + "peer": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "peer": true, + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "peer": true, + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "peer": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "peer": true, + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@fastify/accept-negotiator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz", + "integrity": "sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "peer": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "peer": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.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==", + "peer": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "peer": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@intlify/bundle-utils": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-10.0.1.tgz", + "integrity": "sha512-WkaXfSevtpgtUR4t8K2M6lbR7g03mtOxFeh+vXp5KExvPqS12ppaRj1QxzwRuRI5VUto54A22BjKoBMLyHILWQ==", + "dependencies": { + "@intlify/message-compiler": "^11.1.2", + "@intlify/shared": "^11.1.2", + "acorn": "^8.8.2", + "escodegen": "^2.1.0", + "estree-walker": "^2.0.2", + "jsonc-eslint-parser": "^2.3.0", + "mlly": "^1.2.0", + "source-map-js": "^1.0.1", + "yaml-eslint-parser": "^1.2.2" + }, + "engines": { + "node": ">= 18" + }, + "peerDependenciesMeta": { + "petite-vue-i18n": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "node_modules/@intlify/bundle-utils/node_modules/@intlify/message-compiler": { + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.2.8.tgz", + "integrity": "sha512-A5n33doOjmHsBtCN421386cG1tWp5rpOjOYPNsnpjIJbQ4POF0QY2ezhZR9kr0boKwaHjbOifvyQvHj2UTrDFQ==", + "dependencies": { + "@intlify/shared": "11.2.8", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/bundle-utils/node_modules/@intlify/shared": { + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.2.8.tgz", + "integrity": "sha512-l6e4NZyUgv8VyXXH4DbuucFOBmxLF56C/mqh2tvApbzl2Hrhi1aTDcuv5TKdxzfHYmpO3UB0Cz04fgDT9vszfw==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/bundle-utils/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==" + }, + "node_modules/@intlify/core": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@intlify/core/-/core-10.0.8.tgz", + "integrity": "sha512-2BbgN0aeuYHOHe7kVlTr2XxyrnLQZ/4/Y0Pw8luU67723+AqVYqxB7ZG1FzLCVNwAmzdVZMjKzFpgOzdUSdBfw==", + "dependencies": { + "@intlify/core-base": "10.0.8", + "@intlify/shared": "10.0.8" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/core-base": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-10.0.8.tgz", + "integrity": "sha512-FoHslNWSoHjdUBLy35bpm9PV/0LVI/DSv9L6Km6J2ad8r/mm0VaGg06C40FqlE8u2ADcGUM60lyoU7Myo4WNZQ==", + "dependencies": { + "@intlify/message-compiler": "10.0.8", + "@intlify/shared": "10.0.8" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/h3": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@intlify/h3/-/h3-0.6.1.tgz", + "integrity": "sha512-hFMcqWXCoFNZkraa+JF7wzByGdE0vGi8rUs7CTFrE4hE3X2u9QcelH8VRO8mPgJDH+TgatzvrVp6iZsWVluk2A==", + "dependencies": { + "@intlify/core": "^10.0.3", + "@intlify/utils": "^0.13.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-10.0.8.tgz", + "integrity": "sha512-DV+sYXIkHVd5yVb2mL7br/NEUwzUoLBsMkV3H0InefWgmYa34NLZUvMCGi5oWX+Hqr2Y2qUxnVrnOWF4aBlgWg==", + "dependencies": { + "@intlify/shared": "10.0.8", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-10.0.8.tgz", + "integrity": "sha512-BcmHpb5bQyeVNrptC3UhzpBZB/YHHDoEREOUERrmF2BRxsyOEuRrq+Z96C/D4+2KJb8kuHiouzAei7BXlG0YYw==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/unplugin-vue-i18n": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-6.0.8.tgz", + "integrity": "sha512-Vvm3KhjE6TIBVUQAk37rBiaYy2M5OcWH0ZcI1XKEsOTeN1o0bErk+zeuXmcrcMc/73YggfI8RoxOUz9EB/69JQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@intlify/bundle-utils": "^10.0.1", + "@intlify/shared": "^11.1.2", + "@intlify/vue-i18n-extensions": "^8.0.0", + "@rollup/pluginutils": "^5.1.0", + "@typescript-eslint/scope-manager": "^8.13.0", + "@typescript-eslint/typescript-estree": "^8.13.0", + "debug": "^4.3.3", + "fast-glob": "^3.2.12", + "js-yaml": "^4.1.0", + "json5": "^2.2.3", + "pathe": "^1.0.0", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2", + "unplugin": "^1.1.0", + "vue": "^3.4" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "petite-vue-i18n": "*", + "vue": "^3.2.25", + "vue-i18n": "*" + }, + "peerDependenciesMeta": { + "petite-vue-i18n": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "node_modules/@intlify/unplugin-vue-i18n/node_modules/@intlify/shared": { + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.2.8.tgz", + "integrity": "sha512-l6e4NZyUgv8VyXXH4DbuucFOBmxLF56C/mqh2tvApbzl2Hrhi1aTDcuv5TKdxzfHYmpO3UB0Cz04fgDT9vszfw==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/unplugin-vue-i18n/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" + }, + "node_modules/@intlify/unplugin-vue-i18n/node_modules/unplugin": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", + "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@intlify/utils": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@intlify/utils/-/utils-0.13.0.tgz", + "integrity": "sha512-8i3uRdAxCGzuHwfmHcVjeLQBtysQB2aXl/ojoagDut5/gY5lvWCQ2+cnl2TiqE/fXj/D8EhWG/SLKA7qz4a3QA==", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/vue-i18n-extensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@intlify/vue-i18n-extensions/-/vue-i18n-extensions-8.0.0.tgz", + "integrity": "sha512-w0+70CvTmuqbskWfzeYhn0IXxllr6mU+IeM2MU0M+j9OW64jkrvqY+pYFWrUnIIC9bEdij3NICruicwd5EgUuQ==", + "dependencies": { + "@babel/parser": "^7.24.6", + "@intlify/shared": "^10.0.0", + "@vue/compiler-dom": "^3.2.45", + "vue-i18n": "^10.0.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@intlify/shared": "^9.0.0 || ^10.0.0 || ^11.0.0", + "@vue/compiler-dom": "^3.0.0", + "vue": "^3.0.0", + "vue-i18n": "^9.0.0 || ^10.0.0 || ^11.0.0" + }, + "peerDependenciesMeta": { + "@intlify/shared": { + "optional": true + }, + "@vue/compiler-dom": { + "optional": true + }, + "vue": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "node_modules/@ioredis/commands": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.5.0.tgz", + "integrity": "sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow==" + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", + "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "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==", + "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==", + "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==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + }, + "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==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==" + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.3.tgz", + "integrity": "sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==", + "dependencies": { + "consola": "^3.2.3", + "detect-libc": "^2.0.0", + "https-proxy-agent": "^7.0.5", + "node-fetch": "^2.6.7", + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@miyaneee/rollup-plugin-json5": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@miyaneee/rollup-plugin-json5/-/rollup-plugin-json5-1.2.0.tgz", + "integrity": "sha512-JjTIaXZp9WzhUHpElrqPnl1AzBi/rvRs065F71+aTmlqvTMVkdbjZ8vfFl4nRlgJy+TPBw69ZK4pwFdmOAt4aA==", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "json5": "^2.2.3" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "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==", + "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==", + "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==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nuxt/cli": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/@nuxt/cli/-/cli-3.32.0.tgz", + "integrity": "sha512-n2f3SRjPlhthPvo2qWjLRRiTrUtB6WFwg0BGsvtqcqZVeQpNEU371zuKWBaFrWgqDZHV1r/aD9jrVCo+C8Pmrw==", + "dependencies": { + "@bomb.sh/tab": "^0.0.11", + "@clack/prompts": "1.0.0-alpha.9", + "c12": "^3.3.3", + "citty": "^0.1.6", + "confbox": "^0.2.2", + "consola": "^3.4.2", + "copy-paste": "^2.2.0", + "debug": "^4.4.3", + "defu": "^6.1.4", + "exsolve": "^1.0.8", + "fuse.js": "^7.1.0", + "giget": "^2.0.0", + "jiti": "^2.6.1", + "listhen": "^1.9.0", + "nypm": "^0.6.2", + "ofetch": "^1.5.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.0.0", + "pkg-types": "^2.3.0", + "scule": "^1.3.0", + "semver": "^7.7.3", + "srvx": "^0.10.0", + "std-env": "^3.10.0", + "tinyexec": "^1.0.2", + "ufo": "^1.6.1", + "youch": "^4.1.0-beta.13" + }, + "bin": { + "nuxi": "bin/nuxi.mjs", + "nuxi-ng": "bin/nuxi.mjs", + "nuxt": "bin/nuxi.mjs", + "nuxt-cli": "bin/nuxi.mjs" + }, + "engines": { + "node": "^16.10.0 || >=18.0.0" + } + }, + "node_modules/@nuxt/devalue": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nuxt/devalue/-/devalue-2.0.2.tgz", + "integrity": "sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==" + }, + "node_modules/@nuxt/devtools": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@nuxt/devtools/-/devtools-2.7.0.tgz", + "integrity": "sha512-BtIklVYny14Ykek4SHeexAHoa28MEV9kz223ZzvoNYqE0f+YVV+cJP69ovZHf+HUVpxaAMJfWKLHXinWXiCZ4Q==", + "dependencies": { + "@nuxt/devtools-kit": "2.7.0", + "@nuxt/devtools-wizard": "2.7.0", + "@nuxt/kit": "^3.19.3", + "@vue/devtools-core": "^7.7.7", + "@vue/devtools-kit": "^7.7.7", + "birpc": "^2.6.1", + "consola": "^3.4.2", + "destr": "^2.0.5", + "error-stack-parser-es": "^1.0.5", + "execa": "^8.0.1", + "fast-npm-meta": "^0.4.7", + "get-port-please": "^3.2.0", + "hookable": "^5.5.3", + "image-meta": "^0.2.2", + "is-installed-globally": "^1.0.0", + "launch-editor": "^2.11.1", + "local-pkg": "^1.1.2", + "magicast": "^0.3.5", + "nypm": "^0.6.2", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.3.0", + "semver": "^7.7.3", + "simple-git": "^3.28.0", + "sirv": "^3.0.2", + "structured-clone-es": "^1.0.0", + "tinyglobby": "^0.2.15", + "vite-plugin-inspect": "^11.3.3", + "vite-plugin-vue-tracer": "^1.0.1", + "which": "^5.0.0", + "ws": "^8.18.3" + }, + "bin": { + "devtools": "cli.mjs" + }, + "peerDependencies": { + "vite": ">=6.0" + } + }, + "node_modules/@nuxt/devtools-kit": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-3.1.1.tgz", + "integrity": "sha512-sjiKFeDCOy1SyqezSgyV4rYNfQewC64k/GhOsuJgRF+wR2qr6KTVhO6u2B+csKs74KrMrnJprQBgud7ejvOXAQ==", + "dependencies": { + "@nuxt/kit": "^4.2.1", + "execa": "^8.0.1" + }, + "peerDependencies": { + "vite": ">=6.0" + } + }, + "node_modules/@nuxt/devtools-kit/node_modules/@nuxt/kit": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-4.3.0.tgz", + "integrity": "sha512-cD/0UU9RQmlnTbmyJTDyzN8f6CzpziDLv3tFQCnwl0Aoxt3KmFu4k/XA4Sogxqj7jJ/3cdX1kL+Lnsh34sxcQQ==", + "dependencies": { + "c12": "^3.3.3", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "errx": "^0.1.0", + "exsolve": "^1.0.8", + "ignore": "^7.0.5", + "jiti": "^2.6.1", + "klona": "^2.0.6", + "mlly": "^1.8.0", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "rc9": "^2.1.2", + "scule": "^1.3.0", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ufo": "^1.6.3", + "unctx": "^2.5.0", + "untyped": "^2.0.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@nuxt/devtools-wizard": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@nuxt/devtools-wizard/-/devtools-wizard-2.7.0.tgz", + "integrity": "sha512-iWuWR0U6BRpF7D6xrgq9ZkQ6ajsw2EA/gVmbU9V5JPKRUtV6DVpCPi+h34VFNeQ104Sf531XgvT0sl3h93AjXA==", + "dependencies": { + "consola": "^3.4.2", + "diff": "^8.0.2", + "execa": "^8.0.1", + "magicast": "^0.3.5", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "prompts": "^2.4.2", + "semver": "^7.7.3" + }, + "bin": { + "devtools-wizard": "cli.mjs" + } + }, + "node_modules/@nuxt/devtools/node_modules/@nuxt/devtools-kit": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-2.7.0.tgz", + "integrity": "sha512-MIJdah6CF6YOW2GhfKnb8Sivu6HpcQheqdjOlZqShBr+1DyjtKQbAKSCAyKPaoIzZP4QOo2SmTFV6aN8jBeEIQ==", + "dependencies": { + "@nuxt/kit": "^3.19.3", + "execa": "^8.0.1" + }, + "peerDependencies": { + "vite": ">=6.0" + } + }, + "node_modules/@nuxt/devtools/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/@nuxt/devtools/node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" + }, + "node_modules/@nuxt/devtools/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@nuxt/image": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@nuxt/image/-/image-1.11.0.tgz", + "integrity": "sha512-4kzhvb2tJfxMsa/JZeYn1sMiGbx2J/S6BQrQSdXNsHgSvywGVkFhTiQGjoP6O49EsXyAouJrer47hMeBcTcfXQ==", + "dependencies": { + "@nuxt/kit": "^3.18.0", + "consola": "^3.4.2", + "defu": "^6.1.4", + "h3": "^1.15.3", + "image-meta": "^0.2.1", + "knitwork": "^1.2.0", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "std-env": "^3.9.0", + "ufo": "^1.6.1" + }, + "engines": { + "node": ">=18.20.6" + }, + "optionalDependencies": { + "ipx": "^2.1.1" + } + }, + "node_modules/@nuxt/kit": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.21.0.tgz", + "integrity": "sha512-KMTLK/dsGaQioZzkYUvgfN9le4grNW54aNcA1jqzgVZLcFVy4jJfrJr5WZio9NT2EMfajdoZ+V28aD7BRr4Zfw==", + "dependencies": { + "c12": "^3.3.3", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "errx": "^0.1.0", + "exsolve": "^1.0.8", + "ignore": "^7.0.5", + "jiti": "^2.6.1", + "klona": "^2.0.6", + "knitwork": "^1.3.0", + "mlly": "^1.8.0", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "rc9": "^2.1.2", + "scule": "^1.3.0", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ufo": "^1.6.3", + "unctx": "^2.5.0", + "untyped": "^2.0.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@nuxt/schema": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.17.5.tgz", + "integrity": "sha512-A1DSQk2uXqRHXlgLWDeFCyZk/yPo9oMBMb9OsbVko9NLv9du2DO2cs9RQ68Amvdk8O2nG7/FxAMNnkMdQ8OexA==", + "dependencies": { + "@vue/shared": "^3.5.16", + "consola": "^3.4.2", + "defu": "^6.1.4", + "pathe": "^2.0.3", + "std-env": "^3.9.0" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/@nuxt/telemetry": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-2.6.6.tgz", + "integrity": "sha512-Zh4HJLjzvm3Cq9w6sfzIFyH9ozK5ePYVfCUzzUQNiZojFsI2k1QkSBrVI9BGc6ArKXj/O6rkI6w7qQ+ouL8Cag==", + "dependencies": { + "@nuxt/kit": "^3.15.4", + "citty": "^0.1.6", + "consola": "^3.4.2", + "destr": "^2.0.3", + "dotenv": "^16.4.7", + "git-url-parse": "^16.0.1", + "is-docker": "^3.0.0", + "ofetch": "^1.4.1", + "package-manager-detector": "^1.1.0", + "pathe": "^2.0.3", + "rc9": "^2.1.2", + "std-env": "^3.8.1" + }, + "bin": { + "nuxt-telemetry": "bin/nuxt-telemetry.mjs" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@nuxt/telemetry/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/@nuxt/vite-builder": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.17.5.tgz", + "integrity": "sha512-SKlm73FuuPj1ZdVJ1JQfUed/lO5l7iJMbM+9K+CMXnifu7vV2ITaSxu8uZ/ice1FeLYwOZKEsjnJXB0QpqDArQ==", + "dependencies": { + "@nuxt/kit": "3.17.5", + "@rollup/plugin-replace": "^6.0.2", + "@vitejs/plugin-vue": "^5.2.4", + "@vitejs/plugin-vue-jsx": "^4.2.0", + "autoprefixer": "^10.4.21", + "consola": "^3.4.2", + "cssnano": "^7.0.7", + "defu": "^6.1.4", + "esbuild": "^0.25.5", + "escape-string-regexp": "^5.0.0", + "exsolve": "^1.0.5", + "externality": "^1.0.2", + "get-port-please": "^3.1.2", + "h3": "^1.15.3", + "jiti": "^2.4.2", + "knitwork": "^1.2.0", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "mocked-exports": "^0.1.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.1.0", + "postcss": "^8.5.4", + "rollup-plugin-visualizer": "^6.0.1", + "std-env": "^3.9.0", + "ufo": "^1.6.1", + "unenv": "^2.0.0-rc.17", + "unplugin": "^2.3.5", + "vite": "^6.3.5", + "vite-node": "^3.2.0", + "vite-plugin-checker": "^0.9.3", + "vue-bundle-renderer": "^2.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" + }, + "peerDependencies": { + "vue": "^3.3.4" + } + }, + "node_modules/@nuxt/vite-builder/node_modules/@nuxt/kit": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.17.5.tgz", + "integrity": "sha512-NdCepmA+S/SzgcaL3oYUeSlXGYO6BXGr9K/m1D0t0O9rApF8CSq/QQ+ja5KYaYMO1kZAEWH4s2XVcE3uPrrAVg==", + "dependencies": { + "c12": "^3.0.4", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "errx": "^0.1.0", + "exsolve": "^1.0.5", + "ignore": "^7.0.5", + "jiti": "^2.4.2", + "klona": "^2.0.6", + "knitwork": "^1.2.0", + "mlly": "^1.7.4", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "pkg-types": "^2.1.0", + "scule": "^1.3.0", + "semver": "^7.7.2", + "std-env": "^3.9.0", + "tinyglobby": "^0.2.14", + "ufo": "^1.6.1", + "unctx": "^2.4.1", + "unimport": "^5.0.1", + "untyped": "^2.0.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@nuxt/vite-builder/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nuxt/vite-builder/node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" + }, + "node_modules/@nuxtjs/i18n": { + "version": "9.5.6", + "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-9.5.6.tgz", + "integrity": "sha512-PhrQtJT6Di9uoslL5BTrBFqntFlfCaUKlO3T9ORJwmWFdowPqQeFjQ9OjVbKA6TNWr3kQhDqLbIcGlhbuG1USQ==", + "dependencies": { + "@intlify/h3": "^0.6.1", + "@intlify/shared": "^10.0.7", + "@intlify/unplugin-vue-i18n": "^6.0.8", + "@intlify/utils": "^0.13.0", + "@miyaneee/rollup-plugin-json5": "^1.2.0", + "@nuxt/kit": "^3.17.2", + "@oxc-parser/wasm": "^0.60.0", + "@rollup/plugin-yaml": "^4.1.2", + "@vue/compiler-sfc": "^3.5.13", + "debug": "^4.4.0", + "defu": "^6.1.4", + "esbuild": "^0.25.1", + "estree-walker": "^3.0.3", + "h3": "^1.15.1", + "knitwork": "^1.2.0", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "oxc-parser": "^0.70.0", + "pathe": "^2.0.3", + "typescript": "^5.6.2", + "ufo": "^1.5.4", + "unplugin": "^2.2.2", + "unplugin-vue-router": "^0.12.0", + "vue-i18n": "^10.0.7", + "vue-router": "^4.5.1" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/bobbiegoede" + } + }, + "node_modules/@nuxtjs/sitemap": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@nuxtjs/sitemap/-/sitemap-7.6.0.tgz", + "integrity": "sha512-JuWwAFn9MDHWFO5C7lpV6DS86ZIrJItGfzCK1kN9WvgvDmTgal3xbfGCADmAaCWOVl2+dcPGHH6BCypQvUX0aQ==", + "dependencies": { + "@nuxt/devtools-kit": "^3.1.1", + "@nuxt/kit": "^4.3.0", + "chalk": "^5.6.2", + "defu": "^6.1.4", + "fast-xml-parser": "^5.3.3", + "nuxt-site-config": "^3.2.18", + "ofetch": "^1.5.1", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "radix3": "^1.1.2", + "semver": "^7.7.3", + "sirv": "^3.0.2", + "std-env": "^3.10.0", + "ufo": "^1.6.3", + "ultrahtml": "^1.6.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "zod": ">=3" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@nuxtjs/sitemap/node_modules/@nuxt/kit": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-4.3.0.tgz", + "integrity": "sha512-cD/0UU9RQmlnTbmyJTDyzN8f6CzpziDLv3tFQCnwl0Aoxt3KmFu4k/XA4Sogxqj7jJ/3cdX1kL+Lnsh34sxcQQ==", + "dependencies": { + "c12": "^3.3.3", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "errx": "^0.1.0", + "exsolve": "^1.0.8", + "ignore": "^7.0.5", + "jiti": "^2.6.1", + "klona": "^2.0.6", + "mlly": "^1.8.0", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "rc9": "^2.1.2", + "scule": "^1.3.0", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ufo": "^1.6.3", + "unctx": "^2.5.0", + "untyped": "^2.0.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-arm64": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.70.0.tgz", + "integrity": "sha512-pIi7L9PnsBctS/ruW6JQVSYRJkh76PblBN46uQxpBfVsM57c1s4HGZlmGysQWbdmQTFDZW+SmH3u0JpmDLF0+A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-x64": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.70.0.tgz", + "integrity": "sha512-EbKqtOHzZR56ZFC5HHg6XrYneFAJmpLC1Z6FSgbI061Ley1atAViQg7S6Agm9wAcPpns+BeFJqXEBx/y3MKa2w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-freebsd-x64": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.70.0.tgz", + "integrity": "sha512-MVUaOMEUVE8q3nsWtEo589h++V5wAdqTbCRa9WY4Yuyxska4xcuJQk/kDNCx+n92saS7Luk+b20O9+VCI03c+A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.70.0.tgz", + "integrity": "sha512-8N4JTYTgKiRHlMUDAdzKs6iEC57a8ex408VgKoLD/Fl+Un79qOti3S9sotdnWSdH/BsDQeO5NW+PKaqFBTw+hA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-musleabihf": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.70.0.tgz", + "integrity": "sha512-Bsu+YvtgWuSfSDJTHMF5APZBOtvddR0GiHyrL0yaXDwaYvAL/E7XcoSK2GdmKTpw+J8nk5IlejEXlQliPo52pQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-gnu": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.70.0.tgz", + "integrity": "sha512-tDzHWKexJPHR+qSiuAFoZ1v8EgCd4ggBNbjJHkcIHsoYKnsKaT1+uE9xfW9UhI1mhv2lo1JJ9n9og2yDTGxSeA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-musl": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.70.0.tgz", + "integrity": "sha512-BJ+N25UWmHU624558ojSTnht3uFL00jV1c8qk1hnKf4cl6+ovFcoktRWAWSBlgLEP8tLlu8qgIhz875tMj2PkQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-gnu": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.70.0.tgz", + "integrity": "sha512-nxu22nVuPA2xy1cxvBC0D5mVl0myqStOw3XBkVkDViNL01iPyuEFJd5VsM0GqsgrXvF95H/jrbMd+XWnto924g==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-s390x-gnu": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.70.0.tgz", + "integrity": "sha512-AQ6Xj97lYRxHZl94cZIHJxT5M1qkeEi+vQe+e7M2lAtjcURl8cwhZmWKSv4rt4BQRVfO3ys0bY8AgIh4eFJiqw==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-gnu": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.70.0.tgz", + "integrity": "sha512-RIxaVsIxtG90CoX6/Okij8itaMrJp4SEJm1pSL0pz3hGo0yur3Il9M1mmGvOpW+avY8uHdwXIvf2qMnnTKZuoQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-musl": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.70.0.tgz", + "integrity": "sha512-B3S0G4TlZ+WLdQq4mSQtt2ZW0MAkKWc8dla17tZY86kcXvvCWwACvj7I27Z/nSlb7uJOdRZS9/r6Gw0uAARNVQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-wasm32-wasi": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.70.0.tgz", + "integrity": "sha512-QN8yxH7eHXTqed8Oo7ZUzOWn6hixXa8EVINLy21eLU9isoifSPKMswSmCXHxsM2L5rIIvzoaKfghGOru1mMQbw==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.9" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-win32-arm64-msvc": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.70.0.tgz", + "integrity": "sha512-6k8/s78g0GQKqrxk4F0wYj32NBF9oSP6089e6BeuIRQ9l+Zh0cuI6unJeLzXNszxmlqq84xmf/tmP3MSDG43Uw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-win32-x64-msvc": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.70.0.tgz", + "integrity": "sha512-nd9o1QtEvupaJZ3Wn7PfsuC00n31NNRQZ5+Mui6Q0ZyDzp+obqPUSbSt7xh9Dy0c5zgtYMk8WY4n/VBJY2VvTQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/wasm": { + "version": "0.60.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/wasm/-/wasm-0.60.0.tgz", + "integrity": "sha512-Dkf9/D87WGBCW3L0+1DtpAfL4SrNsgeRvxwjpKCtbH7Kf6K+pxrT0IridaJfmWKu1Ml+fDvj+7HEyBcfUC/TXQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dependencies": { + "@oxc-project/types": "^0.60.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.60.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.60.0.tgz", + "integrity": "sha512-prhfNnb3ATFHOCv7mzKFfwLij5RzoUz6Y1n525ZhCEqfq5wreCXL+DyVoq3ShukPo7q45ZjYIdjFUgjj+WKzng==", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-wasm": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.5.6.tgz", + "integrity": "sha512-byAiBZ1t3tXQvc8dMD/eoyE7lTXYorhn+6uVW5AC+JGI1KtJC/LvDche5cfUE+qiefH+Ybq0bUCJU0aB1cSHUA==", + "bundleDependencies": [ + "napi-wasm" + ], + "dependencies": { + "is-glob": "^4.0.3", + "napi-wasm": "^1.1.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pinia/nuxt": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@pinia/nuxt/-/nuxt-0.9.0.tgz", + "integrity": "sha512-2yeRo7LeyCF68AbNeL3xu2h6uw0617RkcsYxmA8DJM0R0PMdz5wQHnc44KeENQxR/Mrq8T910XVT6buosqsjBQ==", + "dependencies": { + "@nuxt/kit": "^3.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "pinia": "^2.3.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==" + }, + "node_modules/@poppinss/colors": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", + "integrity": "sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==", + "dependencies": { + "kleur": "^4.1.5" + } + }, + "node_modules/@poppinss/colors/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@poppinss/dumper": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.5.tgz", + "integrity": "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@sindresorhus/is": "^7.0.2", + "supports-color": "^10.0.0" + } + }, + "node_modules/@poppinss/exception": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz", + "integrity": "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", + "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==" + }, + "node_modules/@rollup/plugin-alias": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-6.0.0.tgz", + "integrity": "sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "rollup": ">=4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.0.tgz", + "integrity": "sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ==", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/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==" + }, + "node_modules/@rollup/plugin-inject": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", + "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-inject/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==" + }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz", + "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.3.tgz", + "integrity": "sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-yaml": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-yaml/-/plugin-yaml-4.1.2.tgz", + "integrity": "sha512-RpupciIeZMUqhgFE97ba0s98mOFS7CWzN3EJNhJkqSv9XLlWYtwVdtE6cDw6ASOF/sZVFS7kRJXftaqM2Vakdw==", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "js-yaml": "^4.1.0", + "tosource": "^2.0.0-alpha.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/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==" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sindresorhus/is": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@speed-highlight/core": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.14.tgz", + "integrity": "sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==" + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "optional": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" + }, + "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==", + "peer": true + }, + "node_modules/@types/parse-path": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@types/parse-path/-/parse-path-7.1.0.tgz", + "integrity": "sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==", + "deprecated": "This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed.", + "dependencies": { + "parse-path": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.54.0.tgz", + "integrity": "sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.54.0", + "@typescript-eslint/types": "^8.54.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.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.54.0.tgz", + "integrity": "sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==", + "dependencies": { + "@typescript-eslint/types": "8.54.0", + "@typescript-eslint/visitor-keys": "8.54.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.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz", + "integrity": "sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==", + "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.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.54.0.tgz", + "integrity": "sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==", + "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.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.54.0.tgz", + "integrity": "sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==", + "dependencies": { + "@typescript-eslint/project-service": "8.54.0", + "@typescript-eslint/tsconfig-utils": "8.54.0", + "@typescript-eslint/types": "8.54.0", + "@typescript-eslint/visitor-keys": "8.54.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.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.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz", + "integrity": "sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==", + "dependencies": { + "@typescript-eslint/types": "8.54.0", + "eslint-visitor-keys": "^4.2.1" + }, + "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": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@unhead/vue": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-2.1.2.tgz", + "integrity": "sha512-w5yxH/fkkLWAFAOnMSIbvAikNHYn6pgC7zGF/BasXf+K3CO1cYIPFehYAk5jpcsbiNPMc3goyyw1prGLoyD14g==", + "dependencies": { + "hookable": "^6.0.1", + "unhead": "2.1.2" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "vue": ">=3.5.18" + } + }, + "node_modules/@unhead/vue/node_modules/hookable": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.0.1.tgz", + "integrity": "sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw==" + }, + "node_modules/@vercel/nft": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-1.3.0.tgz", + "integrity": "sha512-i4EYGkCsIjzu4vorDUbqglZc5eFtQI2syHb++9ZUDm6TU4edVywGpVnYDein35x9sevONOn9/UabfQXuNXtuzQ==", + "dependencies": { + "@mapbox/node-pre-gyp": "^2.0.0", + "@rollup/pluginutils": "^5.1.3", + "acorn": "^8.6.0", + "acorn-import-attributes": "^1.9.5", + "async-sema": "^3.1.1", + "bindings": "^1.4.0", + "estree-walker": "2.0.2", + "glob": "^13.0.0", + "graceful-fs": "^4.2.9", + "node-gyp-build": "^4.2.2", + "picomatch": "^4.0.2", + "resolve-from": "^5.0.0" + }, + "bin": { + "nft": "out/cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@vercel/nft/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==" + }, + "node_modules/@vercel/nft/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitejs/plugin-vue-jsx": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.2.0.tgz", + "integrity": "sha512-DSTrmrdLp+0LDNF77fqrKfx7X0ErRbOcUAgJL/HbSesqQwoUvUQ4uYQqaex+rovqgGcoPqVk+AwUh3v9CuiYIw==", + "dependencies": { + "@babel/core": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1", + "@rolldown/pluginutils": "^1.0.0-beta.9", + "@vue/babel-plugin-jsx": "^1.4.0" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/@vue-macros/common": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.16.1.tgz", + "integrity": "sha512-Pn/AWMTjoMYuquepLZP813BIcq8DTZiNCoaceuNlvaYuOTd8DqBZWc5u0uOMQZMInwME1mdSmmBAcTluiV9Jtg==", + "dependencies": { + "@vue/compiler-sfc": "^3.5.13", + "ast-kit": "^1.4.0", + "local-pkg": "^1.0.0", + "magic-string-ast": "^0.7.0", + "pathe": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.14.0" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.2.25" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.5.0.tgz", + "integrity": "sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.5.0.tgz", + "integrity": "sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.2", + "@vue/babel-helper-vue-transform-on": "1.5.0", + "@vue/babel-plugin-resolve-type": "1.5.0", + "@vue/shared": "^3.5.18" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.5.0.tgz", + "integrity": "sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/parser": "^7.28.0", + "@vue/compiler-sfc": "^3.5.18" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.27.tgz", + "integrity": "sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==", + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/shared": "3.5.27", + "entities": "^7.0.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-core/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==" + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.27.tgz", + "integrity": "sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==", + "dependencies": { + "@vue/compiler-core": "3.5.27", + "@vue/shared": "3.5.27" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.27.tgz", + "integrity": "sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==", + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/compiler-core": "3.5.27", + "@vue/compiler-dom": "3.5.27", + "@vue/compiler-ssr": "3.5.27", + "@vue/shared": "3.5.27", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-sfc/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==" + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.27.tgz", + "integrity": "sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==", + "dependencies": { + "@vue/compiler-dom": "3.5.27", + "@vue/shared": "3.5.27" + } + }, + "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==" + }, + "node_modules/@vue/devtools-core": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.7.9.tgz", + "integrity": "sha512-48jrBSwG4GVQRvVeeXn9p9+dlx+ISgasM7SxZZKczseohB0cBz+ITKr4YbLWjmJdy45UHL7UMPlR4Y0CWTRcSQ==", + "dependencies": { + "@vue/devtools-kit": "^7.7.9", + "@vue/devtools-shared": "^7.7.9", + "mitt": "^3.0.1", + "nanoid": "^5.1.0", + "pathe": "^2.0.3", + "vite-hot-client": "^2.0.4" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz", + "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==", + "dependencies": { + "@vue/devtools-shared": "^7.7.9", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-kit/node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz", + "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.27.tgz", + "integrity": "sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ==", + "dependencies": { + "@vue/shared": "3.5.27" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.27.tgz", + "integrity": "sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A==", + "dependencies": { + "@vue/reactivity": "3.5.27", + "@vue/shared": "3.5.27" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.27.tgz", + "integrity": "sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg==", + "dependencies": { + "@vue/reactivity": "3.5.27", + "@vue/runtime-core": "3.5.27", + "@vue/shared": "3.5.27", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.27.tgz", + "integrity": "sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA==", + "dependencies": { + "@vue/compiler-ssr": "3.5.27", + "@vue/shared": "3.5.27" + }, + "peerDependencies": { + "vue": "3.5.27" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.27.tgz", + "integrity": "sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==" + }, + "node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "peerDependencies": { + "acorn": "^8" + } + }, + "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==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", + "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", + "engines": { + "node": ">=14" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/archiver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", + "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", + "dependencies": { + "archiver-utils": "^5.0.2", + "async": "^3.2.4", + "buffer-crc32": "^1.0.0", + "readable-stream": "^4.0.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^6.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", + "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", + "dependencies": { + "glob": "^10.0.0", + "graceful-fs": "^4.2.0", + "is-stream": "^2.0.1", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver-utils/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/archiver-utils/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/archiver-utils/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/ast-kit": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-1.4.3.tgz", + "integrity": "sha512-MdJqjpodkS5J149zN0Po+HPshkTdUyrvF7CKTafUgv69vBSPtncrj+3IiUgqdd7ElIEkbeXCsEouBUwLrw9Ilg==", + "dependencies": { + "@babel/parser": "^7.27.0", + "pathe": "^2.0.3" + }, + "engines": { + "node": ">=16.14.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/ast-walker-scope": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.6.2.tgz", + "integrity": "sha512-1UWOyC50xI3QZkRuDj6PqDtpm1oHWtYs+NQGwqL/2R11eN3Q81PHAHPM0SWW3BNQm53UDwS//Jv8L4CCVLM1bQ==", + "dependencies": { + "@babel/parser": "^7.25.3", + "ast-kit": "^1.0.1" + }, + "engines": { + "node": ">=16.14.0" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, + "node_modules/async-sema": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", + "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==" + }, + "node_modules/autoprefixer": { + "version": "10.4.24", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz", + "integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001766", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/b4a": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.3.tgz", + "integrity": "sha512-9+kwVx8QYvt3hPWnmb19tPnh38c6Nihz8Lx3t0g9+4GoIf3/fTgYwM4Z6NxgI+B9elLQA7mLE9PpqcWtOMRDiQ==", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", + "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", + "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", + "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", + "optional": true, + "dependencies": { + "bare-path": "^3.0.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "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==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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==" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c12": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.3.tgz", + "integrity": "sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q==", + "dependencies": { + "chokidar": "^5.0.0", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^17.2.3", + "exsolve": "^1.0.8", + "giget": "^2.0.0", + "jiti": "^2.6.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.0.0", + "pkg-types": "^2.3.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "*" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001767", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001767.tgz", + "integrity": "sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "engines": { + "node": ">=18" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/clipboardy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz", + "integrity": "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==", + "dependencies": { + "execa": "^8.0.1", + "is-wsl": "^3.1.0", + "is64bit": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "optional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/compatx": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/compatx/-/compatx-0.2.0.tgz", + "integrity": "sha512-6gLRNt4ygsi5NyMVhceOCFv14CIdDFN7fQjX1U4+47qVE/+kjPoXMK65KWK+dWxmFzMTuKazoQ9sch6pM0p5oA==" + }, + "node_modules/compress-commons": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", + "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", + "dependencies": { + "crc-32": "^1.2.0", + "crc32-stream": "^6.0.0", + "is-stream": "^2.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/compress-commons/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "peer": true + }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "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==" + }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==" + }, + "node_modules/copy-anything": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz", + "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==", + "dependencies": { + "is-what": "^5.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-paste": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/copy-paste/-/copy-paste-2.2.0.tgz", + "integrity": "sha512-jqSL4r9DSeiIvJZStLzY/sMLt9ToTM7RsK237lYOTG+KcbQJHGala3R1TUpa8h1p9adswVgIdV4qGbseVhL4lg==", + "dependencies": { + "iconv-lite": "^0.4.8" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", + "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/croner": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/croner/-/croner-9.1.0.tgz", + "integrity": "sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g==", + "engines": { + "node": ">=18.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.1.tgz", + "integrity": "sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA==", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "optional": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "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==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", + "optional": true + }, + "node_modules/cssnano": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.1.2.tgz", + "integrity": "sha512-HYOPBsNvoiFeR1eghKD5C3ASm64v9YVyJB4Ivnl2gqKoQYvjjN/G0rztvKQq8OxocUtC6sjqY8jwYngIB4AByA==", + "dependencies": { + "cssnano-preset-default": "^7.0.10", + "lilconfig": "^3.1.3" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/cssnano-preset-default": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.10.tgz", + "integrity": "sha512-6ZBjW0Lf1K1Z+0OKUAUpEN62tSXmYChXWi2NAA0afxEVsj9a+MbcB1l5qel6BHJHmULai2fCGRthCeKSFbScpA==", + "dependencies": { + "browserslist": "^4.27.0", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.1", + "postcss-calc": "^10.1.1", + "postcss-colormin": "^7.0.5", + "postcss-convert-values": "^7.0.8", + "postcss-discard-comments": "^7.0.5", + "postcss-discard-duplicates": "^7.0.2", + "postcss-discard-empty": "^7.0.1", + "postcss-discard-overridden": "^7.0.1", + "postcss-merge-longhand": "^7.0.5", + "postcss-merge-rules": "^7.0.7", + "postcss-minify-font-values": "^7.0.1", + "postcss-minify-gradients": "^7.0.1", + "postcss-minify-params": "^7.0.5", + "postcss-minify-selectors": "^7.0.5", + "postcss-normalize-charset": "^7.0.1", + "postcss-normalize-display-values": "^7.0.1", + "postcss-normalize-positions": "^7.0.1", + "postcss-normalize-repeat-style": "^7.0.1", + "postcss-normalize-string": "^7.0.1", + "postcss-normalize-timing-functions": "^7.0.1", + "postcss-normalize-unicode": "^7.0.5", + "postcss-normalize-url": "^7.0.1", + "postcss-normalize-whitespace": "^7.0.1", + "postcss-ordered-values": "^7.0.2", + "postcss-reduce-initial": "^7.0.5", + "postcss-reduce-transforms": "^7.0.1", + "postcss-svgo": "^7.1.0", + "postcss-unique-selectors": "^7.0.4" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/cssnano-utils": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.1.tgz", + "integrity": "sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" + }, + "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==" + }, + "node_modules/db0": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/db0/-/db0-0.3.4.tgz", + "integrity": "sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw==", + "peerDependencies": { + "@electric-sql/pglite": "*", + "@libsql/client": "*", + "better-sqlite3": "*", + "drizzle-orm": "*", + "mysql2": "*", + "sqlite3": "*" + }, + "peerDependenciesMeta": { + "@electric-sql/pglite": { + "optional": true + }, + "@libsql/client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "drizzle-orm": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "sqlite3": { + "optional": true + } + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "peer": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==" + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==" + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/devalue": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.2.tgz", + "integrity": "sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-prop": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-10.1.0.tgz", + "integrity": "sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q==", + "dependencies": { + "type-fest": "^5.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "optional": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "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==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/errx": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/errx/-/errx-0.1.0.tgz", + "integrity": "sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==" + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==" + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "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==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "peer": true, + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "peer": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dependencies": { + "bare-events": "^2.7.0" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==" + }, + "node_modules/externality": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/externality/-/externality-1.0.2.tgz", + "integrity": "sha512-LyExtJWKxtgVzmgtEHyQtLFpw1KFhQphF9nTG8TpAIVkiI/xQ3FJh75tRFLYl4hkn7BNIIdLJInuDAavX35pMw==", + "dependencies": { + "enhanced-resolve": "^5.14.1", + "mlly": "^1.3.0", + "pathe": "^1.1.1", + "ufo": "^1.1.2" + } + }, + "node_modules/externality/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" + }, + "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==", + "peer": true + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + }, + "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==", + "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==", + "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==", + "peer": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "peer": true + }, + "node_modules/fast-npm-meta": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fast-npm-meta/-/fast-npm-meta-0.4.8.tgz", + "integrity": "sha512-ybZVlDZ2PkO79dosM+6CLZfKWRH8MF0PiWlw8M4mVWJl8IEJrPfxYc7Tsu830Dwj/R96LKXfePGTSzKWbPJ08w==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/fast-xml-parser": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.4.tgz", + "integrity": "sha512-EFd6afGmXlCx8H8WTZHhAoDaWaGyuIBoZJ2mknrNxug+aZKjkp0a0dlars9Izl+jF+7Gu1/5f/2h68cQpe0IiA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "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==", + "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==", + "peer": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "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==", + "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==", + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "peer": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "peer": true + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "optional": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuse.js": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz", + "integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-port-please": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.2.0.tgz", + "integrity": "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==" + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/git-up": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-8.1.1.tgz", + "integrity": "sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==", + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^9.2.0" + } + }, + "node_modules/git-url-parse": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-16.1.0.tgz", + "integrity": "sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==", + "dependencies": { + "git-up": "^8.1.0" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "optional": true + }, + "node_modules/glob": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.1.tgz", + "integrity": "sha512-B7U/vJpE3DkJ5WXTgTpTRN63uV42DseiXXKMwG14LQBXmsdeIoHAPbU/MEo6II0k5ED74uc2ZGTC6MwHFQhF6w==", + "dependencies": { + "minimatch": "^10.1.2", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", + "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-16.1.0.tgz", + "integrity": "sha512-+A4Hq7m7Ze592k9gZRy4gJ27DrXRNnC1vPjxTt1qQxEY8RxagBkBxivkCwg7FxSTG0iLLEMaUx13oOr0R2/qcQ==", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.5", + "is-path-inside": "^4.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==" + }, + "node_modules/gzip-size": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-7.0.0.tgz", + "integrity": "sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/h3": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.5.tgz", + "integrity": "sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.5", + "defu": "^6.1.4", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-shutdown": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz", + "integrity": "sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/httpxy": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/httpxy/-/httpxy-0.1.7.tgz", + "integrity": "sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ==" + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-meta": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.2.2.tgz", + "integrity": "sha512-3MOLanc3sb3LNGWQl1RlQlNWURE5g32aUphrDyFeCsxBTk08iE3VNe4CwsUZ0Qs1X+EfX0+r29Sxdpza4B+yRA==" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "peer": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/impound": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/impound/-/impound-1.0.0.tgz", + "integrity": "sha512-8lAJ+1Arw2sMaZ9HE2ZmL5zOcMnt18s6+7Xqgq2aUVy4P1nlzAyPtzCDxsk51KVFwHEEdc6OWvUyqwHwhRYaug==", + "dependencies": { + "exsolve": "^1.0.5", + "mocked-exports": "^0.1.1", + "pathe": "^2.0.3", + "unplugin": "^2.3.2", + "unplugin-utils": "^0.2.4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "peer": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ioredis": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.9.2.tgz", + "integrity": "sha512-tAAg/72/VxOUW7RQSX1pIxJVucYKcjFjfvj60L57jrZpYCHC3XN0WCQ3sNYL4Gmvv+7GPvTAjc+KSdeNuE8oWQ==", + "dependencies": { + "@ioredis/commands": "1.5.0", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, + "node_modules/ipx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ipx/-/ipx-2.1.1.tgz", + "integrity": "sha512-XuM9FEGOT+/45mfAWZ5ykwkZ/oE7vWpd1iWjRffMWlwAYIRzb/xD6wZhQ4BzmPMX6Ov5dqK0wUyD0OEN9oWT6g==", + "optional": true, + "dependencies": { + "@fastify/accept-negotiator": "^1.1.0", + "citty": "^0.1.5", + "consola": "^3.2.3", + "defu": "^6.1.4", + "destr": "^2.0.2", + "etag": "^1.8.1", + "h3": "^1.10.0", + "image-meta": "^0.2.0", + "listhen": "^1.5.6", + "ofetch": "^1.3.3", + "pathe": "^1.1.2", + "sharp": "^0.32.6", + "svgo": "^3.2.0", + "ufo": "^1.3.2", + "unstorage": "^1.10.1", + "xss": "^1.0.14" + }, + "bin": { + "ipx": "bin/ipx.mjs" + } + }, + "node_modules/ipx/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "optional": true + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", + "optional": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-installed-globally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", + "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", + "dependencies": { + "global-directory": "^4.0.1", + "is-path-inside": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-ssh": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", + "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", + "dependencies": { + "protocols": "^2.0.1" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz", + "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is64bit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz", + "integrity": "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==", + "dependencies": { + "system-architecture": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "peer": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "peer": true + }, + "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==", + "peer": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-eslint-parser": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.2.tgz", + "integrity": "sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==", + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "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==", + "peer": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/knitwork": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/knitwork/-/knitwork-1.3.0.tgz", + "integrity": "sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==" + }, + "node_modules/launch-editor": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", + "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "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==", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/listhen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.9.0.tgz", + "integrity": "sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==", + "dependencies": { + "@parcel/watcher": "^2.4.1", + "@parcel/watcher-wasm": "^2.4.1", + "citty": "^0.1.6", + "clipboardy": "^4.0.0", + "consola": "^3.2.3", + "crossws": ">=0.2.0 <0.4.0", + "defu": "^6.1.4", + "get-port-please": "^3.1.2", + "h3": "^1.12.0", + "http-shutdown": "^1.2.2", + "jiti": "^2.1.2", + "mlly": "^1.7.1", + "node-forge": "^1.3.1", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "ufo": "^1.5.4", + "untun": "^0.1.3", + "uqr": "^0.1.2" + }, + "bin": { + "listen": "bin/listhen.mjs", + "listhen": "bin/listhen.mjs" + } + }, + "node_modules/listhen/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" + }, + "node_modules/local-pkg": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz", + "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.3.0", + "quansync": "^0.2.11" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "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==", + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "peer": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "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==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magic-string-ast": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-0.7.1.tgz", + "integrity": "sha512-ub9iytsEbT7Yw/Pd29mSo/cNQpaEu67zR1VVcXDiYjSFwzeBxNdTd0FMnSslLQXiRj8uGPzwsaoefrMD5XAmdw==", + "dependencies": { + "magic-string": "^0.30.17" + }, + "engines": { + "node": ">=16.14.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "optional": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "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==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", + "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", + "funding": [ + "https://github.com/sponsors/broofa" + ], + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "optional": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "optional": true + }, + "node_modules/mlly": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", + "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", + "dependencies": { + "acorn": "^8.15.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.1" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/mocked-exports": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/mocked-exports/-/mocked-exports-0.1.1.tgz", + "integrity": "sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA==" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz", + "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/nanotar": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nanotar/-/nanotar-0.2.0.tgz", + "integrity": "sha512-9ca1h0Xjvo9bEkE4UOxgAzLV0jHKe6LMaxo37ND2DAhhAtd0j8pR1Wxz+/goMrZO8AEZTWCmyaOsFI/W5AdpCQ==" + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "peer": true + }, + "node_modules/nitropack": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/nitropack/-/nitropack-2.13.1.tgz", + "integrity": "sha512-2dDj89C4wC2uzG7guF3CnyG+zwkZosPEp7FFBGHB3AJo11AywOolWhyQJFHDzve8COvGxJaqscye9wW2IrUsNw==", + "dependencies": { + "@cloudflare/kv-asset-handler": "^0.4.2", + "@rollup/plugin-alias": "^6.0.0", + "@rollup/plugin-commonjs": "^29.0.0", + "@rollup/plugin-inject": "^5.0.5", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-replace": "^6.0.3", + "@rollup/plugin-terser": "^0.4.4", + "@vercel/nft": "^1.2.0", + "archiver": "^7.0.1", + "c12": "^3.3.3", + "chokidar": "^5.0.0", + "citty": "^0.1.6", + "compatx": "^0.2.0", + "confbox": "^0.2.2", + "consola": "^3.4.2", + "cookie-es": "^2.0.0", + "croner": "^9.1.0", + "crossws": "^0.3.5", + "db0": "^0.3.4", + "defu": "^6.1.4", + "destr": "^2.0.5", + "dot-prop": "^10.1.0", + "esbuild": "^0.27.2", + "escape-string-regexp": "^5.0.0", + "etag": "^1.8.1", + "exsolve": "^1.0.8", + "globby": "^16.1.0", + "gzip-size": "^7.0.0", + "h3": "^1.15.5", + "hookable": "^5.5.3", + "httpxy": "^0.1.7", + "ioredis": "^5.9.1", + "jiti": "^2.6.1", + "klona": "^2.0.6", + "knitwork": "^1.3.0", + "listhen": "^1.9.0", + "magic-string": "^0.30.21", + "magicast": "^0.5.1", + "mime": "^4.1.0", + "mlly": "^1.8.0", + "node-fetch-native": "^1.6.7", + "node-mock-http": "^1.0.4", + "ofetch": "^1.5.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.0.0", + "pkg-types": "^2.3.0", + "pretty-bytes": "^7.1.0", + "radix3": "^1.1.2", + "rollup": "^4.55.1", + "rollup-plugin-visualizer": "^6.0.5", + "scule": "^1.3.0", + "semver": "^7.7.3", + "serve-placeholder": "^2.0.2", + "serve-static": "^2.2.1", + "source-map": "^0.7.6", + "std-env": "^3.10.0", + "ufo": "^1.6.3", + "ultrahtml": "^1.6.0", + "uncrypto": "^0.1.3", + "unctx": "^2.5.0", + "unenv": "^2.0.0-rc.24", + "unimport": "^5.6.0", + "unplugin-utils": "^0.3.1", + "unstorage": "^1.17.4", + "untyped": "^2.0.0", + "unwasm": "^0.5.3", + "youch": "^4.1.0-beta.13", + "youch-core": "^0.3.3" + }, + "bin": { + "nitro": "dist/cli/index.mjs", + "nitropack": "dist/cli/index.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "xml2js": "^0.6.2" + }, + "peerDependenciesMeta": { + "xml2js": { + "optional": true + } + } + }, + "node_modules/nitropack/node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/nitropack/node_modules/cookie-es": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.0.tgz", + "integrity": "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==" + }, + "node_modules/nitropack/node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/nitropack/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nitropack/node_modules/magicast": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.1.tgz", + "integrity": "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "source-map-js": "^1.2.1" + } + }, + "node_modules/nitropack/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/nitropack/node_modules/unplugin-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz", + "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==", + "dependencies": { + "pathe": "^2.0.3", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/node-abi": { + "version": "3.87.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz", + "integrity": "sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==", + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==" + }, + "node_modules/node-forge": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", + "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==" + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==" + }, + "node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nuxt": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-3.17.5.tgz", + "integrity": "sha512-HWTWpM1/RDcCt9DlnzrPcNvUmGqc62IhlZJvr7COSfnJq2lKYiBKIIesEaOF+57Qjw7TfLPc1DQVBNtxfKBxEw==", + "dependencies": { + "@nuxt/cli": "^3.25.1", + "@nuxt/devalue": "^2.0.2", + "@nuxt/devtools": "^2.4.1", + "@nuxt/kit": "3.17.5", + "@nuxt/schema": "3.17.5", + "@nuxt/telemetry": "^2.6.6", + "@nuxt/vite-builder": "3.17.5", + "@unhead/vue": "^2.0.10", + "@vue/shared": "^3.5.16", + "c12": "^3.0.4", + "chokidar": "^4.0.3", + "compatx": "^0.2.0", + "consola": "^3.4.2", + "cookie-es": "^2.0.0", + "defu": "^6.1.4", + "destr": "^2.0.5", + "devalue": "^5.1.1", + "errx": "^0.1.0", + "esbuild": "^0.25.5", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "exsolve": "^1.0.5", + "h3": "^1.15.3", + "hookable": "^5.5.3", + "ignore": "^7.0.5", + "impound": "^1.0.0", + "jiti": "^2.4.2", + "klona": "^2.0.6", + "knitwork": "^1.2.0", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "mocked-exports": "^0.1.1", + "nanotar": "^0.2.0", + "nitropack": "^2.11.12", + "nypm": "^0.6.0", + "ofetch": "^1.4.1", + "ohash": "^2.0.11", + "on-change": "^5.0.1", + "oxc-parser": "^0.72.2", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.1.0", + "radix3": "^1.1.2", + "scule": "^1.3.0", + "semver": "^7.7.2", + "std-env": "^3.9.0", + "strip-literal": "^3.0.0", + "tinyglobby": "0.2.14", + "ufo": "^1.6.1", + "ultrahtml": "^1.6.0", + "uncrypto": "^0.1.3", + "unctx": "^2.4.1", + "unimport": "^5.0.1", + "unplugin": "^2.3.5", + "unplugin-vue-router": "^0.12.0", + "unstorage": "^1.16.0", + "untyped": "^2.0.0", + "vue": "^3.5.16", + "vue-bundle-renderer": "^2.1.1", + "vue-devtools-stub": "^0.1.0", + "vue-router": "^4.5.1" + }, + "bin": { + "nuxi": "bin/nuxt.mjs", + "nuxt": "bin/nuxt.mjs" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0.0" + }, + "peerDependencies": { + "@parcel/watcher": "^2.1.0", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependenciesMeta": { + "@parcel/watcher": { + "optional": true + }, + "@types/node": { + "optional": true + } + } + }, + "node_modules/nuxt-site-config": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/nuxt-site-config/-/nuxt-site-config-3.2.19.tgz", + "integrity": "sha512-OUGfo8aJWbymheyb9S2u78ADX73C9qBf8u6BwEJiM82JBhvJTEduJBMlK8MWeh3x9NF+/YX4AYsY5hjfQE5jGA==", + "dependencies": { + "@nuxt/devtools-kit": "^3.1.1", + "@nuxt/kit": "^4.3.0", + "h3": "^1.15.5", + "nuxt-site-config-kit": "3.2.19", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "sirv": "^3.0.2", + "site-config-stack": "3.2.19", + "ufo": "^1.6.3" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/nuxt-site-config-kit": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/nuxt-site-config-kit/-/nuxt-site-config-kit-3.2.19.tgz", + "integrity": "sha512-5L9Dgw+QGnTLhVO7Km2oZU+wWllvNXLAFXUiZMX1dt37FKXX6v95ZKCVlFfnkSHQ+I2lmuUhFUpuORkOoVnU+g==", + "dependencies": { + "@nuxt/kit": "^4.3.0", + "pkg-types": "^2.3.0", + "site-config-stack": "3.2.19", + "std-env": "^3.10.0", + "ufo": "^1.6.3" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/nuxt-site-config-kit/node_modules/@nuxt/kit": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-4.3.0.tgz", + "integrity": "sha512-cD/0UU9RQmlnTbmyJTDyzN8f6CzpziDLv3tFQCnwl0Aoxt3KmFu4k/XA4Sogxqj7jJ/3cdX1kL+Lnsh34sxcQQ==", + "dependencies": { + "c12": "^3.3.3", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "errx": "^0.1.0", + "exsolve": "^1.0.8", + "ignore": "^7.0.5", + "jiti": "^2.6.1", + "klona": "^2.0.6", + "mlly": "^1.8.0", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "rc9": "^2.1.2", + "scule": "^1.3.0", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ufo": "^1.6.3", + "unctx": "^2.5.0", + "untyped": "^2.0.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/nuxt-site-config/node_modules/@nuxt/kit": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-4.3.0.tgz", + "integrity": "sha512-cD/0UU9RQmlnTbmyJTDyzN8f6CzpziDLv3tFQCnwl0Aoxt3KmFu4k/XA4Sogxqj7jJ/3cdX1kL+Lnsh34sxcQQ==", + "dependencies": { + "c12": "^3.3.3", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "errx": "^0.1.0", + "exsolve": "^1.0.8", + "ignore": "^7.0.5", + "jiti": "^2.6.1", + "klona": "^2.0.6", + "mlly": "^1.8.0", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "rc9": "^2.1.2", + "scule": "^1.3.0", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ufo": "^1.6.3", + "unctx": "^2.5.0", + "untyped": "^2.0.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/nuxt/node_modules/@nuxt/kit": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.17.5.tgz", + "integrity": "sha512-NdCepmA+S/SzgcaL3oYUeSlXGYO6BXGr9K/m1D0t0O9rApF8CSq/QQ+ja5KYaYMO1kZAEWH4s2XVcE3uPrrAVg==", + "dependencies": { + "c12": "^3.0.4", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "errx": "^0.1.0", + "exsolve": "^1.0.5", + "ignore": "^7.0.5", + "jiti": "^2.4.2", + "klona": "^2.0.6", + "knitwork": "^1.2.0", + "mlly": "^1.7.4", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "pkg-types": "^2.1.0", + "scule": "^1.3.0", + "semver": "^7.7.2", + "std-env": "^3.9.0", + "tinyglobby": "^0.2.14", + "ufo": "^1.6.1", + "unctx": "^2.4.1", + "unimport": "^5.0.1", + "untyped": "^2.0.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-darwin-arm64": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.72.3.tgz", + "integrity": "sha512-g6wgcfL7At4wHNHutl0NmPZTAju+cUSmSX5WGUMyTJmozRzhx8E9a2KL4rTqNJPwEpbCFrgC29qX9f4fpDnUpA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-darwin-x64": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.72.3.tgz", + "integrity": "sha512-pc+tplB2fd0AqdnXY90FguqSF2OwbxXwrMOLAMmsUiK4/ytr8Z/ftd49+d27GgvQJKeg2LfnIbskaQtY/j2tAA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-freebsd-x64": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.72.3.tgz", + "integrity": "sha512-igBR6rOvL8t5SBm1f1rjtWNsjB53HNrM3au582JpYzWxOqCjeA5Jlm9KZbjQJC+J8SPB9xyljM7G+6yGZ2UAkQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.72.3.tgz", + "integrity": "sha512-/izdr3wg7bK+2RmNhZXC2fQwxbaTH3ELeqdR+Wg4FiEJ/C7ZBIjfB0E734bZGgbDu+rbEJTBlbG77XzY0wRX/Q==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-arm-musleabihf": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.72.3.tgz", + "integrity": "sha512-Vz7C+qJb22HIFl3zXMlwvlTOR+MaIp5ps78060zsdeZh2PUGlYuUYkYXtGEjJV3kc8aKFj79XKqAY1EPG2NWQA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-arm64-gnu": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.72.3.tgz", + "integrity": "sha512-nomoMe2VpVxW767jhF+G3mDGmE0U6nvvi5nw9Edqd/5DIylQfq/lEGUWL7qITk+E72YXBsnwHtpRRlIAJOMyZg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-arm64-musl": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.72.3.tgz", + "integrity": "sha512-4DswiIK5dI7hFqcMKWtZ7IZnWkRuskh6poI1ad4gkY2p678NOGtl6uOGCCRlDmLOOhp3R27u4VCTzQ6zra977w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-riscv64-gnu": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.72.3.tgz", + "integrity": "sha512-R9GEiA4WFPGU/3RxAhEd6SaMdpqongGTvGEyTvYCS/MAQyXKxX/LFvc2xwjdvESpjIemmc/12aTTq6if28vHkQ==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-s390x-gnu": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.72.3.tgz", + "integrity": "sha512-/sEYJQMVqikZO8gK9VDPT4zXo9du3gvvu8jp6erMmW5ev+14PErWRypJjktp0qoTj+uq4MzXro0tg7U+t5hP1w==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-x64-gnu": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.72.3.tgz", + "integrity": "sha512-hlyljEZ0sMPKJQCd5pxnRh2sAf/w+Ot2iJecgV9Hl3brrYrYCK2kofC0DFaJM3NRmG/8ZB3PlxnSRSKZTocwCw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-linux-x64-musl": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.72.3.tgz", + "integrity": "sha512-T17S8ORqAIq+YDFMvLfbNdAiYHYDM1+sLMNhesR5eWBtyTHX510/NbgEvcNemO9N6BNR7m4A9o+q468UG+dmbg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-wasm32-wasi": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.72.3.tgz", + "integrity": "sha512-x0Ojn/jyRUk6MllvVB/puSvI2tczZBIYweKVYHNv1nBatjPRiqo+6/uXiKrZwSfGLkGARrKkTuHSa5RdZBMOdA==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.10" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-win32-arm64-msvc": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.72.3.tgz", + "integrity": "sha512-kRVAl87ugRjLZTm9vGUyiXU50mqxLPHY81rgnZUP1HtNcqcmTQtM/wUKQL2UdqvhA6xm6zciqzqCgJfU+RW8uA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-parser/binding-win32-x64-msvc": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.72.3.tgz", + "integrity": "sha512-vpVdoGAP5iGE5tIEPJgr7FkQJZA+sKjMkg5x1jarWJ1nnBamfGsfYiZum4QjCfW7jb+pl42rHVSS3lRmMPcyrQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/nuxt/node_modules/@oxc-project/types": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.72.3.tgz", + "integrity": "sha512-CfAC4wrmMkUoISpQkFAIfMVvlPfQV3xg7ZlcqPXPOIMQhdKIId44G8W0mCPgtpWdFFAyJ+SFtiM+9vbyCkoVng==", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/nuxt/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/nuxt/node_modules/cookie-es": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.0.tgz", + "integrity": "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==" + }, + "node_modules/nuxt/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nuxt/node_modules/oxc-parser": { + "version": "0.72.3", + "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.72.3.tgz", + "integrity": "sha512-JYQeJKDcUTTZ/uTdJ+fZBGFjAjkLD1h0p3Tf44ZYXRcoMk+57d81paNPFAAwzrzzqhZmkGvKKXDxwyhJXYZlpg==", + "dependencies": { + "@oxc-project/types": "^0.72.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-parser/binding-darwin-arm64": "0.72.3", + "@oxc-parser/binding-darwin-x64": "0.72.3", + "@oxc-parser/binding-freebsd-x64": "0.72.3", + "@oxc-parser/binding-linux-arm-gnueabihf": "0.72.3", + "@oxc-parser/binding-linux-arm-musleabihf": "0.72.3", + "@oxc-parser/binding-linux-arm64-gnu": "0.72.3", + "@oxc-parser/binding-linux-arm64-musl": "0.72.3", + "@oxc-parser/binding-linux-riscv64-gnu": "0.72.3", + "@oxc-parser/binding-linux-s390x-gnu": "0.72.3", + "@oxc-parser/binding-linux-x64-gnu": "0.72.3", + "@oxc-parser/binding-linux-x64-musl": "0.72.3", + "@oxc-parser/binding-wasm32-wasi": "0.72.3", + "@oxc-parser/binding-win32-arm64-msvc": "0.72.3", + "@oxc-parser/binding-win32-x64-msvc": "0.72.3" + } + }, + "node_modules/nuxt/node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" + }, + "node_modules/nuxt/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/nuxt/node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/nypm": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.4.tgz", + "integrity": "sha512-1TvCKjZyyklN+JJj2TS3P4uSQEInrM/HkkuSXsEzm1ApPgBffOn8gFguNnZf07r/1X6vlryfIqMUkJKQMzlZiw==", + "dependencies": { + "citty": "^0.2.0", + "pathe": "^2.0.3", + "tinyexec": "^1.0.2" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/nypm/node_modules/citty": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.0.tgz", + "integrity": "sha512-8csy5IBFI2ex2hTVpaHN2j+LNE199AgiI7y4dMintrr8i0lQiFn+0AWMZrWdHKIgMOer65f8IThysYhoReqjWA==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==" + }, + "node_modules/on-change": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/on-change/-/on-change-5.0.1.tgz", + "integrity": "sha512-n7THCP7RkyReRSLkJb8kUWoNsxUIBxTkIp3JKno+sEz6o/9AJ3w3P9fzQkITEkMwyTKJjZciF3v/pVoouxZZMg==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/on-change?sponsor=1" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "optional": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "peer": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/oxc-parser": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.70.0.tgz", + "integrity": "sha512-YbqTuQDDIYwQF/li0VFK5uTbmHV4jWFeQQONkPdf77vz+JMiq7SusmcSVZ4hBrGM+3WyLdKH5S7spnvz4XVVzQ==", + "dependencies": { + "@oxc-project/types": "^0.70.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-parser/binding-darwin-arm64": "0.70.0", + "@oxc-parser/binding-darwin-x64": "0.70.0", + "@oxc-parser/binding-freebsd-x64": "0.70.0", + "@oxc-parser/binding-linux-arm-gnueabihf": "0.70.0", + "@oxc-parser/binding-linux-arm-musleabihf": "0.70.0", + "@oxc-parser/binding-linux-arm64-gnu": "0.70.0", + "@oxc-parser/binding-linux-arm64-musl": "0.70.0", + "@oxc-parser/binding-linux-riscv64-gnu": "0.70.0", + "@oxc-parser/binding-linux-s390x-gnu": "0.70.0", + "@oxc-parser/binding-linux-x64-gnu": "0.70.0", + "@oxc-parser/binding-linux-x64-musl": "0.70.0", + "@oxc-parser/binding-wasm32-wasi": "0.70.0", + "@oxc-parser/binding-win32-arm64-msvc": "0.70.0", + "@oxc-parser/binding-win32-x64-msvc": "0.70.0" + } + }, + "node_modules/oxc-parser/node_modules/@oxc-project/types": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.70.0.tgz", + "integrity": "sha512-ngyLUpUjO3dpqygSRQDx7nMx8+BmXbWOU4oIwTJFV2MVIDG7knIZwgdwXlQWLg3C3oxg1lS7ppMtPKqKFb7wzw==", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "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==", + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "peer": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-path": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", + "integrity": "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==", + "dependencies": { + "protocols": "^2.0.0" + } + }, + "node_modules/parse-url": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-9.2.0.tgz", + "integrity": "sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==", + "dependencies": { + "@types/parse-path": "^7.0.0", + "parse-path": "^7.0.0" + }, + "engines": { + "node": ">=14.13.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", + "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==" + }, + "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==" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinia": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz", + "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", + "peer": true, + "dependencies": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia-plugin-persistedstate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.2.3.tgz", + "integrity": "sha512-Cm819WBj/s5K5DGw55EwbXDtx+EZzM0YR5AZbq9XE3u0xvXwvX2JnWoFpWIcdzISBHqy9H1UiSIUmXyXqWsQRQ==", + "peerDependencies": { + "pinia": "^2.0.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.1.tgz", + "integrity": "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==", + "dependencies": { + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12 || ^20.9 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.38" + } + }, + "node_modules/postcss-colormin": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.5.tgz", + "integrity": "sha512-ekIBP/nwzRWhEMmIxHHbXHcMdzd1HIUzBECaj5KEdLz9DVP2HzT065sEhvOx1dkLjYW7jyD0CngThx6bpFi2fA==", + "dependencies": { + "browserslist": "^4.27.0", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-convert-values": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.8.tgz", + "integrity": "sha512-+XNKuPfkHTCEo499VzLMYn94TiL3r9YqRE3Ty+jP7UX4qjewUONey1t7CG21lrlTLN07GtGM8MqFVp86D4uKJg==", + "dependencies": { + "browserslist": "^4.27.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-comments": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.5.tgz", + "integrity": "sha512-IR2Eja8WfYgN5n32vEGSctVQ1+JARfu4UH8M7bgGh1bC+xI/obsPJXaBpQF7MAByvgwZinhpHpdrmXtvVVlKcQ==", + "dependencies": { + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.2.tgz", + "integrity": "sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-empty": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.1.tgz", + "integrity": "sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz", + "integrity": "sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-merge-longhand": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz", + "integrity": "sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.5" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-merge-rules": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.7.tgz", + "integrity": "sha512-njWJrd/Ms6XViwowaaCc+/vqhPG3SmXn725AGrnl+BgTuRPEacjiLEaGq16J6XirMJbtKkTwnt67SS+e2WGoew==", + "dependencies": { + "browserslist": "^4.27.0", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.1", + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.1.tgz", + "integrity": "sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.1.tgz", + "integrity": "sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==", + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-params": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.5.tgz", + "integrity": "sha512-FGK9ky02h6Ighn3UihsyeAH5XmLEE2MSGH5Tc4tXMFtEDx7B+zTG6hD/+/cT+fbF7PbYojsmmWjyTwFwW1JKQQ==", + "dependencies": { + "browserslist": "^4.27.0", + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.5.tgz", + "integrity": "sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==", + "dependencies": { + "cssesc": "^3.0.0", + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz", + "integrity": "sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.1.tgz", + "integrity": "sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.1.tgz", + "integrity": "sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.1.tgz", + "integrity": "sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-string": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.1.tgz", + "integrity": "sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.1.tgz", + "integrity": "sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.5.tgz", + "integrity": "sha512-X6BBwiRxVaFHrb2WyBMddIeB5HBjJcAaUHyhLrM2FsxSq5TFqcHSsK7Zu1otag+o0ZphQGJewGH1tAyrD0zX1Q==", + "dependencies": { + "browserslist": "^4.27.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-url": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.1.tgz", + "integrity": "sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.1.tgz", + "integrity": "sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-ordered-values": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz", + "integrity": "sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==", + "dependencies": { + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.5.tgz", + "integrity": "sha512-RHagHLidG8hTZcnr4FpyMB2jtgd/OcyAazjMhoy5qmWJOx1uxKh4ntk0Pb46ajKM0rkf32lRH4C8c9qQiPR6IA==", + "dependencies": { + "browserslist": "^4.27.0", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.1.tgz", + "integrity": "sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.1.0.tgz", + "integrity": "sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^4.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==" + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.4.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.4.tgz", + "integrity": "sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==", + "dependencies": { + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prebuild-install/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "optional": true + }, + "node_modules/prebuild-install/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prebuild-install/node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/prebuild-install/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-7.1.0.tgz", + "integrity": "sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/protocols": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", + "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==" + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ] + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "optional": true + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" + }, + "node_modules/rollup": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-visualizer": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-6.0.5.tgz", + "integrity": "sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg==", + "dependencies": { + "open": "^8.0.0", + "picomatch": "^4.0.2", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "rolldown": "1.x || ^1.0.0-beta", + "rollup": "2.x || 3.x || 4.x" + }, + "peerDependenciesMeta": { + "rolldown": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-placeholder": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/serve-placeholder/-/serve-placeholder-2.0.2.tgz", + "integrity": "sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==", + "dependencies": { + "defu": "^6.1.4" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sharp": { + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.2", + "node-addon-api": "^6.1.0", + "prebuild-install": "^7.1.1", + "semver": "^7.5.4", + "simple-get": "^4.0.1", + "tar-fs": "^3.0.4", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/sharp/node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "optional": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-git": { + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz", + "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==", + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", + "optional": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/site-config-stack": { + "version": "3.2.19", + "resolved": "https://registry.npmjs.org/site-config-stack/-/site-config-stack-3.2.19.tgz", + "integrity": "sha512-DJLEbH3WePmwdSDUCKCZTCc6xvY/Uuy3Qk5YG+5z5W7yMQbfRHRlEYhJbh4E431/V4aMROXH8lw5x8ETB71Nig==", + "dependencies": { + "ufo": "^1.6.3" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "vue": "^3" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smob": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", + "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/srvx": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/srvx/-/srvx-0.10.1.tgz", + "integrity": "sha512-A//xtfak4eESMWWydSRFUVvCTQbSwivnGCEf8YGPe2eHU0+Z6znfUTCPF0a7oV3sObSOcrXHlL6Bs9vVctfXdg==", + "bin": { + "srvx": "bin/srvx.mjs" + }, + "engines": { + "node": ">=20.16.0" + } + }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==" + }, + "node_modules/streamx": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==" + }, + "node_modules/strnum": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ] + }, + "node_modules/structured-clone-es": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/structured-clone-es/-/structured-clone-es-1.0.0.tgz", + "integrity": "sha512-FL8EeKFFyNQv5cMnXI31CIMCsFarSVI2bF0U0ImeNE3g/F1IvJQyqzOXxPBRXiwQfyBTlbNe88jh1jFW0O/jiQ==" + }, + "node_modules/stylehacks": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.7.tgz", + "integrity": "sha512-bJkD0JkEtbRrMFtwgpJyBbFIwfDDONQ1Ov3sDLZQP8HuJ73kBOyx66H4bOcAbVWmnfLdvQ0AJwXxOMkpujcO6g==", + "dependencies": { + "browserslist": "^4.27.0", + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/superjson": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz", + "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", + "dependencies": { + "copy-anything": "^4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "optional": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "optional": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/system-architecture": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", + "integrity": "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/tailwindcss/node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tailwindcss/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/tailwindcss/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tailwindcss/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", + "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar-fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", + "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", + "optional": true, + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "engines": { + "node": ">=18" + } + }, + "node_modules/terser": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tosource": { + "version": "2.0.0-alpha.3", + "resolved": "https://registry.npmjs.org/tosource/-/tosource-2.0.0-alpha.3.tgz", + "integrity": "sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==", + "engines": { + "node": ">=10" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "optional": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "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==", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.4.3.tgz", + "integrity": "sha512-AXSAQJu79WGc79/3e9/CR77I/KQgeY1AhNvcShIH4PTcGYyC4xv6H4R4AUOwkPS5799KlVDAu8zExeCrkGquiA==", + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==" + }, + "node_modules/unctx": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/unctx/-/unctx-2.5.0.tgz", + "integrity": "sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg==", + "dependencies": { + "acorn": "^8.15.0", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21", + "unplugin": "^2.3.11" + } + }, + "node_modules/unenv": { + "version": "2.0.0-rc.24", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz", + "integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==", + "dependencies": { + "pathe": "^2.0.3" + } + }, + "node_modules/unhead": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unhead/-/unhead-2.1.2.tgz", + "integrity": "sha512-vSihrxyb+zsEUfEbraZBCjdE0p/WSoc2NGDrpwwSNAwuPxhYK1nH3eegf02IENLpn1sUhL8IoO84JWmRQ6tILA==", + "dependencies": { + "hookable": "^6.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/unhead/node_modules/hookable": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.0.1.tgz", + "integrity": "sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw==" + }, + "node_modules/unicorn-magic": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", + "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unimport": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-5.6.0.tgz", + "integrity": "sha512-8rqAmtJV8o60x46kBAJKtHpJDJWkA2xcBqWKPI14MgUb05o1pnpnCnXSxedUXyeq7p8fR5g3pTo2BaswZ9lD9A==", + "dependencies": { + "acorn": "^8.15.0", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "local-pkg": "^1.1.2", + "magic-string": "^0.30.21", + "mlly": "^1.8.0", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "pkg-types": "^2.3.0", + "scule": "^1.3.0", + "strip-literal": "^3.1.0", + "tinyglobby": "^0.2.15", + "unplugin": "^2.3.11", + "unplugin-utils": "^0.3.1" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unimport/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unimport/node_modules/unplugin-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz", + "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==", + "dependencies": { + "pathe": "^2.0.3", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/unplugin": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz", + "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unplugin-utils": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.2.5.tgz", + "integrity": "sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==", + "dependencies": { + "pathe": "^2.0.3", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/unplugin-vue-router": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.12.0.tgz", + "integrity": "sha512-xjgheKU0MegvXQcy62GVea0LjyOdMxN0/QH+ijN29W62ZlMhG7o7K+0AYqfpprvPwpWtuRjiyC5jnV2SxWye2w==", + "dependencies": { + "@babel/types": "^7.26.8", + "@vue-macros/common": "^1.16.1", + "ast-walker-scope": "^0.6.2", + "chokidar": "^4.0.3", + "fast-glob": "^3.3.3", + "json5": "^2.2.3", + "local-pkg": "^1.0.0", + "magic-string": "^0.30.17", + "micromatch": "^4.0.8", + "mlly": "^1.7.4", + "pathe": "^2.0.2", + "scule": "^1.3.0", + "unplugin": "^2.2.0", + "unplugin-utils": "^0.2.3", + "yaml": "^2.7.0" + }, + "peerDependencies": { + "vue-router": "^4.4.0" + }, + "peerDependenciesMeta": { + "vue-router": { + "optional": true + } + } + }, + "node_modules/unplugin-vue-router/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/unplugin-vue-router/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/unstorage": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.4.tgz", + "integrity": "sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.5", + "lru-cache": "^11.2.0", + "node-fetch-native": "^1.6.7", + "ofetch": "^1.5.1", + "ufo": "^1.6.3" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6 || ^7 || ^8", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/functions": "^2.2.12 || ^3.0.0", + "@vercel/kv": "^1 || ^2 || ^3", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/functions": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/unstorage/node_modules/lru-cache": { + "version": "11.2.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", + "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/untun": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/untun/-/untun-0.1.3.tgz", + "integrity": "sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==", + "dependencies": { + "citty": "^0.1.5", + "consola": "^3.2.3", + "pathe": "^1.1.1" + }, + "bin": { + "untun": "bin/untun.mjs" + } + }, + "node_modules/untun/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" + }, + "node_modules/untyped": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/untyped/-/untyped-2.0.0.tgz", + "integrity": "sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==", + "dependencies": { + "citty": "^0.1.6", + "defu": "^6.1.4", + "jiti": "^2.4.2", + "knitwork": "^1.2.0", + "scule": "^1.3.0" + }, + "bin": { + "untyped": "dist/cli.mjs" + } + }, + "node_modules/unwasm": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/unwasm/-/unwasm-0.5.3.tgz", + "integrity": "sha512-keBgTSfp3r6+s9ZcSma+0chwxQdmLbB5+dAD9vjtB21UTMYuKAxHXCU1K2CbCtnP09EaWeRvACnXk0EJtUx+hw==", + "dependencies": { + "exsolve": "^1.0.8", + "knitwork": "^1.3.0", + "magic-string": "^0.30.21", + "mlly": "^1.8.0", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uqr": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz", + "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "peer": true, + "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==" + }, + "node_modules/vite": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-dev-rpc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vite-dev-rpc/-/vite-dev-rpc-1.1.0.tgz", + "integrity": "sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==", + "dependencies": { + "birpc": "^2.4.0", + "vite-hot-client": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0" + } + }, + "node_modules/vite-hot-client": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-2.1.0.tgz", + "integrity": "sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-plugin-checker": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.9.3.tgz", + "integrity": "sha512-Tf7QBjeBtG7q11zG0lvoF38/2AVUzzhMNu+Wk+mcsJ00Rk/FpJ4rmUviVJpzWkagbU13cGXvKpt7CMiqtxVTbQ==", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "chokidar": "^4.0.3", + "npm-run-path": "^6.0.0", + "picocolors": "^1.1.1", + "picomatch": "^4.0.2", + "strip-ansi": "^7.1.0", + "tiny-invariant": "^1.3.3", + "tinyglobby": "^0.2.13", + "vscode-uri": "^3.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "peerDependencies": { + "@biomejs/biome": ">=1.7", + "eslint": ">=7", + "meow": "^13.2.0", + "optionator": "^0.9.4", + "stylelint": ">=16", + "typescript": "*", + "vite": ">=2.0.0", + "vls": "*", + "vti": "*", + "vue-tsc": "~2.2.10" + }, + "peerDependenciesMeta": { + "@biomejs/biome": { + "optional": true + }, + "eslint": { + "optional": true + }, + "meow": { + "optional": true + }, + "optionator": { + "optional": true + }, + "stylelint": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vls": { + "optional": true + }, + "vti": { + "optional": true + }, + "vue-tsc": { + "optional": true + } + } + }, + "node_modules/vite-plugin-checker/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/vite-plugin-checker/node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-checker/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-checker/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/vite-plugin-checker/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-inspect": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-11.3.3.tgz", + "integrity": "sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==", + "dependencies": { + "ansis": "^4.1.0", + "debug": "^4.4.1", + "error-stack-parser-es": "^1.0.5", + "ohash": "^2.0.11", + "open": "^10.2.0", + "perfect-debounce": "^2.0.0", + "sirv": "^3.0.1", + "unplugin-utils": "^0.3.0", + "vite-dev-rpc": "^1.1.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-inspect/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-inspect/node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-inspect/node_modules/unplugin-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz", + "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==", + "dependencies": { + "pathe": "^2.0.3", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/vite-plugin-vue-tracer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-tracer/-/vite-plugin-vue-tracer-1.2.0.tgz", + "integrity": "sha512-a9Z/TLpxwmoE9kIcv28wqQmiszM7ec4zgndXWEsVD/2lEZLRGzcg7ONXmplzGF/UP5W59QNtS809OdywwpUWQQ==", + "dependencies": { + "estree-walker": "^3.0.3", + "exsolve": "^1.0.8", + "magic-string": "^0.30.21", + "pathe": "^2.0.3", + "source-map-js": "^1.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0", + "vue": "^3.5.0" + } + }, + "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==" + }, + "node_modules/vue": { + "version": "3.5.27", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.27.tgz", + "integrity": "sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==", + "dependencies": { + "@vue/compiler-dom": "3.5.27", + "@vue/compiler-sfc": "3.5.27", + "@vue/runtime-dom": "3.5.27", + "@vue/server-renderer": "3.5.27", + "@vue/shared": "3.5.27" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-bundle-renderer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vue-bundle-renderer/-/vue-bundle-renderer-2.2.0.tgz", + "integrity": "sha512-sz/0WEdYH1KfaOm0XaBmRZOWgYTEvUDt6yPYaUzl4E52qzgWLlknaPPTTZmp6benaPTlQAI/hN1x3tAzZygycg==", + "dependencies": { + "ufo": "^1.6.1" + } + }, + "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, + "peer": true, + "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/vue-devtools-stub": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vue-devtools-stub/-/vue-devtools-stub-0.1.0.tgz", + "integrity": "sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==" + }, + "node_modules/vue-i18n": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-10.0.8.tgz", + "integrity": "sha512-mIjy4utxMz9lMMo6G9vYePv7gUFt4ztOMhY9/4czDJxZ26xPeJ49MAGa9wBAE3XuXbYCrtVPmPxNjej7JJJkZQ==", + "deprecated": "v9 and v10 no longer supported. please migrate to v11. about maintenance status, see https://vue-i18n.intlify.dev/guide/maintenance.html", + "dependencies": { + "@intlify/core-base": "10.0.8", + "@intlify/shared": "10.0.8", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "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==", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.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==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "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==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "optional": true + }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xss": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz", + "integrity": "sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==", + "optional": true, + "dependencies": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "bin": { + "xss": "bin/xss" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/xss/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "optional": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yaml-eslint-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.3.2.tgz", + "integrity": "sha512-odxVsHAkZYYglR30aPYRY4nUGJnoJ2y1ww2HDvZALo0BDETv9kWbi16J52eHs+PWRNmF4ub6nZqfVOeesOvntg==", + "dependencies": { + "eslint-visitor-keys": "^3.0.0", + "yaml": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/youch": { + "version": "4.1.0-beta.13", + "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.13.tgz", + "integrity": "sha512-3+AG1Xvt+R7M7PSDudhbfbwiyveW6B8PLBIwTyEC598biEYIjHhC89i6DBEvR0EZUjGY3uGSnC429HpIa2Z09g==", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@poppinss/dumper": "^0.6.5", + "@speed-highlight/core": "^1.2.9", + "cookie-es": "^2.0.0", + "youch-core": "^0.3.3" + } + }, + "node_modules/youch-core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz", + "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==", + "dependencies": { + "@poppinss/exception": "^1.2.2", + "error-stack-parser-es": "^1.0.5" + } + }, + "node_modules/youch/node_modules/cookie-es": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.0.tgz", + "integrity": "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==" + }, + "node_modules/zip-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", + "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", + "dependencies": { + "archiver-utils": "^5.0.0", + "compress-commons": "^6.0.2", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..9d91a13 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,26 @@ +{ + "name": "skycel-frontend", + "private": true, + "type": "module", + "scripts": { + "build": "nuxt build", + "dev": "nuxt dev", + "generate": "nuxt generate", + "preview": "nuxt preview", + "postinstall": "nuxt prepare" + }, + "dependencies": { + "@nuxt/image": "^1.9.0", + "@nuxtjs/i18n": "^9.0.0", + "@nuxtjs/sitemap": "^7.2.0", + "@pinia/nuxt": "^0.9.0", + "nuxt": "^3.16.0", + "pinia-plugin-persistedstate": "^3.2.0" + }, + "devDependencies": { + "autoprefixer": "^10.4.24", + "postcss": "^8.5.6", + "tailwindcss": "^3.4.19", + "typescript": "^5.7.0" + } +} diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 0000000..d663814 --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,62 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + './app/**/*.{vue,js,ts}', + './components/**/*.{vue,js,ts}', + './layouts/**/*.{vue,js,ts}', + './pages/**/*.{vue,js,ts}', + ], + theme: { + extend: { + colors: { + 'sky-dark': { + DEFAULT: '#0a0e1a', + 50: '#1a1f2e', + 100: '#151a28', + 200: '#10141f', + 300: '#0c1019', + 400: '#080c14', + 500: '#0a0e1a', + 600: '#060810', + 700: '#04060c', + 800: '#020408', + 900: '#010204', + }, + 'sky-accent': { + DEFAULT: '#fa784f', + hover: '#fb8c68', + active: '#f96436', + 50: '#fff4f0', + 100: '#ffe8e0', + 200: '#ffd1c1', + 300: '#ffb9a2', + 400: '#fca283', + 500: '#fa784f', + 600: '#e86940', + 700: '#d65a31', + 800: '#c44b22', + 900: '#b23c13', + }, + 'sky-text': { + DEFAULT: '#f5f0e6', + muted: '#b8b3a8', + 50: '#fdfcfa', + 100: '#fbf9f5', + 200: '#f7f3eb', + 300: '#f5f0e6', + 400: '#e8e3d9', + 500: '#dbd6cc', + 600: '#cec9bf', + 700: '#c1bcb2', + 800: '#b4afa5', + 900: '#a7a298', + }, + }, + fontFamily: { + 'narrative': ['Merriweather', 'Georgia', 'serif'], + 'ui': ['Inter', 'system-ui', 'sans-serif'], + }, + }, + }, + plugins: [], +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..4b34df1 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./.nuxt/tsconfig.json" +}