diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md index 0c5ed2c42..0f3093db2 100644 --- a/.github/CODE_OF_CONDUCT.md +++ b/.github/CODE_OF_CONDUCT.md @@ -8,25 +8,23 @@ This isn’t an exhaustive list of things that you can’t do. Rather, take it i This code of conduct applies to all spaces managed by the TorrentPier project or torrentpier. This includes IRC, the mailing lists, the issue tracker, DSF events, and any other forums created by the project team which the community uses for communication. In addition, violations of this code outside these spaces may affect a person's ability to participate within them. -If you believe someone is violating the code of conduct, we ask that you report it by emailing [admin@torrentpier.com](mailto:admin@torrentpier.com). For more details please see our [Reporting guidelines](https://docs.torrentpier.com/) +If you believe someone is violating the code of conduct, we ask that you report it by emailing [admin@torrentpier.com](mailto:admin@torrentpier.com). For more details please see our [documentation](https://docs.torrentpier.com/) - **Be friendly and patient.** - **Be welcoming.** We strive to be a community that welcomes and supports people of all backgrounds and identities. This includes, but is not limited to members of any race, ethnicity, culture, national origin, colour, immigration status, social and economic class, educational level, sex, sexual orientation, gender identity and expression, age, size, family status, political belief, religion, and mental and physical ability. - **Be considerate.** Your work will be used by other people, and you in turn will depend on the work of others. Any decision you take will affect users and colleagues, and you should take those consequences into account when making decisions. Remember that we're a world-wide community, so you might not be communicating in someone else's primary language. - **Be respectful.** Not all of us will agree all the time, but disagreement is no excuse for poor behavior and poor manners. We might all experience some frustration now and then, but we cannot allow that frustration to turn into a personal attack. It’s important to remember that a community where people feel uncomfortable or threatened is not a productive one. Members of the TorrentPier community should be respectful when dealing with other members as well as with people outside the TorrentPier community. - **Be careful in the words that you choose.** We are a community of professionals, and we conduct ourselves professionally. Be kind to others. Do not insult or put down other participants. Harassment and other exclusionary behavior aren't acceptable. This includes, but is not limited to: - - Violent threats or language directed against another person. - - Discriminatory jokes and language. - - Posting sexually explicit or violent material. - - Posting (or threatening to post) other people's personally identifying information ("doxing"). - - Personal insults, especially those using racist or sexist terms. - - Unwelcome sexual attention. - - Advocating for, or encouraging, any of the above behavior. - - Repeated harassment of others. In general, if someone asks you to stop, then stop. + - Violent threats or language directed against another person. + - Discriminatory jokes and language. + - Posting sexually explicit or violent material. + - Posting (or threatening to post) other people's personally identifying information ("doxing"). + - Personal insults, especially those using racist or sexist terms. + - Unwelcome sexual attention. + - Advocating for, or encouraging, any of the above behavior. + - Repeated harassment of others. In general, if someone asks you to stop, then stop. - **When we disagree, try to understand why.** Disagreements, both social and technical, happen all the time and TorrentPier is no exception. It is important that we resolve disagreements and differing views constructively. Remember that we’re different. The strength of TorrentPier comes from its varied community, people from a wide range of backgrounds. Different people have different perspectives on issues. Being unable to understand why someone holds a viewpoint doesn’t mean that they’re wrong. Don’t forget that it is human to err and blaming each other doesn’t get us anywhere. Instead, focus on helping to resolve issues and learning from mistakes. -Original text courtesy of the [Speak Up! project](http://web.archive.org/web/20141109123859/http://speakup.io/coc.html). - ## Questions? -If you have questions, please see [Faq](https://docs.torrentpier.com/). If that doesn't answer your questions, feel free to [contact us](mailto:admin@torrentpier.com). +If you have questions, please see [documentation](https://docs.torrentpier.com/). If that doesn't answer your questions, feel free to [contact us](mailto:admin@torrentpier.com). diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 000000000..2f6386f4e --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,56 @@ +# Security Policy + +## Supported Versions + +We release security updates for the following versions: + +| Version | Supported | +|---------|----------------------| +| 3.x | ✅ Active development | +| 2.8.x | ✅ Supported | +| <2.8 | ❌ Not supported | + +## Reporting a Vulnerability + +Please **do not file public issues or discussions** if you’ve discovered a potential security vulnerability. + +Instead, use GitHub's private security advisory form: + +👉 **[New Security Advisory](https://github.com/torrentpier/torrentpier/security/advisories/new)** + +Include the following details (if possible): + +- A clear description of the vulnerability +- Steps to reproduce the issue +- Affected versions or commit hashes +- The potential impact (e.g. RCE, XSS, privilege escalation) +- Any suggested remediation (optional) + +We typically respond within **72 hours**, and address validated issues within **30 days**. + +## Alternative Reporting (via Email) + +You may also contact us privately via email at: + +📧 **admin@torrentpier.com** + +## Disclosure Policy + +After verification and fix: + +1. A patch will be released. +2. A GitHub Security Advisory will be published. +3. A CVE will be requested if the severity justifies it. +4. Credit will be given to the reporter (unless anonymity is requested). + +We follow [responsible disclosure principles](https://securitytxt.org/) and the [OpenSSF guidelines](https://openssf.org/). + +## User Security Best Practices + +If you self-host this project: + +- Always keep up with releases +- Use automated scanners like `npm audit`, `trivy`, or `snyk` +- Do not expose admin tools to public networks +- Use HTTPS and strong authentication +- Monitor logs and set up alerts for anomalies diff --git a/legacy/.env.example b/legacy/.env.example deleted file mode 100644 index c0776eda9..000000000 --- a/legacy/.env.example +++ /dev/null @@ -1,13 +0,0 @@ -# Common params -TP_HOST=example.com -TP_PORT=80 -APP_ENV=production -APP_CRON_ENABLED=true -APP_DEMO_MODE=false - -# Database credentials -DB_HOST=localhost -DB_PORT=3306 -DB_DATABASE=torrentpier -DB_USERNAME=root -DB_PASSWORD=secret diff --git a/legacy/.gitignore b/legacy/.gitignore deleted file mode 100644 index dd0e1f365..000000000 --- a/legacy/.gitignore +++ /dev/null @@ -1,47 +0,0 @@ -### IDE ### -.idea -.vscode - -### TorrentPier ### -*.log -install.php_* -composer-setup.php -.env -.php_cs.cache -data/avatars -data/uploads -internal_data/atom -internal_data/cache -internal_data/log -internal_data/updater.json -sitemap -internal_data/triggers -library/config.local.php -vendor - -### Archives ### -*.phar -*.rar -*.tar -*.gz -*.zip -*.7z -*.torrent -*.pak - -### Windows ### -Thumbs.db -Desktop.ini -$RECYCLE.BIN/ -*.lnk -*.bat - -### OSX ### -.DS_Store -.AppleDouble -.LSOverride -._* -.Spotlight-V100 -.Trashes -*.orig -*.rej diff --git a/legacy/.styleci.yml b/legacy/.styleci.yml deleted file mode 100644 index 64c6be3ca..000000000 --- a/legacy/.styleci.yml +++ /dev/null @@ -1,10 +0,0 @@ -preset: psr2 - -finder: - name: - - "*.php" - not-name: - - "*Stub.php" - path: - - "src" - - "tests" diff --git a/legacy/CHANGELOG.md b/legacy/CHANGELOG.md deleted file mode 100644 index fcfb2c3f0..000000000 --- a/legacy/CHANGELOG.md +++ /dev/null @@ -1,75 +0,0 @@ -[![TorrentPier](https://raw.githubusercontent.com/torrentpier/.github/refs/heads/main/versions/Cattle.png)](https://github.com/torrentpier) - -# 📖 Change Log - -## [v2.7.0](https://github.com/torrentpier/torrentpier/compare/v2.6.0..v2.7.0) (2025-06-21) - -### 🚀 Features - -- *(database)* Add visual markers for Nette Explorer queries in debug panel ([#1965](https://github.com/torrentpier/torrentpier/pull/1965)) - ([2fd3067](https://github.com/torrentpier/torrentpier/commit/2fd306704f21febee7d53f4b4531601ce0cb81ce)) -- *(language)* Add new language variable for migration file and enhance template fallback logic ([#1984](https://github.com/torrentpier/torrentpier/pull/1984)) - ([a33574c](https://github.com/torrentpier/torrentpier/commit/a33574c28f2eb6267a74fa6c9d97fea86527157a)) -- *(migrations)* Implement Phinx database migration system ([#1976](https://github.com/torrentpier/torrentpier/pull/1976)) - ([fbde8cd](https://github.com/torrentpier/torrentpier/commit/fbde8cd421c9048afe70ddb41d0a9ed26d3fbef5)) -- *(test)* [**breaking**] Add comprehensive testing infrastructure with Pest PHP ([#1979](https://github.com/torrentpier/torrentpier/pull/1979)) - ([cc9d412](https://github.com/torrentpier/torrentpier/commit/cc9d412522938a023bd2b8eb880c4d2dd307c82a)) -- [**breaking**] Implement Language singleton with shorthand functions ([#1966](https://github.com/torrentpier/torrentpier/pull/1966)) - ([49717d3](https://github.com/torrentpier/torrentpier/commit/49717d3a687b95885fe9773f2597354aed4b2b60)) - -### 🐛 Bug Fixes - -- *(database)* Update affected rows tracking in Database class ([#1980](https://github.com/torrentpier/torrentpier/pull/1980)) - ([4f9cc9f](https://github.com/torrentpier/torrentpier/commit/4f9cc9fe0f7f4a85c90001a3f5514efdf04836da)) - -### 🚜 Refactor - -- *(database)* Enhance error logging and various fixes ([#1978](https://github.com/torrentpier/torrentpier/pull/1978)) - ([7aed6bc](https://github.com/torrentpier/torrentpier/commit/7aed6bc7d89f4ed31e7ed6c6eeecc6e08d348c24)) -- *(database)* Rename DB to Database and extract debug functionality ([#1964](https://github.com/torrentpier/torrentpier/pull/1964)) - ([6c0219d](https://github.com/torrentpier/torrentpier/commit/6c0219d53c7544b7d8a6374c0d0848945d32ae17)) -- *(stats)* Improve database row fetching in tr_stats.php ([#1985](https://github.com/torrentpier/torrentpier/pull/1985)) - ([728116d](https://github.com/torrentpier/torrentpier/commit/728116d6dc9cf4476cce572ced5e8a7ef529ead8)) - -### ⚙️ Miscellaneous - -- Update minimum `PHP` requirement to `8.2` ([#1987](https://github.com/torrentpier/torrentpier/pull/1987)) - ([9b322c7](https://github.com/torrentpier/torrentpier/commit/9b322c7093a634669e9f17a32ac42500f44f2496)) -- Removed useless `composer update` from workflows & installer ([#1986](https://github.com/torrentpier/torrentpier/pull/1986)) - ([423424e](https://github.com/torrentpier/torrentpier/commit/423424e9478e0772957014fb30f5e84158067af7)) -- Added --no-dev composer flag for some workflows ([#1982](https://github.com/torrentpier/torrentpier/pull/1982)) - ([e9a9e09](https://github.com/torrentpier/torrentpier/commit/e9a9e095768ba68aa5d5058a3e152ffaec916117)) -- Added `--no-dev` composer flag for some workflows ([#1981](https://github.com/torrentpier/torrentpier/pull/1981)) - ([e8cba5d](https://github.com/torrentpier/torrentpier/commit/e8cba5dd3fc83b616f83c24991f79dc7258c5df3)) - - -## [v2.6.0](https://github.com/torrentpier/torrentpier/compare/v2.5.0..v2.6.0) (2025-06-18) - -### 🚀 Features - -- [**breaking**] Implement unified cache system with Nette Caching ([#1963](https://github.com/torrentpier/torrentpier/pull/1963)) - ([07a06a3](https://github.com/torrentpier/torrentpier/commit/07a06a33cd97b37f68b533a87cdb5f7578f2c86f)) -- Replace legacy database layer with Nette Database implementation ([#1961](https://github.com/torrentpier/torrentpier/pull/1961)) - ([f50b914](https://github.com/torrentpier/torrentpier/commit/f50b914cc18f777d92002baf2c812a635d5eed4b)) - -### 🐛 Bug Fixes - -- *(User)* Add null and array checks before session data operations ([#1962](https://github.com/torrentpier/torrentpier/pull/1962)) - ([e458109](https://github.com/torrentpier/torrentpier/commit/e458109eefc54d86a78a1ddb3954581524852516)) - - -## [v2.5.0](https://github.com/torrentpier/torrentpier/compare/v2.4.6-alpha.4..v2.5.0) (2025-06-18) - -### 🚀 Features - -- [**breaking**] Implement centralized Config class to replace global $bb_cfg array ([#1953](https://github.com/torrentpier/torrentpier/pull/1953)) - ([bf9100f](https://github.com/torrentpier/torrentpier/commit/bf9100fbfa74768edb01c62636198a44739d9923)) - -### 🐛 Bug Fixes - -- *(installer)* Strip protocol from TP_HOST to keep only hostname ([#1952](https://github.com/torrentpier/torrentpier/pull/1952)) - ([81bf67c](https://github.com/torrentpier/torrentpier/commit/81bf67c2be85d49e988b7802ca7e9738ff580031)) -- *(sql)* Resolve only_full_group_by compatibility issues in tracker cleanup ([#1951](https://github.com/torrentpier/torrentpier/pull/1951)) - ([37a0675](https://github.com/torrentpier/torrentpier/commit/37a0675adfb02014e7068f4aa82301e29f39eab6)) - -### 📦 Dependencies - -- *(deps)* Bump filp/whoops from 2.18.2 to 2.18.3 ([#1948](https://github.com/torrentpier/torrentpier/pull/1948)) - ([b477680](https://github.com/torrentpier/torrentpier/commit/b4776804a408217229caa327c79849cf13ce2aa5)) - -### 🚜 Refactor - -- *(censor)* [**breaking**] Migrate Censor class to singleton pattern ([#1954](https://github.com/torrentpier/torrentpier/pull/1954)) - ([74a564d](https://github.com/torrentpier/torrentpier/commit/74a564d7954c6f8745ebcffdcd9c8997e371d47a)) -- *(config)* [**breaking**] Encapsulate global $bb_cfg array in Config class ([#1950](https://github.com/torrentpier/torrentpier/pull/1950)) - ([5842994](https://github.com/torrentpier/torrentpier/commit/5842994782dfa62788f8427c55045abdbfb5b8e9)) - -### 📚 Documentation - -- Add Select class migration guide ([#1960](https://github.com/torrentpier/torrentpier/pull/1960)) - ([86abafb](https://github.com/torrentpier/torrentpier/commit/86abafb11469d14a746d12725b15cf6b7015ec44)) - -### ⚙️ Miscellaneous - -- *(_release.php)* Finally! Removed some useless params ([#1947](https://github.com/torrentpier/torrentpier/pull/1947)) - ([9c7d270](https://github.com/torrentpier/torrentpier/commit/9c7d270598c0153fb82f4b7ad96f5b59399b2159)) -- *(cliff)* Add conventional commit prefix to changelog message ([#1957](https://github.com/torrentpier/torrentpier/pull/1957)) - ([b1b2618](https://github.com/torrentpier/torrentpier/commit/b1b26187579f6981165d85c316a3c5b7199ce2ee)) - - - diff --git a/legacy/CLAUDE.md b/legacy/CLAUDE.md deleted file mode 100644 index 22af6c3cf..000000000 --- a/legacy/CLAUDE.md +++ /dev/null @@ -1,170 +0,0 @@ -# CLAUDE.md - -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. - -## Project Overview - -TorrentPier is a BitTorrent tracker engine written in PHP, designed for hosting BitTorrent communities with forum functionality. The project is undergoing a major 3.0 rewrite, transitioning from legacy code to modern PHP practices. **Backward compatibility is not supported in 3.0** - legacy APIs will break and are not maintained as the focus is on moving forward with clean, modern architecture. - -## Technology Stack & Architecture - -- **PHP 8.3+** with modern features -- **MySQL/MariaDB/Percona** database -- **Nette Database** with temporary backward-compatible wrapper -- **Composer** for dependency management -- **Custom BitTorrent tracker** implementation - -## Key Directory Structure - -- `/src/` - Modern PHP classes (PSR-4 autoloaded as `TorrentPier\`) -- `/library/` - Core application logic and legacy code -- `/admin/` - Administrative interface -- `/bt/` - BitTorrent tracker functionality (announce.php, scrape.php) -- `/styles/` - Templates, CSS, JS, images -- `/internal_data/` - Cache, logs, compiled templates -- `/install/` - Installation scripts and configuration examples -- `/migrations/` - Database migration files (Phinx) - -## Entry Points & Key Files - -- `index.php` - Main forum homepage -- `tracker.php` - Torrent search/browse interface -- `bt/announce.php` - BitTorrent announce endpoint -- `bt/scrape.php` - BitTorrent scrape endpoint -- `admin/index.php` - Administrative panel -- `cron.php` - Background task runner (CLI only) -- `install.php` - Installation script (CLI only) - -## Development Commands - -### Installation & Setup -```bash -# Automated installation (CLI) -php install.php - -# Install dependencies -composer install - -# Update dependencies -composer update -``` - -### Maintenance & Operations -```bash -# Run background maintenance tasks -php cron.php -``` - -### Code Quality -The project uses **StyleCI** with PSR-2 preset for code style enforcement. StyleCI configuration is in `.styleci.yml` targeting `src/` directory. - -## Modern Architecture Components - -### Database Layer (`/src/Database/`) -- **Nette Database** replacing legacy SqlDb system -- Modern singleton pattern accessible via `DB()` function -- Support for multiple database connections and debug functionality -- **Breaking changes expected** during 3.0 migration to ORM-style queries - -### Cache System (`/src/Cache/`) -- **Unified caching** using Nette Caching internally -- Replaces existing `CACHE()` and $datastore systems -- Supports file, SQLite, memory, and Memcached storage -- **API changes planned** for improved developer experience - -### Configuration Management -- Environment-based config with `.env` files -- Modern singleton `Config` class accessible via `config()` function -- **Legacy config access will be removed** in favor of new patterns - -## Configuration Files -- `.env` - Environment variables (copy from `.env.example`) -- `library/config.php` - Main application configuration -- `library/config.local.php` - Local configuration overrides -- `composer.json` - Dependencies and PSR-4 autoloading - -## Development Workflow - -### CI/CD Pipeline -- **GitHub Actions** for automated testing and deployment -- **StyleCI** for code style enforcement -- **Dependabot** for dependency updates -- **FTP deployment** to demo environment - -### Installation Methods -1. **Automated**: `php install.php` (recommended) -2. **Composer**: `composer create-project torrentpier/torrentpier` -3. **Manual**: Git clone + `composer install` + database setup - -## Database & Schema - -- **Database migrations** managed via Phinx in `/migrations/` directory -- Initial schema: `20250619000001_initial_schema.php` -- Initial seed data: `20250619000002_seed_initial_data.php` -- UTF-8 (utf8mb4) character set required -- Multiple database alias support for different components - -### Migration Commands -```bash -# Run all pending migrations -php vendor/bin/phinx migrate --configuration=phinx.php - -# Check migration status -php vendor/bin/phinx status --configuration=phinx.php - -# Mark migrations as applied (for existing installations) -php vendor/bin/phinx migrate --fake --configuration=phinx.php -``` - -## TorrentPier 3.0 Modernization Strategy - -The TorrentPier 3.0 release represents a major architectural shift focused on: - -- **Modern PHP practices**: PSR standards, namespaces, autoloading -- **Clean architecture**: Separation of concerns, dependency injection -- **Performance improvements**: Optimized database queries, efficient caching -- **Developer experience**: Better debugging, testing, and maintenance -- **Breaking changes**: Legacy code removal and API modernization - -**Important**: TorrentPier 3.0 will introduce breaking changes to achieve these modernization goals. Existing deployments should remain on 2.x versions until they're ready to migrate to the new architecture. - -## Migration Path for 3.0 - -- **Database layer**: Legacy SqlDb calls will be removed, migrate to new Database class -- **Cache system**: Replace existing CACHE() and $datastore calls with new unified API -- **Configuration**: Update legacy global $bb_cfg access to use config() singleton -- **Templates**: Legacy template syntax may be deprecated in favor of modern Twig features -- **Language system**: Update global $lang usage to new Language singleton methods - -When working with this codebase, prioritize modern architecture patterns and clean code practices. Focus on the new systems in `/src/` directory rather than maintaining legacy compatibility. - -## Markdown File Guidelines - -When creating or editing `.md` files in this project, follow these linting rules: - -### MD032 - Lists surrounded by blank lines -Always add blank lines before and after lists: - -```markdown -Some text here. - -- First item -- Second item -- Third item - -More text here. -``` - -### MD047 - Files should end with a single newline -Ensure every markdown file ends with exactly one newline character at the end of the file. - -## Tests - -- Need comprehensive test coverage for new components -- Utilize Pest PHP for unit and integration / feature testing -- Tests should focus on validating modern architecture components -- Create test suites for critical systems like database, cache, and configuration - -## Development Guidelines - -- Always ensure that there is one empty line at the end of the file diff --git a/legacy/CODE_OF_CONDUCT.md b/legacy/CODE_OF_CONDUCT.md deleted file mode 100644 index 522445d96..000000000 --- a/legacy/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at admin@torrentpier.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/legacy/README.md b/legacy/README.md deleted file mode 100644 index 5e7a13049..000000000 --- a/legacy/README.md +++ /dev/null @@ -1,192 +0,0 @@ -

TorrentPier

- -

- Bull-powered BitTorrent tracker engine -
-

- -

- License - Stars Packagist - Crowdin - TorrentPier nightly - Downloads - Version - Last release - Size - Deployed to TorrentPier Demo with FTP Deploy Action -

- -## 🐂 About TorrentPier - -TorrentPier — bull-powered BitTorrent Public/Private tracker engine, written in PHP. High speed, simple modifications, load-balanced -architecture. In addition, we have a very helpful -[official support forum](https://torrentpier.com), where it's possible to get support and download modifications for the engine. - -## 🌈 Current status - -TorrentPier is currently undergoing a **major 3.0 rewrite** to remove all legacy code and modernize the codebase to current PHP standards. **Backward compatibility is not a priority** - this release focuses on moving forward with clean, modern architecture. If you want to delve deep into the code, check our [issues](https://github.com/torrentpier/torrentpier/issues) and go from there. - -> [!NOTE] -> TorrentPier 3.0 will introduce breaking changes. Existing installations should remain on 2.x versions until ready to migrate to the new architecture. - -## ✨ Features -* Rich forum with browsing/moderation tools -* High-load capable, heavily configurable announcer -* Scrape support -* FreeLeech -* [TorrServer integration](https://github.com/YouROK/TorrServer) support -* BitTorrent v2 support -* Event-based invite system -* Bonus points -* Polling system -* PM/DM system -* Multilingual support (Russian and English are currently fully supported, with others in the future) -* Atom/RSS feeds -* ... and so MUCH MORE! - -## 🖥️ Demo - -* URL: https://torrentpier.duckdns.org -* Username: `admin` -* Password: `admin` - -> [!NOTE] -> Demo resets every 24 hours! - -## 🔧 Requirements - -* Apache / nginx ([example config](install/nginx.conf)) / caddy ([example config](install/Caddyfile)) -* MySQL 5.5.3 or above (including MySQL 8.0+) / MariaDB 10.0 or above / Percona -* PHP: 8.3 / 8.4 -* PHP Extensions: mbstring, gd, bcmath, intl, tidy (optional), xml, xmlwriter -* Crontab (Recommended) - -## 💾 Installation - -For the installation, select one of the installation variants below: - -### Quick (Clean install) 🚀 - -Check out our [autoinstall](https://github.com/torrentpier/autoinstall) repository with detailed instructions. - -> [!NOTE] -> Thanks to [Sergei Solovev](https://github.com/SeAnSolovev) for this installation script ❤️ - -### Quick (For web-panels) ☕️ - -1. Select the folder where you want TorrentPier installed - ```shell - cd /path/to/public_html - ``` -2. Download the latest version of TorrentPier - ```shell - sudo git clone https://github.com/torrentpier/torrentpier.git . - ``` -3. After completing, execute the command below and follow the instructions - ```shell - php install.php - ``` -4. Voila! ✨ - -### Manual 🔩 - -1. Install [Composer](https://getcomposer.org/) -2. Run the following command to create the TorrentPier project - ```shell - composer create-project torrentpier/torrentpier - ``` -3. [Check our system requirements](#-requirements) -4. After, run this command in the project directory to install Composer dependencies - ```shell - composer install - ``` -5. Edit database configuration settings in the environment (`.env.example`), after, rename to `.env` -6. Create a database and run migrations to set up the schema - ```shell - php vendor/bin/phinx migrate --configuration=phinx.php - ``` -7. Provide write permissions to the specified folders: - * `data/avatars`, `data/uploads`, `data/uploads/thumbs` - * `internal_data/atom`, `internal_data/cache`, `internal_data/log`, `internal_data/triggers` - * `sitemap` -8. Voila! ✨ - -> [!TIP] -> You can automate steps 4-7 by running `php install.php` instead, which will guide you through the setup process interactively. - -> [!IMPORTANT] -> The specific settings depend on the server you are using, but in general we recommend chmod **0755** for folders, and chmod **0644** for the files in them. - -### Additional steps 👣 - -1. Edit these files: - * `favicon.png` (change to your own) - * `robots.txt` (change the addresses in lines `Host` and `Sitemap` to your own) -2. Log in to the forum using the **admin/admin** login/password, and finish setting up via admin panel. Don't forget to change your password! - -## 🔐 Security vulnerabilities - -If you discover a security vulnerability within TorrentPier, please follow our [security policy](https://github.com/torrentpier/torrentpier/security/policy), so we can address it promptly. - -## 🧪 Testing - -TorrentPier includes a comprehensive testing suite built with **Pest PHP**. Run tests to ensure code quality and system reliability: - -```shell -# Run all tests -./vendor/bin/pest - -# Run with coverage -./vendor/bin/pest --coverage -``` - -For detailed testing documentation, see [tests/README.md](tests/README.md). - -## 📌 Our recommendations - -* *It's recommended to run `cron.php`.* - For significant tracker speed increase it may be required to replace the built-in cron.php with an operating system daemon. -* *Local configuration copy.* - You can override the settings using the local configuration file `library/config.local.php`. - -## 💚 Contributing / Contributors - -Please read our [contributing policy](CONTRIBUTING.md) and [code of conduct](CODE_OF_CONDUCT.md) for details, and the process for -submitting pull requests to us. But we are always ready to review your pull-request for compliance with -these requirements. Just send it! - - - Contributors - - -Made with [contrib.rocks](https://contrib.rocks). - -## 💞 Sponsoring - -Support this project by becoming a sponsor or a backer. - -[![OpenCollective sponsors](https://opencollective.com/torrentpier/sponsors/badge.svg)](https://opencollective.com/torrentpier) -[![OpenCollective backers](https://opencollective.com/torrentpier/backers/badge.svg)](https://opencollective.com/torrentpier) - -
- Monero - -``` -42zJE3FDvN8foP9QYgDrBjgtd7h2FipGCGmAcmG5VFQuRkJBGMbCvoLSmivepmAMEgik2E8MPWUzKaoYsGCtmhvL7ZN73jh -``` -
- -
- YooMoney - -``` -4100118022415720 -``` -
- -## 📦 Versioning - -We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/torrentpier/torrentpier/tags). - -## 📖 License - -This project is licensed under the MIT License - see the [LICENSE](https://github.com/torrentpier/torrentpier/blob/master/LICENSE) file for details. diff --git a/legacy/SECURITY.md b/legacy/SECURITY.md deleted file mode 100644 index 73d867596..000000000 --- a/legacy/SECURITY.md +++ /dev/null @@ -1,13 +0,0 @@ -# Security Policy - -## Versions - -Due to the nature of our project - being open source - we have decided to patch only the latest major release (currently v2.4.x) for security vulnerabilities. - -## How to disclose - -Please disclose security issues by mailing [admin@torrentpier.com](mailto:admin@torrentpier.com). - -## What we do - -Any submitted security issue will be checked thoroughly by our development team. A fix for the issue and a transparent information on GitHub about the issue existing will be released. You can view any previously identified issues on our [GitHub Security Page](https://github.com/torrentpier/torrentpier/security/advisories). New major versions of TorrentPier will also receive a security audit to verify our efforts on providing a secure application. diff --git a/legacy/UPGRADE_GUIDE.md b/legacy/UPGRADE_GUIDE.md deleted file mode 100644 index ed045381f..000000000 --- a/legacy/UPGRADE_GUIDE.md +++ /dev/null @@ -1,1270 +0,0 @@ -# 🚀 TorrentPier 3.0 Migration Guide - -This guide helps you migrate from TorrentPier 2.x to the new 3.0 architecture. **Important**: TorrentPier 3.0 introduces breaking changes and does not maintain backward compatibility. This is a major rewrite focused on modern PHP practices and clean architecture. - -## 📖 Table of Contents - -- [Database Migration System](#database-migration-system) -- [Database Layer Migration](#database-layer-migration) -- [Unified Cache System Migration](#unified-cache-system-migration) -- [Configuration System Migration](#configuration-system-migration) -- [Language System Migration](#language-system-migration) -- [Censor System Migration](#censor-system-migration) -- [Select System Migration](#select-system-migration) -- [Development System Migration](#development-system-migration) -- [Breaking Changes](#breaking-changes) -- [Best Practices](#best-practices) - -## 🗄️ Database Migration System - -TorrentPier now includes a modern database migration system using **Phinx** (from CakePHP), replacing the legacy direct SQL import approach. This provides version-controlled database schema management with rollback capabilities. - -### Key Benefits - -- **Version Control**: Database schema changes are tracked in code -- **Environment Consistency**: Same database structure across development, staging, and production -- **Safe Rollbacks**: Ability to safely revert schema changes -- **Team Collaboration**: No more merge conflicts on database changes -- **Automated Deployments**: Database updates as part of deployment process - -### Migration Architecture - -#### Engine Strategy -- **InnoDB**: Used for all tables for maximum data integrity and reliability -- **ACID Compliance**: Full transaction support and crash recovery for all data -- **Row-Level Locking**: Better concurrency for high-traffic operations - -#### Directory Structure -``` -/migrations/ - ├── 20250619000001_initial_schema.php # Complete database schema - ├── 20250619000002_seed_initial_data.php # Essential data seeding - └── future_migrations... # Your custom migrations -/phinx.php # Migration configuration -``` - -### For New Installations - -New installations automatically use migrations instead of the legacy SQL dump: - -```bash -# Fresh installation now uses migrations -php install.php -``` - -The installer will: -1. Set up environment configuration -2. Create the database -3. Run all migrations automatically -4. Seed initial data (admin user, configuration, etc.) - -### For Existing Installations - -Existing installations continue to work without changes. The migration system is designed for new installations and development workflows. - -**Important**: Existing installations should **not** attempt to migrate to the new system without proper backup and testing procedures. - -### Developer Workflow - -#### Creating Migrations -```bash -# Create a new migration -php vendor/bin/phinx create AddNewFeatureTable - -# Edit the generated migration file -# /migrations/YYYYMMDDHHMMSS_add_new_feature_table.php -``` - -#### Running Migrations -```bash -# Run all pending migrations -php vendor/bin/phinx migrate - -# Check migration status -php vendor/bin/phinx status - -# Rollback last migration -php vendor/bin/phinx rollback -``` - -#### Migration Template -```php -table('bb_new_feature', [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' - ]); - - $table->addColumn('name', 'string', ['limit' => 100]) - ->addColumn('created_at', 'timestamp', ['default' => 'CURRENT_TIMESTAMP']) - ->addIndex('name') - ->create(); - } - - // Optional: explicit up/down methods for complex operations - public function up() - { - // Complex data migration logic - } - - public function down() - { - // Rollback logic - } -} -``` - -#### Engine Guidelines -```php -// Use InnoDB for all tables for maximum reliability -$table = $this->table('bb_user_posts', [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' -]); - -// All tracker tables also use InnoDB for data integrity -$table = $this->table('bb_bt_peer_stats', [ - 'engine' => 'InnoDB', - 'collation' => 'utf8mb4_unicode_ci' -]); - -// Buffer tables use InnoDB for consistency and reliability -public function up() { - $this->execute('DROP TABLE IF EXISTS buf_temp_data'); - // Recreate with new structure using InnoDB -} -``` - -### Admin Panel Integration - -The admin panel includes a read-only migration status page at `/admin/admin_migrations.php`: - -- **Current migration version** -- **Applied migrations history** -- **Pending migrations list** -- **Database statistics** -- **Clear instructions for CLI operations** - -**Important**: The admin panel is **read-only** for security. All migration operations must be performed via CLI. - -### Complex Migration Handling - -For complex data transformations, create external scripts: - -```php -// migrations/YYYYMMDDHHMMSS_complex_data_migration.php -class ComplexDataMigration extends AbstractMigration -{ - public function up() - { - $this->output->writeln('Running complex data migration...'); - - // Call external script for complex operations - $result = shell_exec('php ' . __DIR__ . '/../scripts/migrate_torrent_data.php'); - $this->output->writeln($result); - - if (strpos($result, 'ERROR') !== false) { - throw new Exception('Complex migration failed'); - } - } -} -``` - -### Best Practices - -#### Migration Development -```bash -# 1. Create migration -php vendor/bin/phinx create MyFeature - -# 2. Edit migration file -# 3. Test locally -php vendor/bin/phinx migrate -e development - -# 4. Test rollback -php vendor/bin/phinx rollback -e development - -# 5. Commit to version control -git add migrations/ -git commit -m "Add MyFeature migration" -``` - -#### Production Deployment -```bash -# Always backup database first -mysqldump tracker_db > backup_$(date +%Y%m%d_%H%M%S).sql - -# Run migrations -php vendor/bin/phinx migrate -e production - -# Verify application functionality -# Monitor error logs -``` - -#### Team Collaboration -- **Never modify existing migrations** that have been deployed -- **Always create new migrations** for schema changes -- **Test migrations on production-like data** before deployment -- **Coordinate with team** before major schema changes - -### Configuration - -The migration system uses your existing `.env` configuration: - -```php -// phinx.php automatically reads from .env -'production' => [ - 'adapter' => 'mysql', - 'host' => env('DB_HOST', 'localhost'), - 'port' => (int) env('DB_PORT', 3306), - 'name' => env('DB_DATABASE'), - 'user' => env('DB_USERNAME'), - 'pass' => env('DB_PASSWORD', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci' -] -``` - -### Troubleshooting - -#### Common Issues -```bash -# Migration table doesn't exist -php vendor/bin/phinx init # Re-run if needed - -# Migration fails mid-way -php vendor/bin/phinx rollback # Rollback to previous state - -# Check what would be applied -php vendor/bin/phinx status # See pending migrations -``` - -#### Migration Recovery -```bash -# If migration fails, check status first -php vendor/bin/phinx status - -# Rollback to known good state -php vendor/bin/phinx rollback -t 20250619000002 - -# Fix the migration code and re-run -php vendor/bin/phinx migrate -``` - -### Legacy SQL Import Removal - -The legacy `install/sql/mysql.sql` approach has been replaced by migrations: - -- ✅ **New installations**: Use migrations automatically -- ✅ **Development workflow**: Create migrations for all schema changes -- ✅ **Version control**: All schema changes tracked in Git -- ❌ **Direct SQL imports**: No longer used for new installations - -### Security Considerations - -- **CLI-only execution**: Migrations run via command line only -- **Read-only admin interface**: Web interface shows status only -- **Backup requirements**: Always backup before production migrations -- **Access control**: Restrict migration command access to authorized personnel - -### Migration Setup for Existing Installations - -If you have an **existing TorrentPier installation** and want to adopt the migration system, you need to mark the initial migrations as already applied to avoid recreating your existing database schema. - -#### Detection: Do You Need This? - -You need migration setup if: -- ✅ You have an existing TorrentPier installation with data -- ✅ Your database already has tables like `bb_users`, `bb_forums`, etc. -- ✅ The admin migration panel shows "Migration System: ✗ Not Initialized" - -#### Step-by-Step Setup Process - -**1. Backup Your Database** -```bash -mysqldump -u username -p database_name > backup_$(date +%Y%m%d_%H%M%S).sql -``` - -**2. Initialize Migration Table** -```bash -# This creates the bb_migrations table without running any migrations -php vendor/bin/phinx init -``` - -**3. Mark Initial Migrations as Applied (Fake Run)** -```bash -# Mark the schema migration as applied without running it -php vendor/bin/phinx migrate --fake --target=20250619000001 - -# Mark the data seeding migration as applied without running it -php vendor/bin/phinx migrate --fake --target=20250619000002 -``` - -**4. Verify Setup** -```bash -# Check migration status -php vendor/bin/phinx status -``` - -You should see both initial migrations marked as "up" (applied). - -#### Alternative: Manual SQL Method - -If you prefer manual control, you can directly insert migration records: - -```sql --- Create migration table (if phinx init didn't work) -CREATE TABLE IF NOT EXISTS bb_migrations ( - version bigint(20) NOT NULL, - migration_name varchar(100) DEFAULT NULL, - start_time timestamp NULL DEFAULT NULL, - end_time timestamp NULL DEFAULT NULL, - breakpoint tinyint(1) NOT NULL DEFAULT '0', - PRIMARY KEY (version) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; - --- Mark initial migrations as applied -INSERT INTO bb_migrations (version, migration_name, start_time, end_time, breakpoint) -VALUES -('20250619000001', 'InitialSchema', NOW(), NOW(), 0), -('20250619000002', 'SeedInitialData', NOW(), NOW(), 0); -``` - -#### Post-Setup Workflow - -After setup, your existing installation will work exactly like a fresh installation: - -```bash -# Create new migrations -php vendor/bin/phinx create AddNewFeature - -# Run new migrations -php vendor/bin/phinx migrate - -# Check status -php vendor/bin/phinx status -``` - -#### Troubleshooting - -**Migration table already exists:** -- Check if you've already set up migrations: `php vendor/bin/phinx status` -- If it shows errors, you may need to recreate: `DROP TABLE bb_migrations;` then restart - -**"Nothing to migrate" message:** -- This is normal after fake runs - it means setup was successful -- New migrations will appear when you create them - -**Admin panel shows "Needs Setup":** -- Follow the setup process above -- Refresh the admin panel after completion - -## 🗄️ Database Layer Migration - -TorrentPier 3.0 has completely replaced its legacy database layer (SqlDb/Dbs) with a modern implementation using Nette Database. **Breaking changes**: This migration requires code updates for the new API. - -### Code Changes Required - -**Important**: Legacy `DB()->method()` calls from 2.x are deprecated and will be removed. You must update your code to use the new Database class methods. - -```php -// ❌ Legacy code (2.x) - will be removed -$user = DB()->fetch_row("SELECT * FROM users WHERE id = ?", 123); -$users = DB()->fetch_rowset("SELECT * FROM users"); - -// ✅ New 3.0 API (required migration) -$user = DB()->fetchRow("SELECT * FROM users WHERE id = ?", 123); -$users = DB()->fetchAll("SELECT * FROM users"); -$affected = DB()->getRowCount(); -$result = DB()->query("UPDATE users SET status = ? WHERE id = ?", 1, 123); -``` - -### Key Improvements - -#### Modern Foundation -- **Nette Database v3.2**: Modern, actively maintained database layer -- **PDO-based**: Improved security and performance -- **Type Safety**: Better error detection and IDE support -- **Singleton Pattern**: Efficient connection management - -#### Enhanced Reliability -- **Automatic Resource Cleanup**: Better memory management -- **Improved Error Handling**: More detailed error information -- **Connection Stability**: Better handling of connection issues -- **Performance Optimizations**: Reduced overhead and improved query execution - -#### Debugging and Development -- **Enhanced Explain Support**: Improved query analysis -- **Better Query Logging**: More detailed performance tracking -- **Debug Information**: Comprehensive debugging features -- **Memory Tracking**: Better resource usage monitoring - -### Multiple Database Support - -Multiple database servers continue to work exactly as before: - -```php -// ✅ Multiple database access unchanged -$main_db = DB('db'); // Main database -$tracker_db = DB('tr'); // Tracker database -$stats_db = DB('stats'); // Statistics database -``` - -### Error Handling - -All error handling patterns remain identical: - -```php -// ✅ Error handling works exactly as before -$result = DB()->sql_query("SELECT * FROM users"); -if (!$result) { - $error = DB()->sql_error(); - echo "Error: " . $error['message']; -} -``` - -### Debug and Explain Features - -All debugging functionality is preserved and enhanced: - -```php -// ✅ Debug features work as before -DB()->debug('start'); -// ... run queries ... -DB()->debug('stop'); - -// ✅ Explain functionality unchanged -DB()->explain('start'); -DB()->explain('display'); -``` - -### Performance Benefits - -The 3.0 migration provides: -- **Faster Connection Handling**: Singleton pattern prevents connection overhead -- **Modern Query Execution**: Nette Database optimizations -- **Better Resource Management**: Automatic cleanup and proper connection handling -- **Reduced Memory Usage**: More efficient object management - -### 📖 Detailed Documentation - -For comprehensive information about the database layer changes, implementation details, and technical architecture, see: - -**[src/Database/README.md](src/Database/README.md)** - -This documentation covers: -- Complete architecture overview -- Technical implementation details -- Migration notes and compatibility information -- Debugging features and usage examples -- Performance benefits and benchmarks - -### Legacy Code Cleanup - -The following legacy files have been removed from the codebase: -- `src/Legacy/SqlDb.php` - Original database class -- `src/Legacy/Dbs.php` - Original database factory - -These were completely replaced by: -- `src/Database/Database.php` - Modern database class with Nette Database (renamed from `DB.php`) -- `src/Database/DatabaseFactory.php` - Modern factory with temporary backward compatibility (renamed from `DbFactory.php`) -- `src/Database/DatabaseDebugger.php` - Dedicated debug functionality extracted from Database class -- `src/Database/DebugSelection.php` - Debug-enabled wrapper for Nette Database Selection - -### Verification - -To verify the migration is working correctly: - -```php -// ✅ Test basic database operations -$version = DB()->server_version(); -$testQuery = DB()->fetch_row("SELECT 1 as test"); -echo "Database version: $version, Test: " . $testQuery['test']; - -// ✅ Test error handling -$result = DB()->sql_query("SELECT invalid_column FROM non_existent_table"); -if (!$result) { - $error = DB()->sql_error(); - echo "Error handling works: " . $error['message']; -} -``` - -## 💾 Unified Cache System Migration - -TorrentPier 3.0 has replaced its legacy Cache and Datastore systems with a modern unified implementation using Nette Caching. **Breaking changes**: This migration requires updating your cache-related code. - -### Code Changes Required - -**Important**: Legacy `CACHE()` and `$datastore` calls from 2.x are deprecated and will be removed. You must update your code to use the new unified cache API. - -```php -// ❌ Legacy code (2.x) - will be removed -$cache = CACHE('bb_cache'); -$value = $cache->get('key'); -$cache->set('key', $value, 3600); - -$datastore = datastore(); -$forums = $datastore->get('cat_forums'); - -// ✅ New 3.0 API (required migration) -$cache = cache('bb_cache'); -$value = $cache->load('key'); -$cache->save('key', $value, ['expire' => '1 hour']); - -$forums = cache('datastore')->load('cat_forums'); -``` - -### Key Improvements - -#### Modern Foundation -- **Nette Caching v3.3**: Modern, actively maintained caching library -- **Unified System**: Single caching implementation instead of duplicate Cache/Datastore code -- **Singleton Pattern**: Efficient memory usage and consistent TorrentPier architecture -- **Advanced Features**: Dependencies, tags, bulk operations, memoization - -#### Enhanced Performance -- **456,647+ operations per second**: Verified production performance -- **Memory Optimization**: Shared storage and efficient instance management -- **Debug Compatibility**: Full compatibility with Dev.php debugging features - -### Enhanced Capabilities - -New code can leverage advanced Nette Caching features: - -```php -// ✅ Enhanced caching with dependencies -$cache = CACHE('bb_cache'); -$forums = $cache->load('forums', function() { - return build_forums_data(); -}, [ - \Nette\Caching\Cache::Expire => '1 hour', - \Nette\Caching\Cache::Files => ['/path/to/config.php'] -]); - -// ✅ Function memoization -$result = $cache->call('expensive_function', $param); -``` - -### 📖 Detailed Documentation - -For comprehensive information about the unified cache system, advanced features, and technical architecture, see: - -**[src/Cache/README.md](src/Cache/README.md)** - -This documentation covers: -- Complete architecture overview and singleton pattern -- Advanced Nette Caching features and usage examples -- Performance benchmarks and storage type comparisons -- Critical compatibility issues resolved during implementation - -### Verification - -To verify the migration is working correctly: - -```php -// ✅ Test basic cache operations -$cache = CACHE('test_cache'); -$cache->set('test_key', 'test_value', 60); -$value = $cache->get('test_key'); -echo "Cache test: " . ($value === 'test_value' ? 'PASSED' : 'FAILED'); - -// ✅ Test datastore operations -$datastore = datastore(); -$datastore->store('test_item', ['status' => 'verified']); -$item = $datastore->get('test_item'); -echo "Datastore test: " . ($item['status'] === 'verified' ? 'PASSED' : 'FAILED'); -``` - -## ⚙️ Configuration System Migration - -The new TorrentPier features a modern, centralized configuration system with full backward compatibility. - -### Quick Migration Overview - -```php -// ❌ Old way (still works, but not recommended) -global $bb_cfg; -$announceUrl = $bb_cfg['bt_announce_url']; -$dbHost = $bb_cfg['database']['host']; - -// ✅ New way (recommended) -$announceUrl = config()->get('bt_announce_url'); -$dbHost = config()->get('database.host'); -``` - -### Key Configuration Changes - -#### Basic Usage -```php -// Get configuration values using dot notation -$siteName = config()->get('sitename'); -$dbHost = config()->get('database.host'); -$cacheTimeout = config()->get('cache.timeout'); - -// Get with default value if key doesn't exist -$maxUsers = config()->get('max_users_online', 100); -$debugMode = config()->get('debug.enabled', false); -``` - -#### Setting Values -```php -// Set configuration values -config()->set('sitename', 'My Awesome Tracker'); -config()->set('database.port', 3306); -config()->set('cache.enabled', true); -``` - -#### Working with Sections -```php -// Get entire configuration section -$dbConfig = config()->getSection('database'); -$trackerConfig = config()->getSection('tracker'); - -// Check if configuration exists -if (config()->has('bt_announce_url')) { - $announceUrl = config()->get('bt_announce_url'); -} -``` - -### Common Configuration Mappings - -| Old Syntax | New Syntax | -|------------|------------| -| `$bb_cfg['sitename']` | `config()->get('sitename')` | -| `$bb_cfg['database']['host']` | `config()->get('database.host')` | -| `$bb_cfg['tracker']['enabled']` | `config()->get('tracker.enabled')` | -| `$bb_cfg['cache']['timeout']` | `config()->get('cache.timeout')` | -| `$bb_cfg['torr_server']['url']` | `config()->get('torr_server.url')` | - -### Magic Methods Support -```php -// Magic getter -$siteName = config()->sitename; -$dbHost = config()->{'database.host'}; - -// Magic setter -config()->sitename = 'New Site Name'; -config()->{'database.port'} = 3306; - -// Magic isset -if (isset(config()->bt_announce_url)) { - // Configuration exists -} -``` - -## 🌐 Language System Migration - -TorrentPier has modernized its language system with a singleton pattern while maintaining 100% backward compatibility with existing global `$lang` variable. - -### No Code Changes Required - -**Important**: All existing `global $lang` calls continue to work exactly as before. This is an internal modernization that requires **zero code changes** in your application. - -```php -// ✅ All existing code continues to work unchanged -global $lang; -echo $lang['FORUM']; -echo $lang['DATETIME']['TODAY']; -``` - -### Key Improvements - -#### Modern Foundation -- **Singleton Pattern**: Efficient memory usage and consistent TorrentPier architecture -- **Centralized Management**: Single point of control for language loading and switching -- **Type Safety**: Better error detection and IDE support -- **Dot Notation Support**: Access nested language arrays with simple syntax - -#### Enhanced Functionality -- **Automatic Fallback**: Source language fallback for missing translations -- **Dynamic Loading**: Load additional language files for modules/extensions -- **Runtime Modification**: Add or modify language strings at runtime -- **Locale Management**: Automatic locale setting based on language selection - -### Enhanced Capabilities - -New code can leverage the modern Language singleton features with convenient shorthand functions: - -```php -// ✅ Convenient shorthand functions (recommended for frequent use) -echo __('FORUM'); // Same as lang()->get('FORUM') -echo __('DATETIME.TODAY'); // Dot notation for nested arrays -_e('WELCOME_MESSAGE'); // Echo shorthand -$message = __('CUSTOM_MESSAGE', 'Default'); // With default value - -// ✅ Full singleton access (for advanced features) -echo lang()->get('FORUM'); -echo lang()->get('DATETIME.TODAY'); // Dot notation for nested arrays - -// ✅ Check if language key exists -if (lang()->has('ADVANCED_FEATURE')) { - echo __('ADVANCED_FEATURE'); -} - -// ✅ Get current language information -$currentLang = lang()->getCurrentLanguage(); -$langName = lang()->getLanguageName(); -$langLocale = lang()->getLanguageLocale(); - -// ✅ Load additional language files for modules -lang()->loadAdditionalFile('custom_module', 'en'); - -// ✅ Runtime language modifications -lang()->set('CUSTOM_KEY', 'Custom Value'); -lang()->set('NESTED.KEY', 'Nested Value'); -``` - -### Language Management - -#### Available Languages -```php -// Get all available languages from configuration -$availableLanguages = lang()->getAvailableLanguages(); - -// Get language display name -$englishName = lang()->getLanguageName('en'); // Returns: "English" -$currentName = lang()->getLanguageName(); // Current language name - -// Get language locale for formatting -$locale = lang()->getLanguageLocale('ru'); // Returns: "ru_RU.UTF-8" -``` - -#### Dynamic Language Loading -```php -// Load additional language files (useful for modules/plugins) -$success = lang()->loadAdditionalFile('torrent_management'); -if ($success) { - echo lang()->get('TORRENT_UPLOADED'); -} - -// Load from specific language -lang()->loadAdditionalFile('admin_panel', 'de'); -``` - -#### Runtime Modifications -```php -// Set custom language strings -lang()->set('SITE_WELCOME', 'Welcome to Our Tracker!'); -lang()->set('ERRORS.INVALID_TORRENT', 'Invalid torrent file'); - -// Modify existing strings -lang()->set('LOGIN', 'Sign In'); -``` - -### Backward Compatibility Features - -The singleton automatically maintains all global variables: - -```php -// Global variable is automatically updated by the singleton -global $lang; - -// When you call lang()->set(), global is updated -lang()->set('CUSTOM', 'Value'); -echo $lang['CUSTOM']; // Outputs: "Value" - -// When language is initialized, $lang is populated -// $lang contains user language + source language fallbacks -``` - -### Integration with User System - -The Language singleton integrates seamlessly with the User system: - -```php -// User language is automatically detected and initialized -// Based on user preferences, browser detection, or defaults - -// In User->init_userprefs(), language is now initialized with: -lang()->initializeLanguage($userLanguage); - -// This replaces the old manual language file loading -// while maintaining exact same functionality -``` - -### Convenient Shorthand Functions - -For frequent language access, TorrentPier provides convenient shorthand functions: - -```php -// ✅ __() - Get language string (most common) -echo __('FORUM'); // Returns: "Forum" -echo __('DATETIME.TODAY'); // Nested access: "Today" -$msg = __('MISSING_KEY', 'Default'); // With default value - -// ✅ _e() - Echo language string directly -_e('WELCOME_MESSAGE'); // Same as: echo __('WELCOME_MESSAGE') -_e('USER_ONLINE', 'Online'); // With default value - -// ✅ Common usage patterns -$title = __('PAGE_TITLE', config()->get('sitename')); -$error = __('ERROR.INVALID_INPUT', 'Invalid input'); -``` - -These functions make language access much more convenient compared to the full `lang()->get()` syntax: - -```php -// Before (verbose) -echo lang()->get('FORUM'); -echo lang()->get('DATETIME.TODAY'); -$msg = lang()->get('WELCOME', 'Welcome'); - -// After (concise) -echo __('FORUM'); -echo __('DATETIME.TODAY'); -$msg = __('WELCOME', 'Welcome'); -``` - -### Magic Methods Support -```php -// Magic getter (same as lang()->get()) -$welcome = lang()->WELCOME; -$today = lang()->{'DATETIME.TODAY'}; - -// Magic setter (same as lang()->set()) -lang()->CUSTOM_MESSAGE = 'Hello World'; -lang()->{'NESTED.KEY'} = 'Nested Value'; - -// Magic isset -if (isset(lang()->ADVANCED_FEATURE)) { - // Language key exists -} -``` - -### Performance Benefits - -The 3.0 migration provides: -- **Single Language Loading**: Languages loaded once and cached in singleton -- **Memory Efficiency**: No duplicate language arrays across application -- **Automatic Locale Setting**: Proper locale configuration for date/time formatting -- **Fallback Chain**: Source language → Default language → Requested language - -### Verification - -To verify the migration is working correctly: - -```php -// ✅ Test convenient shorthand functions -echo "Forum text: " . __('FORUM'); -echo "Today text: " . __('DATETIME.TODAY'); -_e('INFORMATION'); // Echo directly - -// ✅ Test with default values -echo "Custom: " . __('CUSTOM_KEY', 'Default Value'); - -// ✅ Test full singleton access -echo "Current language: " . lang()->getCurrentLanguage(); -echo "Language name: " . lang()->getLanguageName(); - -// ✅ Test backward compatibility -global $lang; -echo "Global access: " . $lang['FORUM']; - -// ✅ Verify globals are synchronized -lang()->set('TEST_KEY', 'Test Value'); -echo "Sync test: " . $lang['TEST_KEY']; // Should output: "Test Value" -``` - -## 🛡️ Censor System Migration - -The word censoring system has been refactored to use a singleton pattern, similar to the Configuration system, providing better performance and consistency. - -### Quick Migration Overview - -```php -// ❌ Old way (still works, but not recommended) -global $wordCensor; -$censored = $wordCensor->censorString($text); - -// ✅ New way (recommended) -$censored = censor()->censorString($text); -``` - -### Key Censor Changes - -#### Basic Usage -```php -// Censor a string -$text = "This contains badword content"; -$censored = censor()->censorString($text); - -// Check if censoring is enabled -if (censor()->isEnabled()) { - $censored = censor()->censorString($text); -} else { - $censored = $text; -} - -// Get count of loaded censored words -$wordCount = censor()->getWordsCount(); -``` - -#### Advanced Usage -```php -// Add runtime censored words (temporary, not saved to database) -censor()->addWord('badword', '***'); -censor()->addWord('anotherbad*', 'replaced'); // Wildcards supported - -// Reload censored words from database (useful after admin updates) -censor()->reload(); - -// Check if censoring is enabled -$isEnabled = censor()->isEnabled(); -``` - -### Migration Required - -The global `$wordCensor` variable has been deprecated in TorrentPier 3.0: - -```php -// ❌ Legacy code (2.x) - will be removed -global $wordCensor; -$censored = $wordCensor->censorString($text); - -// ✅ New 3.0 API (required migration) -$censored = censor()->censorString($text); -``` - -### Performance Benefits - -- **Single Instance**: Only one censor instance loads words from database -- **Automatic Reloading**: Words are automatically reloaded when updated in admin panel -- **Memory Efficient**: Shared instance across entire application -- **Lazy Loading**: Words only loaded when censoring is enabled - -### Admin Panel Updates - -When you update censored words in the admin panel, the system now automatically: -1. Updates the datastore cache -2. Reloads the singleton instance with fresh words -3. Applies changes immediately without requiring page refresh - -## 📋 Select System Migration - -The Select class has been moved and reorganized for better structure and consistency within the legacy system organization. - -### Quick Migration Overview - -```php -// ❌ Old way (deprecated) -\TorrentPier\Legacy\Select::language($new['default_lang'], 'default_lang'); -\TorrentPier\Legacy\Select::timezone('', 'timezone_type'); -\TorrentPier\Legacy\Select::template($pr_data['tpl_name'], 'tpl_name'); - -// ✅ New way (recommended) -\TorrentPier\Legacy\Common\Select::language($new['default_lang'], 'default_lang'); -\TorrentPier\Legacy\Common\Select::timezone('', 'timezone_type'); -\TorrentPier\Legacy\Common\Select::template($pr_data['tpl_name'], 'tpl_name'); -``` - -#### Namespace Update -The Select class has been moved from `\TorrentPier\Legacy\Select` to `\TorrentPier\Legacy\Common\Select` to better organize legacy components. - -#### Method Usage Remains Unchanged -```php -// Language selection dropdown -$languageSelect = \TorrentPier\Legacy\Common\Select::language($currentLang, 'language_field'); - -// Timezone selection dropdown -$timezoneSelect = \TorrentPier\Legacy\Common\Select::timezone($currentTimezone, 'timezone_field'); - -// Template selection dropdown -$templateSelect = \TorrentPier\Legacy\Common\Select::template($currentTemplate, 'template_field'); -``` - -#### Available Select Methods -```php -// All existing methods remain available: -\TorrentPier\Legacy\Common\Select::language($selected, $name); -\TorrentPier\Legacy\Common\Select::timezone($selected, $name); -\TorrentPier\Legacy\Common\Select::template($selected, $name); -``` - -### Migration Required - -The old class path has been removed in TorrentPier 3.0: - -```php -// ❌ Legacy code (2.x) - will be removed -\TorrentPier\Legacy\Select::language($lang, 'default_lang'); - -// ✅ New 3.0 API (required migration) -\TorrentPier\Legacy\Common\Select::language($lang, 'default_lang'); -``` - -### Migration Strategy - -1. **Search and Replace**: Update all references to the old namespace -2. **Import Statements**: Update use statements if you're using them -3. **Configuration Files**: Update any configuration that references the old class path - -```php -// Update use statements -// Old -use TorrentPier\Legacy\Select; - -// New -use TorrentPier\Legacy\Common\Select; -``` - -## 🛠️ Development System Migration - -The development and debugging system has been refactored to use a singleton pattern, providing better resource management and consistency across the application. - -### Quick Migration Overview - -```php -// ❌ Old way (still works, but not recommended) -$sqlLog = \TorrentPier\Dev::getSqlLog(); -$isDebugAllowed = \TorrentPier\Dev::sqlDebugAllowed(); -$shortQuery = \TorrentPier\Dev::shortQuery($sql); - -// ✅ New way (recommended) -$sqlLog = dev()->getSqlDebugLog(); -$isDebugAllowed = dev()->checkSqlDebugAllowed(); -$shortQuery = dev()->formatShortQuery($sql); -``` - -### Key Development System Changes - -#### Basic Usage -```php -// Get SQL debug log -$sqlLog = dev()->getSqlDebugLog(); - -// Check if SQL debugging is allowed -if (dev()->checkSqlDebugAllowed()) { - $debugInfo = dev()->getSqlDebugLog(); -} - -// Format SQL queries for display -$formattedQuery = dev()->formatShortQuery($sql, true); // HTML escaped -$plainQuery = dev()->formatShortQuery($sql, false); // Plain text -``` - -#### New Instance Methods -```php -// Access Whoops instance directly -$whoops = dev()->getWhoops(); - -// Check debug mode status -if (dev()->isDebugEnabled()) { - // Debug mode is active -} - -// Check environment -if (dev()->isLocalEnvironment()) { - // Running in local development -} -``` - -### Migration Required - -Legacy static method calls have been deprecated in TorrentPier 3.0: - -```php -// ❌ Legacy code (2.x) - will be removed -$sqlLog = \TorrentPier\Dev::getSqlLog(); -$isDebugAllowed = \TorrentPier\Dev::sqlDebugAllowed(); -$shortQuery = \TorrentPier\Dev::shortQuery($sql); - -// ✅ New 3.0 API (required migration) -$sqlLog = dev()->getSqlDebugLog(); -$isDebugAllowed = dev()->checkSqlDebugAllowed(); -$shortQuery = dev()->formatShortQuery($sql); -``` - -### Performance Benefits - -- **Single Instance**: Only one debugging instance across the entire application -- **Resource Efficiency**: Whoops handlers initialized once and reused -- **Memory Optimization**: Shared debugging state and configuration -- **Lazy Loading**: Debug features only activated when needed - -### Advanced Usage - -```php -// Access the singleton directly -$devInstance = \TorrentPier\Dev::getInstance(); - -// Initialize the system (called automatically in common.php) -\TorrentPier\Dev::init(); - -// Get detailed environment information -$environment = [ - 'debug_enabled' => dev()->isDebugEnabled(), - 'local_environment' => dev()->isLocalEnvironment(), - 'sql_debug_allowed' => dev()->sqlDebugAllowed(), -]; -``` - -## ⚠️ Breaking Changes - -### Database Layer Changes -- **⚠️ Breaking Changes**: Legacy `DB()->method()` calls require migration to new API -- **Removed Files**: `src/Legacy/SqlDb.php` and `src/Legacy/Dbs.php` (replaced by modern implementation) -- **New Implementation**: Uses Nette Database v3.2 with improved API requiring code updates - -### Deprecated Functions -- `get_config()` → Use `config()->get()` -- `set_config()` → Use `config()->set()` -- Direct `$bb_cfg` access → Use `config()` methods - -### Deprecated Patterns -- `new TorrentPier\Censor()` → Use `censor()` global function -- Direct `$wordCensor` access → Use `censor()` methods -- `new TorrentPier\Dev()` → Use `dev()` global function -- Static `Dev::` methods → Use `dev()` instance methods -- `\TorrentPier\Legacy\Select::` → Use `\TorrentPier\Legacy\Common\Select::` - -### File Structure Changes -- New `/src/Database/` directory for modern database classes -- New `/src/` directory for modern PHP classes -- Reorganized template structure - -### Template Changes -- Updated template syntax in some areas -- New template variables available -- Deprecated template functions - -## 📋 Best Practices - -### Configuration Management -```php -// ✅ Always provide defaults -$timeout = config()->get('api.timeout', 30); - -// ✅ Use type hints -function getMaxUploadSize(): int { - return (int) config()->get('upload.max_size', 10485760); -} - -// ✅ Cache frequently used values -class TrackerService { - private string $announceUrl; - - public function __construct() { - $this->announceUrl = config()->get('bt_announce_url'); - } -} -``` - -### Censor Management -```php -// ✅ Check if censoring is enabled before processing -function processUserInput(string $text): string { - if (censor()->isEnabled()) { - return censor()->censorString($text); - } - return $text; -} - -// ✅ Use the singleton consistently -$censoredText = censor()->censorString($input); -``` - -### Select Usage -```php -// ✅ Use the new namespace consistently -$languageSelect = \TorrentPier\Legacy\Common\Select::language($currentLang, 'language_field'); - -// ✅ Store frequently used selects -class AdminPanel { - private string $languageSelect; - private string $timezoneSelect; - - public function __construct() { - $this->languageSelect = \TorrentPier\Legacy\Common\Select::language('', 'default_lang'); - $this->timezoneSelect = \TorrentPier\Legacy\Common\Select::timezone('', 'timezone'); - } -} -``` - -### Development and Debugging -```php -// ✅ Use instance methods for debugging -if (dev()->checkSqlDebugAllowed()) { - $debugLog = dev()->getSqlDebugLog(); -} - -// ✅ Access debugging utilities consistently -function formatSqlForDisplay(string $sql): string { - return dev()->formatShortQuery($sql, true); -} - -// ✅ Check environment properly -if (dev()->isLocalEnvironment()) { - // Development-specific code -} -class ForumPost { - public function getDisplayText(): string { - return censor()->censorString($this->text); - } -} - -// ✅ Add runtime words when needed -function setupCustomCensoring(): void { - if (isCustomModeEnabled()) { - censor()->addWord('custombad*', '[censored]'); - } -} -``` - -### Error Handling -```php -// ✅ Graceful error handling -try { - $dbConfig = config()->getSection('database'); - // Database operations -} catch (Exception $e) { - error_log("Database configuration error: " . $e->getMessage()); - // Fallback behavior -} -``` - -### Performance Optimization -```php -// ✅ Minimize configuration calls in loops -$cacheEnabled = config()->get('cache.enabled', false); -for ($i = 0; $i < 1000; $i++) { - if ($cacheEnabled) { - // Use cached value - } -} -``` - -### Security Considerations -```php -// ✅ Validate configuration values -$maxFileSize = min( - config()->get('upload.max_size', 1048576), - 1048576 * 100 // Hard limit: 100MB -); - -// ✅ Sanitize user-configurable values -$siteName = htmlspecialchars(config()->get('sitename', 'TorrentPier')); -``` - -### Testing and Quality Assurance -```bash -# ✅ Run tests before deploying changes -./vendor/bin/pest - -# ✅ Validate test coverage for new components -./vendor/bin/pest --coverage -``` - -For comprehensive testing documentation and best practices, see [tests/README.md](tests/README.md). - ---- - -**Important**: Always test the upgrade process in a staging environment before applying it to production. Keep backups of your database and files until you're confident the upgrade was successful. - -For additional support, visit our [Official Forum](https://torrentpier.com) or check our [GitHub Repository](https://github.com/torrentpier/torrentpier) for the latest updates and community discussions. diff --git a/legacy/_composer.lock b/legacy/_composer.lock deleted file mode 100644 index a513013f6..000000000 --- a/legacy/_composer.lock +++ /dev/null @@ -1,7835 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "57713d8849e71683b70d934a81f7e18c", - "packages": [ - { - "name": "arokettu/bencode", - "version": "4.3.1", - "source": { - "type": "git", - "url": "https://github.com/arokettu/bencode.git", - "reference": "0955a7037670c24d5ae5fdafe5ff5894aba024e7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/arokettu/bencode/zipball/0955a7037670c24d5ae5fdafe5ff5894aba024e7", - "reference": "0955a7037670c24d5ae5fdafe5ff5894aba024e7", - "shasum": "" - }, - "require": { - "arokettu/is-resource": "^1.0", - "php": "^8.1" - }, - "require-dev": { - "brick/math": "*", - "ext-bcmath": "*", - "ext-gmp": "*", - "ext-json": "*", - "mikey179/vfsstream": "^1.6.11", - "pear/math_biginteger": "^1.0", - "phpunit/phpunit": "^10.5.28", - "psy/psysh": "*", - "sandfox.dev/code-standard": "^1.2025.05.07", - "squizlabs/php_codesniffer": "*", - "vimeo/psalm": "^6" - }, - "suggest": { - "brick/math": "In case you need integers larger than your architecture supports", - "ext-bcmath": "In case you need integers larger than your architecture supports (PHP 8.4 or later)", - "ext-gmp": "In case you need integers larger than your architecture supports", - "pear/math_biginteger": "In case you need integers larger than your architecture supports", - "php-64bit": "Running 64 bit is recommended to prevent integer overflow" - }, - "type": "library", - "autoload": { - "psr-4": { - "Arokettu\\Bencode\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Anton Smirnov", - "email": "sandfox@sandfox.me", - "homepage": "https://sandfox.me", - "role": "developer" - } - ], - "description": "BitTorrent's Bencode encoder/decoder", - "homepage": "https://sandfox.dev/php/bencode.html", - "keywords": [ - "bencode", - "bittorrent", - "serialize", - "torrent" - ], - "support": { - "chat": "https://gitter.im/arokettu/community", - "docs": "https://bencode.readthedocs.io/", - "issues": "https://gitlab.com/sandfox/bencode/-/issues", - "source": "https://gitlab.com/sandfox/bencode" - }, - "time": "2025-05-20T19:25:23+00:00" - }, - { - "name": "arokettu/is-resource", - "version": "1.0.4", - "source": { - "type": "git", - "url": "https://github.com/arokettu/is-resource.git", - "reference": "6a4966bf4608c69d20b7bf01670b49901a51eb9d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/arokettu/is-resource/zipball/6a4966bf4608c69d20b7bf01670b49901a51eb9d", - "reference": "6a4966bf4608c69d20b7bf01670b49901a51eb9d", - "shasum": "" - }, - "require": { - "php": ">= 5.3 < 8.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "classmap": [ - "gen/ResourceMap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Anton Smirnov", - "email": "sandfox@sandfox.me", - "homepage": "https://sandfox.me/", - "role": "developer" - } - ], - "description": "Future compatible is_resource() and get_resource_type() that can understand objects that replaced earlier resources", - "homepage": "https://sandfox.dev/php/is-resource.html", - "keywords": [ - "compatibility", - "curl", - "gd", - "get_resource_type", - "hash", - "is_resource", - "pgsql", - "php80", - "php81", - "resources", - "sockets" - ], - "support": { - "chat": "https://gitter.im/arokettu/community", - "docs": "https://is-resource.readthedocs.io/", - "issues": "https://gitlab.com/sandfox/is-resource/-/issues", - "source": "https://gitlab.com/sandfox/is-resource" - }, - "time": "2024-08-27T04:34:45+00:00" - }, - { - "name": "arokettu/monsterid", - "version": "4.1.0", - "source": { - "type": "git", - "url": "https://github.com/arokettu/monsterid.git", - "reference": "4e7484a593c42eba960ee555877dd9b26577fe8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/arokettu/monsterid/zipball/4e7484a593c42eba960ee555877dd9b26577fe8a", - "reference": "4e7484a593c42eba960ee555877dd9b26577fe8a", - "shasum": "" - }, - "require": { - "arokettu/is-resource": "^1.0", - "arokettu/random-polyfill": "^1.0.1", - "ext-gd": "*", - "php": "^8.0", - "psr/http-factory": "^1.0" - }, - "require-dev": { - "arokettu/random-polyfill": ">= 1.0.1 < 1.99", - "httpsoft/http-message": "^1.1", - "php-http/discovery": "^1.20", - "phpunit/phpunit": ">= 7.0 < 10", - "psy/psysh": "*", - "sandfox.dev/code-standard": "^1.2025.03.27", - "slim/psr7": "^1.7", - "squizlabs/php_codesniffer": "*", - "vimeo/psalm": "^5.4 || ^6.0" - }, - "type": "library", - "extra": { - "discovery": { - "psr/http-factory-implementation": "Arokettu\\MonsterID\\Tests\\Helpers\\HttpFactory" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Arokettu\\MonsterID\\": "src/classes" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andreas Gohr", - "homepage": "https://www.splitbrain.org/", - "role": "developer" - }, - { - "name": "Anton Smirnov", - "email": "sandfox+composer@sandfox.me", - "homepage": "https://sandfox.me/", - "role": "maintainer" - } - ], - "description": "MonsterID is a method to generate a unique monster image based upon a certain identifier (IP address, email address, whatever). It can be used to automatically provide personal avatar images in blog comments or other community services.", - "homepage": "https://sandfox.dev/php/monsterid.html", - "keywords": [ - "avatar", - "monsterid" - ], - "support": { - "chat": "https://gitter.im/arokettu/community", - "docs": "https://monsterid.readthedocs.io/", - "issues": "https://gitlab.com/sandfox/monsterid/-/issues", - "source": "https://gitlab.com/sandfox/monsterid" - }, - "time": "2025-04-03T13:37:00+00:00" - }, - { - "name": "arokettu/random-polyfill", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/arokettu/php-random-polyfill.git", - "reference": "1c36416a2b507d5aa6c0a6d7f7b8aa2c539f8361" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/arokettu/php-random-polyfill/zipball/1c36416a2b507d5aa6c0a6d7f7b8aa2c539f8361", - "reference": "1c36416a2b507d5aa6c0a6d7f7b8aa2c539f8361", - "shasum": "" - }, - "require": { - "arokettu/unsigned": "^1.2.1", - "php": "^7.1 | ^8.0", - "symfony/polyfill-php80": "^1.22", - "symfony/polyfill-php81": "^1.22", - "symfony/polyfill-php82": "^1.27" - }, - "provide": { - "ext-random": "8.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.5 | ^8.5 | 9.5.*", - "psy/psysh": "*", - "sandfox.dev/code-standard": "^1", - "squizlabs/php_codesniffer": "*", - "vimeo/psalm": "^4.24" - }, - "suggest": { - "ext-gmp": "For significantly faster calculation" - }, - "type": "library", - "autoload": { - "psr-0": { - "Random\\": "src", - "Arokettu\\Random\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Anton Smirnov", - "email": "sandfox@sandfox.me", - "homepage": "https://sandfox.me/", - "role": "developer" - } - ], - "description": "Random Extension Polyfill for PHP", - "homepage": "https://sandfox.dev/php/random-polyfill.html", - "keywords": [ - "polyfill", - "random" - ], - "support": { - "chat": "https://gitter.im/arokettu/community", - "docs": "https://php-random-polyfill.readthedocs.io/", - "issues": "https://github.com/arokettu/php-random-polyfill/issues", - "source": "https://github.com/arokettu/php-random-polyfill" - }, - "time": "2023-09-07T13:01:52+00:00" - }, - { - "name": "arokettu/torrent-file", - "version": "5.3.1", - "source": { - "type": "git", - "url": "https://github.com/arokettu/torrent-file.git", - "reference": "650ed7109bcd01dd6c4f47d129f120eb1f82ca07" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/arokettu/torrent-file/zipball/650ed7109bcd01dd6c4f47d129f120eb1f82ca07", - "reference": "650ed7109bcd01dd6c4f47d129f120eb1f82ca07", - "shasum": "" - }, - "require": { - "arokettu/bencode": "^2.8 | ^3.1 | ^4.0", - "ext-hash": "*", - "nikic/iter": "^2.2", - "php": "^8.1", - "psr/event-dispatcher": "^1.0", - "symfony/filesystem": "^5.4 | ^6.0 | ^7.0", - "symfony/finder": "^5.4 | ^6.0 | ^7.0" - }, - "require-dev": { - "ext-openssl": "*", - "jetbrains/phpstorm-attributes": "^1.0", - "league/event": "^3.0", - "phpunit/phpunit": "^10.5.3", - "psy/psysh": "*", - "sandfox.dev/code-standard": "^1.2024.07.05", - "squizlabs/php_codesniffer": "*", - "vimeo/psalm": "^5.2" - }, - "suggest": { - "ext-openssl": "for signature logic" - }, - "type": "library", - "autoload": { - "psr-4": { - "Arokettu\\Torrent\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Anton Smirnov", - "email": "sandfox@sandfox.me", - "homepage": "https://sandfox.me/", - "role": "developer" - } - ], - "description": "A class to work with torrent files", - "homepage": "https://sandfox.dev/php/torrent-file.html", - "keywords": [ - "bittorrent", - "torrent", - "torrent-file" - ], - "support": { - "chat": "https://gitter.im/arokettu/community", - "docs": "https://torrent-file.readthedocs.io/", - "issues": "https://gitlab.com/sandfox/torrent-file/-/issues", - "source": "https://gitlab.com/sandfox/torrent-file" - }, - "time": "2024-07-28T21:43:34+00:00" - }, - { - "name": "arokettu/unsigned", - "version": "1.3.6", - "source": { - "type": "git", - "url": "https://github.com/arokettu/unsigned.git", - "reference": "1e5b3a131d669ee31c4d941bc27e4ba4ef64ae76" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/arokettu/unsigned/zipball/1e5b3a131d669ee31c4d941bc27e4ba4ef64ae76", - "reference": "1e5b3a131d669ee31c4d941bc27e4ba4ef64ae76", - "shasum": "" - }, - "require": { - "php": "^7.0 | ^8.0" - }, - "require-dev": { - "phpunit/phpunit": ">= 6.5 <10", - "psy/psysh": "*", - "sandfox.dev/code-standard": "^1.2025.03.27", - "squizlabs/php_codesniffer": "*" - }, - "type": "library", - "autoload": { - "files": [ - "src/lib.php" - ], - "classmap": [ - "src/Unsigned.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Anton Smirnov", - "email": "sandfox@sandfox.me", - "homepage": "https://sandfox.me/", - "role": "developer" - } - ], - "description": "Fixed length unsigned arithmetic emulation", - "homepage": "https://sandfox.dev/php/unsigned.html", - "keywords": [ - "arithmetic", - "unsigned" - ], - "support": { - "chat": "https://gitter.im/arokettu/community", - "docs": "https://php-unsigned.readthedocs.io/", - "issues": "https://gitlab.com/sandfox/unsigned/-/issues", - "source": "https://gitlab.com/sandfox/unsigned" - }, - "time": "2025-03-31T23:49:37+00:00" - }, - { - "name": "belomaxorka/captcha", - "version": "v1.2.4", - "source": { - "type": "git", - "url": "https://github.com/belomaxorka/Captcha.git", - "reference": "db51723a9539b57ac3faff0211c117b4c55dbe23" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/belomaxorka/Captcha/zipball/db51723a9539b57ac3faff0211c117b4c55dbe23", - "reference": "db51723a9539b57ac3faff0211c117b4c55dbe23", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "ext-gd": "*", - "ext-mbstring": "*", - "php": ">=5.3.0", - "symfony/finder": "*" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6.4 || ^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Gregwar\\": "src/Gregwar" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Grégoire Passault", - "email": "g.passault@gmail.com", - "homepage": "https://www.gregwar.com/", - "role": "Developer" - }, - { - "name": "Jeremy Livingston", - "email": "jeremy.j.livingston@gmail.com" - }, - { - "name": "belomaxorka", - "email": "roman25052006.kelesh@gmail.com", - "homepage": "https://belomaxorka.github.io/", - "role": "Developer" - } - ], - "description": "Captcha generator", - "homepage": "https://github.com/belomaxorka/Captcha", - "keywords": [ - "anti-bot", - "anti-spam", - "bot-protection", - "captcha", - "no-bot", - "obfuscation", - "security", - "spam", - "spam-protection" - ], - "support": { - "source": "https://github.com/belomaxorka/Captcha/tree/v1.2.4" - }, - "time": "2025-03-10T13:15:53+00:00" - }, - { - "name": "bugsnag/bugsnag", - "version": "v3.29.3", - "source": { - "type": "git", - "url": "https://github.com/bugsnag/bugsnag-php.git", - "reference": "9d9aa665f5e9d24f45aad5114dbd2d861119febb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bugsnag/bugsnag-php/zipball/9d9aa665f5e9d24f45aad5114dbd2d861119febb", - "reference": "9d9aa665f5e9d24f45aad5114dbd2d861119febb", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.0", - "guzzlehttp/guzzle": "^5.0|^6.0|^7.0", - "php": ">=5.5" - }, - "require-dev": { - "guzzlehttp/psr7": "^1.3|^2.0", - "mtdowling/burgomaster": "dev-master#72151eddf5f0cf101502b94bf5031f9c53501a04", - "php-mock/php-mock-phpunit": "^1.1|^2.1", - "phpunit/phpunit": "^4.8.36|^7.5.15|^9.3.10", - "sebastian/version": ">=1.0.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.20-dev" - } - }, - "autoload": { - "psr-4": { - "Bugsnag\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "James Smith", - "email": "notifiers@bugsnag.com", - "homepage": "https://bugsnag.com" - } - ], - "description": "Official Bugsnag notifier for PHP applications.", - "homepage": "https://github.com/bugsnag/bugsnag-php", - "keywords": [ - "bugsnag", - "errors", - "exceptions", - "logging", - "tracking" - ], - "support": { - "issues": "https://github.com/bugsnag/bugsnag-php/issues", - "source": "https://github.com/bugsnag/bugsnag-php/tree/v3.29.3" - }, - "time": "2025-03-06T12:03:07+00:00" - }, - { - "name": "cakephp/chronos", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/cakephp/chronos.git", - "reference": "786d69e1ee4b735765cbdb5521b9603e9b98d650" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/chronos/zipball/786d69e1ee4b735765cbdb5521b9603e9b98d650", - "reference": "786d69e1ee4b735765cbdb5521b9603e9b98d650", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/clock": "^1.0" - }, - "provide": { - "psr/clock-implementation": "1.0" - }, - "require-dev": { - "cakephp/cakephp-codesniffer": "^5.0", - "phpunit/phpunit": "^10.1.0 || ^11.1.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cake\\Chronos\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" - }, - { - "name": "The CakePHP Team", - "homepage": "https://cakephp.org" - } - ], - "description": "A simple API extension for DateTime.", - "homepage": "https://cakephp.org", - "keywords": [ - "date", - "datetime", - "time" - ], - "support": { - "issues": "https://github.com/cakephp/chronos/issues", - "source": "https://github.com/cakephp/chronos" - }, - "time": "2024-07-18T03:18:04+00:00" - }, - { - "name": "cakephp/core", - "version": "5.2.5", - "source": { - "type": "git", - "url": "https://github.com/cakephp/core.git", - "reference": "a0a92ee7fbb7b7555dbf4ea7ff3fd4e779693da6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/core/zipball/a0a92ee7fbb7b7555dbf4ea7ff3fd4e779693da6", - "reference": "a0a92ee7fbb7b7555dbf4ea7ff3fd4e779693da6", - "shasum": "" - }, - "require": { - "cakephp/utility": "5.2.*@dev", - "league/container": "^4.2", - "php": ">=8.1", - "psr/container": "^1.1 || ^2.0" - }, - "provide": { - "psr/container-implementation": "^2.0" - }, - "suggest": { - "cakephp/cache": "To use Configure::store() and restore().", - "cakephp/event": "To use PluginApplicationInterface or plugin applications.", - "league/container": "To use Container and ServiceProvider classes" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-5.x": "5.2.x-dev" - } - }, - "autoload": { - "files": [ - "functions.php" - ], - "psr-4": { - "Cake\\Core\\": "." - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/core/graphs/contributors" - } - ], - "description": "CakePHP Framework Core classes", - "homepage": "https://cakephp.org", - "keywords": [ - "cakephp", - "core", - "framework" - ], - "support": { - "forum": "https://stackoverflow.com/tags/cakephp", - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/cakephp/issues", - "source": "https://github.com/cakephp/core" - }, - "time": "2025-04-19T12:34:03+00:00" - }, - { - "name": "cakephp/database", - "version": "5.2.5", - "source": { - "type": "git", - "url": "https://github.com/cakephp/database.git", - "reference": "a6bf606b1bab532d04ea504fef8a272a1aeba287" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/database/zipball/a6bf606b1bab532d04ea504fef8a272a1aeba287", - "reference": "a6bf606b1bab532d04ea504fef8a272a1aeba287", - "shasum": "" - }, - "require": { - "cakephp/chronos": "^3.1", - "cakephp/core": "5.2.*@dev", - "cakephp/datasource": "5.2.*@dev", - "php": ">=8.1", - "psr/log": "^3.0" - }, - "require-dev": { - "cakephp/i18n": "5.2.*@dev", - "cakephp/log": "5.2.*@dev" - }, - "suggest": { - "cakephp/i18n": "If you are using locale-aware datetime formats.", - "cakephp/log": "If you want to use query logging without providing a logger yourself." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-5.x": "5.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Cake\\Database\\": "." - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/database/graphs/contributors" - } - ], - "description": "Flexible and powerful Database abstraction library with a familiar PDO-like API", - "homepage": "https://cakephp.org", - "keywords": [ - "abstraction", - "cakephp", - "database", - "database abstraction", - "pdo" - ], - "support": { - "forum": "https://stackoverflow.com/tags/cakephp", - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/cakephp/issues", - "source": "https://github.com/cakephp/database" - }, - "time": "2025-06-18T02:55:13+00:00" - }, - { - "name": "cakephp/datasource", - "version": "5.2.5", - "source": { - "type": "git", - "url": "https://github.com/cakephp/datasource.git", - "reference": "f7dc4292bec0ec746db3200a5b18bb371d50dab3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/datasource/zipball/f7dc4292bec0ec746db3200a5b18bb371d50dab3", - "reference": "f7dc4292bec0ec746db3200a5b18bb371d50dab3", - "shasum": "" - }, - "require": { - "cakephp/core": "5.2.*@dev", - "php": ">=8.1", - "psr/simple-cache": "^2.0 || ^3.0" - }, - "require-dev": { - "cakephp/cache": "5.2.*@dev", - "cakephp/collection": "5.2.*@dev", - "cakephp/utility": "5.2.*@dev" - }, - "suggest": { - "cakephp/cache": "If you decide to use Query caching.", - "cakephp/collection": "If you decide to use ResultSetInterface.", - "cakephp/utility": "If you decide to use EntityTrait." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-5.x": "5.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Cake\\Datasource\\": "." - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/datasource/graphs/contributors" - } - ], - "description": "Provides connection managing and traits for Entities and Queries that can be reused for different datastores", - "homepage": "https://cakephp.org", - "keywords": [ - "cakephp", - "connection management", - "datasource", - "entity", - "query" - ], - "support": { - "forum": "https://stackoverflow.com/tags/cakephp", - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/cakephp/issues", - "source": "https://github.com/cakephp/datasource" - }, - "time": "2025-04-26T23:00:26+00:00" - }, - { - "name": "cakephp/utility", - "version": "5.2.5", - "source": { - "type": "git", - "url": "https://github.com/cakephp/utility.git", - "reference": "7eaef40766bf671332adfacdc2d6fb9ea8aea5de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/utility/zipball/7eaef40766bf671332adfacdc2d6fb9ea8aea5de", - "reference": "7eaef40766bf671332adfacdc2d6fb9ea8aea5de", - "shasum": "" - }, - "require": { - "cakephp/core": "5.2.*@dev", - "php": ">=8.1" - }, - "suggest": { - "ext-intl": "To use Text::transliterate() or Text::slug()", - "lib-ICU": "To use Text::transliterate() or Text::slug()" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-5.x": "5.2.x-dev" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Cake\\Utility\\": "." - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/utility/graphs/contributors" - } - ], - "description": "CakePHP Utility classes such as Inflector, String, Hash, and Security", - "homepage": "https://cakephp.org", - "keywords": [ - "cakephp", - "hash", - "inflector", - "security", - "string", - "utility" - ], - "support": { - "forum": "https://stackoverflow.com/tags/cakephp", - "irc": "irc://irc.freenode.org/cakephp", - "issues": "https://github.com/cakephp/cakephp/issues", - "source": "https://github.com/cakephp/utility" - }, - "time": "2025-05-21T14:35:19+00:00" - }, - { - "name": "claviska/simpleimage", - "version": "4.2.1", - "source": { - "type": "git", - "url": "https://github.com/claviska/SimpleImage.git", - "reference": "ec6d5021e5a7153a2520d64c59b86b6f3c4157c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/claviska/SimpleImage/zipball/ec6d5021e5a7153a2520d64c59b86b6f3c4157c5", - "reference": "ec6d5021e5a7153a2520d64c59b86b6f3c4157c5", - "shasum": "" - }, - "require": { - "ext-gd": "*", - "league/color-extractor": "0.4.*", - "php": ">=8.0" - }, - "require-dev": { - "laravel/pint": "^1.5", - "phpstan/phpstan": "^1.10" - }, - "type": "library", - "autoload": { - "psr-0": { - "claviska": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Cory LaViska", - "homepage": "http://www.abeautifulsite.net/", - "role": "Developer" - } - ], - "description": "A PHP class that makes working with images as simple as possible.", - "support": { - "issues": "https://github.com/claviska/SimpleImage/issues", - "source": "https://github.com/claviska/SimpleImage/tree/4.2.1" - }, - "funding": [ - { - "url": "https://github.com/claviska", - "type": "github" - } - ], - "time": "2024-11-22T13:25:03+00:00" - }, - { - "name": "composer/ca-bundle", - "version": "1.5.7", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "d665d22c417056996c59019579f1967dfe5c1e82" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d665d22c417056996c59019579f1967dfe5c1e82", - "reference": "d665d22c417056996c59019579f1967dfe5c1e82", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8 || ^9", - "psr/log": "^1.0 || ^2.0 || ^3.0", - "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.7" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2025-05-26T15:08:54+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": "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": "filp/whoops", - "version": "2.18.3", - "source": { - "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "59a123a3d459c5a23055802237cb317f609867e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/59a123a3d459c5a23055802237cb317f609867e5", - "reference": "59a123a3d459c5a23055802237cb317f609867e5", - "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.3" - }, - "funding": [ - { - "url": "https://github.com/denis-sokolov", - "type": "github" - } - ], - "time": "2025-06-16T00:02:10+00:00" - }, - { - "name": "gemorroj/m3u-parser", - "version": "6.0.1", - "source": { - "type": "git", - "url": "https://github.com/Gemorroj/M3uParser.git", - "reference": "92fc0fe236d77e1b5a26c735ffcb6fc637eb298a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Gemorroj/M3uParser/zipball/92fc0fe236d77e1b5a26c735ffcb6fc637eb298a", - "reference": "92fc0fe236d77e1b5a26c735ffcb6fc637eb298a", - "shasum": "" - }, - "require": { - "php": ">=8.0.2" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.73.1", - "phpstan/phpstan": "^2.1", - "phpunit/phpunit": "^9.6.22" - }, - "type": "library", - "autoload": { - "psr-4": { - "M3uParser\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Gemorroj" - } - ], - "description": "m3u playlist parser/generator", - "keywords": [ - "m3u", - "m3u8", - "playlist" - ], - "support": { - "issues": "https://github.com/Gemorroj/M3uParser/issues", - "source": "https://github.com/Gemorroj/M3uParser/tree/6.0.1" - }, - "time": "2025-03-25T19:21:43+00:00" - }, - { - "name": "gigablah/sphinxphp", - "version": "2.0.8", - "source": { - "type": "git", - "url": "https://github.com/gigablah/sphinxphp.git", - "reference": "6d5e97fdd33c1129ca372203d1330827c1cbc46c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/gigablah/sphinxphp/zipball/6d5e97fdd33c1129ca372203d1330827c1cbc46c", - "reference": "6d5e97fdd33c1129ca372203d1330827c1cbc46c", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*", - "satooshi/php-coveralls": "dev-master" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Sphinx": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0" - ], - "authors": [ - { - "name": "Andrew Aksyonoff", - "homepage": "http://sphinxsearch.com/" - } - ], - "description": "Sphinx Search PHP API", - "homepage": "http://sphinxsearch.com/", - "keywords": [ - "api", - "search", - "sphinx" - ], - "support": { - "issues": "https://github.com/gigablah/sphinxphp/issues", - "source": "https://github.com/gigablah/sphinxphp/tree/2.0.x" - }, - "time": "2013-08-22T08:05:44+00:00" - }, - { - "name": "google/recaptcha", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/google/recaptcha.git", - "reference": "d59a801e98a4e9174814a6d71bbc268dff1202df" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/google/recaptcha/zipball/d59a801e98a4e9174814a6d71bbc268dff1202df", - "reference": "d59a801e98a4e9174814a6d71bbc268dff1202df", - "shasum": "" - }, - "require": { - "php": ">=8" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.14", - "php-coveralls/php-coveralls": "^2.5", - "phpunit/phpunit": "^10" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "psr-4": { - "ReCaptcha\\": "src/ReCaptcha" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Client library for reCAPTCHA, a free service that protects websites from spam and abuse.", - "homepage": "https://www.google.com/recaptcha/", - "keywords": [ - "Abuse", - "captcha", - "recaptcha", - "spam" - ], - "support": { - "forum": "https://groups.google.com/forum/#!forum/recaptcha", - "issues": "https://github.com/google/recaptcha/issues", - "source": "https://github.com/google/recaptcha" - }, - "time": "2023-02-18T17:41:46+00:00" - }, - { - "name": "graham-campbell/result-type", - "version": "v1.1.3", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" - }, - "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.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", - "type": "tidelift" - } - ], - "time": "2024-07-20T21:45:45+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "7.9.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", - "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.3", - "guzzlehttp/psr7": "^2.7.0", - "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.9.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "time": "2025-03-27T13:37:11+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", - "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" - }, - "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.2.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-03-27T13:27:01+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "2.7.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", - "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", - "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.39 || ^9.6.20" - }, - "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.7.1" - }, - "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-03-27T12:30:47+00:00" - }, - { - "name": "jacklul/monolog-telegram", - "version": "3.2.0", - "source": { - "type": "git", - "url": "https://github.com/jacklul/monolog-telegram.git", - "reference": "1f2069f5556b1c8d6eb2d8b8ac29ff376675cf46" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jacklul/monolog-telegram/zipball/1f2069f5556b1c8d6eb2d8b8ac29ff376675cf46", - "reference": "1f2069f5556b1c8d6eb2d8b8ac29ff376675cf46", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "monolog/monolog": "^3.0", - "php": "^8.1" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^9.0", - "squizlabs/php_codesniffer": "^3.2", - "vlucas/phpdotenv": "^5.0" - }, - "suggest": { - "ext-curl": "cURL generally works better and is recommended" - }, - "type": "library", - "autoload": { - "psr-4": { - "jacklul\\MonologTelegramHandler\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jack'lul", - "email": "jacklulcat@gmail.com", - "homepage": "https://jacklul.github.io", - "role": "Developer" - } - ], - "description": "Monolog handler that sends logs through Telegram bot to any chat in HTML format", - "keywords": [ - "bot", - "log", - "logging", - "monolog", - "telegram" - ], - "support": { - "issues": "https://github.com/jacklul/monolog-telegram/issues", - "source": "https://github.com/jacklul/monolog-telegram" - }, - "time": "2025-01-24T18:07:58+00:00" - }, - { - "name": "josantonius/cookie", - "version": "v2.0.7", - "source": { - "type": "git", - "url": "https://github.com/josantonius/php-cookie.git", - "reference": "f6751dcfdd47a8ed54a77c77760eded24676b8cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/josantonius/php-cookie/zipball/f6751dcfdd47a8ed54a77c77760eded24676b8cf", - "reference": "f6751dcfdd47a8ed54a77c77760eded24676b8cf", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "guzzlehttp/guzzle": "^7.4", - "phpmd/phpmd": "^2.6", - "phpunit/phpunit": "^9.5", - "squizlabs/php_codesniffer": "^3.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "Josantonius\\Cookie\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Josantonius", - "email": "hello@josantonius.dev", - "homepage": "https://josantonius.dev", - "role": "Developer" - } - ], - "description": "PHP library for handling cookies.", - "keywords": [ - "cookies", - "php" - ], - "support": { - "discussions": "https://github.com/josantonius/php-cookie/discussions", - "issues": "https://github.com/josantonius/php-cookie/issues", - "source": "https://github.com/josantonius/php-cookie" - }, - "funding": [ - { - "url": "https://github.com/Josantonius", - "type": "github" - } - ], - "time": "2024-09-11T14:15:04+00:00" - }, - { - "name": "laravel/serializable-closure", - "version": "v2.0.4", - "source": { - "type": "git", - "url": "https://github.com/laravel/serializable-closure.git", - "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b352cf0534aa1ae6b4d825d1e762e35d43f8a841", - "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "illuminate/support": "^10.0|^11.0|^12.0", - "nesbot/carbon": "^2.67|^3.0", - "pestphp/pest": "^2.36|^3.0", - "phpstan/phpstan": "^2.0", - "symfony/var-dumper": "^6.2.0|^7.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": "2025-03-19T13:51:03+00:00" - }, - { - "name": "league/color-extractor", - "version": "0.4.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/color-extractor.git", - "reference": "21fcac6249c5ef7d00eb83e128743ee6678fe505" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/color-extractor/zipball/21fcac6249c5ef7d00eb83e128743ee6678fe505", - "reference": "21fcac6249c5ef7d00eb83e128743ee6678fe505", - "shasum": "" - }, - "require": { - "ext-gd": "*", - "php": "^7.3 || ^8.0" - }, - "replace": { - "matthecat/colorextractor": "*" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2", - "phpunit/phpunit": "^9.5" - }, - "suggest": { - "ext-curl": "To download images from remote URLs if allow_url_fopen is disabled for security reasons" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\ColorExtractor\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mathieu Lechat", - "email": "math.lechat@gmail.com", - "homepage": "http://matthecat.com", - "role": "Developer" - } - ], - "description": "Extract colors from an image as a human would do.", - "homepage": "https://github.com/thephpleague/color-extractor", - "keywords": [ - "color", - "extract", - "human", - "image", - "palette" - ], - "support": { - "issues": "https://github.com/thephpleague/color-extractor/issues", - "source": "https://github.com/thephpleague/color-extractor/tree/0.4.0" - }, - "time": "2022-09-24T15:57:16+00:00" - }, - { - "name": "league/container", - "version": "4.2.5", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/container.git", - "reference": "d3cebb0ff4685ff61c749e54b27db49319e2ec00" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/container/zipball/d3cebb0ff4685ff61c749e54b27db49319e2ec00", - "reference": "d3cebb0ff4685ff61c749e54b27db49319e2ec00", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "psr/container": "^1.1 || ^2.0" - }, - "provide": { - "psr/container-implementation": "^1.0" - }, - "replace": { - "orno/di": "~2.0" - }, - "require-dev": { - "nette/php-generator": "^3.4", - "nikic/php-parser": "^4.10", - "phpstan/phpstan": "^0.12.47", - "phpunit/phpunit": "^8.5.17", - "roave/security-advisories": "dev-latest", - "scrutinizer/ocular": "^1.8", - "squizlabs/php_codesniffer": "^3.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev", - "dev-2.x": "2.x-dev", - "dev-3.x": "3.x-dev", - "dev-4.x": "4.x-dev", - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Container\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Phil Bennett", - "email": "mail@philbennett.co.uk", - "role": "Developer" - } - ], - "description": "A fast and intuitive dependency injection container.", - "homepage": "https://github.com/thephpleague/container", - "keywords": [ - "container", - "dependency", - "di", - "injection", - "league", - "provider", - "service" - ], - "support": { - "issues": "https://github.com/thephpleague/container/issues", - "source": "https://github.com/thephpleague/container/tree/4.2.5" - }, - "funding": [ - { - "url": "https://github.com/philipobenito", - "type": "github" - } - ], - "time": "2025-05-20T12:55:37+00:00" - }, - { - "name": "league/flysystem", - "version": "3.29.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319", - "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319", - "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", - "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", - "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.29.1" - }, - "time": "2024-10-08T08:58:34+00:00" - }, - { - "name": "league/flysystem-local", - "version": "3.29.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27", - "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27", - "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.29.0" - }, - "time": "2024-08-09T21:24:39+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": "longman/ip-tools", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/akalongman/php-ip-tools.git", - "reference": "6c050dfbf91811d14b9b3aa31fb7116eac0f0a18" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/akalongman/php-ip-tools/zipball/6c050dfbf91811d14b9b3aa31fb7116eac0f0a18", - "reference": "6c050dfbf91811d14b9b3aa31fb7116eac0f0a18", - "shasum": "" - }, - "require": { - "ext-bcmath": "*", - "php": ">=5.5" - }, - "require-dev": { - "phpspec/phpspec": "~2.1", - "phpunit/phpunit": "~4.1", - "squizlabs/php_codesniffer": "~2.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Longman\\IPTools\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Avtandil Kikabidze aka LONGMAN", - "email": "akalongman@gmail.com", - "homepage": "https://longman.me", - "role": "Developer" - } - ], - "description": "PHP IP Tools for manipulation with IPv4 and IPv6", - "homepage": "https://github.com/akalongman/php-ip-tools", - "keywords": [ - "IP", - "Match", - "compare", - "ipv4", - "ipv6", - "mask", - "subnet", - "tools", - "utilities" - ], - "support": { - "issues": "https://github.com/akalongman/php-ip-tools/issues", - "source": "https://github.com/akalongman/php-ip-tools" - }, - "time": "2016-10-23T20:08:46+00:00" - }, - { - "name": "monolog/monolog", - "version": "3.9.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", - "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", - "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", - "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.9.0" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2025-03-24T10:02:05+00:00" - }, - { - "name": "nette/caching", - "version": "v3.3.1", - "source": { - "type": "git", - "url": "https://github.com/nette/caching.git", - "reference": "b37d2c9647b41a9d04f099f10300dc5496c4eb77" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/b37d2c9647b41a9d04f099f10300dc5496c4eb77", - "reference": "b37d2c9647b41a9d04f099f10300dc5496c4eb77", - "shasum": "" - }, - "require": { - "nette/utils": "^4.0", - "php": "8.0 - 8.4" - }, - "conflict": { - "latte/latte": ">=3.0.0 <3.0.12" - }, - "require-dev": { - "latte/latte": "^2.11 || ^3.0.12", - "nette/di": "^3.1 || ^4.0", - "nette/tester": "^2.4", - "phpstan/phpstan": "^1.0", - "psr/simple-cache": "^2.0 || ^3.0", - "tracy/tracy": "^2.9" - }, - "suggest": { - "ext-pdo_sqlite": "to use SQLiteStorage or SQLiteJournal" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3-dev" - } - }, - "autoload": { - "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 Caching: library with easy-to-use API and many cache backends.", - "homepage": "https://nette.org", - "keywords": [ - "cache", - "journal", - "memcached", - "nette", - "sqlite" - ], - "support": { - "issues": "https://github.com/nette/caching/issues", - "source": "https://github.com/nette/caching/tree/v3.3.1" - }, - "time": "2024-08-07T00:01:58+00:00" - }, - { - "name": "nette/database", - "version": "v3.2.7", - "source": { - "type": "git", - "url": "https://github.com/nette/database.git", - "reference": "10a7c76e314a06bb5f92d447d82170b5dde7392f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/database/zipball/10a7c76e314a06bb5f92d447d82170b5dde7392f", - "reference": "10a7c76e314a06bb5f92d447d82170b5dde7392f", - "shasum": "" - }, - "require": { - "ext-pdo": "*", - "nette/caching": "^3.2", - "nette/utils": "^4.0", - "php": "8.1 - 8.4" - }, - "require-dev": { - "jetbrains/phpstorm-attributes": "^1.0", - "mockery/mockery": "^1.6", - "nette/di": "^3.1", - "nette/tester": "^2.5", - "phpstan/phpstan-nette": "^1.0", - "tracy/tracy": "^2.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "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 Database: layer with a familiar PDO-like API but much more powerful. Building queries, advanced joins, drivers for MySQL, PostgreSQL, SQLite, MS SQL Server and Oracle.", - "homepage": "https://nette.org", - "keywords": [ - "database", - "mssql", - "mysql", - "nette", - "notorm", - "oracle", - "pdo", - "postgresql", - "queries", - "sqlite" - ], - "support": { - "issues": "https://github.com/nette/database/issues", - "source": "https://github.com/nette/database/tree/v3.2.7" - }, - "time": "2025-06-03T05:00:20+00:00" - }, - { - "name": "nette/utils", - "version": "v4.0.7", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/e67c4061eb40b9c113b218214e42cb5a0dda28f2", - "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2", - "shasum": "" - }, - "require": { - "php": "8.0 - 8.4" - }, - "conflict": { - "nette/finder": "<3", - "nette/schema": "<1.2.2" - }, - "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "^2.5", - "phpstan/phpstan": "^1.0", - "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.0-dev" - } - }, - "autoload": { - "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.0.7" - }, - "time": "2025-06-03T04:55:08+00:00" - }, - { - "name": "nikic/iter", - "version": "v2.4.1", - "source": { - "type": "git", - "url": "https://github.com/nikic/iter.git", - "reference": "3f031ae08d82c4394410e76b88b441331a6fa15f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/iter/zipball/3f031ae08d82c4394410e76b88b441331a6fa15f", - "reference": "3f031ae08d82c4394410e76b88b441331a6fa15f", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "vimeo/psalm": "^4.18 || ^5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/iter.func.php", - "src/iter.php", - "src/iter.rewindable.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov", - "email": "nikic@php.net" - } - ], - "description": "Iteration primitives using generators", - "keywords": [ - "functional", - "generator", - "iterator" - ], - "support": { - "issues": "https://github.com/nikic/iter/issues", - "source": "https://github.com/nikic/iter/tree/v2.4.1" - }, - "time": "2024-03-19T20:45:05+00:00" - }, - { - "name": "php-curl-class/php-curl-class", - "version": "12.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-curl-class/php-curl-class.git", - "reference": "7a8f05efb18bb865dbce864b8fd34d4f5d920c74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-curl-class/php-curl-class/zipball/7a8f05efb18bb865dbce864b8fd34d4f5d920c74", - "reference": "7a8f05efb18bb865dbce864b8fd34d4f5d920c74", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "php": ">=8.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "*", - "ext-gd": "*", - "friendsofphp/php-cs-fixer": "*", - "phpcompatibility/php-compatibility": "dev-develop", - "phpcsstandards/phpcsutils": "@alpha", - "phpstan/phpstan": "*", - "phpunit/phpunit": "*", - "squizlabs/php_codesniffer": "*" - }, - "suggest": { - "ext-mbstring": "*" - }, - "type": "library", - "autoload": { - "psr-4": { - "Curl\\": "src/Curl/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Unlicense" - ], - "authors": [ - { - "name": "Zach Borboa" - }, - { - "name": "Contributors", - "homepage": "https://github.com/php-curl-class/php-curl-class/graphs/contributors" - } - ], - "description": "PHP Curl Class makes it easy to send HTTP requests and integrate with web APIs.", - "homepage": "https://github.com/php-curl-class/php-curl-class", - "keywords": [ - "API-Client", - "api", - "class", - "client", - "curl", - "framework", - "http", - "http-client", - "http-proxy", - "json", - "php", - "php-curl", - "php-curl-library", - "proxy", - "requests", - "restful", - "web-scraper", - "web-scraping ", - "web-service", - "xml" - ], - "support": { - "issues": "https://github.com/php-curl-class/php-curl-class/issues", - "source": "https://github.com/php-curl-class/php-curl-class/tree/12.0.0" - }, - "time": "2025-03-25T18:04:16+00:00" - }, - { - "name": "php-di/invoker", - "version": "2.3.6", - "source": { - "type": "git", - "url": "https://github.com/PHP-DI/Invoker.git", - "reference": "59f15608528d8a8838d69b422a919fd6b16aa576" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/59f15608528d8a8838d69b422a919fd6b16aa576", - "reference": "59f15608528d8a8838d69b422a919fd6b16aa576", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "psr/container": "^1.0|^2.0" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "mnapoli/hard-mode": "~0.3.0", - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Invoker\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Generic and extensible callable invoker", - "homepage": "https://github.com/PHP-DI/Invoker", - "keywords": [ - "callable", - "dependency", - "dependency-injection", - "injection", - "invoke", - "invoker" - ], - "support": { - "issues": "https://github.com/PHP-DI/Invoker/issues", - "source": "https://github.com/PHP-DI/Invoker/tree/2.3.6" - }, - "funding": [ - { - "url": "https://github.com/mnapoli", - "type": "github" - } - ], - "time": "2025-01-17T12:49:27+00:00" - }, - { - "name": "php-di/php-di", - "version": "7.0.11", - "source": { - "type": "git", - "url": "https://github.com/PHP-DI/PHP-DI.git", - "reference": "32f111a6d214564520a57831d397263e8946c1d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/32f111a6d214564520a57831d397263e8946c1d2", - "reference": "32f111a6d214564520a57831d397263e8946c1d2", - "shasum": "" - }, - "require": { - "laravel/serializable-closure": "^1.0 || ^2.0", - "php": ">=8.0", - "php-di/invoker": "^2.0", - "psr/container": "^1.1 || ^2.0" - }, - "provide": { - "psr/container-implementation": "^1.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3", - "friendsofphp/proxy-manager-lts": "^1", - "mnapoli/phpunit-easymock": "^1.3", - "phpunit/phpunit": "^9.6 || ^10 || ^11", - "vimeo/psalm": "^5|^6" - }, - "suggest": { - "friendsofphp/proxy-manager-lts": "Install it if you want to use lazy injection (version ^1)" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "DI\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The dependency injection container for humans", - "homepage": "https://php-di.org/", - "keywords": [ - "PSR-11", - "container", - "container-interop", - "dependency injection", - "di", - "ioc", - "psr11" - ], - "support": { - "issues": "https://github.com/PHP-DI/PHP-DI/issues", - "source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.11" - }, - "funding": [ - { - "url": "https://github.com/mnapoli", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/php-di/php-di", - "type": "tidelift" - } - ], - "time": "2025-06-03T07:45:57+00:00" - }, - { - "name": "phpoption/phpoption", - "version": "1.9.3", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" - }, - "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.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2024-07-20T21:41:07+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": "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": "robmorgan/phinx", - "version": "0.16.9", - "source": { - "type": "git", - "url": "https://github.com/cakephp/phinx.git", - "reference": "524ebdeb0e1838a845d752a3418726b38cd1e654" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/phinx/zipball/524ebdeb0e1838a845d752a3418726b38cd1e654", - "reference": "524ebdeb0e1838a845d752a3418726b38cd1e654", - "shasum": "" - }, - "require": { - "cakephp/database": "^5.0.2", - "composer-runtime-api": "^2.0", - "php-64bit": ">=8.1", - "psr/container": "^1.1|^2.0", - "symfony/config": "^4.0|^5.0|^6.0|^7.0", - "symfony/console": "^6.0|^7.0" - }, - "require-dev": { - "cakephp/cakephp-codesniffer": "^5.0", - "cakephp/i18n": "^5.0", - "ext-json": "*", - "ext-pdo": "*", - "phpunit/phpunit": "^9.5.19", - "symfony/yaml": "^4.0|^5.0|^6.0|^7.0" - }, - "suggest": { - "ext-json": "Install if using JSON configuration format", - "ext-pdo": "PDO extension is needed", - "symfony/yaml": "Install if using YAML configuration format" - }, - "bin": [ - "bin/phinx" - ], - "type": "library", - "autoload": { - "psr-4": { - "Phinx\\": "src/Phinx/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Rob Morgan", - "email": "robbym@gmail.com", - "homepage": "https://robmorgan.id.au", - "role": "Lead Developer" - }, - { - "name": "Woody Gilk", - "email": "woody.gilk@gmail.com", - "homepage": "https://shadowhand.me", - "role": "Developer" - }, - { - "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Developer" - }, - { - "name": "CakePHP Community", - "homepage": "https://github.com/cakephp/phinx/graphs/contributors", - "role": "Developer" - } - ], - "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.", - "homepage": "https://phinx.org", - "keywords": [ - "database", - "database migrations", - "db", - "migrations", - "phinx" - ], - "support": { - "issues": "https://github.com/cakephp/phinx/issues", - "source": "https://github.com/cakephp/phinx/tree/0.16.9" - }, - "time": "2025-05-25T16:07:44+00:00" - }, - { - "name": "samdark/sitemap", - "version": "2.4.1", - "source": { - "type": "git", - "url": "https://github.com/samdark/sitemap.git", - "reference": "cf514750781275ad90fc9a828b4330c9c5ccba98" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/samdark/sitemap/zipball/cf514750781275ad90fc9a828b4330c9c5ccba98", - "reference": "cf514750781275ad90fc9a828b4330c9c5ccba98", - "shasum": "" - }, - "require": { - "ext-xmlwriter": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "samdark\\sitemap\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Alexander Makarov", - "email": "sam@rmcreative.ru", - "homepage": "http://rmcreative.ru/" - } - ], - "description": "Sitemap and sitemap index builder", - "homepage": "https://github.com/samdark/sitemap", - "keywords": [ - "Sitemap" - ], - "support": { - "issues": "https://github.com/samdark/sitemap/issues", - "source": "https://github.com/samdark/sitemap" - }, - "funding": [ - { - "url": "https://github.com/samdark", - "type": "github" - }, - { - "url": "https://www.patreon.com/samdark", - "type": "patreon" - } - ], - "time": "2023-11-01T08:41:34+00:00" - }, - { - "name": "symfony/config", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "ba62ae565f1327c2f6366726312ed828c85853bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/ba62ae565f1327c2f6366726312ed828c85853bc", - "reference": "ba62ae565f1327c2f6366726312ed828c85853bc", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^7.1", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/finder": "<6.4", - "symfony/service-contracts": "<2.5" - }, - "require-dev": { - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "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 you find, load, combine, autofill and validate configuration values of any kind", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/config/tree/v7.3.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": "2025-05-15T09:04:05+00:00" - }, - { - "name": "symfony/console", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/66c1440edf6f339fd82ed6c7caa76cb006211b44", - "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44", - "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" - }, - "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", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.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.3.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": "2025-05-24T10:34:04+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/event-dispatcher", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", - "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", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/error-handler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.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.3.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": "2025-04-22T09:11:45+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/filesystem", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", - "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "require-dev": { - "symfony/process": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "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 basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.3.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-10-25T15:15:23+00:00" - }, - { - "name": "symfony/finder", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d", - "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "symfony/filesystem": "^6.4|^7.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.3.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-12-30T19:00:26+00:00" - }, - { - "name": "symfony/mailer", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/mailer.git", - "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/0f375bbbde96ae8c78e4aa3e63aabd486e33364c", - "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c", - "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", - "symfony/mime": "^7.2", - "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", - "symfony/http-client": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/twig-bridge": "^6.4|^7.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.3.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": "2025-04-04T09:51:09+00:00" - }, - { - "name": "symfony/mime", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9", - "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "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": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3" - }, - "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.3.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": "2025-02-19T08:51:26+00:00" - }, - { - "name": "symfony/polyfill", - "version": "v1.32.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill.git", - "reference": "c4ee386e95ccdbea59cea802ea776d806319d506" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill/zipball/c4ee386e95ccdbea59cea802ea776d806319d506", - "reference": "c4ee386e95ccdbea59cea802ea776d806319d506", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "replace": { - "symfony/polyfill-apcu": "self.version", - "symfony/polyfill-ctype": "self.version", - "symfony/polyfill-iconv": "self.version", - "symfony/polyfill-intl-grapheme": "self.version", - "symfony/polyfill-intl-icu": "self.version", - "symfony/polyfill-intl-idn": "self.version", - "symfony/polyfill-intl-messageformatter": "self.version", - "symfony/polyfill-intl-normalizer": "self.version", - "symfony/polyfill-mbstring": "self.version", - "symfony/polyfill-php73": "self.version", - "symfony/polyfill-php74": "self.version", - "symfony/polyfill-php80": "self.version", - "symfony/polyfill-php81": "self.version", - "symfony/polyfill-php82": "self.version", - "symfony/polyfill-php83": "self.version", - "symfony/polyfill-php84": "self.version", - "symfony/polyfill-php85": "self.version", - "symfony/polyfill-util": "self.version", - "symfony/polyfill-uuid": "self.version" - }, - "require-dev": { - "symfony/intl": "^5.4|^6.4", - "symfony/phpunit-bridge": "^6.4", - "symfony/var-dumper": "^5.4|^6.4" - }, - "type": "library", - "autoload": { - "files": [ - "src/bootstrap.php", - "src/Apcu/bootstrap.php", - "src/Ctype/bootstrap.php", - "src/Uuid/bootstrap.php", - "src/Iconv/bootstrap.php", - "src/Intl/Grapheme/bootstrap.php", - "src/Intl/Idn/bootstrap.php", - "src/Intl/Icu/bootstrap.php", - "src/Intl/MessageFormatter/bootstrap.php", - "src/Intl/Normalizer/bootstrap.php", - "src/Mbstring/bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\": "src/" - }, - "classmap": [ - "src/Intl/Icu/Resources/stubs", - "src/Intl/MessageFormatter/Resources/stubs", - "src/Intl/Normalizer/Resources/stubs", - "src/Php85/Resources/stubs", - "src/Php84/Resources/stubs", - "src/Php83/Resources/stubs", - "src/Php82/Resources/stubs", - "src/Php81/Resources/stubs", - "src/Php80/Resources/stubs", - "src/Php73/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 polyfills backporting features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compat", - "compatibility", - "dev", - "polyfill", - "shim" - ], - "support": { - "issues": "https://github.com/symfony/polyfill/issues", - "source": "https://github.com/symfony/polyfill/tree/v1.32.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": "2025-05-02T09:40:28+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "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.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": "2025-04-25T09:37:31+00:00" - }, - { - "name": "symfony/string", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125", - "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.5" - }, - "require-dev": { - "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.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.3.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": "2025-04-20T20:19:01+00:00" - }, - { - "name": "vlucas/phpdotenv", - "version": "v5.6.2", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/24ac4c74f91ee2c193fa1aaa5c249cb0822809af", - "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.3", - "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3", - "symfony/polyfill-ctype": "^1.24", - "symfony/polyfill-mbstring": "^1.24", - "symfony/polyfill-php80": "^1.24" - }, - "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.2" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", - "type": "tidelift" - } - ], - "time": "2025-04-30T23:37:27+00:00" - }, - { - "name": "z4kn4fein/php-semver", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/z4kn4fein/php-semver.git", - "reference": "049a1d81e92235c8b3c9ab30a96fcbaa929a266d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/z4kn4fein/php-semver/zipball/049a1d81e92235c8b3c9ab30a96fcbaa929a266d", - "reference": "049a1d81e92235c8b3c9ab30a96fcbaa929a266d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.0", - "phpstan/phpstan": "^1.0", - "phpunit/phpunit": "^10" - }, - "type": "library", - "autoload": { - "psr-4": { - "z4kn4fein\\SemVer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Peter Csajtai", - "email": "peter.csajtai@outlook.com" - } - ], - "description": "Semantic Versioning library for PHP. It implements the full semantic version 2.0.0 specification and provides ability to parse, compare, and increment semantic versions along with validation against constraints.", - "homepage": "https://github.com/z4kn4fein/php-semver", - "keywords": [ - "comparison", - "semantic", - "semver", - "validation", - "version", - "versioning" - ], - "support": { - "issues": "https://github.com/z4kn4fein/php-semver/issues", - "source": "https://github.com/z4kn4fein/php-semver/tree/v3.0.0" - }, - "time": "2024-04-01T16:17:27+00:00" - } - ], - "packages-dev": [ - { - "name": "brianium/paratest", - "version": "v7.8.3", - "source": { - "type": "git", - "url": "https://github.com/paratestphp/paratest.git", - "reference": "a585c346ddf1bec22e51e20b5387607905604a71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/a585c346ddf1bec22e51e20b5387607905604a71", - "reference": "a585c346ddf1bec22e51e20b5387607905604a71", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-simplexml": "*", - "fidry/cpu-core-counter": "^1.2.0", - "jean85/pretty-package-versions": "^2.1.0", - "php": "~8.2.0 || ~8.3.0 || ~8.4.0", - "phpunit/php-code-coverage": "^11.0.9 || ^12.0.4", - "phpunit/php-file-iterator": "^5.1.0 || ^6", - "phpunit/php-timer": "^7.0.1 || ^8", - "phpunit/phpunit": "^11.5.11 || ^12.0.6", - "sebastian/environment": "^7.2.0 || ^8", - "symfony/console": "^6.4.17 || ^7.2.1", - "symfony/process": "^6.4.19 || ^7.2.4" - }, - "require-dev": { - "doctrine/coding-standard": "^12.0.0", - "ext-pcov": "*", - "ext-posix": "*", - "phpstan/phpstan": "^2.1.6", - "phpstan/phpstan-deprecation-rules": "^2.0.1", - "phpstan/phpstan-phpunit": "^2.0.4", - "phpstan/phpstan-strict-rules": "^2.0.3", - "squizlabs/php_codesniffer": "^3.11.3", - "symfony/filesystem": "^6.4.13 || ^7.2.0" - }, - "bin": [ - "bin/paratest", - "bin/paratest_for_phpstorm" - ], - "type": "library", - "autoload": { - "psr-4": { - "ParaTest\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Scaturro", - "email": "scaturrob@gmail.com", - "role": "Developer" - }, - { - "name": "Filippo Tessarotto", - "email": "zoeslam@gmail.com", - "role": "Developer" - } - ], - "description": "Parallel testing for PHP", - "homepage": "https://github.com/paratestphp/paratest", - "keywords": [ - "concurrent", - "parallel", - "phpunit", - "testing" - ], - "support": { - "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.8.3" - }, - "funding": [ - { - "url": "https://github.com/sponsors/Slamdunk", - "type": "github" - }, - { - "url": "https://paypal.me/filippotessarotto", - "type": "paypal" - } - ], - "time": "2025-03-05T08:29:11+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", - "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "phpunit/phpunit": "<=7.5 || >=13" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^12 || ^13", - "phpstan/phpstan": "1.4.10 || 2.1.11", - "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", - "psr/log": "^1 || ^2 || ^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.5" - }, - "time": "2025-04-07T20:06:18+00:00" - }, - { - "name": "fidry/cpu-core-counter", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "fidry/makefile": "^0.2.0", - "fidry/php-cs-fixer-config": "^1.1.2", - "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^8.5.31 || ^9.5.26", - "webmozarts/strict-phpunit": "^7.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fidry\\CpuCoreCounter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com" - } - ], - "description": "Tiny utility to get the number of CPU cores.", - "keywords": [ - "CPU", - "core" - ], - "support": { - "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" - }, - "funding": [ - { - "url": "https://github.com/theofidry", - "type": "github" - } - ], - "time": "2024-08-06T10:04:20+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": "jean85/pretty-package-versions", - "version": "2.1.1", - "source": { - "type": "git", - "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a", - "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.1.0", - "php": "^7.4|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.2", - "jean85/composer-provided-replaced-stub-package": "^1.0", - "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^7.5|^8.5|^9.6", - "rector/rector": "^2.0", - "vimeo/psalm": "^4.3 || ^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Jean85\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alessandro Lai", - "email": "alessandro.lai85@gmail.com" - } - ], - "description": "A library to get pretty versions strings of installed dependencies", - "keywords": [ - "composer", - "package", - "release", - "versions" - ], - "support": { - "issues": "https://github.com/Jean85/pretty-package-versions/issues", - "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1" - }, - "time": "2025-03-19T14:43:43+00:00" - }, - { - "name": "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.1", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c", - "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c", - "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.1" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2025-04-29T12:36:36+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v5.5.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "ae59794362fe85e051a58ad36b289443f57be7a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9", - "reference": "ae59794362fe85e051a58ad36b289443f57be7a9", - "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.0-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.5.0" - }, - "time": "2025-05-31T08:24:38+00:00" - }, - { - "name": "nunomaduro/collision", - "version": "v8.8.1", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "44ccb82e3e21efb5446748d2a3c81a030ac22bd5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/44ccb82e3e21efb5446748d2a3c81a030ac22bd5", - "reference": "44ccb82e3e21efb5446748d2a3c81a030ac22bd5", - "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", - "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-06-11T01:04:21+00:00" - }, - { - "name": "nunomaduro/termwind", - "version": "v2.3.1", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/termwind.git", - "reference": "dfa08f390e509967a15c22493dc0bac5733d9123" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/dfa08f390e509967a15c22493dc0bac5733d9123", - "reference": "dfa08f390e509967a15c22493dc0bac5733d9123", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": "^8.2", - "symfony/console": "^7.2.6" - }, - "require-dev": { - "illuminate/console": "^11.44.7", - "laravel/pint": "^1.22.0", - "mockery/mockery": "^1.6.12", - "pestphp/pest": "^2.36.0 || ^3.8.2", - "phpstan/phpstan": "^1.12.25", - "phpstan/phpstan-strict-rules": "^1.6.2", - "symfony/var-dumper": "^7.2.6", - "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.1" - }, - "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-05-08T08:14:37+00:00" - }, - { - "name": "pestphp/pest", - "version": "v3.8.2", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest.git", - "reference": "c6244a8712968dbac88eb998e7ff3b5caa556b0d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/c6244a8712968dbac88eb998e7ff3b5caa556b0d", - "reference": "c6244a8712968dbac88eb998e7ff3b5caa556b0d", - "shasum": "" - }, - "require": { - "brianium/paratest": "^7.8.3", - "nunomaduro/collision": "^8.8.0", - "nunomaduro/termwind": "^2.3.0", - "pestphp/pest-plugin": "^3.0.0", - "pestphp/pest-plugin-arch": "^3.1.0", - "pestphp/pest-plugin-mutate": "^3.0.5", - "php": "^8.2.0", - "phpunit/phpunit": "^11.5.15" - }, - "conflict": { - "filp/whoops": "<2.16.0", - "phpunit/phpunit": ">11.5.15", - "sebastian/exporter": "<6.0.0", - "webmozart/assert": "<1.11.0" - }, - "require-dev": { - "pestphp/pest-dev-tools": "^3.4.0", - "pestphp/pest-plugin-type-coverage": "^3.5.0", - "symfony/process": "^7.2.5" - }, - "bin": [ - "bin/pest" - ], - "type": "library", - "extra": { - "pest": { - "plugins": [ - "Pest\\Mutate\\Plugins\\Mutate", - "Pest\\Plugins\\Configuration", - "Pest\\Plugins\\Bail", - "Pest\\Plugins\\Cache", - "Pest\\Plugins\\Coverage", - "Pest\\Plugins\\Init", - "Pest\\Plugins\\Environment", - "Pest\\Plugins\\Help", - "Pest\\Plugins\\Memory", - "Pest\\Plugins\\Only", - "Pest\\Plugins\\Printer", - "Pest\\Plugins\\ProcessIsolation", - "Pest\\Plugins\\Profile", - "Pest\\Plugins\\Retry", - "Pest\\Plugins\\Snapshot", - "Pest\\Plugins\\Verbose", - "Pest\\Plugins\\Version", - "Pest\\Plugins\\Parallel" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "files": [ - "src/Functions.php", - "src/Pest.php" - ], - "psr-4": { - "Pest\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "The elegant PHP Testing Framework.", - "keywords": [ - "framework", - "pest", - "php", - "test", - "testing", - "unit" - ], - "support": { - "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v3.8.2" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - } - ], - "time": "2025-04-17T10:53:02+00:00" - }, - { - "name": "pestphp/pest-plugin", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin.git", - "reference": "e79b26c65bc11c41093b10150c1341cc5cdbea83" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/e79b26c65bc11c41093b10150c1341cc5cdbea83", - "reference": "e79b26c65bc11c41093b10150c1341cc5cdbea83", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^2.0.0", - "composer-runtime-api": "^2.2.2", - "php": "^8.2" - }, - "conflict": { - "pestphp/pest": "<3.0.0" - }, - "require-dev": { - "composer/composer": "^2.7.9", - "pestphp/pest": "^3.0.0", - "pestphp/pest-dev-tools": "^3.0.0" - }, - "type": "composer-plugin", - "extra": { - "class": "Pest\\Plugin\\Manager" - }, - "autoload": { - "psr-4": { - "Pest\\Plugin\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Pest plugin manager", - "keywords": [ - "framework", - "manager", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin/tree/v3.0.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2024-09-08T23:21:41+00:00" - }, - { - "name": "pestphp/pest-plugin-arch", - "version": "v3.1.1", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin-arch.git", - "reference": "db7bd9cb1612b223e16618d85475c6f63b9c8daa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/db7bd9cb1612b223e16618d85475c6f63b9c8daa", - "reference": "db7bd9cb1612b223e16618d85475c6f63b9c8daa", - "shasum": "" - }, - "require": { - "pestphp/pest-plugin": "^3.0.0", - "php": "^8.2", - "ta-tikoma/phpunit-architecture-test": "^0.8.4" - }, - "require-dev": { - "pestphp/pest": "^3.8.1", - "pestphp/pest-dev-tools": "^3.4.0" - }, - "type": "library", - "extra": { - "pest": { - "plugins": [ - "Pest\\Arch\\Plugin" - ] - } - }, - "autoload": { - "files": [ - "src/Autoload.php" - ], - "psr-4": { - "Pest\\Arch\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "The Arch plugin for Pest PHP.", - "keywords": [ - "arch", - "architecture", - "framework", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin-arch/tree/v3.1.1" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - } - ], - "time": "2025-04-16T22:59:48+00:00" - }, - { - "name": "pestphp/pest-plugin-mutate", - "version": "v3.0.5", - "source": { - "type": "git", - "url": "https://github.com/pestphp/pest-plugin-mutate.git", - "reference": "e10dbdc98c9e2f3890095b4fe2144f63a5717e08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-mutate/zipball/e10dbdc98c9e2f3890095b4fe2144f63a5717e08", - "reference": "e10dbdc98c9e2f3890095b4fe2144f63a5717e08", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^5.2.0", - "pestphp/pest-plugin": "^3.0.0", - "php": "^8.2", - "psr/simple-cache": "^3.0.0" - }, - "require-dev": { - "pestphp/pest": "^3.0.8", - "pestphp/pest-dev-tools": "^3.0.0", - "pestphp/pest-plugin-type-coverage": "^3.0.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Pest\\Mutate\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Sandro Gehri", - "email": "sandrogehri@gmail.com" - } - ], - "description": "Mutates your code to find untested cases", - "keywords": [ - "framework", - "mutate", - "mutation", - "pest", - "php", - "plugin", - "test", - "testing", - "unit" - ], - "support": { - "source": "https://github.com/pestphp/pest-plugin-mutate/tree/v3.0.5" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/gehrisandro", - "type": "github" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - } - ], - "time": "2024-09-22T07:54:40+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": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.6.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.1", - "ext-filter": "*", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.7", - "phpstan/phpdoc-parser": "^1.7|^2.0", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.5 || ~1.6.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-webmozart-assert": "^1.2", - "phpunit/phpunit": "^9.5", - "psalm/phar": "^5.26" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2" - }, - "time": "2025-04-13T19:20:35+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.3 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.18|^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" - }, - "time": "2024-11-09T15:12:26+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^5.3.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^9.6", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" - }, - "time": "2025-02-19T13:28:12+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "11.0.10", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "1a800a7446add2d79cc6b3c01c45381810367d76" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/1a800a7446add2d79cc6b3c01c45381810367d76", - "reference": "1a800a7446add2d79cc6b3c01c45381810367d76", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^5.4.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.0", - "sebastian/lines-of-code": "^3.0.1", - "sebastian/version": "^5.0.2", - "theseer/tokenizer": "^1.2.3" - }, - "require-dev": { - "phpunit/phpunit": "^11.5.2" - }, - "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/show" - }, - "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-06-18T08:56:18+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "5.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "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.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-08-27T05:02:59+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.15", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c", - "reference": "4b6a4ee654e5e0c5e1f17e2f83c0f4c91dee1f9c", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.0", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=8.2", - "phpunit/php-code-coverage": "^11.0.9", - "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.1", - "sebastian/diff": "^6.0.2", - "sebastian/environment": "^7.2.0", - "sebastian/exporter": "^6.3.0", - "sebastian/global-state": "^7.0.2", - "sebastian/object-enumerator": "^6.0.1", - "sebastian/type": "^5.1.2", - "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.15" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2025-03-23T16:02:11+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.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959", - "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959", - "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.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-03-07T06:57:01+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.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", - "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.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "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.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-12-05T09:17:50+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.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "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" - }, - { - "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.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:10:34+00:00" - }, - { - "name": "sebastian/type", - "version": "5.1.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", - "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.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-03-18T13:35:50+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/process", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", - "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.3.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": "2025-04-17T09:11:12+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v7.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/548f6760c54197b1084e1e5c71f6d9d523f2f78e", - "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/console": "<6.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/uid": "^6.4|^7.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.3.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": "2025-04-27T18:39:23+00:00" - }, - { - "name": "ta-tikoma/phpunit-architecture-test", - "version": "0.8.5", - "source": { - "type": "git", - "url": "https://github.com/ta-tikoma/phpunit-architecture-test.git", - "reference": "cf6fb197b676ba716837c886baca842e4db29005" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/cf6fb197b676ba716837c886baca842e4db29005", - "reference": "cf6fb197b676ba716837c886baca842e4db29005", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18.0 || ^5.0.0", - "php": "^8.1.0", - "phpdocumentor/reflection-docblock": "^5.3.0", - "phpunit/phpunit": "^10.5.5 || ^11.0.0 || ^12.0.0", - "symfony/finder": "^6.4.0 || ^7.0.0" - }, - "require-dev": { - "laravel/pint": "^1.13.7", - "phpstan/phpstan": "^1.10.52" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPUnit\\Architecture\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ni Shi", - "email": "futik0ma011@gmail.com" - }, - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Methods for testing application architecture", - "keywords": [ - "architecture", - "phpunit", - "stucture", - "test", - "testing" - ], - "support": { - "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues", - "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.5" - }, - "time": "2025-04-20T20:23:40+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "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.2.3" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:36:25+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": {}, - "prefer-stable": true, - "prefer-lowest": false, - "platform": { - "php": ">=8.3" - }, - "platform-dev": {}, - "plugin-api-version": "2.6.0" -} diff --git a/legacy/data/uploads/thumbs/.keep b/legacy/data/uploads/thumbs/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/legacy/internal_data/atom/.keep b/legacy/internal_data/atom/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/legacy/internal_data/cache/.keep b/legacy/internal_data/cache/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/legacy/internal_data/log/.keep b/legacy/internal_data/log/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/legacy/internal_data/triggers/$on b/legacy/internal_data/triggers/$on deleted file mode 100644 index e69de29bb..000000000 diff --git a/legacy/phinx.php b/legacy/phinx.php deleted file mode 100644 index 880494b10..000000000 --- a/legacy/phinx.php +++ /dev/null @@ -1,74 +0,0 @@ -load(); -} - -// Helper function for environment variables -function env(string $key, mixed $default = null): mixed -{ - $value = $_ENV[$key] ?? getenv($key); - if ($value === false) { - return $default; - } - return $value; -} - -return [ - 'paths' => [ - 'migrations' => __DIR__ . '/migrations' - ], - 'environments' => [ - 'default_migration_table' => BB_MIGRATIONS, - 'default_environment' => env('APP_ENV', 'production'), - 'production' => [ - 'adapter' => 'mysql', - 'host' => env('DB_HOST', 'localhost'), - 'port' => (int)env('DB_PORT', 3306), - 'name' => env('DB_DATABASE'), - 'user' => env('DB_USERNAME'), - 'pass' => env('DB_PASSWORD', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'table_options' => [ - 'ENGINE' => 'InnoDB', - 'DEFAULT CHARSET' => 'utf8mb4', - 'COLLATE' => 'utf8mb4_unicode_ci' - ] - ], - 'development' => [ - 'adapter' => 'mysql', - 'host' => env('DB_HOST', 'localhost'), - 'port' => (int)env('DB_PORT', 3306), - 'name' => env('DB_DATABASE'), - 'user' => env('DB_USERNAME'), - 'pass' => env('DB_PASSWORD', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'table_options' => [ - 'ENGINE' => 'InnoDB', - 'DEFAULT CHARSET' => 'utf8mb4', - 'COLLATE' => 'utf8mb4_unicode_ci' - ] - ] - ], - 'version_order' => 'creation', -]; diff --git a/legacy/robots.txt b/legacy/robots.txt deleted file mode 100644 index c1220145f..000000000 --- a/legacy/robots.txt +++ /dev/null @@ -1,14 +0,0 @@ -User-agent: * - -Disallow: /bt/* -Disallow: /dl.php -Disallow: /group.php -Disallow: /login.php -Disallow: /memberlist.php -Disallow: /modcp.php -Disallow: /posting.php -Disallow: /privmsg.php -Disallow: /profile.php - -Host: example.com -Sitemap: http://example.com/sitemap.xml diff --git a/legacy/styles/images/flags/AD.svg b/legacy/styles/images/flags/AD.svg deleted file mode 100644 index 067ab772f..000000000 --- a/legacy/styles/images/flags/AD.svg +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/AE.svg b/legacy/styles/images/flags/AE.svg deleted file mode 100644 index 651ac8523..000000000 --- a/legacy/styles/images/flags/AE.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/AF.svg b/legacy/styles/images/flags/AF.svg deleted file mode 100644 index 31a20c9fd..000000000 --- a/legacy/styles/images/flags/AF.svg +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/AG.svg b/legacy/styles/images/flags/AG.svg deleted file mode 100644 index 243c3d8f9..000000000 --- a/legacy/styles/images/flags/AG.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/AI.svg b/legacy/styles/images/flags/AI.svg deleted file mode 100644 index 628ad9be9..000000000 --- a/legacy/styles/images/flags/AI.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/AL.svg b/legacy/styles/images/flags/AL.svg deleted file mode 100644 index 1135b4b80..000000000 --- a/legacy/styles/images/flags/AL.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/AM.svg b/legacy/styles/images/flags/AM.svg deleted file mode 100644 index 99fa4dc59..000000000 --- a/legacy/styles/images/flags/AM.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/AO.svg b/legacy/styles/images/flags/AO.svg deleted file mode 100644 index b1863bd0f..000000000 --- a/legacy/styles/images/flags/AO.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/AQ.svg b/legacy/styles/images/flags/AQ.svg deleted file mode 100644 index 53840cccb..000000000 --- a/legacy/styles/images/flags/AQ.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/AR.svg b/legacy/styles/images/flags/AR.svg deleted file mode 100644 index d20cbbdcd..000000000 --- a/legacy/styles/images/flags/AR.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/ARAB.svg b/legacy/styles/images/flags/ARAB.svg deleted file mode 100644 index 96d27157e..000000000 --- a/legacy/styles/images/flags/ARAB.svg +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/AS.svg b/legacy/styles/images/flags/AS.svg deleted file mode 100644 index 354355672..000000000 --- a/legacy/styles/images/flags/AS.svg +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/AT.svg b/legacy/styles/images/flags/AT.svg deleted file mode 100644 index c28250887..000000000 --- a/legacy/styles/images/flags/AT.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/AU.svg b/legacy/styles/images/flags/AU.svg deleted file mode 100644 index 96e80768b..000000000 --- a/legacy/styles/images/flags/AU.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/legacy/styles/images/flags/AW.svg b/legacy/styles/images/flags/AW.svg deleted file mode 100644 index 413b7c45b..000000000 --- a/legacy/styles/images/flags/AW.svg +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/AX.svg b/legacy/styles/images/flags/AX.svg deleted file mode 100644 index 0584d713b..000000000 --- a/legacy/styles/images/flags/AX.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/AZ.svg b/legacy/styles/images/flags/AZ.svg deleted file mode 100644 index 355752211..000000000 --- a/legacy/styles/images/flags/AZ.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/legacy/styles/images/flags/BA.svg b/legacy/styles/images/flags/BA.svg deleted file mode 100644 index 93bd9cf93..000000000 --- a/legacy/styles/images/flags/BA.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/BB.svg b/legacy/styles/images/flags/BB.svg deleted file mode 100644 index cecd5cc33..000000000 --- a/legacy/styles/images/flags/BB.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/BD.svg b/legacy/styles/images/flags/BD.svg deleted file mode 100644 index 16b794deb..000000000 --- a/legacy/styles/images/flags/BD.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/legacy/styles/images/flags/BE.svg b/legacy/styles/images/flags/BE.svg deleted file mode 100644 index ac706a0b5..000000000 --- a/legacy/styles/images/flags/BE.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/BF.svg b/legacy/styles/images/flags/BF.svg deleted file mode 100644 index 471382258..000000000 --- a/legacy/styles/images/flags/BF.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/BG.svg b/legacy/styles/images/flags/BG.svg deleted file mode 100644 index b100dd0dc..000000000 --- a/legacy/styles/images/flags/BG.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/BH.svg b/legacy/styles/images/flags/BH.svg deleted file mode 100644 index 7a2ea549b..000000000 --- a/legacy/styles/images/flags/BH.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/legacy/styles/images/flags/BI.svg b/legacy/styles/images/flags/BI.svg deleted file mode 100644 index a4434a955..000000000 --- a/legacy/styles/images/flags/BI.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/BJ.svg b/legacy/styles/images/flags/BJ.svg deleted file mode 100644 index 0846724d1..000000000 --- a/legacy/styles/images/flags/BJ.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/BL.svg b/legacy/styles/images/flags/BL.svg deleted file mode 100644 index f84cbbaeb..000000000 --- a/legacy/styles/images/flags/BL.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/BM.svg b/legacy/styles/images/flags/BM.svg deleted file mode 100644 index bab3e0abe..000000000 --- a/legacy/styles/images/flags/BM.svg +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/BN.svg b/legacy/styles/images/flags/BN.svg deleted file mode 100644 index 4b416ebb7..000000000 --- a/legacy/styles/images/flags/BN.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/BO.svg b/legacy/styles/images/flags/BO.svg deleted file mode 100644 index e2b25c527..000000000 --- a/legacy/styles/images/flags/BO.svg +++ /dev/null @@ -1,674 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/BQ.svg b/legacy/styles/images/flags/BQ.svg deleted file mode 100644 index 0e6bc76e6..000000000 --- a/legacy/styles/images/flags/BQ.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/BR.svg b/legacy/styles/images/flags/BR.svg deleted file mode 100644 index 6f0df703a..000000000 --- a/legacy/styles/images/flags/BR.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/BS.svg b/legacy/styles/images/flags/BS.svg deleted file mode 100644 index 5cc918e5a..000000000 --- a/legacy/styles/images/flags/BS.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/BT.svg b/legacy/styles/images/flags/BT.svg deleted file mode 100644 index 798c79b38..000000000 --- a/legacy/styles/images/flags/BT.svg +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/BV.svg b/legacy/styles/images/flags/BV.svg deleted file mode 100644 index 40e16d948..000000000 --- a/legacy/styles/images/flags/BV.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/BW.svg b/legacy/styles/images/flags/BW.svg deleted file mode 100644 index 3435608d6..000000000 --- a/legacy/styles/images/flags/BW.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/BY.svg b/legacy/styles/images/flags/BY.svg deleted file mode 100644 index 8d25ee3c1..000000000 --- a/legacy/styles/images/flags/BY.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/BZ.svg b/legacy/styles/images/flags/BZ.svg deleted file mode 100644 index 25386a51a..000000000 --- a/legacy/styles/images/flags/BZ.svg +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/CA.svg b/legacy/styles/images/flags/CA.svg deleted file mode 100644 index 89da5b7b5..000000000 --- a/legacy/styles/images/flags/CA.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/legacy/styles/images/flags/CC.svg b/legacy/styles/images/flags/CC.svg deleted file mode 100644 index ddfd18038..000000000 --- a/legacy/styles/images/flags/CC.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/CD.svg b/legacy/styles/images/flags/CD.svg deleted file mode 100644 index b9cf52894..000000000 --- a/legacy/styles/images/flags/CD.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/CEFTA.svg b/legacy/styles/images/flags/CEFTA.svg deleted file mode 100644 index f748d08a1..000000000 --- a/legacy/styles/images/flags/CEFTA.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/CF.svg b/legacy/styles/images/flags/CF.svg deleted file mode 100644 index a6cd3670f..000000000 --- a/legacy/styles/images/flags/CF.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/CG.svg b/legacy/styles/images/flags/CG.svg deleted file mode 100644 index f5a0e42d4..000000000 --- a/legacy/styles/images/flags/CG.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/CH.svg b/legacy/styles/images/flags/CH.svg deleted file mode 100644 index b42d6709c..000000000 --- a/legacy/styles/images/flags/CH.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/legacy/styles/images/flags/CI.svg b/legacy/styles/images/flags/CI.svg deleted file mode 100644 index e400f0c1c..000000000 --- a/legacy/styles/images/flags/CI.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/CK.svg b/legacy/styles/images/flags/CK.svg deleted file mode 100644 index 18e547b17..000000000 --- a/legacy/styles/images/flags/CK.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/legacy/styles/images/flags/CL.svg b/legacy/styles/images/flags/CL.svg deleted file mode 100644 index 5b3c72fa7..000000000 --- a/legacy/styles/images/flags/CL.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/CM.svg b/legacy/styles/images/flags/CM.svg deleted file mode 100644 index 70adc8b68..000000000 --- a/legacy/styles/images/flags/CM.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/CN.svg b/legacy/styles/images/flags/CN.svg deleted file mode 100644 index 10d3489a0..000000000 --- a/legacy/styles/images/flags/CN.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/legacy/styles/images/flags/CO.svg b/legacy/styles/images/flags/CO.svg deleted file mode 100644 index ebd0a0fb2..000000000 --- a/legacy/styles/images/flags/CO.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/CP.svg b/legacy/styles/images/flags/CP.svg deleted file mode 100644 index b8aa9cfd6..000000000 --- a/legacy/styles/images/flags/CP.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/CR.svg b/legacy/styles/images/flags/CR.svg deleted file mode 100644 index 5a409eebb..000000000 --- a/legacy/styles/images/flags/CR.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/CU.svg b/legacy/styles/images/flags/CU.svg deleted file mode 100644 index 053c9ee3a..000000000 --- a/legacy/styles/images/flags/CU.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/CV.svg b/legacy/styles/images/flags/CV.svg deleted file mode 100644 index aec899490..000000000 --- a/legacy/styles/images/flags/CV.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/CW.svg b/legacy/styles/images/flags/CW.svg deleted file mode 100644 index bb0ece22e..000000000 --- a/legacy/styles/images/flags/CW.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/CX.svg b/legacy/styles/images/flags/CX.svg deleted file mode 100644 index 374ff2dab..000000000 --- a/legacy/styles/images/flags/CX.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/CY.svg b/legacy/styles/images/flags/CY.svg deleted file mode 100644 index 7e3d883da..000000000 --- a/legacy/styles/images/flags/CY.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/CZ.svg b/legacy/styles/images/flags/CZ.svg deleted file mode 100644 index 7913de389..000000000 --- a/legacy/styles/images/flags/CZ.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/DE.svg b/legacy/styles/images/flags/DE.svg deleted file mode 100644 index d5ff88b91..000000000 --- a/legacy/styles/images/flags/DE.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/DG.svg b/legacy/styles/images/flags/DG.svg deleted file mode 100644 index f163caf94..000000000 --- a/legacy/styles/images/flags/DG.svg +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/DJ.svg b/legacy/styles/images/flags/DJ.svg deleted file mode 100644 index 9b00a8205..000000000 --- a/legacy/styles/images/flags/DJ.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/DK.svg b/legacy/styles/images/flags/DK.svg deleted file mode 100644 index 563277f81..000000000 --- a/legacy/styles/images/flags/DK.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/DM.svg b/legacy/styles/images/flags/DM.svg deleted file mode 100644 index f692094dd..000000000 --- a/legacy/styles/images/flags/DM.svg +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/DO.svg b/legacy/styles/images/flags/DO.svg deleted file mode 100644 index 5d4b9b2c5..000000000 --- a/legacy/styles/images/flags/DO.svg +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/DZ.svg b/legacy/styles/images/flags/DZ.svg deleted file mode 100644 index 5ff29a74a..000000000 --- a/legacy/styles/images/flags/DZ.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/EAC.svg b/legacy/styles/images/flags/EAC.svg deleted file mode 100644 index aaf8133f3..000000000 --- a/legacy/styles/images/flags/EAC.svg +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/EC.svg b/legacy/styles/images/flags/EC.svg deleted file mode 100644 index 397bfd982..000000000 --- a/legacy/styles/images/flags/EC.svg +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/EE.svg b/legacy/styles/images/flags/EE.svg deleted file mode 100644 index 2a86ee405..000000000 --- a/legacy/styles/images/flags/EE.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/EG.svg b/legacy/styles/images/flags/EG.svg deleted file mode 100644 index 00d1fa59e..000000000 --- a/legacy/styles/images/flags/EG.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/EH.svg b/legacy/styles/images/flags/EH.svg deleted file mode 100644 index 6aec72883..000000000 --- a/legacy/styles/images/flags/EH.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/ER.svg b/legacy/styles/images/flags/ER.svg deleted file mode 100644 index 3f4f3f292..000000000 --- a/legacy/styles/images/flags/ER.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/legacy/styles/images/flags/ES-CT.svg b/legacy/styles/images/flags/ES-CT.svg deleted file mode 100644 index 4d8591140..000000000 --- a/legacy/styles/images/flags/ES-CT.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/legacy/styles/images/flags/ES-GA.svg b/legacy/styles/images/flags/ES-GA.svg deleted file mode 100644 index 31657813e..000000000 --- a/legacy/styles/images/flags/ES-GA.svg +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/ES-PV.svg b/legacy/styles/images/flags/ES-PV.svg deleted file mode 100644 index 21c8759ec..000000000 --- a/legacy/styles/images/flags/ES-PV.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/ES.svg b/legacy/styles/images/flags/ES.svg deleted file mode 100644 index c7766f4fa..000000000 --- a/legacy/styles/images/flags/ES.svg +++ /dev/null @@ -1,544 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/ET.svg b/legacy/styles/images/flags/ET.svg deleted file mode 100644 index 3f99be486..000000000 --- a/legacy/styles/images/flags/ET.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/EU.svg b/legacy/styles/images/flags/EU.svg deleted file mode 100644 index b0874c1ed..000000000 --- a/legacy/styles/images/flags/EU.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/FI.svg b/legacy/styles/images/flags/FI.svg deleted file mode 100644 index 470be2d07..000000000 --- a/legacy/styles/images/flags/FI.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/FJ.svg b/legacy/styles/images/flags/FJ.svg deleted file mode 100644 index a6035eaf0..000000000 --- a/legacy/styles/images/flags/FJ.svg +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/FK.svg b/legacy/styles/images/flags/FK.svg deleted file mode 100644 index c65bf96de..000000000 --- a/legacy/styles/images/flags/FK.svg +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/FM.svg b/legacy/styles/images/flags/FM.svg deleted file mode 100644 index c1b7c9778..000000000 --- a/legacy/styles/images/flags/FM.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/legacy/styles/images/flags/FO.svg b/legacy/styles/images/flags/FO.svg deleted file mode 100644 index f802d285a..000000000 --- a/legacy/styles/images/flags/FO.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/FR.svg b/legacy/styles/images/flags/FR.svg deleted file mode 100644 index 4110e59e4..000000000 --- a/legacy/styles/images/flags/FR.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/GA.svg b/legacy/styles/images/flags/GA.svg deleted file mode 100644 index 76edab429..000000000 --- a/legacy/styles/images/flags/GA.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/GB-ENG.svg b/legacy/styles/images/flags/GB-ENG.svg deleted file mode 100644 index 12e3b67d5..000000000 --- a/legacy/styles/images/flags/GB-ENG.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/GB-NIR.svg b/legacy/styles/images/flags/GB-NIR.svg deleted file mode 100644 index e6be8dbc2..000000000 --- a/legacy/styles/images/flags/GB-NIR.svg +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/GB-SCT.svg b/legacy/styles/images/flags/GB-SCT.svg deleted file mode 100644 index f50cd322a..000000000 --- a/legacy/styles/images/flags/GB-SCT.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/legacy/styles/images/flags/GB-WLS.svg b/legacy/styles/images/flags/GB-WLS.svg deleted file mode 100644 index 6e15fd015..000000000 --- a/legacy/styles/images/flags/GB-WLS.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/legacy/styles/images/flags/GB.svg b/legacy/styles/images/flags/GB.svg deleted file mode 100644 index 799138319..000000000 --- a/legacy/styles/images/flags/GB.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/GD.svg b/legacy/styles/images/flags/GD.svg deleted file mode 100644 index cb51e9618..000000000 --- a/legacy/styles/images/flags/GD.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/GE.svg b/legacy/styles/images/flags/GE.svg deleted file mode 100644 index d8126ec8d..000000000 --- a/legacy/styles/images/flags/GE.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/GF.svg b/legacy/styles/images/flags/GF.svg deleted file mode 100644 index f8fe94c65..000000000 --- a/legacy/styles/images/flags/GF.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/GG.svg b/legacy/styles/images/flags/GG.svg deleted file mode 100644 index f8216c8bc..000000000 --- a/legacy/styles/images/flags/GG.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/legacy/styles/images/flags/GH.svg b/legacy/styles/images/flags/GH.svg deleted file mode 100644 index 5c3e3e69a..000000000 --- a/legacy/styles/images/flags/GH.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/GI.svg b/legacy/styles/images/flags/GI.svg deleted file mode 100644 index e2b590afe..000000000 --- a/legacy/styles/images/flags/GI.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/GL.svg b/legacy/styles/images/flags/GL.svg deleted file mode 100644 index eb5a52e9e..000000000 --- a/legacy/styles/images/flags/GL.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/legacy/styles/images/flags/GM.svg b/legacy/styles/images/flags/GM.svg deleted file mode 100644 index 8fe9d6692..000000000 --- a/legacy/styles/images/flags/GM.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/GN.svg b/legacy/styles/images/flags/GN.svg deleted file mode 100644 index 40d6ad4f0..000000000 --- a/legacy/styles/images/flags/GN.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/GP.svg b/legacy/styles/images/flags/GP.svg deleted file mode 100644 index ee55c4bcd..000000000 --- a/legacy/styles/images/flags/GP.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/GQ.svg b/legacy/styles/images/flags/GQ.svg deleted file mode 100644 index 134e44217..000000000 --- a/legacy/styles/images/flags/GQ.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/GR.svg b/legacy/styles/images/flags/GR.svg deleted file mode 100644 index 599741eec..000000000 --- a/legacy/styles/images/flags/GR.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/GS.svg b/legacy/styles/images/flags/GS.svg deleted file mode 100644 index 1536e073e..000000000 --- a/legacy/styles/images/flags/GS.svg +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/GT.svg b/legacy/styles/images/flags/GT.svg deleted file mode 100644 index f7cffbdc7..000000000 --- a/legacy/styles/images/flags/GT.svg +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/GU.svg b/legacy/styles/images/flags/GU.svg deleted file mode 100644 index 0d66e1bfa..000000000 --- a/legacy/styles/images/flags/GU.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - G - U - A - M - - - - - - - - - - diff --git a/legacy/styles/images/flags/GW.svg b/legacy/styles/images/flags/GW.svg deleted file mode 100644 index d470bac9f..000000000 --- a/legacy/styles/images/flags/GW.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/GY.svg b/legacy/styles/images/flags/GY.svg deleted file mode 100644 index 569fb5627..000000000 --- a/legacy/styles/images/flags/GY.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/legacy/styles/images/flags/HK.svg b/legacy/styles/images/flags/HK.svg deleted file mode 100644 index 4fd55bc14..000000000 --- a/legacy/styles/images/flags/HK.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/legacy/styles/images/flags/HM.svg b/legacy/styles/images/flags/HM.svg deleted file mode 100644 index 815c48208..000000000 --- a/legacy/styles/images/flags/HM.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/legacy/styles/images/flags/HN.svg b/legacy/styles/images/flags/HN.svg deleted file mode 100644 index 11fde67db..000000000 --- a/legacy/styles/images/flags/HN.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/HR.svg b/legacy/styles/images/flags/HR.svg deleted file mode 100644 index eb4e7d1d7..000000000 --- a/legacy/styles/images/flags/HR.svg +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/HT.svg b/legacy/styles/images/flags/HT.svg deleted file mode 100644 index 960e128a8..000000000 --- a/legacy/styles/images/flags/HT.svg +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/HU.svg b/legacy/styles/images/flags/HU.svg deleted file mode 100644 index baddf7f5e..000000000 --- a/legacy/styles/images/flags/HU.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/IC.svg b/legacy/styles/images/flags/IC.svg deleted file mode 100644 index 81e6ee2e1..000000000 --- a/legacy/styles/images/flags/IC.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/ID.svg b/legacy/styles/images/flags/ID.svg deleted file mode 100644 index 3b7c8fcfd..000000000 --- a/legacy/styles/images/flags/ID.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/legacy/styles/images/flags/IE.svg b/legacy/styles/images/flags/IE.svg deleted file mode 100644 index 049be14de..000000000 --- a/legacy/styles/images/flags/IE.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/IL.svg b/legacy/styles/images/flags/IL.svg deleted file mode 100644 index f43be7e8e..000000000 --- a/legacy/styles/images/flags/IL.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/IM.svg b/legacy/styles/images/flags/IM.svg deleted file mode 100644 index f06f3d6fe..000000000 --- a/legacy/styles/images/flags/IM.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/IN.svg b/legacy/styles/images/flags/IN.svg deleted file mode 100644 index bc47d7491..000000000 --- a/legacy/styles/images/flags/IN.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/IO.svg b/legacy/styles/images/flags/IO.svg deleted file mode 100644 index 77016679e..000000000 --- a/legacy/styles/images/flags/IO.svg +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/IQ.svg b/legacy/styles/images/flags/IQ.svg deleted file mode 100644 index 259da9adc..000000000 --- a/legacy/styles/images/flags/IQ.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/legacy/styles/images/flags/IR.svg b/legacy/styles/images/flags/IR.svg deleted file mode 100644 index 8c6d51621..000000000 --- a/legacy/styles/images/flags/IR.svg +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/IS.svg b/legacy/styles/images/flags/IS.svg deleted file mode 100644 index a6588afae..000000000 --- a/legacy/styles/images/flags/IS.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/IT.svg b/legacy/styles/images/flags/IT.svg deleted file mode 100644 index 20a8bfdcc..000000000 --- a/legacy/styles/images/flags/IT.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/JE.svg b/legacy/styles/images/flags/JE.svg deleted file mode 100644 index 611180d42..000000000 --- a/legacy/styles/images/flags/JE.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/JM.svg b/legacy/styles/images/flags/JM.svg deleted file mode 100644 index 269df0383..000000000 --- a/legacy/styles/images/flags/JM.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/legacy/styles/images/flags/JO.svg b/legacy/styles/images/flags/JO.svg deleted file mode 100644 index d6f927d44..000000000 --- a/legacy/styles/images/flags/JO.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/JP.svg b/legacy/styles/images/flags/JP.svg deleted file mode 100644 index cc1c181ce..000000000 --- a/legacy/styles/images/flags/JP.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/legacy/styles/images/flags/KE.svg b/legacy/styles/images/flags/KE.svg deleted file mode 100644 index 3a67ca3cc..000000000 --- a/legacy/styles/images/flags/KE.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/KG.svg b/legacy/styles/images/flags/KG.svg deleted file mode 100644 index 68c210b1c..000000000 --- a/legacy/styles/images/flags/KG.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/KH.svg b/legacy/styles/images/flags/KH.svg deleted file mode 100644 index c658838f4..000000000 --- a/legacy/styles/images/flags/KH.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/KI.svg b/legacy/styles/images/flags/KI.svg deleted file mode 100644 index 0c8032807..000000000 --- a/legacy/styles/images/flags/KI.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/KM.svg b/legacy/styles/images/flags/KM.svg deleted file mode 100644 index 414d65e47..000000000 --- a/legacy/styles/images/flags/KM.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/KN.svg b/legacy/styles/images/flags/KN.svg deleted file mode 100644 index 47fe64d61..000000000 --- a/legacy/styles/images/flags/KN.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/KP.svg b/legacy/styles/images/flags/KP.svg deleted file mode 100644 index 4d1dbab24..000000000 --- a/legacy/styles/images/flags/KP.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/KR.svg b/legacy/styles/images/flags/KR.svg deleted file mode 100644 index 6947eab2b..000000000 --- a/legacy/styles/images/flags/KR.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/KW.svg b/legacy/styles/images/flags/KW.svg deleted file mode 100644 index 3dd89e996..000000000 --- a/legacy/styles/images/flags/KW.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/KY.svg b/legacy/styles/images/flags/KY.svg deleted file mode 100644 index 74a2fea2a..000000000 --- a/legacy/styles/images/flags/KY.svg +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/KZ.svg b/legacy/styles/images/flags/KZ.svg deleted file mode 100644 index 04a47f53e..000000000 --- a/legacy/styles/images/flags/KZ.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/LA.svg b/legacy/styles/images/flags/LA.svg deleted file mode 100644 index 6aea6b72b..000000000 --- a/legacy/styles/images/flags/LA.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/LB.svg b/legacy/styles/images/flags/LB.svg deleted file mode 100644 index 8619f2410..000000000 --- a/legacy/styles/images/flags/LB.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/LC.svg b/legacy/styles/images/flags/LC.svg deleted file mode 100644 index bb256541c..000000000 --- a/legacy/styles/images/flags/LC.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/legacy/styles/images/flags/LGBT.svg b/legacy/styles/images/flags/LGBT.svg deleted file mode 100644 index e0ce21175..000000000 --- a/legacy/styles/images/flags/LGBT.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/legacy/styles/images/flags/LI.svg b/legacy/styles/images/flags/LI.svg deleted file mode 100644 index 68ea26fa3..000000000 --- a/legacy/styles/images/flags/LI.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/LK.svg b/legacy/styles/images/flags/LK.svg deleted file mode 100644 index 2c5cdbe09..000000000 --- a/legacy/styles/images/flags/LK.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/LR.svg b/legacy/styles/images/flags/LR.svg deleted file mode 100644 index e482ab9d7..000000000 --- a/legacy/styles/images/flags/LR.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/LS.svg b/legacy/styles/images/flags/LS.svg deleted file mode 100644 index a7c01a98f..000000000 --- a/legacy/styles/images/flags/LS.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/legacy/styles/images/flags/LT.svg b/legacy/styles/images/flags/LT.svg deleted file mode 100644 index 90ec5d240..000000000 --- a/legacy/styles/images/flags/LT.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/LU.svg b/legacy/styles/images/flags/LU.svg deleted file mode 100644 index c31d2bfa2..000000000 --- a/legacy/styles/images/flags/LU.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/LV.svg b/legacy/styles/images/flags/LV.svg deleted file mode 100644 index 6a9e75ec9..000000000 --- a/legacy/styles/images/flags/LV.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/LY.svg b/legacy/styles/images/flags/LY.svg deleted file mode 100644 index 1eaa51e46..000000000 --- a/legacy/styles/images/flags/LY.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/MA.svg b/legacy/styles/images/flags/MA.svg deleted file mode 100644 index 7ce56eff7..000000000 --- a/legacy/styles/images/flags/MA.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/legacy/styles/images/flags/MC.svg b/legacy/styles/images/flags/MC.svg deleted file mode 100644 index 9cb6c9e8a..000000000 --- a/legacy/styles/images/flags/MC.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/MD.svg b/legacy/styles/images/flags/MD.svg deleted file mode 100644 index 6dc441e17..000000000 --- a/legacy/styles/images/flags/MD.svg +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/ME.svg b/legacy/styles/images/flags/ME.svg deleted file mode 100644 index d89189074..000000000 --- a/legacy/styles/images/flags/ME.svg +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/MF.svg b/legacy/styles/images/flags/MF.svg deleted file mode 100644 index 6305edc1c..000000000 --- a/legacy/styles/images/flags/MF.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/MG.svg b/legacy/styles/images/flags/MG.svg deleted file mode 100644 index 5fa2d2440..000000000 --- a/legacy/styles/images/flags/MG.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/MH.svg b/legacy/styles/images/flags/MH.svg deleted file mode 100644 index 7b9f49075..000000000 --- a/legacy/styles/images/flags/MH.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/MK.svg b/legacy/styles/images/flags/MK.svg deleted file mode 100644 index 4f5cae77e..000000000 --- a/legacy/styles/images/flags/MK.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/ML.svg b/legacy/styles/images/flags/ML.svg deleted file mode 100644 index 6f6b71695..000000000 --- a/legacy/styles/images/flags/ML.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/MM.svg b/legacy/styles/images/flags/MM.svg deleted file mode 100644 index 42b4dee2b..000000000 --- a/legacy/styles/images/flags/MM.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/MN.svg b/legacy/styles/images/flags/MN.svg deleted file mode 100644 index 152c2fcb0..000000000 --- a/legacy/styles/images/flags/MN.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/MO.svg b/legacy/styles/images/flags/MO.svg deleted file mode 100644 index d39985d05..000000000 --- a/legacy/styles/images/flags/MO.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/legacy/styles/images/flags/MP.svg b/legacy/styles/images/flags/MP.svg deleted file mode 100644 index ff59ebf87..000000000 --- a/legacy/styles/images/flags/MP.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/MQ.svg b/legacy/styles/images/flags/MQ.svg deleted file mode 100644 index b221951e3..000000000 --- a/legacy/styles/images/flags/MQ.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/MR.svg b/legacy/styles/images/flags/MR.svg deleted file mode 100644 index 7558234cb..000000000 --- a/legacy/styles/images/flags/MR.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/MS.svg b/legacy/styles/images/flags/MS.svg deleted file mode 100644 index faf07b07f..000000000 --- a/legacy/styles/images/flags/MS.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/MT.svg b/legacy/styles/images/flags/MT.svg deleted file mode 100644 index f0c8194bc..000000000 --- a/legacy/styles/images/flags/MT.svg +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/MU.svg b/legacy/styles/images/flags/MU.svg deleted file mode 100644 index 82d7a3bec..000000000 --- a/legacy/styles/images/flags/MU.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/legacy/styles/images/flags/MV.svg b/legacy/styles/images/flags/MV.svg deleted file mode 100644 index 10450f984..000000000 --- a/legacy/styles/images/flags/MV.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/MW.svg b/legacy/styles/images/flags/MW.svg deleted file mode 100644 index d83ddb217..000000000 --- a/legacy/styles/images/flags/MW.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/legacy/styles/images/flags/MX.svg b/legacy/styles/images/flags/MX.svg deleted file mode 100644 index 3a55cd7c2..000000000 --- a/legacy/styles/images/flags/MX.svg +++ /dev/null @@ -1,382 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/MY.svg b/legacy/styles/images/flags/MY.svg deleted file mode 100644 index 89576f69e..000000000 --- a/legacy/styles/images/flags/MY.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/MZ.svg b/legacy/styles/images/flags/MZ.svg deleted file mode 100644 index 2ee6ec14b..000000000 --- a/legacy/styles/images/flags/MZ.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/NA.svg b/legacy/styles/images/flags/NA.svg deleted file mode 100644 index 35b9f783e..000000000 --- a/legacy/styles/images/flags/NA.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/NC.svg b/legacy/styles/images/flags/NC.svg deleted file mode 100644 index 068f0c69a..000000000 --- a/legacy/styles/images/flags/NC.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/NE.svg b/legacy/styles/images/flags/NE.svg deleted file mode 100644 index 39a82b827..000000000 --- a/legacy/styles/images/flags/NE.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/NF.svg b/legacy/styles/images/flags/NF.svg deleted file mode 100644 index c8b30938d..000000000 --- a/legacy/styles/images/flags/NF.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/legacy/styles/images/flags/NG.svg b/legacy/styles/images/flags/NG.svg deleted file mode 100644 index 81eb35f78..000000000 --- a/legacy/styles/images/flags/NG.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/NI.svg b/legacy/styles/images/flags/NI.svg deleted file mode 100644 index 6dcdc9a80..000000000 --- a/legacy/styles/images/flags/NI.svg +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/NL.svg b/legacy/styles/images/flags/NL.svg deleted file mode 100644 index 4faaf498e..000000000 --- a/legacy/styles/images/flags/NL.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/NO.svg b/legacy/styles/images/flags/NO.svg deleted file mode 100644 index a5f2a152a..000000000 --- a/legacy/styles/images/flags/NO.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/NP.svg b/legacy/styles/images/flags/NP.svg deleted file mode 100644 index 8d71d106b..000000000 --- a/legacy/styles/images/flags/NP.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/NR.svg b/legacy/styles/images/flags/NR.svg deleted file mode 100644 index ff394c411..000000000 --- a/legacy/styles/images/flags/NR.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/NU.svg b/legacy/styles/images/flags/NU.svg deleted file mode 100644 index 4067bafff..000000000 --- a/legacy/styles/images/flags/NU.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/legacy/styles/images/flags/NZ.svg b/legacy/styles/images/flags/NZ.svg deleted file mode 100644 index 935d8a749..000000000 --- a/legacy/styles/images/flags/NZ.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/OM.svg b/legacy/styles/images/flags/OM.svg deleted file mode 100644 index c003f86e4..000000000 --- a/legacy/styles/images/flags/OM.svg +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/PA.svg b/legacy/styles/images/flags/PA.svg deleted file mode 100644 index 8dc03bc61..000000000 --- a/legacy/styles/images/flags/PA.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/PACE.svg b/legacy/styles/images/flags/PACE.svg deleted file mode 100644 index 9eca30984..000000000 --- a/legacy/styles/images/flags/PACE.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/legacy/styles/images/flags/PC.svg b/legacy/styles/images/flags/PC.svg deleted file mode 100644 index 882197da6..000000000 --- a/legacy/styles/images/flags/PC.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/PE.svg b/legacy/styles/images/flags/PE.svg deleted file mode 100644 index 33e6cfd41..000000000 --- a/legacy/styles/images/flags/PE.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/legacy/styles/images/flags/PF.svg b/legacy/styles/images/flags/PF.svg deleted file mode 100644 index e06b236e8..000000000 --- a/legacy/styles/images/flags/PF.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/PG.svg b/legacy/styles/images/flags/PG.svg deleted file mode 100644 index 237cb6eee..000000000 --- a/legacy/styles/images/flags/PG.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/legacy/styles/images/flags/PH.svg b/legacy/styles/images/flags/PH.svg deleted file mode 100644 index 65489e1cb..000000000 --- a/legacy/styles/images/flags/PH.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/PK.svg b/legacy/styles/images/flags/PK.svg deleted file mode 100644 index 491e58ab1..000000000 --- a/legacy/styles/images/flags/PK.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/PL.svg b/legacy/styles/images/flags/PL.svg deleted file mode 100644 index 0fa514524..000000000 --- a/legacy/styles/images/flags/PL.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/PM.svg b/legacy/styles/images/flags/PM.svg deleted file mode 100644 index 19a9330a3..000000000 --- a/legacy/styles/images/flags/PM.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/PN.svg b/legacy/styles/images/flags/PN.svg deleted file mode 100644 index 07958aca1..000000000 --- a/legacy/styles/images/flags/PN.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/PR.svg b/legacy/styles/images/flags/PR.svg deleted file mode 100644 index ec51831dc..000000000 --- a/legacy/styles/images/flags/PR.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/PS.svg b/legacy/styles/images/flags/PS.svg deleted file mode 100644 index b33824a5d..000000000 --- a/legacy/styles/images/flags/PS.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/PT.svg b/legacy/styles/images/flags/PT.svg deleted file mode 100644 index 445cf7f53..000000000 --- a/legacy/styles/images/flags/PT.svg +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/PW.svg b/legacy/styles/images/flags/PW.svg deleted file mode 100644 index 9f89c5f14..000000000 --- a/legacy/styles/images/flags/PW.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/legacy/styles/images/flags/PY.svg b/legacy/styles/images/flags/PY.svg deleted file mode 100644 index 38e2051eb..000000000 --- a/legacy/styles/images/flags/PY.svg +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/QA.svg b/legacy/styles/images/flags/QA.svg deleted file mode 100644 index 901f3fa76..000000000 --- a/legacy/styles/images/flags/QA.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/legacy/styles/images/flags/RE.svg b/legacy/styles/images/flags/RE.svg deleted file mode 100644 index 64e788e01..000000000 --- a/legacy/styles/images/flags/RE.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/RO.svg b/legacy/styles/images/flags/RO.svg deleted file mode 100644 index fda0f7bec..000000000 --- a/legacy/styles/images/flags/RO.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/RS.svg b/legacy/styles/images/flags/RS.svg deleted file mode 100644 index 1fa989f8e..000000000 --- a/legacy/styles/images/flags/RS.svg +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/RU.svg b/legacy/styles/images/flags/RU.svg deleted file mode 100644 index f4d27efc9..000000000 --- a/legacy/styles/images/flags/RU.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/RW.svg b/legacy/styles/images/flags/RW.svg deleted file mode 100644 index 06e26ae44..000000000 --- a/legacy/styles/images/flags/RW.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/SA.svg b/legacy/styles/images/flags/SA.svg deleted file mode 100644 index c0a148663..000000000 --- a/legacy/styles/images/flags/SA.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/SB.svg b/legacy/styles/images/flags/SB.svg deleted file mode 100644 index 6066f94cd..000000000 --- a/legacy/styles/images/flags/SB.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/SC.svg b/legacy/styles/images/flags/SC.svg deleted file mode 100644 index 9a46b369b..000000000 --- a/legacy/styles/images/flags/SC.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/SD.svg b/legacy/styles/images/flags/SD.svg deleted file mode 100644 index 12818b411..000000000 --- a/legacy/styles/images/flags/SD.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/SE.svg b/legacy/styles/images/flags/SE.svg deleted file mode 100644 index 8ba745aca..000000000 --- a/legacy/styles/images/flags/SE.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/legacy/styles/images/flags/SG.svg b/legacy/styles/images/flags/SG.svg deleted file mode 100644 index c4dd4ac9e..000000000 --- a/legacy/styles/images/flags/SG.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/SH-AC.svg b/legacy/styles/images/flags/SH-AC.svg deleted file mode 100644 index 6aa90a461..000000000 --- a/legacy/styles/images/flags/SH-AC.svg +++ /dev/null @@ -1,689 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/SH-HL.svg b/legacy/styles/images/flags/SH-HL.svg deleted file mode 100644 index d74e783b4..000000000 --- a/legacy/styles/images/flags/SH-HL.svg +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/SH-TA.svg b/legacy/styles/images/flags/SH-TA.svg deleted file mode 100644 index 686ffdcc2..000000000 --- a/legacy/styles/images/flags/SH-TA.svg +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/SH.svg b/legacy/styles/images/flags/SH.svg deleted file mode 100644 index 7aba0aec8..000000000 --- a/legacy/styles/images/flags/SH.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/SI.svg b/legacy/styles/images/flags/SI.svg deleted file mode 100644 index 66a390dcd..000000000 --- a/legacy/styles/images/flags/SI.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/SJ.svg b/legacy/styles/images/flags/SJ.svg deleted file mode 100644 index bb2799ce7..000000000 --- a/legacy/styles/images/flags/SJ.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/SK.svg b/legacy/styles/images/flags/SK.svg deleted file mode 100644 index 81476940e..000000000 --- a/legacy/styles/images/flags/SK.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/legacy/styles/images/flags/SL.svg b/legacy/styles/images/flags/SL.svg deleted file mode 100644 index a07baf75b..000000000 --- a/legacy/styles/images/flags/SL.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/SM.svg b/legacy/styles/images/flags/SM.svg deleted file mode 100644 index 00e9286c4..000000000 --- a/legacy/styles/images/flags/SM.svg +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/SN.svg b/legacy/styles/images/flags/SN.svg deleted file mode 100644 index 7c0673d6d..000000000 --- a/legacy/styles/images/flags/SN.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/legacy/styles/images/flags/SO.svg b/legacy/styles/images/flags/SO.svg deleted file mode 100644 index a581ac63c..000000000 --- a/legacy/styles/images/flags/SO.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/legacy/styles/images/flags/SR.svg b/legacy/styles/images/flags/SR.svg deleted file mode 100644 index 5e71c4002..000000000 --- a/legacy/styles/images/flags/SR.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/SS.svg b/legacy/styles/images/flags/SS.svg deleted file mode 100644 index b257aa0b3..000000000 --- a/legacy/styles/images/flags/SS.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/legacy/styles/images/flags/ST.svg b/legacy/styles/images/flags/ST.svg deleted file mode 100644 index 1294bcb70..000000000 --- a/legacy/styles/images/flags/ST.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/SU.svg b/legacy/styles/images/flags/SU.svg deleted file mode 100644 index bca13faa8..000000000 --- a/legacy/styles/images/flags/SU.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/legacy/styles/images/flags/SV.svg b/legacy/styles/images/flags/SV.svg deleted file mode 100644 index c811e912f..000000000 --- a/legacy/styles/images/flags/SV.svg +++ /dev/null @@ -1,594 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/SX.svg b/legacy/styles/images/flags/SX.svg deleted file mode 100644 index e993092e9..000000000 --- a/legacy/styles/images/flags/SX.svg +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/SY.svg b/legacy/styles/images/flags/SY.svg deleted file mode 100644 index 522555052..000000000 --- a/legacy/styles/images/flags/SY.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/SZ.svg b/legacy/styles/images/flags/SZ.svg deleted file mode 100644 index 294a2cc1a..000000000 --- a/legacy/styles/images/flags/SZ.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/TC.svg b/legacy/styles/images/flags/TC.svg deleted file mode 100644 index 63f13c359..000000000 --- a/legacy/styles/images/flags/TC.svg +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/TD.svg b/legacy/styles/images/flags/TD.svg deleted file mode 100644 index fa3bd927c..000000000 --- a/legacy/styles/images/flags/TD.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/TF.svg b/legacy/styles/images/flags/TF.svg deleted file mode 100644 index fba233563..000000000 --- a/legacy/styles/images/flags/TF.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/TG.svg b/legacy/styles/images/flags/TG.svg deleted file mode 100644 index c63a6d1a9..000000000 --- a/legacy/styles/images/flags/TG.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/TH.svg b/legacy/styles/images/flags/TH.svg deleted file mode 100644 index 1e93a61e9..000000000 --- a/legacy/styles/images/flags/TH.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/TJ.svg b/legacy/styles/images/flags/TJ.svg deleted file mode 100644 index 9fba246cd..000000000 --- a/legacy/styles/images/flags/TJ.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/TK.svg b/legacy/styles/images/flags/TK.svg deleted file mode 100644 index 05d3e86ce..000000000 --- a/legacy/styles/images/flags/TK.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/TL.svg b/legacy/styles/images/flags/TL.svg deleted file mode 100644 index 3d0701a2c..000000000 --- a/legacy/styles/images/flags/TL.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/TM.svg b/legacy/styles/images/flags/TM.svg deleted file mode 100644 index c71f9cbf1..000000000 --- a/legacy/styles/images/flags/TM.svg +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/TN.svg b/legacy/styles/images/flags/TN.svg deleted file mode 100644 index 5735c1984..000000000 --- a/legacy/styles/images/flags/TN.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/legacy/styles/images/flags/TO.svg b/legacy/styles/images/flags/TO.svg deleted file mode 100644 index d07233706..000000000 --- a/legacy/styles/images/flags/TO.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/legacy/styles/images/flags/TR.svg b/legacy/styles/images/flags/TR.svg deleted file mode 100644 index b96da21f0..000000000 --- a/legacy/styles/images/flags/TR.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/legacy/styles/images/flags/TT.svg b/legacy/styles/images/flags/TT.svg deleted file mode 100644 index bc24938cf..000000000 --- a/legacy/styles/images/flags/TT.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/TV.svg b/legacy/styles/images/flags/TV.svg deleted file mode 100644 index 675210ec5..000000000 --- a/legacy/styles/images/flags/TV.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/legacy/styles/images/flags/TW.svg b/legacy/styles/images/flags/TW.svg deleted file mode 100644 index 57fd98b43..000000000 --- a/legacy/styles/images/flags/TW.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/TZ.svg b/legacy/styles/images/flags/TZ.svg deleted file mode 100644 index a2cfbca42..000000000 --- a/legacy/styles/images/flags/TZ.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/UA.svg b/legacy/styles/images/flags/UA.svg deleted file mode 100644 index a339eb1b9..000000000 --- a/legacy/styles/images/flags/UA.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/legacy/styles/images/flags/UG.svg b/legacy/styles/images/flags/UG.svg deleted file mode 100644 index 737eb2ce1..000000000 --- a/legacy/styles/images/flags/UG.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/UM.svg b/legacy/styles/images/flags/UM.svg deleted file mode 100644 index 9e9eddaa4..000000000 --- a/legacy/styles/images/flags/UM.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/legacy/styles/images/flags/UN.svg b/legacy/styles/images/flags/UN.svg deleted file mode 100644 index b20040701..000000000 --- a/legacy/styles/images/flags/UN.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/US.svg b/legacy/styles/images/flags/US.svg deleted file mode 100644 index 9cfd0c927..000000000 --- a/legacy/styles/images/flags/US.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/legacy/styles/images/flags/UY.svg b/legacy/styles/images/flags/UY.svg deleted file mode 100644 index 62c36f8e5..000000000 --- a/legacy/styles/images/flags/UY.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/UZ.svg b/legacy/styles/images/flags/UZ.svg deleted file mode 100644 index 0ccca1b1b..000000000 --- a/legacy/styles/images/flags/UZ.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/VA.svg b/legacy/styles/images/flags/VA.svg deleted file mode 100644 index 87e0fbbdc..000000000 --- a/legacy/styles/images/flags/VA.svg +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/VC.svg b/legacy/styles/images/flags/VC.svg deleted file mode 100644 index f26c2d8da..000000000 --- a/legacy/styles/images/flags/VC.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/legacy/styles/images/flags/VE.svg b/legacy/styles/images/flags/VE.svg deleted file mode 100644 index 314e7f5f7..000000000 --- a/legacy/styles/images/flags/VE.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/VG.svg b/legacy/styles/images/flags/VG.svg deleted file mode 100644 index 0ee90fb28..000000000 --- a/legacy/styles/images/flags/VG.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/VI.svg b/legacy/styles/images/flags/VI.svg deleted file mode 100644 index 427025779..000000000 --- a/legacy/styles/images/flags/VI.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/VN.svg b/legacy/styles/images/flags/VN.svg deleted file mode 100644 index 7e4bac8f4..000000000 --- a/legacy/styles/images/flags/VN.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/legacy/styles/images/flags/VU.svg b/legacy/styles/images/flags/VU.svg deleted file mode 100644 index 91e1236a0..000000000 --- a/legacy/styles/images/flags/VU.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/WBW.svg b/legacy/styles/images/flags/WBW.svg deleted file mode 100644 index 1313461b7..000000000 --- a/legacy/styles/images/flags/WBW.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/legacy/styles/images/flags/WF.svg b/legacy/styles/images/flags/WF.svg deleted file mode 100644 index 054c57df9..000000000 --- a/legacy/styles/images/flags/WF.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/WS.svg b/legacy/styles/images/flags/WS.svg deleted file mode 100644 index 0e758a7a9..000000000 --- a/legacy/styles/images/flags/WS.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/XK.svg b/legacy/styles/images/flags/XK.svg deleted file mode 100644 index 551e7a414..000000000 --- a/legacy/styles/images/flags/XK.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/XX.svg b/legacy/styles/images/flags/XX.svg deleted file mode 100644 index 9333be363..000000000 --- a/legacy/styles/images/flags/XX.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/legacy/styles/images/flags/YE.svg b/legacy/styles/images/flags/YE.svg deleted file mode 100644 index 1c9e6d639..000000000 --- a/legacy/styles/images/flags/YE.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/legacy/styles/images/flags/YT.svg b/legacy/styles/images/flags/YT.svg deleted file mode 100644 index e7776b307..000000000 --- a/legacy/styles/images/flags/YT.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/legacy/styles/images/flags/YU.svg b/legacy/styles/images/flags/YU.svg deleted file mode 100644 index 9312ee770..000000000 --- a/legacy/styles/images/flags/YU.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/legacy/styles/images/flags/ZA.svg b/legacy/styles/images/flags/ZA.svg deleted file mode 100644 index d563adb90..000000000 --- a/legacy/styles/images/flags/ZA.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/ZM.svg b/legacy/styles/images/flags/ZM.svg deleted file mode 100644 index 13239f5e2..000000000 --- a/legacy/styles/images/flags/ZM.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/images/flags/ZW.svg b/legacy/styles/images/flags/ZW.svg deleted file mode 100644 index dc4d1a7c1..000000000 --- a/legacy/styles/images/flags/ZW.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/styles/js/libs/clipboard.min.js b/legacy/styles/js/libs/clipboard.min.js deleted file mode 100644 index 1103f811e..000000000 --- a/legacy/styles/js/libs/clipboard.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * clipboard.js v2.0.11 - * https://clipboardjs.com/ - * - * Licensed MIT © Zeno Rocha - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; -}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="
a",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?""!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("